diff --git a/2.7.0-dev0/_images/RSMD_plot.png b/2.7.0-dev0/_images/RSMD_plot.png new file mode 100644 index 0000000000..f0369e8334 Binary files /dev/null and b/2.7.0-dev0/_images/RSMD_plot.png differ diff --git a/2.7.0-dev0/_images/janin_demo_plot.png b/2.7.0-dev0/_images/janin_demo_plot.png new file mode 100644 index 0000000000..b531fbc306 Binary files /dev/null and b/2.7.0-dev0/_images/janin_demo_plot.png differ diff --git a/2.7.0-dev0/_images/janin_ref_plot.png b/2.7.0-dev0/_images/janin_ref_plot.png new file mode 100644 index 0000000000..7e4a0fc425 Binary files /dev/null and b/2.7.0-dev0/_images/janin_ref_plot.png differ diff --git a/2.7.0-dev0/_images/msd_demo_plot.png b/2.7.0-dev0/_images/msd_demo_plot.png new file mode 100644 index 0000000000..f3ecc25c25 Binary files /dev/null and b/2.7.0-dev0/_images/msd_demo_plot.png differ diff --git a/2.7.0-dev0/_images/rama_demo_plot.png b/2.7.0-dev0/_images/rama_demo_plot.png new file mode 100644 index 0000000000..5007bd7a31 Binary files /dev/null and b/2.7.0-dev0/_images/rama_demo_plot.png differ diff --git a/2.7.0-dev0/_images/rama_ref_plot.png b/2.7.0-dev0/_images/rama_ref_plot.png new file mode 100644 index 0000000000..0dba9de35e Binary files /dev/null and b/2.7.0-dev0/_images/rama_ref_plot.png differ diff --git a/2.7.0-dev0/_images/test_streamplot_3D.png b/2.7.0-dev0/_images/test_streamplot_3D.png new file mode 100644 index 0000000000..3d68b81718 Binary files /dev/null and b/2.7.0-dev0/_images/test_streamplot_3D.png differ diff --git a/2.7.0-dev0/_images/testing_streamline.png b/2.7.0-dev0/_images/testing_streamline.png new file mode 100644 index 0000000000..da3c92ee7e Binary files /dev/null and b/2.7.0-dev0/_images/testing_streamline.png differ diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/align.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/align.html new file mode 100644 index 0000000000..ae7fe612f6 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/align.html @@ -0,0 +1,1660 @@ + + + + + + MDAnalysis.analysis.align — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.align

+# -*- 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-2017 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
+#
+
+"""Coordinate fitting and alignment --- :mod:`MDAnalysis.analysis.align`
+=====================================================================
+
+:Author: Oliver Beckstein, Joshua Adelman
+:Year: 2010--2013
+:Copyright: GNU Public License v3
+
+The module contains functions to fit a target structure to a reference
+structure. They use the fast QCP algorithm to calculate the root mean
+square distance (RMSD) between two coordinate sets [Theobald2005]_ and
+the rotation matrix *R* that minimizes the RMSD [Liu2010]_. (Please
+cite these references when using this module.).
+
+Typically, one selects a group of atoms (such as the C-alphas),
+calculates the RMSD and transformation matrix, and applys the
+transformation to the current frame of a trajectory to obtain the
+rotated structure. The :func:`alignto` and :class:`AlignTraj`
+functions can be used to do this for individual frames and
+trajectories respectively.
+
+The :ref:`RMS-fitting-tutorial` shows how to do the individual steps
+manually and explains the intermediate steps.
+
+See Also
+--------
+:mod:`MDAnalysis.analysis.rms`
+     contains functions to compute RMSD (when structural alignment is not
+     required)
+:mod:`MDAnalysis.lib.qcprot`
+     implements the fast RMSD algorithm.
+
+
+.. _RMS-fitting-tutorial:
+
+RMS-fitting tutorial
+--------------------
+
+The example uses files provided as part of the MDAnalysis test suite
+(in the variables :data:`~MDAnalysis.tests.datafiles.PSF`,
+:data:`~MDAnalysis.tests.datafiles.DCD`, and
+:data:`~MDAnalysis.tests.datafiles.PDB_small`). For all further
+examples execute first ::
+
+   >>> import MDAnalysis as mda
+   >>> from MDAnalysis.analysis import align
+   >>> from MDAnalysis.analysis.rms import rmsd
+   >>> from MDAnalysis.tests.datafiles import PSF, DCD, PDB_small
+
+
+In the simplest case, we can simply calculate the C-alpha RMSD between
+two structures, using :func:`rmsd`::
+
+   >>> ref = mda.Universe(PDB_small)
+   >>> mobile = mda.Universe(PSF, DCD)
+   >>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions)
+   28.20178579474479
+
+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:
+
+   >>> 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.
+
+   >>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions, 
+   ...      superposition=True)
+   6.809396586471815
+
+The rotation matrix that superimposes *mobile* on *ref* while
+minimizing the CA-RMSD is obtained with the :func:`rotation_matrix`
+function ::
+
+   >>> mobile0 = mobile.select_atoms('name CA').positions - mobile.select_atoms('name CA').center_of_mass()
+   >>> ref0 = ref.select_atoms('name CA').positions - ref.select_atoms('name CA').center_of_mass()
+   >>> R, rmsd = align.rotation_matrix(mobile0, ref0)
+   >>> rmsd
+   6.809396586471805
+   >>> R
+   array([[ 0.14514539, -0.27259113,  0.95111876],
+   ...    [ 0.88652593,  0.46267112, -0.00268642],
+   ...    [-0.43932289,  0.84358136,  0.30881368]])
+
+Putting all this together one can superimpose all of *mobile* onto *ref*::
+
+   >>> mobile.atoms.translate(-mobile.select_atoms('name CA').center_of_mass())
+   <AtomGroup with 3341 atoms>
+   >>> mobile.atoms.rotate(R)
+   <AtomGroup with 3341 atoms>
+   >>> mobile.atoms.translate(ref.select_atoms('name CA').center_of_mass())
+   <AtomGroup with 3341 atoms>
+   >>> mobile.atoms.write("mobile_on_ref.pdb")
+
+
+Common usage
+------------
+
+To **fit a single structure** with :func:`alignto`::
+
+   >>> ref = mda.Universe(PSF, PDB_small)
+   >>> mobile = mda.Universe(PSF, DCD)     # we use the first frame
+   >>> align.alignto(mobile, ref, select="protein and name CA", weights="mass")
+   (21.892591663632704, 6.809396586471809)
+
+This will change *all* coordinates in *mobile* so that the protein
+C-alpha atoms are optimally superimposed (translation and rotation).
+
+To **fit a whole trajectory** to a reference structure with the
+:class:`AlignTraj` class::
+
+   >>> ref = mda.Universe(PSF, PDB_small)   # reference structure 1AKE
+   >>> trj = mda.Universe(PSF, DCD)         # trajectory of change 1AKE->4AKE
+   >>> alignment = align.AlignTraj(trj, ref, filename='rmsfit.dcd')
+   >>> alignment.run()
+   <MDAnalysis.analysis.align.AlignTraj object at ...> 
+
+It is also possible to align two arbitrary structures by providing a
+mapping between atoms based on a sequence alignment. This allows
+fitting of structural homologs or wild type and mutant.
+
+If a alignment was provided as "sequences.aln" one would first produce
+the appropriate MDAnalysis selections with the :func:`fasta2select`
+function and then feed the resulting dictionary to :class:`AlignTraj`::
+
+   >>> seldict = align.fasta2select('sequences.aln') # doctest: +SKIP
+   >>> alignment = align.AlignTraj(trj, ref, filename='rmsfit.dcd', select=seldict) # doctest: +SKIP
+   >>> alignment.run() # doctest: +SKIP
+
+(See the documentation of the functions for this advanced usage.)
+
+
+Functions and Classes
+---------------------
+
+.. versionchanged:: 0.10.0
+   Function :func:`~MDAnalysis.analysis.rms.rmsd` was removed from
+   this module and is now exclusively accessible as
+   :func:`~MDAnalysis.analysis.rms.rmsd`.
+
+.. versionchanged:: 0.16.0
+   Function :func:`~MDAnalysis.analysis.align.rms_fit_trj` deprecated
+   in favor of :class:`AlignTraj` class.
+
+.. versionchanged:: 0.17.0
+   removed deprecated :func:`~MDAnalysis.analysis.align.rms_fit_trj`
+
+.. autofunction:: alignto
+.. autoclass:: AlignTraj
+.. autoclass:: AverageStructure
+.. autofunction:: rotation_matrix
+
+
+Helper functions
+----------------
+
+The following functions are used by the other functions in this
+module. They are probably of more interest to developers than to
+normal users.
+
+.. autofunction:: _fit_to
+.. autofunction:: fasta2select
+.. autofunction:: sequence_alignment
+.. autofunction:: get_matching_atoms
+
+"""
+import os.path
+import warnings
+import logging
+import collections
+
+import numpy as np
+
+import Bio.SeqIO
+import Bio.AlignIO
+import Bio.Align
+import Bio.Align.Applications
+
+import MDAnalysis as mda
+import MDAnalysis.lib.qcprot as qcp
+from MDAnalysis.exceptions import SelectionError, SelectionWarning
+import MDAnalysis.analysis.rms as rms
+from MDAnalysis.coordinates.memory import MemoryReader
+from MDAnalysis.lib.util import get_weights
+from MDAnalysis.lib.util import deprecate   # remove 3.0
+
+from .base import AnalysisBase
+
+logger = logging.getLogger('MDAnalysis.analysis.align')
+
+
+
[docs]def rotation_matrix(a, b, weights=None): + r"""Returns the 3x3 rotation matrix `R` for RMSD fitting coordinate + sets `a` and `b`. + + The rotation matrix `R` transforms vector `a` to overlap with + vector `b` (i.e., `b` is the reference structure): + + .. math:: + \mathbf{b} = \mathsf{R} \cdot \mathbf{a} + + Parameters + ---------- + a : array_like + coordinates that are to be rotated ("mobile set"); array of N atoms + of shape N*3 as generated by, e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`. + b : array_like + reference coordinates; array of N atoms of shape N*3 as generated by, + e.g., :attr:`MDAnalysis.core.groups.AtomGroup.positions`. + weights : array_like (optional) + array of floats of size N for doing weighted RMSD fitting (e.g. the + masses of the atoms) + + Returns + ------- + R : ndarray + rotation matrix + rmsd : float + RMSD between `a` and `b` before rotation + ``(R, rmsd)`` rmsd and rotation matrix *R* + + Example + ------- + `R` can be used as an argument for + :meth:`MDAnalysis.core.groups.AtomGroup.rotate` to generate a rotated + selection, e.g. :: + + >>> from MDAnalysisTests.datafiles import TPR, TRR + >>> from MDAnalysis.analysis import align + >>> A = mda.Universe(TPR,TRR) + >>> B = A.copy() + >>> R = rotation_matrix(A.select_atoms('backbone').positions, + ... B.select_atoms('backbone').positions)[0] + >>> A.atoms.rotate(R) + <AtomGroup with 47681 atoms> + >>> A.atoms.write("rotated.pdb") + + Notes + ----- + The function does *not* shift the centers of mass or geometry; + this needs to be done by the user. + + See Also + -------- + MDAnalysis.analysis.rms.rmsd: Calculates the RMSD between *a* and *b*. + alignto: A complete fit of two structures. + AlignTraj: Fit a whole trajectory. + """ + + + a = np.asarray(a, dtype=np.float64) + b = np.asarray(b, dtype=np.float64) + + if a.shape != b.shape: + raise ValueError("'a' and 'b' must have same shape") + + if np.allclose(a, b) and weights is None: + return np.eye(3, dtype=np.float64), 0.0 + + N = b.shape[0] + + if weights is not None: + # qcp does NOT divide weights relative to the mean + weights = np.asarray(weights, dtype=np.float64) / np.mean(weights) + + rot = np.zeros(9, dtype=np.float64) + + # Need to transpose coordinates such that the coordinate array is + # 3xN instead of Nx3. Also qcp requires that the dtype be float64 + # (I think we swapped the position of ref and traj in CalcRMSDRotationalMatrix + # so that R acts **to the left** and can be broadcasted; we're saving + # one transpose. [orbeckst]) + rmsd = qcp.CalcRMSDRotationalMatrix(a, b, N, rot, weights) + return rot.reshape(3, 3), rmsd
+ + +
[docs]def _fit_to(mobile_coordinates, ref_coordinates, mobile_atoms, + mobile_com, ref_com, weights=None): + r"""Perform an rmsd-fitting to determine rotation matrix and align atoms + + Parameters + ---------- + mobile_coordinates : ndarray + Coordinates of atoms to be aligned + ref_coordinates : ndarray + Coordinates of atoms to be fit against + mobile_atoms : AtomGroup + Atoms to be translated + mobile_com: ndarray + array of xyz coordinate of mobile center of mass + ref_com : ndarray + array of xyz coordinate of reference center of mass + weights : array_like (optional) + choose weights. With ``None`` weigh each atom equally. If a float array + of the same length as `mobile_coordinates` is provided, use each element + of the `array_like` as a weight for the corresponding atom in + `mobile_coordinates`. + + Returns + ------- + mobile_atoms : AtomGroup + AtomGroup of translated and rotated atoms + min_rmsd : float + Minimum rmsd of coordinates + + Notes + ----- + This function assumes that `mobile_coordinates` and `ref_coordinates` have + already been shifted so that their centers of geometry (or centers of mass, + depending on `weights`) coincide at the origin. `mobile_com` and `ref_com` + are the centers *before* this shift. + + 1. The rotation matrix :math:`\mathsf{R}` is determined with + :func:`rotation_matrix` directly from `mobile_coordinates` and + `ref_coordinates`. + 2. `mobile_atoms` :math:`X` is rotated according to the + rotation matrix and the centers according to + + .. math:: + + X' = \mathsf{R}(X - \bar{X}) + \bar{X}_{\text{ref}} + + where :math:`\bar{X}` is the center. + + """ + R, min_rmsd = rotation_matrix(mobile_coordinates, ref_coordinates, + weights=weights) + + mobile_atoms.translate(-mobile_com) + mobile_atoms.rotate(R) + mobile_atoms.translate(ref_com) + + return mobile_atoms, min_rmsd
+ + +
[docs]def alignto(mobile, reference, select=None, weights=None, + subselection=None, tol_mass=0.1, strict=False, + match_atoms=True): + """Perform a spatial superposition by minimizing the RMSD. + + Spatially align the group of atoms `mobile` to `reference` by + doing a RMSD fit on `select` atoms. + + The superposition is done in the following way: + + 1. A rotation matrix is computed that minimizes the RMSD between + the coordinates of `mobile.select_atoms(sel1)` and + `reference.select_atoms(sel2)`; before the rotation, `mobile` is + translated so that its center of geometry (or center of mass) + coincides with the one of `reference`. (See below for explanation of + how *sel1* and *sel2* are derived from `select`.) + + 2. All atoms in :class:`~MDAnalysis.core.universe.Universe` that + contain `mobile` are shifted and rotated. (See below for how + to change this behavior through the `subselection` keyword.) + + The `mobile` and `reference` atom groups can be constructed so that they + already match atom by atom. In this case, `select` should be set to "all" + (or ``None``) so that no further selections are applied to `mobile` and + `reference`, therefore preserving the exact atom ordering (see + :ref:`ordered-selections-label`). + + .. Warning:: The atom order for `mobile` and `reference` is *only* + preserved when `select` is either "all" or ``None``. In any other case, + a new selection will be made that will sort the resulting AtomGroup by + index and therefore destroy the correspondence between the two groups. + **It is safest not to mix ordered AtomGroups with selection strings.** + + Parameters + ---------- + mobile : Universe or AtomGroup + structure to be aligned, a + :class:`~MDAnalysis.core.groups.AtomGroup` or a whole + :class:`~MDAnalysis.core.universe.Universe` + reference : Universe or AtomGroup + reference structure, a :class:`~MDAnalysis.core.groups.AtomGroup` + or a whole :class:`~MDAnalysis.core.universe.Universe` + select : str or dict or tuple (optional) + The selection to operate on; can be one of: + + 1. any valid selection string for + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` that + produces identical selections in `mobile` and `reference`; or + + 2. a dictionary ``{'mobile': sel1, 'reference': sel2}`` where *sel1* + and *sel2* are valid selection strings that are applied to + `mobile` and `reference` respectively (the + :func:`MDAnalysis.analysis.align.fasta2select` function returns such + a dictionary based on a ClustalW_ or STAMP_ sequence alignment); or + + 3. a tuple ``(sel1, sel2)`` + + When using 2. or 3. with *sel1* and *sel2* then these selection strings + are applied to `atomgroup` and `reference` respectively and should + generate *groups of equivalent atoms*. *sel1* and *sel2* can each also + be a *list of selection strings* to generate a + :class:`~MDAnalysis.core.groups.AtomGroup` with defined atom order as + described under :ref:`ordered-selections-label`). + match_atoms : bool (optional) + Whether to match the mobile and reference atom-by-atom. Default ``True``. + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses as weights; with ``None`` + weigh each atom equally. If a float array of the same length as + `mobile` is provided, use each element of the `array_like` as a + weight for the corresponding atom in `mobile`. + tol_mass: float (optional) + Reject match if the atomic masses for matched atoms differ by more than + `tol_mass`, default [0.1] + strict: bool (optional) + ``True`` + Will raise :exc:`SelectionError` if a single atom does not + match between the two selections. + ``False`` [default] + Will try to prepare a matching selection by dropping + residues with non-matching atoms. See :func:`get_matching_atoms` + for details. + subselection : str or AtomGroup or None (optional) + Apply the transformation only to this selection. + + ``None`` [default] + Apply to ``mobile.universe.atoms`` (i.e., all atoms in the + context of the selection from `mobile` such as the rest of a + protein, ligands and the surrounding water) + *selection-string* + Apply to ``mobile.select_atoms(selection-string)`` + :class:`~MDAnalysis.core.groups.AtomGroup` + Apply to the arbitrary group of atoms + + Returns + ------- + old_rmsd : float + RMSD before spatial alignment + new_rmsd : float + RMSD after spatial alignment + + See Also + -------- + AlignTraj: More efficient method for RMSD-fitting trajectories. + + + .. _ClustalW: http://www.clustal.org/ + .. _STAMP: http://www.compbio.dundee.ac.uk/manuals/stamp.4.2/ + + .. versionchanged:: 1.0.0 + Added *match_atoms* keyword to toggle atom matching. + + .. versionchanged:: 0.8 + Added check that the two groups describe the same atoms including + the new *tol_mass* keyword. + + .. versionchanged:: 0.10.0 + Uses :func:`get_matching_atoms` to work with incomplete selections + and new `strict` keyword. The new default is to be lenient whereas + the old behavior was the equivalent of ``strict = True``. + + .. versionchanged:: 0.16.0 + new general 'weights' kwarg replace `mass_weighted`, deprecated `mass_weighted` + .. deprecated:: 0.16.0 + Instead of ``mass_weighted=True`` use new ``weights='mass'`` + + .. versionchanged:: 0.17.0 + Deprecated keyword `mass_weighted` was removed. + """ + if select in ('all', None): + # keep the EXACT order in the input AtomGroups; select_atoms('all') + # orders them by index, which can lead to wrong results if the user + # has crafted mobile and reference to match atom by atom + mobile_atoms = mobile.atoms + ref_atoms = reference.atoms + else: + select = rms.process_selection(select) + mobile_atoms = mobile.select_atoms(*select['mobile']) + ref_atoms = reference.select_atoms(*select['reference']) + + + ref_atoms, mobile_atoms = get_matching_atoms(ref_atoms, mobile_atoms, + tol_mass=tol_mass, + strict=strict, + match_atoms=match_atoms) + + weights = get_weights(ref_atoms, weights) + + mobile_com = mobile_atoms.center(weights) + ref_com = ref_atoms.center(weights) + + ref_coordinates = ref_atoms.positions - ref_com + mobile_coordinates = mobile_atoms.positions - mobile_com + + old_rmsd = rms.rmsd(mobile_coordinates, ref_coordinates, weights) + + if subselection is None: + # mobile_atoms is Universe + mobile_atoms = mobile.universe.atoms + elif isinstance(subselection, str): + # select mobile_atoms from string + mobile_atoms = mobile.select_atoms(subselection) + else: + try: + # treat subselection as AtomGroup + mobile_atoms = subselection.atoms + except AttributeError: + err = ("subselection must be a selection string, an" + " AtomGroup or Universe or None") + raise TypeError(err) from None + + + # _fit_to DOES subtract center of mass, will provide proper min_rmsd + mobile_atoms, new_rmsd = _fit_to(mobile_coordinates, ref_coordinates, + mobile_atoms, mobile_com, ref_com, + weights=weights) + return old_rmsd, new_rmsd
+ + +
[docs]class AlignTraj(AnalysisBase): + """RMS-align trajectory to a reference structure using a selection. + + Both the reference `reference` and the trajectory `mobile` must be + :class:`MDAnalysis.Universe` instances. If they contain a trajectory then + it is used. The output file format is determined by the file extension of + `filename`. One can also use the same universe if one wants to fit to the + current frame. + + .. versionchanged:: 1.0.0 + ``save()`` has now been removed, as an alternative use ``np.savetxt()`` + on :attr:`results.rmsd`. + + """ + + 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, + **kwargs): + """Parameters + ---------- + mobile : Universe + Universe containing trajectory to be fitted to reference + reference : Universe + Universe containing trajectory frame to be used as reference + select : str (optional) + Set as default to all, is used for Universe.select_atoms to choose + subdomain to be fitted against + filename : str (optional) + Provide a filename for results to be written to + prefix : str (optional) + Provide a string to prepend to filename for results to be written + to + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses of `reference` as + weights; with ``None`` weigh each atom equally. If a float array of + the same length as the selection is provided, use each element of + the `array_like` as a weight for the corresponding atom in the + selection. + tol_mass : float (optional) + Tolerance given to `get_matching_atoms` to find appropriate atoms + match_atoms : bool (optional) + Whether to match the mobile and reference atom-by-atom. Default ``True``. + strict : bool (optional) + Force `get_matching_atoms` to fail if atoms can't be found using + exact methods + force : bool (optional) + Force overwrite of filename for rmsd-fitting + in_memory : bool (optional) + *Permanently* switch `mobile` to an in-memory trajectory + so that alignment can be done in-place, which can improve + performance substantially in some cases. In this case, no file + is written out (`filename` and `prefix` are ignored) and only + the coordinates of `mobile` are *changed in memory*. + verbose : bool (optional) + Set logger to show more information and show detailed progress of + the calculation if set to ``True``; the default is ``False``. + + + Attributes + ---------- + reference_atoms : AtomGroup + Atoms of the reference structure to be aligned against + mobile_atoms : AtomGroup + Atoms inside each trajectory frame to be rmsd_aligned + results.rmsd : :class:`numpy.ndarray` + Array of the rmsd values of the least rmsd between the mobile_atoms + and reference_atoms after superposition and minimimization of rmsd + + .. versionadded:: 2.0.0 + + rmsd : :class:`numpy.ndarray` + Alias to the :attr:`results.rmsd` attribute. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.rmsd` instead. + + filename : str + String reflecting the filename of the file where the aligned + positions will be written to upon running RMSD alignment + + + Notes + ----- + - If set to ``verbose=False``, it is recommended to wrap the statement + in a ``try ... finally`` to guarantee restoring of the log level in + the case of an exception. + - The ``in_memory`` option changes the `mobile` universe to an + in-memory representation (see :mod:`MDAnalysis.coordinates.memory`) + for the remainder of the Python session. If ``mobile.trajectory`` is + already a :class:`MemoryReader` then it is *always* treated as if + ``in_memory`` had been set to ``True``. + + .. versionchanged:: 1.0.0 + Default ``filename`` has now been changed to the current directory. + + .. deprecated:: 0.19.1 + Default ``filename`` directory will change in 1.0 to the current directory. + + .. versionchanged:: 0.16.0 + new general ``weights`` kwarg replace ``mass_weights`` + + .. deprecated:: 0.16.0 + Instead of ``mass_weighted=True`` use new ``weights='mass'`` + + .. versionchanged:: 0.17.0 + removed deprecated `mass_weighted` keyword + + .. versionchanged:: 1.0.0 + Support for the ``start``, ``stop``, and ``step`` keywords has been + removed. These should instead be passed to :meth:`AlignTraj.run`. + + .. versionchanged:: 2.0.0 + :attr:`rmsd` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + + """ + select = rms.process_selection(select) + self.ref_atoms = reference.select_atoms(*select['reference']) + self.mobile_atoms = mobile.select_atoms(*select['mobile']) + if in_memory or isinstance(mobile.trajectory, MemoryReader): + mobile.transfer_to_memory() + filename = None + logger.info("Moved mobile trajectory to in-memory representation") + else: + if filename is None: + fn = os.path.split(mobile.trajectory.filename)[1] + filename = prefix + fn + logger.info('filename of rms_align with no filename given' + ': {0}'.format(filename)) + + if os.path.exists(filename) and not force: + raise IOError( + 'Filename already exists in path and force is not set' + ' to True') + + # do this after setting the memory reader to have a reference to the + # right reader. + super(AlignTraj, self).__init__(mobile.trajectory, **kwargs) + if not self._verbose: + logging.disable(logging.WARN) + + # store reference to mobile atoms + self.mobile = mobile.atoms + + self.filename = filename + + natoms = self.mobile.n_atoms + self.ref_atoms, self.mobile_atoms = get_matching_atoms( + self.ref_atoms, self.mobile_atoms, tol_mass=tol_mass, + strict=strict, match_atoms=match_atoms) + + # 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._weights = get_weights(self.ref_atoms, weights) + + logger.info("RMS-fitting on {0:d} atoms.".format(len(self.ref_atoms))) + + def _prepare(self): + # reference centre of mass system + self._ref_com = self.ref_atoms.center(self._weights) + self._ref_coordinates = self.ref_atoms.positions - self._ref_com + # allocate the array for selection atom coords + self.results.rmsd = np.zeros((self.n_frames,)) + + def _single_frame(self): + index = self._frame_index + mobile_com = self.mobile_atoms.center(self._weights) + mobile_coordinates = self.mobile_atoms.positions - mobile_com + mobile_atoms, self.results.rmsd[index] = _fit_to( + mobile_coordinates, + self._ref_coordinates, + self.mobile, + mobile_com, + self._ref_com, self._weights) + # write whole aligned input trajectory system + self._writer.write(mobile_atoms) + + def _conclude(self): + self._writer.close() + if not self._verbose: + logging.disable(logging.NOTSET) + + @property + def rmsd(self): + wmsg = ("The `rmsd` attribute was deprecated in MDAnalysis 2.0.0 and " + "will be removed in MDAnalysis 3.0.0. Please use " + "`results.rmsd` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rmsd
+ + +
[docs]class AverageStructure(AnalysisBase): + """RMS-align trajectory to a reference structure using a selection, + and calculate the average coordinates of the trajectory. + + Both the reference `reference` and the trajectory `mobile` must be + :class:`MDAnalysis.Universe` instances. If they contain a trajectory, then + it is used. You can also use the same universe if you want to fit to the + current frame. + + The output file format is determined by the file extension of + `filename`. + + Example + ------- + + :: + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF, DCD + from MDAnalysis.analysis import align + + u = mda.Universe(PSF, DCD) + + # align to the third frame and average structure + av = align.AverageStructure(u, ref_frame=3).run() + averaged_universe = av.results.universe + + """ + + def __init__(self, mobile, reference=None, select='all', filename=None, + weights=None, + tol_mass=0.1, match_atoms=True, strict=False, force=True, in_memory=False, + ref_frame=0, **kwargs): + """Parameters + ---------- + mobile : Universe + Universe containing trajectory to be fitted to reference + reference : Universe (optional) + Universe containing trajectory frame to be used as reference + select : str (optional) + Set as default to all, is used for Universe.select_atoms to choose + subdomain to be fitted against + filename : str (optional) + Provide a filename for results to be written to + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses of `reference` as + weights; with ``None`` weigh each atom equally. If a float array of + the same length as the selection is provided, use each element of + the `array_like` as a weight for the corresponding atom in the + selection. + tol_mass : float (optional) + Tolerance given to `get_matching_atoms` to find appropriate atoms + match_atoms : bool (optional) + Whether to match the mobile and reference atom-by-atom. Default ``True``. + strict : bool (optional) + Force `get_matching_atoms` to fail if atoms can't be found using + exact methods + force : bool (optional) + Force overwrite of filename for rmsd-fitting + in_memory : bool (optional) + *Permanently* switch `mobile` to an in-memory trajectory + so that alignment can be done in-place, which can improve + performance substantially in some cases. In this case, no file + is written out (`filename` and `prefix` are ignored) and only + the coordinates of `mobile` are *changed in memory*. + ref_frame : int (optional) + frame index to select frame from `reference` + verbose : bool (optional) + Set logger to show more information and show detailed progress of + the calculation if set to ``True``; the default is ``False``. + + + Attributes + ---------- + reference_atoms : AtomGroup + Atoms of the reference structure to be aligned against + mobile_atoms : AtomGroup + Atoms inside each trajectory frame to be rmsd_aligned + results.universe : :class:`MDAnalysis.Universe` + New Universe with average positions + + .. versionadded:: 2.0.0 + + universe : :class:`MDAnalysis.Universe` + Alias to the :attr:`results.universe` attribute. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.universe` instead. + + results.positions : np.ndarray(dtype=float) + Average positions + + .. versionadded:: 2.0.0 + + positions : np.ndarray(dtype=float) + Alias to the :attr:`results.positions` attribute. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.positions` instead. + + results.rmsd : float + Average RMSD per frame + + .. versionadded:: 2.0.0 + + rmsd : float + Alias to the :attr:`results.rmsd` attribute. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.rmsd` instead. + + filename : str + String reflecting the filename of the file where the average + structure is written + + + Notes + ----- + - If set to ``verbose=False``, it is recommended to wrap the statement + in a ``try ... finally`` to guarantee restoring of the log level in + the case of an exception. + - The ``in_memory`` option changes the `mobile` universe to an + in-memory representation (see :mod:`MDAnalysis.coordinates.memory`) + for the remainder of the Python session. If ``mobile.trajectory`` is + already a :class:`MemoryReader` then it is *always* treated as if + ``in_memory`` had been set to ``True``. + + + .. versionadded:: 1.0.0 + .. versionchanged:: 2.0.0 + :attr:`universe`, :attr:`positions`, and :attr:`rmsd` are now + stored in a :class:`MDAnalysis.analysis.base.Results` instance. + """ + if in_memory or isinstance(mobile.trajectory, MemoryReader): + mobile.transfer_to_memory() + filename = None + logger.info("Moved mobile trajectory to in-memory representation") + + # do this after setting the memory reader to have a reference to the + # right reader. + super(AverageStructure, self).__init__(mobile.trajectory, **kwargs) + if not self._verbose: + logging.disable(logging.WARN) + + self.reference = reference if reference is not None else mobile + + select = rms.process_selection(select) + self.ref_atoms = self.reference.select_atoms(*select['reference']) + self.mobile_atoms = mobile.select_atoms(*select['mobile']) + + if len(self.ref_atoms) != len(self.mobile_atoms): + err = ("Reference and trajectory atom selections do " + "not contain the same number of atoms: " + "N_ref={0:d}, N_traj={1:d}".format(self.ref_atoms.n_atoms, + self.mobile_atoms.n_atoms)) + logger.exception(err) + raise SelectionError(err) + logger.info("RMS calculation " + "for {0:d} atoms.".format(len(self.ref_atoms))) + + # store reference to mobile atoms + self.mobile = mobile.atoms + self.ref_frame = ref_frame + + self.filename = filename + self.results.universe = mda.Merge(self.mobile_atoms) + + natoms = len(self.results.universe.atoms) + self.ref_atoms, self.mobile_atoms = get_matching_atoms( + self.ref_atoms, self.mobile_atoms, tol_mass=tol_mass, + strict=strict, match_atoms=match_atoms) + + # 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._weights = get_weights(self.ref_atoms, weights) + + logger.info("RMS-fitting on {0:d} atoms.".format(len(self.ref_atoms))) + + def _prepare(self): + current_frame = self.reference.universe.trajectory.ts.frame + try: + # Move to the ref_frame + # (coordinates MUST be stored in case the ref traj is advanced + # elsewhere or if ref == mobile universe) + self.reference.universe.trajectory[self.ref_frame] + self._ref_com = self.ref_atoms.center(self._weights) + # makes a copy + self._ref_coordinates = self.ref_atoms.positions - self._ref_com + self._ref_positions = self.ref_atoms.positions.copy() + finally: + # Move back to the original frame + self.reference.universe.trajectory[current_frame] + + # allocate the array for selection atom coords + self.results.positions = np.zeros((len(self.mobile_atoms), 3)) + self.results.rmsd = 0 + + def _single_frame(self): + mobile_com = self.mobile_atoms.center(self._weights) + mobile_coordinates = self.mobile_atoms.positions - mobile_com + self.results.rmsd += _fit_to(mobile_coordinates, + self._ref_coordinates, + self.mobile, + mobile_com, + self._ref_com, self._weights)[1] + self.results.positions += self.mobile_atoms.positions + + def _conclude(self): + self.results.positions /= self.n_frames + self.results.rmsd /= self.n_frames + self.results.universe.load_new( + self.results.positions.reshape((1, -1, 3))) + self._writer.write(self.results.universe.atoms) + self._writer.close() + if not self._verbose: + logging.disable(logging.NOTSET) + + @property + def universe(self): + wmsg = ("The `universe` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.universe` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.universe + + @property + def positions(self): + wmsg = ("The `positions` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.positions` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.positions + + @property + def rmsd(self): + wmsg = ("The `rmsd` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.rmsd` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rmsd
+ + +@deprecate(release="2.4.0", remove="3.0", + message="See the documentation under Notes on how to directly use" + "Bio.Align.PairwiseAligner with ResidueGroups.") +def sequence_alignment(mobile, reference, match_score=2, mismatch_penalty=-1, + gap_penalty=-2, gapextension_penalty=-0.1): + """Generate a global sequence alignment between two residue groups. + + The residues in `reference` and `mobile` will be globally aligned. + The global alignment uses the Needleman-Wunsch algorithm as + implemented in :mod:`Bio.Align.PairwiseAligner`. The parameters of the dynamic + programming algorithm can be tuned with the keywords. The defaults + should be suitable for two similar sequences. For sequences with + low sequence identity, more specialized tools such as clustalw, + muscle, tcoffee, or similar should be used. + + Parameters + ---------- + mobile : AtomGroup + Atom group to be aligned + reference : AtomGroup + Atom group to be aligned against + match_score : float (optional), default 2 + score for matching residues, default 2 + mismatch_penalty : float (optional), default -1 + penalty for residues that do not match , default : -1 + gap_penalty : float (optional), default -2 + penalty for opening a gap; the high default value creates compact + alignments for highly identical sequences but might not be suitable + for sequences with low identity, default : -2 + gapextension_penalty : float (optional), default -0.1 + penalty for extending a gap, default: -0.1 + + Returns + ------- + alignment : tuple + Tuple of top sequence matching output `('Sequence A', 'Sequence B', score, + begin, end)` + + Notes + ----- + If you prefer to work directly with :mod:`Bio.Align` objects then you can + run your alignment with :class:`Bio.Alig.PairwiseAligner` as :: + + import Bio.Align.PairwiseAligner + + aligner = Bio.Align.PairwiseAligner( + mode="global", + match_score=match_score, + mismatch_score=mismatch_penalty, + open_gap_score=gap_penalty, + extend_gap_score=gapextension_penalty) + aln = aligner.align(reference.residues.sequence(format="Seq"), + mobile.residues.sequence(format="Seq")) + + # choose top alignment with highest score + topalignment = aln[0] + + The ``topalignment`` is a :class:`Bio.Align.PairwiseAlignment` instance + that can be used in your bioinformatics workflows. + + See Also + -------- + BioPython documentation for `PairwiseAligner`_. Alternatively, use + :func:`fasta2select` with :program:`clustalw2` and the option + ``is_aligned=False``. + + + .. _`PairwiseAligner`: + https://biopython.org/docs/latest/api/Bio.Align.html#Bio.Align.PairwiseAligner + + + .. versionadded:: 0.10.0 + + .. versionchanged:: 2.4.0 + Replace use of deprecated :func:`Bio.pairwise2.align.globalms` with + :class:`Bio.Align.PairwiseAligner`. + + """ + aligner = Bio.Align.PairwiseAligner( + mode="global", + match_score=match_score, + mismatch_score=mismatch_penalty, + open_gap_score=gap_penalty, + extend_gap_score=gapextension_penalty) + aln = aligner.align(reference.residues.sequence(format="Seq"), + mobile.residues.sequence(format="Seq")) + # choose top alignment with highest score + topalignment = aln[0] + + # reconstruct the results tuple that used to be of type Bio.pairwise2.Alignment + AlignmentTuple = collections.namedtuple( + "Alignment", + ["seqA", "seqB", "score", "start", "end"]) + # start/stop are not particularly meaningful and there's no obvious way to + # get the old pairwise2 start/stop from the new PairwiseAligner output. + return AlignmentTuple(topalignment[0], topalignment[1], + topalignment.score, + 0, max(reference.n_residues, mobile.n_residues)) + + + +
[docs]def fasta2select(fastafilename, is_aligned=False, + ref_resids=None, target_resids=None, + ref_offset=0, target_offset=0, verbosity=3, + alnfilename=None, treefilename=None, clustalw="clustalw2"): + """Return selection strings that will select equivalent residues. + + The function aligns two sequences provided in a FASTA file and + constructs MDAnalysis selection strings of the common atoms. When + these two strings are applied to the two different proteins they + will generate AtomGroups of the aligned residues. + + `fastafilename` contains the two un-aligned sequences in FASTA + format. The reference is assumed to be the first sequence, the + target the second. ClustalW_ produces a pairwise + alignment (which is written to a file with suffix ``.aln``). The + output contains atom selection strings that select the same atoms + in the two structures. + + Unless `ref_offset` and/or `target_offset` are specified, the resids + in the structure are assumed to correspond to the positions in the + un-aligned sequence, namely the first residue has resid == 1. + + In more complicated cases (e.g., when the resid numbering in the + input structure has gaps due to missing parts), simply provide the + sequence of resids as they appear in the topology in `ref_resids` or + `target_resids`, e.g. :: + + target_resids = [a.resid for a in trj.select_atoms('name CA')] + + (This translation table *is* combined with any value for + `ref_offset` or `target_offset`!) + + Parameters + ---------- + fastafilename : str, path to filename + FASTA file with first sequence as reference and + second the one to be aligned (ORDER IS IMPORTANT!) + is_aligned : bool (optional) + ``False`` (default) + run clustalw for sequence alignment; + ``True`` + use the alignment in the file (e.g. from STAMP) [``False``] + ref_offset : int (optional) + add this number to the column number in the FASTA file + to get the original residue number, default: 0 + target_offset : int (optional) + add this number to the column number in the FASTA file + to get the original residue number, default: 0 + ref_resids : str (optional) + sequence of resids as they appear in the reference structure + target_resids : str (optional) + sequence of resids as they appear in the target + alnfilename : str (optional) + filename of ClustalW alignment (clustal format) that is + produced by *clustalw* when *is_aligned* = ``False``. + default ``None`` uses the name and path of *fastafilename* and + substitutes the suffix with '.aln'. + treefilename: str (optional) + filename of ClustalW guide tree (Newick format); + if default ``None`` the the filename is generated from *alnfilename* + with the suffix '.dnd' instead of '.aln' + clustalw : str (optional) + path to the ClustalW (or ClustalW2) binary; only + needed for `is_aligned` = ``False``, default: "ClustalW2" + + Returns + ------- + select_dict : dict + dictionary with 'reference' and 'mobile' selection string + that can be used immediately in :class:`AlignTraj` as + ``select=select_dict``. + + + See Also + -------- + :func:`sequence_alignment`, which does not require external + programs. + + + .. _ClustalW: http://www.clustal.org/ + .. _STAMP: http://www.compbio.dundee.ac.uk/manuals/stamp.4.2/ + + .. versionchanged:: 1.0.0 + Passing `alnfilename` or `treefilename` as `None` will create a file in + the current working directory. + + """ + if is_aligned: + logger.info("Using provided alignment {}".format(fastafilename)) + with open(fastafilename) as fasta: + alignment = Bio.AlignIO.read( + fasta, "fasta") + else: + if alnfilename is None: + filepath, ext = os.path.splitext(fastafilename) + alnfilename = os.path.basename(filepath) + '.aln' + if treefilename is None: + filepath, ext = os.path.splitext(alnfilename) + treefilename = os.path.basename(filepath) + '.dnd' + run_clustalw = Bio.Align.Applications.ClustalwCommandline( + clustalw, + infile=fastafilename, + type="protein", + align=True, + outfile=alnfilename, + newtree=treefilename) + logger.debug( + "Aligning sequences in %(fastafilename)r with %(clustalw)r.", + vars()) + logger.debug("ClustalW commandline: %r", str(run_clustalw)) + try: + stdout, stderr = run_clustalw() + except: + logger.exception("ClustalW %(clustalw)r failed", vars()) + logger.info( + "(You can get clustalw2 from http://www.clustal.org/clustal2/)") + raise + with open(alnfilename) as aln: + alignment = Bio.AlignIO.read( + aln, "clustal") + logger.info( + "Using clustalw sequence alignment {0!r}".format(alnfilename)) + logger.info( + "ClustalW Newick guide tree was also produced: {0!r}".format(treefilename)) + + nseq = len(alignment) + if nseq != 2: + raise ValueError( + "Only two sequences in the alignment can be processed.") + + # implict assertion that we only have two sequences in the alignment + orig_resids = [ref_resids, target_resids] + offsets = [ref_offset, target_offset] + GAP = "-" + for iseq, a in enumerate(alignment): + # need iseq index to change orig_resids + if orig_resids[iseq] is None: + # build default: assume consecutive numbering of all + # residues in the alignment + length = len(a.seq) - a.seq.count(GAP) + orig_resids[iseq] = np.arange(1, length + 1) + else: + orig_resids[iseq] = np.asarray(orig_resids[iseq]) + # add offsets to the sequence <--> resid translation table + seq2resids = [resids + offset for resids, offset in zip( + orig_resids, offsets)] + del orig_resids + del offsets + + def resid_factory(alignment, seq2resids): + """Return a function that gives the resid for a position ipos in + the nseq'th alignment. + + resid = resid_factory(alignment,seq2resids) + r = resid(nseq,ipos) + + It is based on a look up table that translates position in the + alignment to the residue number in the original + sequence/structure. + + The first index of resid() is the alignmment number, the + second the position in the alignment. + + seq2resids translates the residues in the sequence to resid + numbers in the psf. In the simplest case this is a linear map + but if whole parts such as loops are ommitted from the protein + the seq2resids may have big gaps. + + Format: a tuple of two numpy arrays; the first array is for + the reference, the second for the target, The index in each + array gives the consecutive number of the amino acid in the + sequence, the value the resid in the structure/psf. + + Note: assumes that alignments have same length and are padded if + necessary. + """ + # could maybe use Bio.PDB.StructureAlignment instead? + nseq = len(alignment) + t = np.zeros((nseq, alignment.get_alignment_length()), dtype=int) + for iseq, a in enumerate(alignment): + GAP = "-" + t[iseq, :] = seq2resids[iseq][np.cumsum(np.where( + np.array(list(a.seq)) == GAP, 0, 1)) - 1] + # -1 because seq2resid is index-1 based (resids start at 1) + + def resid(nseq, ipos, t=t): + return t[nseq, ipos] + + return resid + + resid = resid_factory(alignment, seq2resids) + + res_list = [] # collect individual selection string + # could collect just resid and type (with/without CB) and + # then post-process and use ranges for continuous stretches, eg + # ( resid 1:35 and ( backbone or name CB ) ) or ( resid 36 and backbone ) + for ipos in range(alignment.get_alignment_length()): + aligned = list(alignment[:, ipos]) + if GAP in aligned: + continue # skip residue + template = "resid %i" + if 'G' not in aligned: + # can use CB + template += " and ( backbone or name CB )" + else: + template += " and backbone" + template = "( " + template + " )" + + res_list.append([template % resid(iseq, ipos) for iseq in range(nseq)]) + + sel = np.array(res_list).transpose() + + ref_selection = " or ".join(sel[0]) + target_selection = " or ".join(sel[1]) + return {'reference': ref_selection, 'mobile': target_selection}
+ + +
[docs]def get_matching_atoms(ag1, ag2, tol_mass=0.1, strict=False, match_atoms=True): + """Return two atom groups with one-to-one matched atoms. + + The function takes two :class:`~MDAnalysis.core.groups.AtomGroup` + instances `ag1` and `ag2` and returns two atom groups `g1` and `g2` that + consist of atoms so that the mass of atom ``g1[0]`` is the same as the mass + of atom ``g2[0]``, ``g1[1]`` and ``g2[1]`` etc. + + The current implementation is very simplistic and works on a per-residue basis: + + 1. The two groups must contain the same number of residues. + 2. Any residues in each group that have differing number of atoms are discarded. + 3. The masses of corresponding atoms are compared. and if any masses differ + by more than `tol_mass` the test is considered failed and a + :exc:`SelectionError` is raised. + + The log file (see :func:`MDAnalysis.start_logging`) will contain detailed + information about mismatches. + + Parameters + ---------- + ag1 : AtomGroup + First :class:`~MDAnalysis.core.groups.AtomGroup` instance that is + compared + ag2 : AtomGroup + Second :class:`~MDAnalysis.core.groups.AtomGroup` instance that is + compared + tol_mass : float (optional) + Reject if the atomic masses for matched atoms differ by more than + `tol_mass` [0.1] + strict : bool (optional) + ``True`` + Will raise :exc:`SelectionError` if a single atom does not + match between the two selections. + ``False`` [default] + Will try to prepare a matching selection by dropping + residues with non-matching atoms. See :func:`get_matching_atoms` + for details. + match_atoms : bool (optional) + ``True`` + Will attempt to match atoms based on mass + ``False`` + Will not attempt to match atoms based on mass + + Returns + ------- + (g1, g2) : tuple + Tuple with :class:`~MDAnalysis.core.groups.AtomGroup` + instances that match, atom by atom. The groups are either the + original groups if all matched or slices of the original + groups. + + Raises + ------ + :exc:`SelectionError` + Error raised if the number of residues does not match or if in the final + matching masses differ by more than *tol*. + + Notes + ----- + The algorithm could be improved by using e.g. the Needleman-Wunsch + algorithm in :mod:`Bio.profile2` to align atoms in each residue (doing a + global alignment is too expensive). + + .. versionadded:: 0.8 + + .. versionchanged:: 0.10.0 + Renamed from :func:`check_same_atoms` to + :func:`get_matching_atoms` and now returns matching atomgroups + (possibly with residues removed) + + """ + + if ag1.n_atoms != ag2.n_atoms: + if not match_atoms: + errmsg = ("Mobile and reference atom selections do not " + "contain the same number of atoms and atom " + "matching is turned off. To match atoms based " + "on residue and mass, try match_atoms=True") + logger.error(errmsg) + raise SelectionError(errmsg) + if ag1.n_residues != ag2.n_residues: + errmsg = ("Reference and trajectory atom selections do not contain " + "the same number of atoms: \n" + "atoms: N_ref={0}, N_traj={1}\n" + "and also not the same number of residues:\n" + "residues: N_ref={2}, N_traj={3}").format( + ag1.n_atoms, ag2.n_atoms, + ag1.n_residues, ag2.n_residues) + logger.error(errmsg) + raise SelectionError(errmsg) + else: + msg = ("Reference and trajectory atom selections do not contain " + "the same number of atoms: \n" + "atoms: N_ref={0}, N_traj={1}").format( + ag1.n_atoms, ag2.n_atoms) + if strict: + logger.error(msg) + raise SelectionError(msg) + + # continue with trying to create a valid selection + msg += ("\nbut we attempt to create a valid selection " + + "(use strict=True to disable this heuristic).") + logger.info(msg) + warnings.warn(msg, category=SelectionWarning) + + # continue with trying to salvage the selection: + # - number of atoms is different + # - number of residues is the same + # We will remove residues with mismatching number of atoms (e.g. not resolved + # in an X-ray structure) + assert ag1.n_residues == ag2.n_residues + + # Alternatively, we could align all atoms but Needleman-Wunsch + # pairwise2 consumes too much memory for thousands of characters in + # each sequence. Perhaps a solution would be pairwise alignment per residue. + # + # aln_elem = Bio.pairwise2.align.globalms("".join([MDAnalysis.topology. + # core.guess_atom_element(n) for n in gref.atoms.names]), + # "".join([MDAnalysis.topology.core.guess_atom_element(n) + # for n in models[0].atoms.names]), + # 2, -1, -1, -0.1, + # one_alignment_only=True) + + # For now, just remove the residues that don't have matching numbers + # NOTE: This can create empty selections, e.g., when comparing a structure + # with hydrogens to a PDB structure without hydrogens. + rsize1 = np.array([r.atoms.n_atoms for r in ag1.residues]) + rsize2 = np.array([r.atoms.n_atoms for r in ag2.residues]) + rsize_mismatches = np.absolute(rsize1 - rsize2) + mismatch_mask = (rsize_mismatches > 0) + if np.any(mismatch_mask): + def get_atoms_byres(g, match_mask=np.logical_not(mismatch_mask)): + # not pretty... but need to do things on a per-atom basis in + # order to preserve original selection + ag = g.atoms + good = ag.residues.resids[match_mask] # resid for each residue + resids = ag.resids # resid for each atom + # boolean array for all matching atoms + ix_good = np.in1d(resids, good) + return ag[ix_good] + + _ag1 = get_atoms_byres(ag1) + _ag2 = get_atoms_byres(ag2) + + assert _ag1.atoms.n_atoms == _ag2.atoms.n_atoms + + # diagnostics + mismatch_resindex = np.arange(ag1.n_residues)[mismatch_mask] + logger.warning("Removed {0} residues with non-matching numbers of atoms" + .format(mismatch_mask.sum())) + logger.debug("Removed residue ids: group 1: {0}" + .format(ag1.residues.resids[mismatch_resindex])) + logger.debug("Removed residue ids: group 2: {0}" + .format(ag2.residues.resids[mismatch_resindex])) + # replace after logging (still need old ag1 and ag2 for + # diagnostics) + ag1 = _ag1 + ag2 = _ag2 + del _ag1, _ag2 + + # stop if we created empty selections (by removing ALL residues...) + if ag1.n_atoms == 0 or ag2.n_atoms == 0: + errmsg = ("Failed to automatically find matching atoms: created empty selections. " + "Try to improve your selections for mobile and reference.") + logger.error(errmsg) + raise SelectionError(errmsg) + + if match_atoms: + # check again because the residue matching heuristic is not very + # good and can easily be misled (e.g., when one of the selections + # had fewer atoms but the residues in mobile and reference have + # each the same number) + if (not hasattr(ag1, 'masses') or not hasattr(ag2, 'masses')): + msg = "Atoms could not be matched since they don't contain masses." + logger.info(msg) + warnings.warn(msg, category=SelectionWarning) + else: + try: + mass_mismatches = (np.absolute(ag1.masses - ag2.masses) > tol_mass) + except ValueError: + errmsg = ("Failed to find matching atoms: len(reference) = {}, len(mobile) = {} " + "Try to improve your selections for mobile and reference.").format( + ag1.n_atoms, ag2.n_atoms) + logger.error(errmsg) + raise SelectionError(errmsg) from None + + if np.any(mass_mismatches): + # Test 2 failed. + # diagnostic output: + logger.error("Atoms: reference | trajectory") + for ar, at in zip(ag1[mass_mismatches], ag2[mass_mismatches]): + logger.error( + "{0!s:>4} {1:3d} {2!s:>3} {3!s:>3} {4:6.3f} | {5!s:>4} {6:3d} {7!s:>3} {8!s:>3} {9:6.3f}".format( + ar.segid, + ar.resid, + ar.resname, + ar.name, + ar.mass, + at.segid, + at.resid, + at.resname, + at.name, + at.mass)) + errmsg = ("Inconsistent selections, masses differ by more than {0}; " + "mis-matching atoms are shown above.").format(tol_mass) + logger.error(errmsg) + raise SelectionError(errmsg) + + return ag1, ag2
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.html new file mode 100644 index 0000000000..23688563c0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.html @@ -0,0 +1,328 @@ + + + + + + MDAnalysis.analysis.atomicdistances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.atomicdistances

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- https://www.mdanalysis.org
+# Copyright (c) 2006-2017 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
+#
+#
+
+
+r"""
+Simple atomic distance analysis --- :mod:`MDAnalysis.analysis.atomicdistances`
+==============================================================================
+
+:Author: Xu Hong Chen
+:Year: 2023
+:Copyright: GNU Public License v3
+
+This module provides a class to efficiently compute distances between
+two groups of atoms with an equal number of atoms over a trajectory.
+Specifically, for two atom groups ``ag1`` and ``ag2``, it will return
+the distances
+
+.. math::
+    |ag1[i] - ag2[i]|
+
+for all :math:`i` from :math:`0` to `n_atoms` :math:`- 1`, where
+`n_atoms` is the number of atoms in each atom group. By default,
+this computation is done with periodic boundary conditions, but this
+can be easily turned off. These distances are grouped by time step in
+a NumPy array.
+
+For more general functions on computing distances between atoms or
+groups of atoms, please see :class:`MDAnalysis.analysis.distances`.
+
+See Also
+--------
+:mod:`MDAnalysis.analysis.distances`
+:mod:`MDAnalysis.lib.distances`
+
+
+Basic usage
+-----------
+
+This example uses files from the MDAnalysis test suite
+(:data:`~MDAnalysis.tests.datafiles.GRO` and
+:data:`~MDAnalysis.tests.datafiles.XTC`). To get started, execute  ::
+
+   >>> import MDAnalysis as mda
+   >>> from MDAnalysis.tests.datafiles import GRO, XTC
+   >>> import MDAnalysis.analysis.atomicdistances as ad
+
+We will calculate the distances between an atom group of atoms 101-105
+and an atom group of atoms 4001-4005 with periodic boundary conditions.
+To select these atoms:
+
+   >>> u = mda.Universe(GRO, XTC)
+   >>> ag1 = u.atoms[100:105]
+   >>> ag2 = u.atoms[4000:4005]
+
+We can run the calculations using any variable of choice such as
+``my_dists`` and access our results using ``my_dists.results``:
+
+   >>> my_dists = ad.AtomicDistances(ag1, ag2).run()
+   >>> my_dists.results
+   array([[37.80813681, 33.2594864 , 34.93676414, 34.51183299, 34.96340209],
+       [27.11746625, 31.19878079, 31.69439435, 32.63446126, 33.10451345],
+       [23.27210749, 30.38714688, 32.48269361, 31.91444505, 31.84583838],
+       [18.40607922, 39.21993135, 39.33468192, 41.0133789 , 39.46885946],
+       [26.26006981, 37.9966713 , 39.14991106, 38.13423586, 38.95451427],
+       [26.83845081, 34.66255735, 35.59335027, 34.8926705 , 34.27175056],
+       [37.51994763, 38.12161091, 37.56481743, 36.8488121 , 35.75278065],
+       [37.27275501, 37.7831456 , 35.74359073, 34.54893794, 34.76495816],
+       [38.76272761, 41.31816555, 38.81588421, 39.82491432, 38.890219  ],
+       [39.20012515, 40.00563374, 40.83857688, 38.77886735, 41.45775864]])
+
+To do the computation without periodic boundary conditions, we can enter
+the keyword argument ``pbc=False`` after ``ag2``. The result is different
+in this case:
+
+   >>> my_dists_nopbc = ad.AtomicDistances(ag1, ag2, pbc=False).run()
+   >>> my_dists_nopbc.results
+   array([[37.80813681, 33.2594864 , 34.93676414, 34.51183299, 34.96340209],
+       [27.11746625, 31.19878079, 31.69439435, 32.63446126, 33.10451345],
+       [23.27210749, 30.38714688, 32.482695  , 31.91444505, 31.84583838],
+       [18.40607922, 39.21992825, 39.33468192, 41.0133757 , 39.46885946],
+       [26.26006981, 37.99666906, 39.14990985, 38.13423708, 38.95451311],
+       [26.83845081, 34.66255625, 35.59335027, 34.8926705 , 34.27174827],
+       [51.86981409, 48.10347964, 48.39570072, 49.14423513, 50.44804292],
+       [37.27275501, 37.7831456 , 35.74359073, 34.54893794, 34.76495816],
+       [56.39657447, 41.31816555, 38.81588421, 39.82491432, 38.890219  ],
+       [39.20012515, 40.00563374, 40.83857688, 38.77886735, 41.45775864]])
+
+"""
+
+import numpy as np
+
+from MDAnalysis.lib.distances import calc_bonds
+
+
+import warnings
+import logging
+from .base import AnalysisBase
+
+logger = logging.getLogger("MDAnalysis.analysis.atomicdistances")
+
+
+
[docs]class AtomicDistances(AnalysisBase): + r"""Class to calculate atomic distances between two AtomGroups over a + trajectory. + + Parameters + ---------- + ag1, ag2 : AtomGroup + :class:`~MDAnalysis.core.groups.AtomGroup` with the + same number of atoms + pbc : bool, optional + If ``True``, calculates atomic distances with periodic boundary + conditions (PBCs). Setting `pbc` to ``False``, calculates atomic + distances without considering PBCs. Defaults to ``True``. + + Attributes + ---------- + results : :class:`numpy.ndarray` + The distances :math:`|ag1[i] - ag2[i]|` for all :math:`i` + from :math:`0` to `n_atoms` :math:`- 1` for each frame over + the trajectory. + n_frames : int + Number of frames included in the analysis. + n_atoms : int + Number of atoms in each atom group. + + + .. versionadded:: 2.5.0 + """ + + def __init__(self, ag1, ag2, pbc=True, **kwargs): + # check ag1 and ag2 have the same number of atoms + if ag1.atoms.n_atoms != ag2.atoms.n_atoms: + raise ValueError("AtomGroups do not " + "have the same number of atoms") + # check ag1 and ag2 are from the same trajectory + elif ag1.universe.trajectory != ag2.universe.trajectory: + raise ValueError("AtomGroups are not " + "from the same trajectory") + + super(AtomicDistances, self).__init__(ag1.universe.trajectory, + **kwargs) + + self._ag1 = ag1 + self._ag2 = ag2 + self._pbc = pbc + + def _prepare(self): + # initialize NumPy array of frames x distances for results + self.results = np.zeros((self.n_frames, self._ag1.atoms.n_atoms)) + + def _single_frame(self): + # if PBCs considered, get box size + box = self._ag1.dimensions if self._pbc else None + self.results[self._frame_index] = calc_bonds(self._ag1.positions, + self._ag2.positions, + box)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/base.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/base.html new file mode 100644 index 0000000000..374dd6362d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/base.html @@ -0,0 +1,804 @@ + + + + + + MDAnalysis.analysis.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.base

+# -*- 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-2017 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
+#
+"""Analysis building blocks --- :mod:`MDAnalysis.analysis.base`
+============================================================
+
+MDAnalysis provides building blocks for creating analysis classes. One can
+think of each analysis class as a "tool" that performs a specific analysis over
+the trajectory frames and stores the results in the tool.
+
+Analysis classes are derived from :class:`AnalysisBase` by subclassing. This
+inheritance provides a common workflow and API for users and makes many
+additional features automatically available (such as frame selections and a
+verbose progressbar). The important points for analysis classes are:
+
+#. Analysis tools are Python classes derived from :class:`AnalysisBase`.
+#. When instantiating an analysis, the :class:`Universe` or :class:`AtomGroup`
+   that the analysis operates on is provided together with any other parameters
+   that are kept fixed for the specific analysis.
+#. The analysis is performed with :meth:`~AnalysisBase.run` method. It has a
+   common set of arguments such as being able to select the frames the analysis
+   is performed on. The `verbose` keyword argument enables additional output. A
+   progressbar is shown by default that also shows an estimate for the
+   remaining time until the end of the analysis.
+#. Results are always stored in the attribute :attr:`AnalysisBase.results`,
+   which is an instance of :class:`Results`, a kind of dictionary that allows
+   allows item access via attributes. Each analysis class decides what and how
+   to store in :class:`Results` and needs to document it. For time series, the
+   :attr:`AnalysisBase.times` contains the time stamps of the analyzed frames.
+
+
+Example of using a standard analysis tool
+-----------------------------------------
+
+For example, the :class:`MDAnalysis.analysis.rms.RMSD` performs a
+root-mean-square distance analysis in the following way:
+
+.. code-block:: python
+
+   import MDAnalysis as mda
+   from MDAnalysisTests.datafiles import TPR, XTC
+
+   from MDAnalysis.analysis import rms
+
+   u = mda.Universe(TPR, XTC)
+
+   # (2) instantiate analysis
+   rmsd = rms.RMSD(u, select='name CA')
+
+   # (3) the run() method can select frames in different ways
+   # run on all frames (with progressbar)
+   rmsd.run(verbose=True)
+
+   # or start, stop, and step can be used
+   rmsd.run(start=2, stop=8, step=2)
+
+   # a list of frames to run the analysis on can be passed
+   rmsd.run(frames=[0,2,3,6,9])
+
+   # a list of booleans the same length of the trajectory can be used
+   rmsd.run(frames=[True, False, True, True, False, False, True, False,
+                    False, True])
+
+   # (4) analyze the results, e.g., plot
+   t = rmsd.times
+   y = rmsd.results.rmsd[:, 2]   # RMSD at column index 2, see docs
+
+   import matplotlib.pyplot as plt
+   plt.plot(t, y)
+   plt.xlabel("time (ps)")
+   plt.ylabel("RMSD (Å)")
+
+
+Writing new analysis tools
+--------------------------
+
+In order to write new analysis tools, derive a class from :class:`AnalysisBase`
+and define at least the :meth:`_single_frame` method, as described in
+:class:`AnalysisBase`.
+
+.. SeeAlso::
+
+   The chapter `Writing your own trajectory analysis`_ in the *User Guide*
+   contains a step-by-step example for writing analysis tools with
+   :class:`AnalysisBase`.
+
+
+.. _`Writing your own trajectory analysis`:
+   https://userguide.mdanalysis.org/stable/examples/analysis/custom_trajectory_analysis.html
+
+
+Classes
+-------
+
+The :class:`Results` and :class:`AnalysisBase` classes are the essential
+building blocks for almost all MDAnalysis tools in the
+:mod:`MDAnalysis.analysis` module. They aim to be easily useable and
+extendable.
+
+:class:`AnalysisFromFunction` and the :func:`analysis_class` functions are
+simple wrappers that make it even easier to create fully-featured analysis
+tools if only the single-frame analysis function needs to be written.
+
+"""
+from collections import UserDict
+import inspect
+import logging
+import itertools
+
+import numpy as np
+from MDAnalysis import coordinates
+from MDAnalysis.core.groups import AtomGroup
+from MDAnalysis.lib.log import ProgressBar
+
+logger = logging.getLogger(__name__)
+
+
+
[docs]class Results(UserDict): + r"""Container object for storing results. + + :class:`Results` are dictionaries that provide two ways by which values + can be accessed: by dictionary key ``results["value_key"]`` or by object + attribute, ``results.value_key``. :class:`Results` stores all results + obtained from an analysis after calling :meth:`~AnalysisBase.run()`. + + The implementation is similar to the :class:`sklearn.utils.Bunch` + class in `scikit-learn`_. + + .. _`scikit-learn`: https://scikit-learn.org/ + + Raises + ------ + AttributeError + If an assigned attribute has the same name as a default attribute. + + ValueError + If a key is not of type ``str`` and therefore is not able to be + accessed by attribute. + + Examples + -------- + >>> from MDAnalysis.analysis.base import Results + >>> results = Results(a=1, b=2) + >>> results['b'] + 2 + >>> results.b + 2 + >>> results.a = 3 + >>> results['a'] + 3 + >>> results.c = [1, 2, 3, 4] + >>> results['c'] + [1, 2, 3, 4] + + + .. versionadded:: 2.0.0 + """ + + def _validate_key(self, key): + if key in dir(self): + raise AttributeError(f"'{key}' is a protected dictionary " + "attribute") + elif isinstance(key, str) and not key.isidentifier(): + raise ValueError(f"'{key}' is not a valid attribute") + + def __init__(self, *args, **kwargs): + kwargs = dict(*args, **kwargs) + if "data" in kwargs.keys(): + raise AttributeError(f"'data' is a protected dictionary attribute") + self.__dict__["data"] = {} + self.update(kwargs) + + def __setitem__(self, key, item): + self._validate_key(key) + super().__setitem__(key, item) + + def __setattr__(self, attr, val): + if attr == 'data': + super().__setattr__(attr, val) + else: + self.__setitem__(attr, val) + + def __getattr__(self, attr): + try: + return self[attr] + except KeyError as err: + raise AttributeError("'Results' object has no " + f"attribute '{attr}'") from err + + def __delattr__(self, attr): + try: + del self[attr] + except KeyError as err: + raise AttributeError("'Results' object has no " + f"attribute '{attr}'") from err + + def __getstate__(self): + return self.data + + def __setstate__(self, state): + self.data = state
+ + +
[docs]class AnalysisBase(object): + r"""Base class for defining multi-frame analysis + + The class is designed as a template for creating multi-frame analyses. + This class will automatically take care of setting up the trajectory + reader for iterating, and it offers to show a progress meter. + Computed results are stored inside the :attr:`results` attribute. + + To define a new Analysis, :class:`AnalysisBase` needs to be subclassed + and :meth:`_single_frame` must be defined. It is also possible to define + :meth:`_prepare` and :meth:`_conclude` for pre- and post-processing. + All results should be stored as attributes of the :class:`Results` + container. + + Parameters + ---------- + trajectory : MDAnalysis.coordinates.base.ReaderBase + A trajectory Reader + verbose : bool, optional + Turn on more logging and debugging + + Attributes + ---------- + times: numpy.ndarray + array of Timestep times. Only exists after calling + :meth:`AnalysisBase.run` + frames: numpy.ndarray + array of Timestep frame indices. Only exists after calling + :meth:`AnalysisBase.run` + results: :class:`Results` + results of calculation are stored after call + to :meth:`AnalysisBase.run` + + + Example + ------- + .. code-block:: python + + from MDAnalysis.analysis.base import AnalysisBase + + class NewAnalysis(AnalysisBase): + def __init__(self, atomgroup, parameter, **kwargs): + super(NewAnalysis, self).__init__(atomgroup.universe.trajectory, + **kwargs) + self._parameter = parameter + self._ag = atomgroup + + def _prepare(self): + # OPTIONAL + # Called before iteration on the trajectory has begun. + # Data structures can be set up at this time + self.results.example_result = [] + + def _single_frame(self): + # REQUIRED + # Called after the trajectory is moved onto each new frame. + # store an example_result of `some_function` for a single frame + self.results.example_result.append(some_function(self._ag, + self._parameter)) + + def _conclude(self): + # OPTIONAL + # Called once iteration on the trajectory is finished. + # Apply normalisation and averaging to results here. + self.results.example_result = np.asarray(self.example_result) + self.results.example_result /= np.sum(self.result) + + Afterwards the new analysis can be run like this + + .. code-block:: python + + import MDAnalysis as mda + from MDAnalysisTests.datafiles import PSF, DCD + + u = mda.Universe(PSF, DCD) + + na = NewAnalysis(u.select_atoms('name CA'), 35) + na.run(start=10, stop=20) + print(na.results.example_result) + # results can also be accessed by key + print(na.results["example_result"]) + + + .. versionchanged:: 1.0.0 + Support for setting `start`, `stop`, and `step` has been removed. These + should now be directly passed to :meth:`AnalysisBase.run`. + + .. versionchanged:: 2.0.0 + Added :attr:`results` + + """ + + def __init__(self, trajectory, verbose=False, **kwargs): + self._trajectory = trajectory + self._verbose = verbose + self.results = Results() + + def _setup_frames(self, trajectory, start=None, stop=None, step=None, + frames=None): + """Pass a Reader object and define the desired iteration pattern + through the trajectory + + Parameters + ---------- + trajectory : mda.Reader + A trajectory Reader + 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 + frames : array_like, optional + array of integers or booleans to slice trajectory; cannot be + combined with `start`, `stop`, `step` + + .. versionadded:: 2.2.0 + + Raises + ------ + ValueError + if *both* `frames` and at least one of `start`, `stop`, or `frames` + is provided (i.e., set to another value than ``None``) + + + .. versionchanged:: 1.0.0 + Added .frames and .times arrays as attributes + + .. versionchanged:: 2.2.0 + Added ability to iterate through trajectory by passing a list of + frame indices in the `frames` keyword argument + + """ + self._trajectory = trajectory + if frames is not None: + if not all(opt is None for opt in [start, stop, step]): + raise ValueError("start/stop/step cannot be combined with " + "frames") + slicer = frames + else: + start, stop, step = trajectory.check_slice_indices(start, stop, + step) + slicer = slice(start, stop, step) + self._sliced_trajectory = trajectory[slicer] + self.start = start + self.stop = stop + self.step = step + self.n_frames = len(self._sliced_trajectory) + self.frames = np.zeros(self.n_frames, dtype=int) + self.times = np.zeros(self.n_frames) + + def _single_frame(self): + """Calculate data from a single frame of trajectory + + Don't worry about normalising, just deal with a single frame. + """ + raise NotImplementedError("Only implemented in child classes") + + def _prepare(self): + """Set things up before the analysis loop begins""" + pass # pylint: disable=unnecessary-pass + + def _conclude(self): + """Finalize the results you've gathered. + + Called at the end of the :meth:`run` method to finish everything up. + """ + pass # pylint: disable=unnecessary-pass + +
[docs] def run(self, start=None, stop=None, step=None, frames=None, + verbose=None, *, progressbar_kwargs={}): + """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 + frames : array_like, optional + array of integers or booleans to slice trajectory; `frames` can + only be used *instead* of `start`, `stop`, and `step`. Setting + *both* `frames` and at least one of `start`, `stop`, `step` to a + non-default value will raise a :exc:`ValueError`. + + .. versionadded:: 2.2.0 + + 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. + + + .. versionchanged:: 2.2.0 + Added ability to analyze arbitrary frames by passing a list of + frame indices in the `frames` keyword argument. + + .. versionchanged:: 2.5.0 + Add `progressbar_kwargs` parameter, + allowing to modify description, position etc of tqdm progressbars + """ + logger.info("Choosing frames to analyze") + # if verbose unchanged, use class default + verbose = getattr(self, '_verbose', + False) if verbose is None else verbose + + self._setup_frames(self._trajectory, start=start, stop=stop, + step=step, frames=frames) + logger.info("Starting preparation") + self._prepare() + logger.info("Starting analysis loop over %d trajectory frames", + self.n_frames) + + for i, ts in enumerate(ProgressBar( + self._sliced_trajectory, + verbose=verbose, + **progressbar_kwargs)): + self._frame_index = i + self._ts = ts + self.frames[i] = ts.frame + self.times[i] = ts.time + self._single_frame() + logger.info("Finishing up") + self._conclude() + return self
+ + +
[docs]class AnalysisFromFunction(AnalysisBase): + r"""Create an :class:`AnalysisBase` from a function working on AtomGroups + + Parameters + ---------- + function : callable + function to evaluate at each frame + trajectory : MDAnalysis.coordinates.Reader, optional + trajectory to iterate over. If ``None`` the first AtomGroup found in + args and kwargs is used as a source for the trajectory. + *args : list + arguments for `function` + **kwargs : dict + arguments for `function` and :class:`AnalysisBase` + + Attributes + ---------- + results.frames : numpy.ndarray + simulation frames used in analysis + results.times : numpy.ndarray + simulation times used in analysis + results.timeseries : numpy.ndarray + Results for each frame of the wrapped function, + stored after call to :meth:`AnalysisFromFunction.run`. + + Raises + ------ + ValueError + if `function` has the same `kwargs` as :class:`AnalysisBase` + + Example + ------- + .. code-block:: python + + def rotation_matrix(mobile, ref): + return mda.analysis.align.rotation_matrix(mobile, ref)[0] + + rot = AnalysisFromFunction(rotation_matrix, trajectory, + mobile, ref).run() + print(rot.results.timeseries) + + + .. versionchanged:: 1.0.0 + Support for directly passing the `start`, `stop`, and `step` arguments + has been removed. These should instead be passed to + :meth:`AnalysisFromFunction.run`. + + .. versionchanged:: 2.0.0 + Former :attr:`results` are now stored as :attr:`results.timeseries` + """ + + def __init__(self, function, trajectory=None, *args, **kwargs): + if (trajectory is not None) and (not isinstance( + trajectory, coordinates.base.ProtoReader)): + args = (trajectory,) + args + trajectory = None + + if trajectory is None: + # all possible places to find trajectory + for arg in itertools.chain(args, kwargs.values()): + if isinstance(arg, AtomGroup): + trajectory = arg.universe.trajectory + break + + if trajectory is None: + raise ValueError("Couldn't find a trajectory") + + self.function = function + self.args = args + + self.kwargs = kwargs + + super(AnalysisFromFunction, self).__init__(trajectory) + + def _prepare(self): + self.results.timeseries = [] + + def _single_frame(self): + self.results.timeseries.append(self.function(*self.args, + **self.kwargs)) + + def _conclude(self): + self.results.frames = self.frames + self.results.times = self.times + self.results.timeseries = np.asarray(self.results.timeseries)
+ + +
[docs]def analysis_class(function): + r"""Transform a function operating on a single frame to an + :class:`AnalysisBase` class. + + Parameters + ---------- + function : callable + function to evaluate at each frame + + Attributes + ---------- + results.frames : numpy.ndarray + simulation frames used in analysis + results.times : numpy.ndarray + simulation times used in analysis + results.timeseries : numpy.ndarray + Results for each frame of the wrapped function, + stored after call to :meth:`AnalysisFromFunction.run`. + + Raises + ------ + ValueError + if `function` has the same `kwargs` as :class:`AnalysisBase` + + Examples + -------- + + For use in a library, we recommend the following style + + .. code-block:: python + + def rotation_matrix(mobile, ref): + return mda.analysis.align.rotation_matrix(mobile, ref)[0] + RotationMatrix = analysis_class(rotation_matrix) + + It can also be used as a decorator + + .. code-block:: python + + @analysis_class + def RotationMatrix(mobile, ref): + return mda.analysis.align.rotation_matrix(mobile, ref)[0] + + rot = RotationMatrix(u.trajectory, mobile, ref).run(step=2) + print(rot.results.timeseries) + + + .. versionchanged:: 2.0.0 + Former :attr:`results` are now stored as :attr:`results.timeseries` + """ + + class WrapperClass(AnalysisFromFunction): + def __init__(self, trajectory=None, *args, **kwargs): + super(WrapperClass, self).__init__(function, trajectory, + *args, **kwargs) + + return WrapperClass
+ + +def _filter_baseanalysis_kwargs(function, kwargs): + """ + Create two dictionaries with `kwargs` separated for `function` and + :class:`AnalysisBase` + + Parameters + ---------- + function : callable + function to be called + kwargs : dict + keyword argument dictionary + + Returns + ------- + base_args : dict + dictionary of AnalysisBase kwargs + kwargs : dict + kwargs without AnalysisBase kwargs + + Raises + ------ + ValueError + if `function` has the same `kwargs` as :class:`AnalysisBase` + + """ + try: + # pylint: disable=deprecated-method + base_argspec = inspect.getfullargspec(AnalysisBase.__init__) + except AttributeError: + # pylint: disable=deprecated-method + base_argspec = inspect.getargspec(AnalysisBase.__init__) + + n_base_defaults = len(base_argspec.defaults) + base_kwargs = {name: val + for name, val in zip(base_argspec.args[-n_base_defaults:], + base_argspec.defaults)} + + try: + # pylint: disable=deprecated-method + argspec = inspect.getfullargspec(function) + except AttributeError: + # pylint: disable=deprecated-method + argspec = inspect.getargspec(function) + + for base_kw in base_kwargs.keys(): + if base_kw in argspec.args: + raise ValueError( + "argument name '{}' clashes with AnalysisBase argument." + "Now allowed are: {}".format(base_kw, base_kwargs.keys())) + + base_args = {} + for argname, default in base_kwargs.items(): + base_args[argname] = kwargs.pop(argname, default) + + return base_args, kwargs +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/bat.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/bat.html new file mode 100644 index 0000000000..c727b70577 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/bat.html @@ -0,0 +1,716 @@ + + + + + + MDAnalysis.analysis.bat — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.bat

+# -*- 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-2017 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
+#
+r"""Bond-Angle-Torsion coordinates analysis --- :mod:`MDAnalysis.analysis.bat`
+===========================================================================
+
+:Author: Soohaeng Yoo Willow and David Minh
+:Year: 2020
+:Copyright: GNU Public License, v2 or any higher version
+
+.. versionadded:: 2.0.0
+
+This module contains classes for interconverting between Cartesian and an
+internal coordinate system, Bond-Angle-Torsion (BAT) coordinates
+:cite:p:`Chang2003`, for a given set of atoms or residues. This coordinate
+system is designed to be complete, non-redundant, and minimize correlations
+between degrees of freedom. Complete and non-redundant means that for N atoms
+there will be 3N Cartesian coordinates and 3N BAT coordinates. Correlations are
+minimized by using improper torsions, as described in :cite:p:`Hikiri2016`.
+
+More specifically, bond refers to the bond length, or distance between
+a pair of bonded atoms. Angle refers to the bond angle, the angle between
+a pair of bonds to a central atom. Torsion refers to the torsion angle.
+For a set of four atoms a, b, c, and d, a torsion requires bonds between
+a and b, b and c, and c and d. The torsion is the angle between a plane
+containing atoms a, b, and c and another plane containing b, c, and d.
+For a set of torsions that share atoms b and c, one torsion is defined as
+the primary torsion. The others are defined as improper torsions, differences
+between the raw torsion angle and the primary torsion. This definition reduces
+the correlation between the torsion angles.
+
+Each molecule also has six external coordinates that define its translation and
+rotation in space. The three Cartesian coordinates of the first atom are the
+molecule's translational degrees of freedom. Rotational degrees of freedom are
+specified by the axis-angle convention. The rotation axis is a normalized vector
+pointing from the first to second atom. It is described by the polar angle,
+:math:`\phi`, and azimuthal angle, :math:`\theta`. :math:`\omega` is a third angle
+that describes the rotation of the third atom about the axis.
+
+This module was adapted from AlGDock :cite:p:`Minh2020`.
+
+
+See Also
+--------
+:class:`~MDAnalysis.analysis.dihedrals.Dihedral`
+   class to calculate dihedral angles for a given set of atoms or residues
+:func:`MDAnalysis.lib.distances.calc_dihedrals()`
+   function to calculate dihedral angles from atom positions
+
+
+Example applications
+--------------------
+
+The :class:`~MDAnalysis.analysis.bat.BAT` class defines bond-angle-torsion
+coordinates based on the topology of an atom group and interconverts between
+Cartesian and BAT coordinate systems.
+
+For example, we can determine internal coordinates for residues 5-10
+of adenylate kinase (AdK). The trajectory is included within the test data files::
+
+   import MDAnalysis as mda
+   from MDAnalysisTests.datafiles import PSF, DCD
+   import numpy as np
+
+   u = mda.Universe(PSF, DCD)
+
+   # selection of atomgroups
+   selected_residues = u.select_atoms("resid 5-10")
+
+   from MDAnalysis.analysis.bat import BAT
+   R = BAT(selected_residues)
+
+   # Calculate BAT coordinates for a trajectory
+   R.run()
+
+After :meth:`R.run()<BAT.run>`, the coordinates can be accessed with
+:attr:`R.results.bat<BAT.bat>`. The following code snippets assume that the
+previous snippet has been executed.
+
+Reconstruct Cartesian coordinates for the first frame::
+
+   # Reconstruct Cartesian coordinates from BAT coordinates
+   # of the first frame
+   XYZ = R.Cartesian(R.results.bat[0,:])
+
+   # The original and reconstructed Cartesian coordinates should all be close
+   print(np.allclose(XYZ, selected_residues.positions, atol=1e-6))
+
+Change a single torsion angle by :math:`\pi`::
+
+   bat = R.results.bat[0,:]
+   bat[bat.shape[0]-12] += np.pi
+   XYZ = R.Cartesian(bat)
+
+   # A good number of Cartesian coordinates should have been modified
+   np.sum((XYZ - selected_residues.positions)>1E-5)
+
+Store data to the disk and load it again::
+
+   # BAT coordinates can be saved to disk in the numpy binary format
+   R.save('test.npy')
+
+   # The BAT coordinates in a new BAT instance can be loaded from disk
+   # instead of using the run() method.
+   Rnew = BAT(selected_residues, filename='test.npy')
+
+   # The BAT coordinates before and after disk I/O should be close
+   print(np.allclose(Rnew.results.bat, R.results.bat))
+
+
+Analysis classes
+----------------
+ .. autoclass:: BAT
+    :members:
+    :inherited-members:
+
+    .. attribute:: results.bat
+
+        Contains the time series of the Bond-Angle-Torsion coordinates as a
+        (nframes, 3N) :class:`numpy.ndarray` array. Each row corresponds to
+        a frame in the trajectory. In each column, the first six elements
+        describe external degrees of freedom. The first three are the center
+        of mass of the initial atom. The next three specify the  external angles
+        according to the axis-angle convention: :math:`\phi`, the polar angle,
+        :math:`\theta`, the azimuthal angle, and :math:`\omega`, a third angle
+        that describes the rotation of the third atom about the axis. The next
+        three degrees of freedom are internal degrees of freedom for the root
+        atoms: :math:`r_{01}`, the distance between atoms 0 and 1,
+        :math:`r_{12}`, the distance between atoms 1 and 2,
+        and :math:`a_{012}`, the angle between the three atoms.
+        The rest of the array consists of all the other bond distances,
+        all the other bond angles, and then all the other torsion angles.
+
+
+References
+----------
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Chang2003
+    Hikiri2016
+    Minh2020
+
+"""
+import logging
+import warnings
+
+import numpy as np
+import copy
+
+import MDAnalysis as mda
+from .base import AnalysisBase
+
+from MDAnalysis.lib.distances import calc_bonds, calc_angles, calc_dihedrals
+from MDAnalysis.lib.mdamath import make_whole
+
+from ..due import due, Doi
+
+logger = logging.getLogger(__name__)
+
+
+def _sort_atoms_by_mass(atoms, reverse=False):
+    r"""Sorts a list of atoms by name and then by index
+
+    The atom index is used as a tiebreaker so that the ordering is reproducible.
+
+    Parameters
+    ----------
+    ag_o : list of Atoms
+        List to sort
+    reverse : bool
+        Atoms will be in descending order
+
+    Returns
+    -------
+    ag_n : list of Atoms
+        Sorted list
+    """
+    return sorted(atoms, key=lambda a: (a.mass, a.index), reverse=reverse)
+
+
+def _find_torsions(root, atoms):
+    """Constructs a list of torsion angles
+
+    Parameters
+    ----------
+    root : AtomGroup
+        First three atoms in the coordinate system
+    atoms : AtomGroup
+        Atoms that are allowed to be part of the torsion angle
+
+    Returns
+    -------
+    torsions : list of AtomGroup
+        list of AtomGroup objects that define torsion angles
+    """
+    torsions = []
+    selected_atoms = list(root)
+    while len(selected_atoms) < len(atoms):
+        torsionAdded = False
+        for a1 in selected_atoms:
+            # Find a0, which is a new atom connected to the selected atom
+            a0_list = _sort_atoms_by_mass(a for a in a1.bonded_atoms \
+                if (a in atoms) and (a not in selected_atoms))
+            for a0 in a0_list:
+                # Find a2, which is connected to a1, is not a terminal atom,
+                # and has been selected
+                a2_list = _sort_atoms_by_mass(a for a in a1.bonded_atoms \
+                    if (a!=a0) and len(a.bonded_atoms)>1 and \
+                        (a in atoms) and (a in selected_atoms))
+                for a2 in a2_list:
+                    # Find a3, which is
+                    # connected to a2, has been selected, and is not a1
+                    a3_list = _sort_atoms_by_mass(a for a in a2.bonded_atoms \
+                        if (a!=a1) and \
+                            (a in atoms) and (a in selected_atoms))
+                    for a3 in a3_list:
+                        # Add the torsion to the list of torsions
+                        torsions.append(mda.AtomGroup([a0, a1, a2, a3]))
+                        # Add the new atom to selected_atoms
+                        # which extends the loop
+                        selected_atoms.append(a0)
+                        torsionAdded = True
+                        break  # out of the a3 loop
+                    break  # out of the a2 loop
+        if torsionAdded is False:
+            print('Selected atoms:')
+            print([a.index + 1 for a in selected_atoms])
+            print('Torsions found:')
+            print([list(t.indices + 1) for t in torsions])
+            raise ValueError('Additional torsions not found.')
+    return torsions
+
+
+
[docs]class BAT(AnalysisBase): + """Calculate BAT coordinates for the specified AtomGroup. + + Bond-Angle-Torsions (BAT) internal coordinates will be computed for + the group of atoms and all frame in the trajectory belonging to `ag`. + + """ + @due.dcite(Doi("10.1002/jcc.26036"), + description="Bond-Angle-Torsions Coordinate Transformation", + path="MDAnalysis.analysis.bat.BAT") + def __init__(self, ag, initial_atom=None, filename=None, **kwargs): + r"""Parameters + ---------- + ag : AtomGroup or Universe + Group of atoms for which the BAT coordinates are calculated. + `ag` must have a bonds attribute. + If unavailable, bonds may be guessed using + :meth:`AtomGroup.guess_bonds <MDAnalysis.core.groups.AtomGroup.guess_bonds>`. + `ag` must only include one molecule. + If a trajectory is associated with the atoms, then the computation + iterates over the trajectory. + initial_atom : :class:`Atom <MDAnalysis.core.groups.Atom>` + The atom whose Cartesian coordinates define the translation + of the molecule. If not specified, the heaviest terminal atom + will be selected. + filename : str + Name of a numpy binary file containing a saved bat array. + If filename is not ``None``, the data will be loaded from this file + instead of being recalculated using the run() method. + + Raises + ------ + AttributeError + If `ag` does not contain a bonds attribute + ValueError + If `ag` contains more than one molecule + + """ + super(BAT, self).__init__(ag.universe.trajectory, **kwargs) + self._ag = ag + + # Check that the ag contains bonds + if not hasattr(self._ag, 'bonds'): + raise AttributeError('AtomGroup has no attribute bonds') + if len(self._ag.fragments) > 1: + raise ValueError('AtomGroup has more than one molecule') + + # Determine the root + # The initial atom must be a terminal atom + terminal_atoms = _sort_atoms_by_mass(\ + [a for a in self._ag.atoms if len(a.bonds)==1], reverse=True) + if (initial_atom is None): + # Select the heaviest root atoms from the heaviest terminal atom + initial_atom = terminal_atoms[0] + elif (not initial_atom in terminal_atoms): + raise ValueError('Initial atom is not a terminal atom') + # The next atom in the root is bonded to the initial atom + # Since the initial atom is a terminal atom, there is only + # one bonded atom + second_atom = initial_atom.bonded_atoms[0] + # The last atom in the root is the heaviest atom + # bonded to the second atom + # If there are more than three atoms, + # then the last atom cannot be a terminal atom. + if self._ag.n_atoms != 3: + third_atom = _sort_atoms_by_mass(\ + [a for a in second_atom.bonded_atoms \ + if (a in self._ag) and (a!=initial_atom) \ + and (a not in terminal_atoms)], \ + reverse=True)[0] + else: + third_atom = _sort_atoms_by_mass(\ + [a for a in second_atom.bonded_atoms \ + if (a in self._ag) and (a!=initial_atom)], \ + reverse=True)[0] + self._root = mda.AtomGroup([initial_atom, second_atom, third_atom]) + + # Construct a list of torsion angles + self._torsions = _find_torsions(self._root, self._ag) + + # Get indices of the root and torsion atoms + # in a Cartesian positions array that matches the AtomGroup + self._root_XYZ_inds = [(self._ag.indices==a.index).nonzero()[0][0] \ + for a in self._root] + self._torsion_XYZ_inds = [[(self._ag.indices==a.index).nonzero()[0][0] \ + for a in t] for t in self._torsions] + + # The primary torsion is the first torsion on the list + # with the same central atoms + prior_atoms = [sorted([a1, a2]) for (a0, a1, a2, a3) in self._torsions] + self._primary_torsion_indices = [prior_atoms.index(prior_atoms[n]) \ + for n in range(len(prior_atoms))] + self._unique_primary_torsion_indices = \ + list(set(self._primary_torsion_indices)) + + self._ag1 = mda.AtomGroup([ag[0] for ag in self._torsions]) + self._ag2 = mda.AtomGroup([ag[1] for ag in self._torsions]) + self._ag3 = mda.AtomGroup([ag[2] for ag in self._torsions]) + self._ag4 = mda.AtomGroup([ag[3] for ag in self._torsions]) + + if filename is not None: + self.load(filename) + + def _prepare(self): + self.results.bat = np.zeros( + (self.n_frames, 3*self._ag.n_atoms), dtype=np.float64) + + def _single_frame(self): + # Calculate coordinates based on the root atoms + # The rotation axis is a normalized vector pointing from atom 0 to 1 + # It is described in two degrees of freedom + # by the polar angle and azimuth + if self._root.dimensions is None: + (p0, p1, p2) = self._root.positions + else: + (p0, p1, p2) = make_whole(self._root, inplace=False) + v01 = p1 - p0 + v21 = p1 - p2 + # Internal coordinates + r01 = np.sqrt(np.einsum('i,i->',v01,v01)) + # Distance between first two root atoms + r12 = np.sqrt(np.einsum('i,i->',v21,v21)) + # Distance between second two root atoms + # Angle between root atoms + a012 = np.arccos(max(-1.,min(1.,np.einsum('i,i->',v01,v21)/\ + np.sqrt(np.einsum('i,i->',v01,v01)*np.einsum('i,i->',v21,v21))))) + # External coordinates + e = v01 / r01 + phi = np.arctan2(e[1], e[0]) # Polar angle + theta = np.arccos(e[2]) # Azimuthal angle + # Rotation to the z axis + cp = np.cos(phi) + sp = np.sin(phi) + ct = np.cos(theta) + st = np.sin(theta) + Rz = np.array([[cp * ct, ct * sp, -st], [-sp, cp, 0], + [cp * st, sp * st, ct]]) + pos2 = Rz.dot(p2 - p1) + # Angle about the rotation axis + omega = np.arctan2(pos2[1], pos2[0]) + root_based = np.concatenate((p0, [phi, theta, omega, r01, r12, a012])) + + # Calculate internal coordinates from the torsion list + bonds = calc_bonds(self._ag1.positions, + self._ag2.positions, + box=self._ag1.dimensions) + angles = calc_angles(self._ag1.positions, + self._ag2.positions, + self._ag3.positions, + box=self._ag1.dimensions) + torsions = calc_dihedrals(self._ag1.positions, + self._ag2.positions, + self._ag3.positions, + self._ag4.positions, + box=self._ag1.dimensions) + # When appropriate, calculate improper torsions + shift = torsions[self._primary_torsion_indices] + shift[self._unique_primary_torsion_indices] = 0. + torsions -= shift + # Wrap torsions to between -np.pi and np.pi + torsions = ((torsions + np.pi) % (2 * np.pi)) - np.pi + + self.results.bat[self._frame_index, :] = np.concatenate( + (root_based, bonds, angles, torsions)) + +
[docs] def load(self, filename, start=None, stop=None, step=None): + """Loads the bat trajectory from a file in numpy binary format + + Parameters + ---------- + filename : str + name of numpy binary file + 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 + + See Also + -------- + save: Saves the bat trajectory in a file in numpy binary format + """ + logger.info("Choosing frames") + self._setup_frames(self._trajectory, start, stop, step) + + logger.info("Loading file") + self.results.bat = np.load(filename) + + # Check array dimensions + if self.results.bat.shape != (self.n_frames, 3*self._ag.n_atoms): + errmsg = ('Dimensions of array in loaded file, ' + f'({self.results.bat.shape[0]},' + f'{self.results.bat.shape[1]}), differ from required ' + f'dimensions of ({self.n_frames, 3*self._ag.n_atoms})') + raise ValueError(errmsg) + # Check position of initial atom + if (self.results.bat[0, :3] != self._root[0].position).any(): + raise ValueError('Position of initial atom in file ' + \ + 'inconsistent with current trajectory in starting frame.') + return self
+ +
[docs] def save(self, filename): + """Saves the bat trajectory in a file in numpy binary format + + See Also + -------- + load: Loads the bat trajectory from a file in numpy binary format + """ + np.save(filename, self.results.bat)
+ +
[docs] def Cartesian(self, bat_frame): + """Conversion of a single frame from BAT to Cartesian coordinates + + One application of this function is to determine the new + Cartesian coordinates after modifying a specific torsion angle. + + Parameters + ---------- + bat_frame : numpy.ndarray + an array with dimensions (3N,) with external then internal + degrees of freedom based on the root atoms, followed by the bond, + angle, and (proper and improper) torsion coordinates. + + Returns + ------- + XYZ : numpy.ndarray + an array with dimensions (N,3) with Cartesian coordinates. The first + dimension has the same ordering as the AtomGroup used to initialize + the class. The molecule will be whole opposed to wrapped around a + periodic boundary. + """ + # Split the bat vector into more convenient variables + origin = bat_frame[:3] + (phi, theta, omega) = bat_frame[3:6] + (r01, r12, a012) = bat_frame[6:9] + n_torsions = (self._ag.n_atoms - 3) + bonds = bat_frame[9:n_torsions + 9] + angles = bat_frame[n_torsions + 9:2 * n_torsions + 9] + torsions = copy.deepcopy(bat_frame[2 * n_torsions + 9:]) + # When appropriate, convert improper to proper torsions + shift = torsions[self._primary_torsion_indices] + shift[self._unique_primary_torsion_indices] = 0. + torsions += shift + # Wrap torsions to between -np.pi and np.pi + torsions = ((torsions + np.pi) % (2 * np.pi)) - np.pi + + # Set initial root atom positions based on internal coordinates + p0 = np.array([0., 0., 0.]) + p1 = np.array([0., 0., r01]) + p2 = np.array([r12 * np.sin(a012), 0., r01 - r12 * np.cos(a012)]) + + # Rotate the third atom by the appropriate value + co = np.cos(omega) + so = np.sin(omega) + # $R_Z(\omega)$ + Romega = np.array([[co, -so, 0], [so, co, 0], [0, 0, 1]]) + p2 = Romega.dot(p2) + # Rotate the second two atoms to point in the right direction + cp = np.cos(phi) + sp = np.sin(phi) + ct = np.cos(theta) + st = np.sin(theta) + # $R_Z(\phi) R_Y(\theta)$ + Re = np.array([[cp * ct, -sp, cp * st], [ct * sp, cp, sp * st], + [-st, 0, ct]]) + p1 = Re.dot(p1) + p2 = Re.dot(p2) + # Translate the first three atoms by the origin + p0 += origin + p1 += origin + p2 += origin + + XYZ = np.zeros((self._ag.n_atoms, 3)) + XYZ[self._root_XYZ_inds[0]] = p0 + XYZ[self._root_XYZ_inds[1]] = p1 + XYZ[self._root_XYZ_inds[2]] = p2 + + # Place the remaining atoms + for ((a0,a1,a2,a3), r01, angle, torsion) \ + in zip(self._torsion_XYZ_inds, bonds, angles, torsions): + + p1 = XYZ[a1] + p3 = XYZ[a3] + p2 = XYZ[a2] + + sn_ang = np.sin(angle) + cs_ang = np.cos(angle) + sn_tor = np.sin(torsion) + cs_tor = np.cos(torsion) + + v21 = p1 - p2 + v21 /= np.sqrt(np.einsum('i,i->',v21,v21)) + v32 = p2 - p3 + v32 /= np.sqrt(np.einsum('i,i->',v32,v32)) + + vp = np.cross(v32, v21) + cs = np.einsum('i,i->',v21,v32) + + sn = max(np.sqrt(1.0 - cs * cs), 0.0000000001) + vp = vp / sn + vu = np.cross(vp, v21) + + XYZ[a0] = p1 + \ + r01*(vu*sn_ang*cs_tor + vp*sn_ang*sn_tor - v21*cs_ang) + return XYZ
+ + @property + def atoms(self): + """The atomgroup for which BAT are computed (read-only property)""" + return self._ag
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/contacts.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/contacts.html new file mode 100644 index 0000000000..9ac83f500c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/contacts.html @@ -0,0 +1,701 @@ + + + + + + MDAnalysis.analysis.contacts — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.contacts

+# -*- 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-2017 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
+#
+
+"""
+Native contacts analysis --- :mod:`MDAnalysis.analysis.contacts`
+================================================================
+
+This module contains classes to analyze native contacts *Q* over a
+trajectory. Native contacts of a conformation are contacts that exist
+in a reference structure and in the conformation. Contacts in the
+reference structure are always defined as being closer than a distance
+`radius`. The fraction of native contacts for a conformation can be
+calculated in different ways. This module supports 3 different metrics
+listed below, as well as custom metrics.
+
+1. *Hard Cut*: To count as a contact the atoms *i* and *j* have to be at least
+   as close as in the reference structure.
+
+2. *Soft Cut*: The atom pair *i* and *j* is assigned based on a soft potential
+   that is 1 if the distance is 0, 1/2 if the distance is the same as in
+   the reference and 0 for large distances. For the exact definition of the
+   potential and parameters have a look at function :func:`soft_cut_q`.
+
+3. *Radius Cut*: To count as a contact the atoms *i* and *j* cannot be further
+   apart than some distance `radius`.
+
+The "fraction of native contacts" *Q(t)* is a number between 0 and 1 and
+calculated as the total number of native contacts for a given time frame
+divided by the total number of contacts in the reference structure.
+
+
+Examples for contact analysis
+-----------------------------
+
+One-dimensional contact analysis
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+As an example we analyze the opening ("unzipping") of salt bridges
+when the AdK enzyme opens up; this is one of the example trajectories
+in MDAnalysis. ::
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+    import MDAnalysis as mda
+    from MDAnalysis.analysis import contacts
+    from MDAnalysis.tests.datafiles import PSF,DCD
+    # example trajectory (transition of AdK from closed to open)
+    u = mda.Universe(PSF,DCD)
+    # crude definition of salt bridges as contacts between NH/NZ in ARG/LYS and
+    # OE*/OD* in ASP/GLU. You might want to think a little bit harder about the
+    # problem before using this for real work.
+    sel_basic = "(resname ARG LYS) and (name NH* NZ)"
+    sel_acidic = "(resname ASP GLU) and (name OE* OD*)"
+    # reference groups (first frame of the trajectory, but you could also use a
+    # separate PDB, eg crystal structure)
+    acidic = u.select_atoms(sel_acidic)
+    basic = u.select_atoms(sel_basic)
+    # set up analysis of native contacts ("salt bridges"); salt bridges have a
+    # distance <6 A
+    ca1 = contacts.Contacts(u, select=(sel_acidic, sel_basic),
+                            refgroup=(acidic, basic), radius=6.0)
+    # iterate through trajectory and perform analysis of "native contacts" Q
+    ca1.run()
+    # print number of averave contacts
+    average_contacts = np.mean(ca1.results.timeseries[:, 1])
+    print('average contacts = {}'.format(average_contacts))
+    # plot time series q(t)
+    fig, ax = plt.subplots()
+    ax.plot(ca1.results.timeseries[:, 0], ca1.results.timeseries[:, 1])
+    ax.set(xlabel='frame', ylabel='fraction of native contacts',
+           title='Native Contacts, average = {:.2f}'.format(average_contacts))
+    fig.show()
+
+
+The first graph shows that when AdK opens, about 20% of the salt
+bridges that existed in the closed state disappear when the enzyme
+opens. They open in a step-wise fashion (made more clear by the movie
+`AdK_zipper_cartoon.avi`_).
+
+.. _`AdK_zipper_cartoon.avi`:
+   http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2803350/bin/NIHMS150766-supplement-03.avi
+
+.. rubric:: Notes
+
+Suggested cutoff distances for different simulations
+
+* For all-atom simulations, cutoff = 4.5 Å
+* For coarse-grained simulations, cutoff = 6.0 Å
+
+
+Two-dimensional contact analysis (q1-q2)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Analyze a single DIMS transition of AdK between its closed and open
+conformation and plot the trajectory projected on q1-q2
+:cite:p:`Franklin2007` ::
+
+
+    import MDAnalysis as mda
+    from MDAnalysis.analysis import contacts
+    from MDAnalysisTests.datafiles import PSF, DCD
+    u = mda.Universe(PSF, DCD)
+    q1q2 = contacts.q1q2(u, 'name CA', radius=8)
+    q1q2.run()
+
+    f, ax = plt.subplots(1, 2, figsize=plt.figaspect(0.5))
+    ax[0].plot(q1q2.results.timeseries[:, 0], q1q2.results.timeseries[:, 1],
+               label='q1')
+    ax[0].plot(q1q2.results.timeseries[:, 0], q1q2.results.timeseries[:, 2],
+               label='q2')
+    ax[0].legend(loc='best')
+    ax[1].plot(q1q2.results.timeseries[:, 1],
+               q1q2.results.timeseries[:, 2], '.-')
+    f.show()
+
+Compare the resulting pathway to the `MinActionPath result for AdK`_
+:cite:p:`Franklin2007`.
+
+.. _MinActionPath result for AdK:
+   http://lorentz.dynstr.pasteur.fr/joel/adenylate.php
+
+
+Writing your own contact analysis
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`Contacts` class has been designed to be extensible for your own
+analysis. As an example we will analyze when the acidic and basic groups of AdK
+are in contact which each other; this means that at least one of the contacts
+formed in the reference is closer than 2.5 Å.
+
+For this we define a new function to determine if any contact is closer than
+2.5 Å; this function must implement the API prescribed by :class:`Contacts`::
+
+    def is_any_closer(r, r0, dist=2.5):
+        return np.any(r < dist)
+
+The first two parameters `r` and `r0` are provided by :class:`Contacts` when it
+calls :func:`is_any_closer` while the others can be passed as keyword args
+using the `kwargs` parameter in :class:`Contacts`.
+
+Next we are creating an instance of the :class:`Contacts` class and use the
+:func:`is_any_closer` function as an argument to `method` and run the analysis::
+
+    # crude definition of salt bridges as contacts between NH/NZ in ARG/LYS and
+    # OE*/OD* in ASP/GLU. You might want to think a little bit harder about the
+    # problem before using this for real work.
+    sel_basic = "(resname ARG LYS) and (name NH* NZ)"
+    sel_acidic = "(resname ASP GLU) and (name OE* OD*)"
+
+    # reference groups (first frame of the trajectory, but you could also use a
+    # separate PDB, eg crystal structure)
+    acidic = u.select_atoms(sel_acidic)
+    basic = u.select_atoms(sel_basic)
+
+    nc = contacts.Contacts(u, select=(sel_acidic, sel_basic),
+                           method=is_any_closer,
+                           refgroup=(acidic, basic), kwargs={'dist': 2.5})
+    nc.run()
+
+    bound = nc.results.timeseries[:, 1]
+    frames = nc.results.timeseries[:, 0]
+
+    f, ax = plt.subplots()
+
+    ax.plot(frames, bound, '.')
+    ax.set(xlabel='frame', ylabel='is Bound',
+           ylim=(-0.1, 1.1))
+
+    f.show()
+
+
+Functions
+---------
+
+.. autofunction:: hard_cut_q
+.. autofunction:: soft_cut_q
+.. autofunction:: radius_cut_q
+.. autofunction:: contact_matrix
+.. autofunction:: q1q2
+
+Classes
+-------
+
+.. autoclass:: Contacts
+   :members:
+
+"""
+import os
+import errno
+import warnings
+import bz2
+import functools
+
+import numpy as np
+
+import logging
+
+import MDAnalysis
+import MDAnalysis.lib.distances
+from MDAnalysis.lib.util import openany
+from MDAnalysis.analysis.distances import distance_array
+from MDAnalysis.core.groups import AtomGroup, UpdatingAtomGroup
+from .base import AnalysisBase
+
+logger = logging.getLogger("MDAnalysis.analysis.contacts")
+
+
+
[docs]def soft_cut_q(r, r0, beta=5.0, lambda_constant=1.8): + r"""Calculate fraction of native contacts *Q* for a soft cut off + + The native contact function is defined as :cite:p:`Best2013` + + .. math:: + + Q(r, r_0) = \frac{1}{1 + e^{\beta (r - \lambda r_0)}} + + Reasonable values for different simulation types are + + - *All Atom*: `lambda_constant = 1.8` (unitless) + - *Coarse Grained*: `lambda_constant = 1.5` (unitless) + + Parameters + ---------- + r: array + Contact distances at time t + r0: array + Contact distances at time t=0, reference distances + beta: float (default 5.0 Angstrom) + Softness of the switching function + lambda_constant: float (default 1.8, unitless) + Reference distance tolerance + + Returns + ------- + Q : float + fraction of native contacts + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + Best2013 + """ + r = np.asarray(r) + r0 = np.asarray(r0) + result = 1/(1 + np.exp(beta*(r - lambda_constant * r0))) + + return result.sum() / len(r0)
+ + +
[docs]def hard_cut_q(r, cutoff): + """Calculate fraction of native contacts *Q* for a hard cut off. + + The cutoff can either be a float or a :class:`~numpy.ndarray` of the same + shape as `r`. + + Parameters + ---------- + r : ndarray + distance matrix + cutoff : ndarray | float + cut off value to count distances. Can either be a float of a ndarray of + the same size as distances + + Returns + ------- + Q : float + fraction of contacts + + """ + r = np.asarray(r) + cutoff = np.asarray(cutoff) + y = r <= cutoff + return y.sum() / r.size
+ + +
[docs]def radius_cut_q(r, r0, radius): + """calculate native contacts *Q* based on the single distance radius. + + Parameters + ---------- + r : ndarray + distance array between atoms + r0 : ndarray + unused to fullfill :class:`Contacts` API + radius : float + Distance between atoms at which a contact is formed + + Returns + ------- + Q : float + fraction of contacts + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + Franklin2007 + + """ + return hard_cut_q(r, radius)
+ + +
[docs]def contact_matrix(d, radius, out=None): + """calculate contacts from distance matrix + + Parameters + ---------- + d : array-like + distance matrix + radius : float + distance below which a contact is formed. + out : array (optional) + If `out` is supplied as a pre-allocated array of the correct + shape then it is filled instead of allocating a new one in + order to increase performance. + + Returns + ------- + contacts : ndarray + boolean array of formed contacts + """ + if out is not None: + out[:] = d <= radius + else: + out = d <= radius + return out
+ + +
[docs]class Contacts(AnalysisBase): + """Calculate contacts based observables. + + The standard methods used in this class calculate the fraction of native + contacts *Q* from a trajectory. + + + .. rubric:: Contact API + + By defining your own method it is possible to calculate other observables + that only depend on the distances and a possible reference distance. The + **Contact API** prescribes that this method must be a function with call + signature ``func(r, r0, **kwargs)`` and must be provided in the keyword + argument `method`. + + Attributes + ---------- + results.timeseries : numpy.ndarray + 2D array containing *Q* for all refgroup pairs and analyzed frames + + timeseries : numpy.ndarray + Alias to the :attr:`results.timeseries` attribute. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.timeseries` instead. + + + .. versionchanged:: 1.0.0 + ``save()`` method has been removed. Use ``np.savetxt()`` on + :attr:`Contacts.results.timeseries` instead. + .. versionchanged:: 1.0.0 + added ``pbc`` attribute to calculate distances using PBC. + .. versionchanged:: 2.0.0 + :attr:`timeseries` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + .. versionchanged:: 2.2.0 + :class:`Contacts` accepts both AtomGroup and string for `select` + """ + + def __init__(self, u, select, refgroup, method="hard_cut", radius=4.5, + pbc=True, kwargs=None, **basekwargs): + """ + Parameters + ---------- + u : Universe + trajectory + select : tuple(AtomGroup, AtomGroup) | tuple(string, string) + two contacting groups that change over time + refgroup : tuple(AtomGroup, AtomGroup) + two contacting atomgroups in their reference conformation. This + can also be a list of tuples containing different atom groups + radius : float, optional (4.5 Angstroms) + radius within which contacts exist in refgroup + method : string | callable (optional) + Can either be one of ``['hard_cut' , 'soft_cut', 'radius_cut']`` or a callable + with call signature ``func(r, r0, **kwargs)`` (the "Contacts API"). + pbc : bool (optional) + Uses periodic boundary conditions to calculate distances if set to ``True``; the + default is ``True``. + kwargs : dict, optional + dictionary of additional kwargs passed to `method`. Check + respective functions for reasonable values. + verbose : bool (optional) + Show detailed progress of the calculation if set to ``True``; the + default is ``False``. + + Notes + ----- + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + """ + self.u = u + super(Contacts, self).__init__(self.u.trajectory, **basekwargs) + + self.fraction_kwargs = kwargs if kwargs is not None else {} + + if method == 'hard_cut': + self.fraction_contacts = hard_cut_q + elif method == 'soft_cut': + self.fraction_contacts = soft_cut_q + elif method == 'radius_cut': + self.fraction_contacts = functools.partial(radius_cut_q, radius=radius) + else: + if not callable(method): + raise ValueError("method has to be callable") + self.fraction_contacts = method + + self.select = select + + self.grA, self.grB = (self._get_atomgroup(u, sel) for sel in select) + + self.pbc = pbc + + # contacts formed in reference + self.r0 = [] + self.initial_contacts = [] + + #get dimension of box if pbc set to True + if self.pbc: + self._get_box = lambda ts: ts.dimensions + else: + self._get_box = lambda ts: None + + if isinstance(refgroup[0], AtomGroup): + refA, refB = refgroup + self.r0.append(distance_array(refA.positions, refB.positions, + box=self._get_box(refA.universe))) + self.initial_contacts.append(contact_matrix(self.r0[-1], radius)) + + else: + for refA, refB in refgroup: + self.r0.append(distance_array(refA.positions, refB.positions, + box=self._get_box(refA.universe))) + self.initial_contacts.append(contact_matrix(self.r0[-1], radius)) + + @staticmethod + def _get_atomgroup(u, sel): + select_error_message = ("selection must be either string or a " + "static AtomGroup. Updating AtomGroups " + "are not supported.") + if isinstance(sel, str): + return u.select_atoms(sel) + elif isinstance(sel, AtomGroup): + if isinstance(sel, UpdatingAtomGroup): + raise TypeError(select_error_message) + else: + return sel + else: + raise TypeError(select_error_message) + + def _prepare(self): + self.results.timeseries = np.empty((self.n_frames, len(self.r0)+1)) + + def _single_frame(self): + self.results.timeseries[self._frame_index][0] = self._ts.frame + + # compute distance array for a frame + d = distance_array(self.grA.positions, self.grB.positions, + box=self._get_box(self._ts)) + + for i, (initial_contacts, r0) in enumerate(zip(self.initial_contacts, + self.r0), 1): + # select only the contacts that were formed in the reference state + r = d[initial_contacts] + r0 = r0[initial_contacts] + q = self.fraction_contacts(r, r0, **self.fraction_kwargs) + self.results.timeseries[self._frame_index][i] = q + + @property + def timeseries(self): + wmsg = ("The `timeseries` attribute was deprecated in MDAnalysis " + "2.0.0 and will be removed in MDAnalysis 3.0.0. Please use " + "`results.timeseries` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.timeseries
+ + +def _new_selections(u_orig, selections, frame): + """create stand alone AGs from selections at frame""" + u = MDAnalysis.Universe(u_orig.filename, u_orig.trajectory.filename) + u.trajectory[frame] + return [u.select_atoms(s) for s in selections] + + +
[docs]def q1q2(u, select='all', radius=4.5): + """Perform a q1-q2 analysis. + + Compares native contacts between the starting structure and final structure + of a trajectory :cite:p:`Franklin2007`. + + Parameters + ---------- + u : Universe + Universe with a trajectory + select : string, optional + atoms to do analysis on + radius : float, optional + distance at which contact is formed + + Returns + ------- + contacts : :class:`Contacts` + Contact Analysis that is set up for a q1-q2 analysis + + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + Support for setting ``start``, ``stop``, and ``step`` has been removed. + These should now be directly passed to :meth:`Contacts.run`. + """ + selection = (select, select) + first_frame_refs = _new_selections(u, selection, 0) + last_frame_refs = _new_selections(u, selection, -1) + return Contacts(u, selection, + (first_frame_refs, last_frame_refs), + radius=radius, method='radius_cut')
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/density.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/density.html new file mode 100644 index 0000000000..59920d3da1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/density.html @@ -0,0 +1,1038 @@ + + + + + + MDAnalysis.analysis.density — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.density

+# -*- 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-2017 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
+#
+
+# MDAnalysis -- density analysis
+# Copyright (c) 2007-2011 Oliver Beckstein <orbeckst@gmail.com>
+# (based on code from Hop --- a framework to analyze solvation dynamics from MD simulations)
+
+r"""Generating densities from trajectories --- :mod:`MDAnalysis.analysis.density`
+=============================================================================
+
+:Author: Oliver Beckstein
+:Year: 2011
+:Copyright: GNU Public License v3
+
+The module provides classes and functions to generate and represent
+volumetric data, in particular densities.
+
+
+.. versionchanged:: 2.0.0
+   Deprecated :func:`density_from_Universe`, :func:`density_from_PDB`, and
+   :func:`Bfactor2RMSF` have now been removed.
+
+
+Generating a density from a MD trajectory
+-----------------------------------------
+
+A common use case is to analyze the solvent density around a protein of
+interest. The density is calculated with :class:`DensityAnalysis` in the
+fixed coordinate system of the simulation unit cell. It is therefore necessary
+to orient and fix the protein with respect to the box coordinate system. In
+practice this means centering and superimposing the protein, frame by frame, on
+a reference structure and translating and rotating all other components of the
+simulation with the protein. In this way, the solvent will appear in the
+reference frame of the protein.
+
+An input trajectory must
+
+1. have been centered on the protein of interest;
+2. have all molecules made whole that have been broken across periodic
+   boundaries [#pbc]_;
+3. have the solvent molecules remapped so that they are closest to the
+   solute (this is important when using triclinic unit cells such as
+   a dodecahedron or a truncated octahedron) [#pbc]_.
+4. have a fixed frame of reference; for instance, by superimposing a protein
+   on a reference structure so that one can study the solvent density around
+   it [#fit]_.
+
+To generate the density of water molecules around a protein (assuming that the
+trajectory is already appropriately treated for periodic boundary artifacts and
+is suitably superimposed to provide a fixed reference frame) [#testraj]_ ::
+
+  from MDAnalysis.analysis.density import DensityAnalysis
+  u = Universe(TPR, XTC)
+  ow = u.select_atoms("name OW")
+  D = DensityAnalysis(ow, delta=1.0)
+  D.run()
+  D.results.density.convert_density('TIP4P')
+  D.results.density.export("water.dx", type="double")
+
+The positions of all water oxygens (the :class:`AtomGroup` `ow`) are
+histogrammed on a grid with spacing *delta* = 1 Å. Initially the density is
+measured in :math:`\text{Å}^{-3}`. With the :meth:`Density.convert_density`
+method, the units of measurement are changed. In the example we are now
+measuring the density relative to the literature value of the TIP4P water model
+at ambient conditions (see the values in :data:`MDAnalysis.units.water` for
+details). Finally, the density is written as an OpenDX_ compatible file that
+can be read in VMD_, Chimera_, or PyMOL_.
+
+The :class:`Density` object is accessible as the
+:attr:`DensityAnalysis.results.density` attribute.  In particular, the data
+for the density is stored as a NumPy array in :attr:`Density.grid`, which can
+be processed in any manner.
+
+
+Creating densities
+------------------
+
+The :class:`DensityAnalysis` class generates a :class:`Density` from an
+atomgroup.
+
+.. autoclass:: DensityAnalysis
+   :members:
+   :inherited-members: run
+
+   .. automethod:: _set_user_grid
+
+
+Density object
+--------------
+
+The main output of the density creation functions is a :class:`Density`
+instance, which is derived from a :class:`gridData.core.Grid`. A
+:class:`Density` is essentially a 3D array with origin and lengths.
+
+.. See Also:: :mod:`gridData`
+
+
+.. autoclass:: Density
+   :members:
+   :inherited-members:
+   :show-inheritance:
+
+
+
+.. rubric:: Footnotes
+
+.. [#pbc] Making molecules whole can be accomplished with the
+          :meth:`MDAnalysis.core.groups.AtomGroup.wrap` of
+          :attr:`Universe.atoms` (use ``compound="fragments"``).  or the
+          PBC-wrapping transformations in
+          :mod:`MDAnalysis.transformations.wrap`.
+
+.. [#fit] Superposition can be performed with
+          :class:`MDAnalysis.analysis.align.AlignTraj` or the fitting
+          transformations in :mod:`MDAnalysis.transformations.fit`.
+
+.. [#testraj] Note that the trajectory in the example (`XTC`) is *not*
+              properly made whole and fitted to a reference structure;
+              these steps were omitted to clearly show the steps necessary
+              for the actual density calculation.
+
+.. Links
+.. -----
+
+.. _OpenDX: http://www.opendx.org/
+.. _VMD:   http://www.ks.uiuc.edu/Research/vmd/
+.. _Chimera: https://www.cgl.ucsf.edu/chimera/
+.. _PyMOL: http://www.pymol.org/
+.. _Gromacs: http://www.gromacs.org
+.. _`gmx trjconv`: http://manual.gromacs.org/programs/gmx-trjconv.html
+
+"""
+import numpy as np
+import sys
+import os
+import os.path
+import errno
+import warnings
+
+from gridData import Grid
+
+import MDAnalysis
+from MDAnalysis.core import groups
+from MDAnalysis.lib.util import (fixedwidth_bins, iterable, asiterable,
+                                 deprecate,)
+from MDAnalysis.lib import NeighborSearch as NS
+from MDAnalysis import NoDataError, MissingDataWarning
+from .. import units
+from ..lib import distances
+from MDAnalysis.lib.log import ProgressBar
+
+from .base import AnalysisBase
+
+import logging
+
+logger = logging.getLogger("MDAnalysis.analysis.density")
+
+
+
[docs]class DensityAnalysis(AnalysisBase): + r"""Volumetric density analysis. + + The trajectory is read, frame by frame, and the atoms in `atomgroup` are + histogrammed on a 3D grid with spacing `delta`. + + Parameters + ---------- + atomgroup : AtomGroup or UpdatingAtomGroup + Group of atoms (such as all the water oxygen atoms) being analyzed. + This can be an :class:`~MDAnalysis.core.groups.UpdatingAtomGroup` for + selections that change every time step. + delta : float (optional) + Bin size for the density grid in ångström (same in x,y,z). + padding : float (optional) + Increase histogram dimensions by padding (on top of initial box + size) in ångström. Padding is ignored when setting a user defined + grid. + gridcenter : numpy ndarray, float32 (optional) + 3 element numpy array detailing the x, y and z coordinates of the + center of a user defined grid box in ångström. + xdim : float (optional) + User defined x dimension box edge in ångström. + ydim : float (optional) + User defined y dimension box edge in ångström. + zdim : float (optional) + User defined z dimension box edge in ångström. + + Attributes + ---------- + results.density : :class:`Density` + A :class:`Density` instance containing a physical density of units + :math:`Angstrom^{-3}`. + + After the analysis (see the :meth:`~DensityAnalysis.run` method), + the resulting density is stored in the :attr:`results.density` + attribute as a :class:`Density` instance. Note: this replaces the + now deprecated :attr:`density` attribute. + + density : :class:`Density` + Alias to the :attr:`results.density`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.density` instead. + + Raises + ------ + ValueError + if AtomGroup is empty and no user defined grid is provided, or + if the user defined grid is not or incorrectly provided + UserWarning + if AtomGroup is empty and a user defined grid is provided + + + See Also + -------- + pmda.density.DensityAnalysis + A parallel version of :class:`DensityAnalysis` + + Notes + ----- + If the `gridcenter` and `x/y/zdim` arguments are not provided, + :class:`DensityAnalysis` will attempt to automatically generate + a gridbox from the atoms in 'atomgroup' (See Examples). + + Normal :class:`AtomGroup` instances represent a static selection of + atoms. If you want *dynamically changing selections* (such as "name OW and + around 4.0 (protein and not name H*)", i.e., the water oxygen atoms that + are within 4 Å of the protein heavy atoms) then create an + :class:`~MDAnalysis.core.groups.UpdatingAtomGroup` (see Examples). + + :class:`DensityAnalysis` will fail when the :class:`AtomGroup` instance + does not contain any selection of atoms, even when `updating` is set to + ``True``. In such a situation, user defined box limits can be provided to + generate a `Density`. Although, it remains the user's responsibility + to ensure that the provided grid limits encompass atoms to be selected + on all trajectory frames. + + Examples + -------- + A common use case is to analyze the solvent density around a protein of + interest. The density is calculated with :class:`DensityAnalysis` in the + fixed coordinate system of the simulation unit cell. It is therefore + necessary to orient and fix the protein with respect to the box coordinate + system. In practice this means centering and superimposing the protein, + frame by frame, on a reference structure and translating and rotating all + other components of the simulation with the protein. In this way, the + solvent will appear in the reference frame of the protein. + + An input trajectory must + + 1. have been centered on the protein of interest; + 2. have all molecules made whole that have been broken across periodic + boundaries [#pbc]_; + 3. have the solvent molecules remapped so that they are closest to the + solute (this is important when using triclinic unit cells such as + a dodecahedron or a truncated octahedron) [#pbc]_; + 4. have a fixed frame of reference; for instance, by superimposing a + protein on a reference structure so that one can study the solvent + density around it [#fit]_. + + .. rubric:: Generate the density + + To generate the density of water molecules around a protein (assuming that + the trajectory is already appropriately treated for periodic boundary + artifacts and is suitably superimposed to provide a fixed reference frame) + [#testraj]_, first create the :class:`DensityAnalysis` object by + supplying an AtomGroup, then use the :meth:`run` method:: + + from MDAnalysis.analysis import density + u = Universe(TPR, XTC) + ow = u.select_atoms("name OW") + D = density.DensityAnalysis(ow, delta=1.0) + D.run() + D.results.density.convert_density('TIP4P') + + The positions of all water oxygens are histogrammed on a grid with spacing + *delta* = 1 Å and stored as a :class:`Density` object in the attribute + :attr:`DensityAnalysis.results.density`. + + .. rubric:: Working with a density + + A :class:`Density` contains a large number of methods and attributes that + are listed in the documentation. Here we use the + :meth:`Density.convert_density` to convert the density from inverse cubic + ångström to a density relative to the bulk density of TIP4P water at + standard conditions. (MDAnalysis stores a number of literature values in + :data:`MDAnalysis.units.water`.) + + One can directly access the density as a 3D NumPy array through + :attr:`Density.grid`. + + By default, the :class:`Density` object returned contains a physical + density in units of Å\ :sup:`-3`. If you are interested in recovering the + underlying **probability density**, simply divide by the sum:: + + probability_density = D.results.density.grid / D.results.density.grid.sum() + + Similarly, if you would like to recover a grid containing a **histogram of + atom counts**, simply multiply by the volume `dV` of each bin (or voxel); + in this case you need to ensure that the physical density is measured in + Å\ :sup:`-3` by converting it:: + + import numpy as np + + # ensure that the density is A^{-3} + D.results.density.convert_density("A^{-3}") + + dV = np.prod(D.results.density.delta) + atom_count_histogram = D.results.density.grid * dV + + + .. rubric:: Writing the density to a file + + A density can be `exported to different formats + <https://www.mdanalysis.org/GridDataFormats/gridData/formats.html>`_ with + :meth:`Density.export` (thanks to the fact that :class:`Density` is a + subclass :class:`gridData.core.Grid`, which provides the functionality). + For example, to `write a DX file + <https://www.mdanalysis.org/GridDataFormats/gridData/basic.html#writing-out-data>`_ + ``water.dx`` that can be read with VMD, PyMOL, or Chimera:: + + D.results.density.export("water.dx", type="double") + + + .. rubric:: Example: Water density in the whole simulation + + Basic use for creating a water density (just using the water oxygen + atoms "OW"):: + + D = DensityAnalysis(universe.select_atoms('name OW')).run() + + + .. rubric:: Example: Water in a binding site (updating selection) + + If you are only interested in water within a certain region, e.g., within + a vicinity around a binding site, you can use a selection that updates + every step by using an :class:`~MDAnalysis.core.groups.UpdatingAtomGroup`:: + + near_waters = universe.select_atoms('name OW and around 5 (resid 156 157 305)', + updating=True) + D_site = DensityAnalysis(near_waters).run() + + + .. rubric:: Example: Small region around a ligand (manual box selection) + + If you are interested in explicitly setting a grid box of a given edge size + and origin, you can use the `gridcenter` and `xdim`/`ydim`/`zdim` + arguments. For example to plot the density of waters within 5 Å of a + ligand (in this case the ligand has been assigned the residue name "LIG") + in a cubic grid with 20 Å edges which is centered on the center of mass + (COM) of the ligand:: + + # Create a selection based on the ligand + ligand_selection = universe.select_atoms("resname LIG") + + # Extract the COM of the ligand + ligand_COM = ligand_selection.center_of_mass() + + # Create a density of waters on a cubic grid centered on the ligand COM + # In this case, we update the atom selection as shown above. + ligand_waters = universe.select_atoms('name OW and around 5 resname LIG', + updating=True) + D_water = DensityAnalysis(ligand_waters, + delta=1.0, + gridcenter=ligand_COM, + xdim=20, ydim=20, zdim=20) + + (It should be noted that the `padding` keyword is not used when a user + defined grid is assigned). + + + + .. versionadded:: 1.0.0 + .. versionchanged:: 2.0.0 + :func:`_set_user_grid` is now a method of :class:`DensityAnalysis`. + :class:`Density` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + + """ + + def __init__(self, atomgroup, delta=1.0, + metadata=None, padding=2.0, + gridcenter=None, + xdim=None, ydim=None, zdim=None): + u = atomgroup.universe + super(DensityAnalysis, self).__init__(u.trajectory) + self._atomgroup = atomgroup + self._delta = delta + self._padding = padding + self._gridcenter = gridcenter + self._xdim = xdim + self._ydim = ydim + self._zdim = zdim + + def _prepare(self): + coord = self._atomgroup.positions + if (self._gridcenter is not None or + any([self._xdim, self._ydim, self._zdim])): + # Issue 2372: padding is ignored, defaults to 2.0 therefore warn + if self._padding > 0: + msg = (f"Box padding (currently set at {self._padding}) " + f"is not used in user defined grids.") + warnings.warn(msg) + logger.warning(msg) + # Generate a copy of smin/smax from coords to later check if the + # defined box might be too small for the selection + try: + smin = np.min(coord, axis=0) + smax = np.max(coord, axis=0) + except ValueError as err: + msg = ("No atoms in AtomGroup at input time frame. " + "This may be intended; please ensure that " + "your grid selection covers the atomic " + "positions you wish to capture.") + warnings.warn(msg) + logger.warning(msg) + smin = self._gridcenter #assigns limits to be later - + smax = self._gridcenter #overwritten by _set_user_grid + # Overwrite smin/smax with user defined values + smin, smax = self._set_user_grid(self._gridcenter, self._xdim, + self._ydim, self._zdim, smin, + smax) + else: + # Make the box bigger to avoid as much as possible 'outlier'. This + # is important if the sites are defined at a high density: in this + # case the bulk regions don't have to be close to 1 * n0 but can + # be less. It's much more difficult to deal with outliers. The + # ideal solution would use images: implement 'looking across the + # periodic boundaries' but that gets complicated when the box + # rotates due to RMS fitting. + try: + smin = np.min(coord, axis=0) - self._padding + smax = np.max(coord, axis=0) + self._padding + except ValueError as err: + errmsg = ("No atoms in AtomGroup at input time frame. " + "Grid for density could not be automatically" + " generated. If this is expected, a user" + " defined grid will need to be " + "provided instead.") + raise ValueError(errmsg) from err + BINS = fixedwidth_bins(self._delta, smin, smax) + arange = np.transpose(np.vstack((BINS['min'], BINS['max']))) + bins = BINS['Nbins'] + # create empty grid with the right dimensions (and get the edges) + grid, edges = np.histogramdd(np.zeros((1, 3)), bins=bins, + range=arange, density=False) + grid *= 0.0 + self._grid = grid + self._edges = edges + self._arange = arange + self._bins = bins + + def _single_frame(self): + h, _ = np.histogramdd(self._atomgroup.positions, + bins=self._bins, range=self._arange, + density=False) + # reduce (proposed change #2542 to match the parallel version in pmda.density) + # return self._reduce(self._grid, h) + # + # serial code can simply do + self._grid += h + + def _conclude(self): + # average: + self._grid /= float(self.n_frames) + density = Density(grid=self._grid, edges=self._edges, + units={'length': "Angstrom"}, + parameters={'isDensity': False}) + density.make_density() + self.results.density = density + + @property + def density(self): + wmsg = ("The `density` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.density` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.density + +
[docs] @staticmethod + def _set_user_grid(gridcenter, xdim, ydim, zdim, smin, smax): + """Helper function to set the grid dimensions to user defined values + + Parameters + ---------- + gridcenter : numpy ndarray, float32 + 3 element ndarray containing the x, y and z coordinates of the + grid box center + xdim : float + Box edge length in the x dimension + ydim : float + Box edge length in the y dimension + zdim : float + Box edge length in the y dimension + smin : numpy ndarray, float32 + Minimum x,y,z coordinates for the input selection + smax : numpy ndarray, float32 + Maximum x,y,z coordinates for the input selection + + Returns + ------- + umin : numpy ndarray, float32 + Minimum x,y,z coordinates of the user defined grid + umax : numpy ndarray, float32 + Maximum x,y,z coordinates of the user defined grid + + + .. versionchanged:: 2.0.0 + Now a staticmethod of :class:`DensityAnalysis`. + """ + # Check user inputs + if any(x is None for x in [gridcenter, xdim, ydim, zdim]): + errmsg = ("Gridcenter or grid dimensions are not provided") + raise ValueError(errmsg) + try: + gridcenter = np.asarray(gridcenter, dtype=np.float32).reshape(3,) + except ValueError as err: + raise ValueError("Gridcenter must be a 3D coordinate") from err + try: + xyzdim = np.array([xdim, ydim, zdim], dtype=np.float32) + except ValueError as err: + raise ValueError("xdim, ydim, and zdim must be numbers") from err + if any(np.isnan(gridcenter)) or any(np.isnan(xyzdim)): + raise ValueError("Gridcenter or grid dimensions have NaN element") + + + # Set min/max by shifting by half the edge length of each dimension + umin = gridcenter - xyzdim/2 + umax = gridcenter + xyzdim/2 + + # Here we test if coords of selection fall outside of the defined grid + # if this happens, we warn users they may want to resize their grids + if any(smin < umin) or any(smax > umax): + msg = ("Atom selection does not fit grid --- " + "you may want to define a larger box") + warnings.warn(msg) + logger.warning(msg) + return umin, umax
+ + # _reduce is not strictly necessary for the serial version but is necessary for + # pmda-style parallelism (see #2542) + # @staticmethod + # def _reduce(res, result_single_frame): + # """'accumulate' action for a time series + # + # If `res` is a numpy array, the `result_single_frame` is added to it + # element-wise. If `res` and `result_single_frame` are lists then + # `result_single_frame` is appended to `res`. + # """ + # if isinstance(res, list) and len(res) == 0: + # res = result_single_frame + # else: + # res += result_single_frame + # return res + + +
[docs]class Density(Grid): + r"""Class representing a density on a regular cartesian grid. + + Parameters + ---------- + grid : array_like + histogram or density, typically a :class:`numpy.ndarray` + edges : list + list of arrays, the lower and upper bin edges along the axes + parameters : dict + dictionary of class parameters; saved with + :meth:`Density.save`. The following keys are meaningful to + the class. Meaning of the values are listed: + + *isDensity* + + - ``False``: grid is a histogram with counts [default] + - ``True``: a density + + Applying :meth:`Density.make_density`` sets it to ``True``. + units : dict + A dict with the keys + + - *length*: physical unit of grid edges (Angstrom or nm) [Angstrom] + - *density*: unit of the density if ``isDensity=True`` or ``None`` + otherwise; the default is "Angstrom^{-3}" for densities + (meaning :math:`\text{Å}^{-3}`). + metadata : dict + a user defined dictionary of arbitrary values associated with the + density; the class does not touch :attr:`Density.metadata` but + stores it with :meth:`Density.save` + + Attributes + ---------- + grid : array + counts or density + edges : list of 1d-arrays + The boundaries of each cell in `grid` along all axes (equivalent + to what :func:`numpy.histogramdd` returns). + delta : array + Cell size in each dimension. + origin : array + Coordinates of the *center* of the cell at index `grid[0, 0, 0, ..., + 0]`, which is considered to be the front lower left corner. + units : dict + The units for lengths and density; change units with the method + :meth:`~Density.convert_length` or :meth:`~Density.convert_density`. + + + Notes + ----- + The data (:attr:`Density.grid`) can be manipulated as a standard numpy + array. Changes can be saved to a file using the :meth:`Density.save` method. The + grid can be restored using the :meth:`Density.load` method or by supplying the + filename to the constructor. + + The attribute :attr:`Density.metadata` holds a user-defined dictionary that + can be used to annotate the data. It is also saved with :meth:`Density.save`. + + The :meth:`Density.export` method always exports a 3D object (written in + such a way to be readable in VMD_, Chimera_, and PyMOL_), the rest should + work for an array of any dimension. Note that PyMOL_ only understands DX + files with the DX data type "double" in the "array" object (see `known + issues when writing OpenDX files`_ and issue + `MDAnalysis/GridDataFormats#35`_ for details). Using the keyword + ``type="double"`` for the method :meth:`Density.export`, the user can + ensure that the DX file is written in a format suitable for PyMOL_. + + If the input histogram consists of counts per cell then the + :meth:`Density.make_density` method converts the grid to a physical density. For + a probability density, divide it by :meth:`Density.grid.sum` or use ``density=True`` + right away in :func:`~numpy.histogramdd`. + + The user *should* set the *parameters* keyword (see docs for the + constructor); in particular, if the data are already a density, one must + set ``isDensity=True`` because there is no reliable way to detect if + data represent counts or a density. As a special convenience, if data are + read from a file and the user has not set ``isDensity`` then it is assumed + that the data are in fact a density. + + .. _`MDAnalysis/GridDataFormats#35`: + https://github.com/MDAnalysis/GridDataFormats/issues/35 + .. _`known issues when writing OpenDX files`: + https://www.mdanalysis.org/GridDataFormats/gridData/formats/OpenDX.html#known-issues-for-writing-opendx-files + + See Also + -------- + gridData.core.Grid is the base class of :class:`Density`. + + Examples + -------- + Typical use: + + 1. From a histogram (i.e. counts on a grid):: + + h,edges = numpy.histogramdd(...) + D = Density(h, edges, parameters={'isDensity': False}, units={'length': 'A'}) + D.make_density() + + 2. From a saved density file (e.g. in OpenDX format), where the lengths are + in Angstrom and the density in 1/A**3:: + + D = Density("density.dx") + + 3. From a saved density file (e.g. in OpenDX format), where the lengths are + in Angstrom and the density is measured relative to the density of water + at ambient conditions:: + + D = Density("density.dx", units={'density': 'water'}) + + 4. From a saved *histogram* (less common, but in order to demonstrate the + *parameters* keyword) where the lengths are in nm:: + + D = Density("counts.dx", parameters={'isDensity': False}, units={'length': 'nm'}) + D.make_density() + D.convert_length('Angstrom^{-3}') + D.convert_density('water') + + After the final step, ``D`` will contain a density on a grid measured in + ångström, with the density values itself measured relative to the + density of water. + + :class:`Density` objects can be algebraically manipulated (added, + subtracted, multiplied, ...) but there are *no sanity checks* in place to + make sure that units, metadata, etc are compatible! + + + .. Note:: + + It is suggested to construct the Grid object from a histogram, + to supply the appropriate length unit, and to use + :meth:`Density.make_density` to obtain a density. This ensures + that the length- and the density unit correspond to each other. + + """ + + def __init__(self, *args, **kwargs): + length_unit = 'Angstrom' + + parameters = kwargs.pop('parameters', {}) + if (len(args) > 0 and isinstance(args[0], str) or + isinstance(kwargs.get('grid', None), str)): + # try to be smart: when reading from a file then it is likely that + # this is a density + parameters.setdefault('isDensity', True) + else: + parameters.setdefault('isDensity', False) + units = kwargs.pop('units', {}) + units.setdefault('length', length_unit) + if parameters['isDensity']: + units.setdefault('density', length_unit) + else: + units.setdefault('density', None) + + super(Density, self).__init__(*args, **kwargs) + + self.parameters = parameters # isDensity: set by make_density() + self.units = units + + def _check_set_unit(self, u): + """Check and set units. + + First check that all units and their values in the dict `u` are valid + and then set the object's units attribute. + + Parameters + ---------- + u : dict + ``{unit_type : value, ...}`` + + Raises + ------ + ValueError + if unit types or unit values are not recognized or if required + unit types are not in :attr:`units` + """ + # all this unit crap should be a class... + try: + for unit_type, value in u.items(): + if value is None: # check here, too iffy to use dictionary[None]=None + self.units[unit_type] = None + continue + try: + units.conversion_factor[unit_type][value] + self.units[unit_type] = value + except KeyError: + errmsg = (f"Unit {value} of type {unit_type} is not " + f"recognized.") + raise ValueError(errmsg) from None + except AttributeError: + errmsg = '"unit" must be a dictionary with keys "length" and "density.' + logger.fatal(errmsg) + raise ValueError(errmsg) from None + # need at least length and density (can be None) + if 'length' not in self.units: + raise ValueError('"unit" must contain a unit for "length".') + if 'density' not in self.units: + self.units['density'] = None + +
[docs] def make_density(self): + """Convert the grid (a histogram, counts in a cell) to a density (counts/volume). + + This method changes the grid irrevocably. + + For a probability density, manually divide by :meth:`grid.sum`. + + If this is already a density, then a warning is issued and nothing is + done, so calling `make_density` multiple times does not do any harm. + """ + # Make it a density by dividing by the volume of each grid cell + # (from numpy.histogramdd, which is for general n-D grids) + + if self.parameters['isDensity']: + msg = "Running make_density() makes no sense: Grid is already a density. Nothing done." + logger.warning(msg) + warnings.warn(msg) + return + + dedges = [np.diff(edge) for edge in self.edges] + D = len(self.edges) + for i in range(D): + shape = np.ones(D, int) + shape[i] = len(dedges[i]) + self.grid /= dedges[i].reshape(shape) + self.parameters['isDensity'] = True + # see units.densityUnit_factor for units + self.units['density'] = self.units['length'] + "^{-3}"
+ +
[docs] def convert_length(self, unit='Angstrom'): + """Convert Grid object to the new `unit`. + + Parameters + ---------- + unit : str (optional) + unit that the grid should be converted to: one of + "Angstrom", "nm" + + Notes + ----- + This changes the edges but will not change the density; it is the + user's responsibility to supply the appropriate unit if the Grid object + is constructed from a density. It is suggested to start from a + histogram and a length unit and use :meth:`make_density`. + + """ + if unit == self.units['length']: + return + cvnfact = units.get_conversion_factor('length', self.units['length'], unit) + self.edges = [x * cvnfact for x in self.edges] + self.units['length'] = unit + self._update() # needed to recalculate midpoints and origin
+ +
[docs] def convert_density(self, unit='Angstrom'): + """Convert the density to the physical units given by `unit`. + + Parameters + ---------- + unit : str (optional) + The target unit that the density should be converted to. + + `unit` can be one of the following: + + ============= =============================================================== + name description of the unit + ============= =============================================================== + Angstrom^{-3} particles/A**3 + nm^{-3} particles/nm**3 + SPC density of SPC water at standard conditions + TIP3P ... see :data:`MDAnalysis.units.water` + TIP4P ... see :data:`MDAnalysis.units.water` + water density of real water at standard conditions (0.997 g/cm**3) + Molar mol/l + ============= =============================================================== + + Raises + ------ + RuntimeError + If the density does not have a unit associated with it to begin + with (i.e., is not a density) then no conversion can take place. + ValueError + for unknown `unit`. + + Notes + ----- + + (1) This method only works if there is already a length unit associated with the + density; otherwise raises :exc:`RuntimeError` + (2) Conversions always go back to unity so there can be rounding + and floating point artifacts for multiple conversions. + + """ + if not self.parameters['isDensity']: + errmsg = 'The grid is not a density so convert_density() makes no sense.' + logger.fatal(errmsg) + raise RuntimeError(errmsg) + if unit == self.units['density']: + return + try: + self.grid *= units.get_conversion_factor('density', + self.units['density'], unit) + except KeyError: + errmsg = (f"The name of the unit ({unit} supplied) must be one " + f"of:\n{units.conversion_factor['density'].keys()}") + raise ValueError(errmsg) from None + self.units['density'] = unit
+ + def __repr__(self): + if self.parameters['isDensity']: + grid_type = 'density' + else: + grid_type = 'histogram' + return '<Density ' + grid_type + ' with ' + str(self.grid.shape) + ' bins>'
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/dielectric.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/dielectric.html new file mode 100644 index 0000000000..d81316879f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/dielectric.html @@ -0,0 +1,318 @@ + + + + + + MDAnalysis.analysis.dielectric — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.dielectric

+# -*- 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-2017 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
+#
+
+r"""
+Dielectric --- :mod:`MDAnalysis.analysis.dielectric`
+===========================================================
+
+:Authors: Mattia Felice Palermo, Philip Loche
+:Year: 2022
+:Copyright: GNU Public License v3
+"""
+
+import numpy as np
+
+from MDAnalysis.units import constants, convert
+from MDAnalysis.analysis.base import AnalysisBase
+from MDAnalysis.due import due, Doi
+from MDAnalysis.exceptions import NoDataError
+
+due.cite(Doi("10.1080/00268978300102721"),
+         description="Dielectric analysis",
+         path="MDAnalysis.analysis.dielectric",
+         cite_module=True)
+del Doi
+
+
+
[docs]class DielectricConstant(AnalysisBase): + r""" + Computes the average dipole moment + + .. math:: + \boldsymbol M = \sum_i q_i \boldsymbol r_i + + + where :math:`q_i` is the charge and :math:`\boldsymbol r_i` the position of + atom :math:`i` in the given :class:`MDAnalysis.core.groups.AtomGroup`. + Also, the static dielectric constant + + .. math:: + \varepsilon = 1 + \frac{\langle M^2 \rangle - \langle M \rangle^2} + {3 \varepsilon_ 0 V k_B T} + + + is calculated for a system in tin foil boundary conditions, which is + the usual case if electrostatics are handled with a Ewald summation + technique. See [Neumann1983]_ for details on the derivation. + + Parameters + ---------- + atomgroup : MDAnalysis.core.groups.AtomGroup + Atomgroup on which the analysis is executed + temperature : float + Temperature (Kelvin) at which the system has been simulated + make_whole : bool + Make molecules whole; If the input already contains whole molecules + this can be disabled to gain speedup + verbose : bool + Show detailed progress of the calculation + + Attributes + ---------- + results.M : numpy.ndarray + Directional dependant dipole moment + :math:`\langle \boldsymbol M \rangle` in :math:`eÅ`. + results.M2 : numpy.ndarray + Directional dependant squared dipole moment + :math:`\langle \boldsymbol M^2 \rangle` in :math:`(eÅ)^2` + results.fluct : float + Directional dependant dipole moment fluctuation + :math:`\langle \boldsymbol M^2 \rangle - \langle \boldsymbol M \rangle^2` + in :math:`(eÅ)^2` + results.eps : numpy.ndarray + Directional dependant static dielectric constant + results.eps_mean : float + Static dielectric constant + + Example + ------- + Create a :class:`DielectricConstant` instance by supplying an + :class:`~MDAnalysis.core.groups.AtomGroup`, + then use the :meth:`run` method:: + + import MDAnalysis as mda + from MDAnalysis.analysis.dielectric import DielectricConstant + from MDAnalysisTests.datafiles import PSF_TRICLINIC, DCD_TRICLINIC + + # Load a pure water system + universe = mda.Universe(PSF_TRICLINIC, DCD_TRICLINIC) + + diel = DielectricConstant(universe.atoms) + diel.run() + print(diel.results) + + The static dielectric constant of the provided atomgroup is saved + within the :class:`~MDAnalysis.analysis.base.Results` attribute. + + + .. versionadded:: 2.1.0 + """ + def __init__(self, atomgroup, temperature=300, make_whole=True, **kwargs): + super(DielectricConstant, self).__init__(atomgroup.universe.trajectory, + **kwargs) + self.atomgroup = atomgroup + self.temperature = temperature + self.make_whole = make_whole + + def _prepare(self): + if not hasattr(self.atomgroup, "charges"): + raise NoDataError("No charges defined given atomgroup.") + + if not np.allclose(self.atomgroup.total_charge(compound='fragments'), + 0.0, atol=1E-5): + raise NotImplementedError("Analysis for non-neutral systems or" + " systems with free charges are not" + " available.") + + self.volume = 0 + self.results.M = np.zeros(3) + self.results.M2 = np.zeros(3) + self.results.fluct = np.zeros(3) + self.results.eps = np.zeros(3) + self.results.eps_mean = 0 + + def _single_frame(self): + if self.make_whole: + self.atomgroup.unwrap() + + self.volume += self.atomgroup.universe.trajectory.ts.volume + + M = np.dot(self.atomgroup.charges, self.atomgroup.positions) + self.results.M += M + self.results.M2 += M * M + + def _conclude(self): + self.results.M /= self.n_frames + self.results.M2 /= self.n_frames + self.volume /= self.n_frames + + self.results.fluct = self.results.M2 - self.results.M * self.results.M + + self.results.eps = self.results.fluct / ( + convert(constants["Boltzmann_constant"], "kJ/mol", "eV") * + self.temperature * self.volume * constants["electric_constant"]) + + self.results.eps_mean = self.results.eps.mean() + + self.results.eps += 1 + self.results.eps_mean += 1
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.html new file mode 100644 index 0000000000..0db2cb5bc5 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.html @@ -0,0 +1,551 @@ + + + + + + MDAnalysis.analysis.diffusionmap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.diffusionmap

+# -*- 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-2017 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
+#
+
+"""Diffusion map --- :mod:`MDAnalysis.analysis.diffusionmap`
+=====================================================================
+
+:Authors: Eugen Hruska, John Detlefs
+:Year: 2016
+:Copyright: GNU Public License v2
+
+This module contains the non-linear dimension reduction method diffusion map.
+The eigenvectors of a diffusion matrix represent the 'collective coordinates'
+of a molecule; the largest eigenvalues are the more dominant collective
+coordinates. Assigning physical meaning to the 'collective coordinates' is a
+fundamentally difficult problem. The time complexity of the diffusion map is
+:math:`O(N^3)`, where N is the number of frames in the trajectory, and the in-memory
+storage complexity is :math:`O(N^2)`. Instead of a single trajectory a sample of
+protein structures can be used. The sample should be equilibrated, at least
+locally. The order of the sampled structures in the trajectory is irrelevant.
+
+The :ref:`Diffusion-Map-tutorial` shows how to use diffusion map for dimension
+reduction.
+
+More details about diffusion maps are in
+:cite:p:`deLaPorte2008,Coifman-Lafon,Ferguson2011,Clementi2011`.
+
+.. _Diffusion-Map-tutorial:
+
+Diffusion Map tutorial
+----------------------
+
+The example uses files provided as part of the MDAnalysis test suite
+(in the variables :data:`~MDAnalysis.tests.datafiles.PSF` and
+:data:`~MDAnalysis.tests.datafiles.DCD`). This tutorial shows how to use the
+Diffusion Map class.
+
+First load all modules and test data
+
+.. code-block:: python
+
+   import MDAnalysis as mda
+   import MDAnalysis.analysis.diffusionmap as diffusionmap
+   from MDAnalysis.tests.datafiles import PSF, DCD
+
+Given a universe or atom group, we can create and eigenvalue decompose
+the Diffusion Matrix from that trajectory using :class:`DiffusionMap`:: and get
+the corresponding eigenvalues and eigenvectors.
+
+.. code-block:: python
+
+   u = mda.Universe(PSF,DCD)
+
+We leave determination of the appropriate scale parameter epsilon to the user,
+:cite:p:`Clementi2011` uses a complex method involving the k-nearest-neighbors
+of a trajectory frame, whereas others simple use a trial-and-error approach
+with a constant epsilon. Currently, the constant epsilon method is implemented
+by MDAnalysis.
+
+.. code-block:: python
+
+   dmap = diffusionmap.DiffusionMap(u, select='backbone', epsilon=2)
+   dmap.run()
+
+From here we can perform an embedding onto the k dominant eigenvectors. The
+non-linearity of the map means there is no explicit relationship between the
+lower dimensional space and our original trajectory. However, this is an
+isometry (distance preserving map), which means that points close in the lower
+dimensional space are close in the higher-dimensional space and vice versa.
+In order to embed into the most relevant low-dimensional space, there should
+exist some number of dominant eigenvectors, whose corresponding eigenvalues
+diminish at a constant rate until falling off, this is referred to as a
+spectral gap and should be somewhat apparent for a system at equilibrium with a
+high number of frames.
+
+.. code-block:: python
+
+   import matplotlib.pyplot as plt
+   f, ax = plt.subplots()
+   upper_limit = # some reasonably high number less than the n_eigenvectors
+   ax.plot(dmap.eigenvalues[:upper_limit])
+   ax.set(xlabel ='eigenvalue index', ylabel='eigenvalue')
+   plt.tight_layout()
+
+From here we can transform into the diffusion space
+
+.. code-block:: python
+
+   num_eigenvectors = # some number less than the number of frames after
+   # inspecting for the spectral gap
+   fit = dmap.transform(num_eigenvectors, time=1)
+
+It can be difficult to interpret the data, and is left as a task
+for the user. The `diffusion distance` between frames i and j is best
+approximated by the euclidean distance  between rows i and j of
+self.diffusion_space.
+
+Classes
+-------
+
+.. autoclass:: DiffusionMap
+.. autoclass:: DistanceMatrix
+
+References
+----------
+
+If you use this Dimension Reduction method in a publication, please
+cite :cite:p:`Coifman-Lafon`.
+
+If you choose the default metric, this module uses the fast QCP algorithm
+:cite:p:`Theobald2005` to calculate the root mean square distance (RMSD)
+between two coordinate sets (as implemented in
+:func:`MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix`).  When using this
+module in published work please :cite:p:`Theobald2005`.
+
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Coifman-Lafon
+    deLaPorte2008
+    Clementi2011
+    Ferguson2011
+    Theobald2005
+"""
+import logging
+import warnings
+
+import numpy as np
+
+from MDAnalysis.core.universe import Universe
+from MDAnalysis.core.groups import AtomGroup, UpdatingAtomGroup
+from .rms import rmsd
+from .base import AnalysisBase
+
+logger = logging.getLogger("MDAnalysis.analysis.diffusionmap")
+
+
+
[docs]class DistanceMatrix(AnalysisBase): + """Calculate the pairwise distance between each frame in a trajectory + using a given metric + + A distance matrix can be initialized on its own and used as an + initialization argument in :class:`DiffusionMap`. + + Parameters + ---------- + universe : `~MDAnalysis.core.universe.Universe` or `~MDAnalysis.core.groups.AtomGroup` + The MD Trajectory for dimension reduction, remember that + computational cost of eigenvalue decomposition + scales at O(N^3) where N is the number of frames. + Cost can be reduced by increasing step interval or specifying a + start and stop value when calling :meth:`DistanceMatrix.run`. + select : str, optional + Any valid selection string for + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` + This selection of atoms is used to calculate the RMSD between + different frames. Water should be excluded. + metric : function, optional + Maps two numpy arrays to a float, is positive definite and + symmetric. The API for a metric requires that the arrays must have + equal length, and that the function should have weights as an + optional argument. Weights give each index value its own weight for + the metric calculation over the entire arrays. Default: metric is + set to rms.rmsd(). + cutoff : float, optional + Specify a given cutoff for metric values to be considered equal, + Default: 1EO-5 + weights : array, optional + Weights to be given to coordinates for metric calculation + verbose : bool, optional + Show detailed progress of the calculation if set to ``True``; the + default is ``False``. + + Attributes + ---------- + atoms : `~MDAnalysis.core.groups.AtomGroup` + Selected atoms in trajectory subject to dimension reduction + results.dist_matrix : numpy.ndarray, (n_frames, n_frames) + Array of all possible ij metric distances between frames in trajectory. + This matrix is symmetric with zeros on the diagonal. + + .. versionadded:: 2.0.0 + + dist_matrix : numpy.ndarray, (n_frames, n_frames) + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.dist_matrix` instead. + + Example + ------- + Often, a custom distance matrix could be useful for local + epsilon determination or other manipulations on the diffusion + map method. The :class:`DistanceMatrix` exists in + :mod:`~MDAnalysis.analysis.diffusionmap` and can be passed + as an initialization argument for :class:`DiffusionMap`. + + .. code-block:: python + + import MDAnalysis as mda + import MDAnalysis.analysis.diffusionmap as diffusionmap + from MDAnalysis.tests.datafiles import PSF, DCD + + Now create the distance matrix and pass it as an argument to + :class:`DiffusionMap`. + + u = mda.Universe(PSF,DCD) + dist_matrix = diffusionmap.DistanceMatrix(u, select='all') + dist_matrix.run() + dmap = diffusionmap.DiffusionMap(dist_matrix) + dmap.run() + + .. versionchanged:: 1.0.0 + ``save()`` method has been removed. You can use ``np.save()`` on + :attr:`DistanceMatrix.results.dist_matrix` instead. + .. versionchanged:: 2.0.0 + :attr:`dist_matrix` is now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + .. versionchanged:: 2.2.0 + :class:`DistanceMatrix` now also accepts `AtomGroup`. + """ + def __init__(self, universe, select='all', metric=rmsd, cutoff=1E0-5, + weights=None, **kwargs): + # remember that this must be called before referencing self.n_frames + super(DistanceMatrix, self).__init__(universe.universe.trajectory, + **kwargs) + + if isinstance(universe, UpdatingAtomGroup): + wmsg = ("U must be a static AtomGroup. Parsing an updating AtomGroup " + "will result in a static AtomGroup with the current frame " + "atom selection.") + warnings.warn(wmsg) + + self.atoms = universe.select_atoms(select) + self._metric = metric + self._cutoff = cutoff + self._weights = weights + self._calculated = False + + def _prepare(self): + self.results.dist_matrix = np.zeros((self.n_frames, self.n_frames)) + + def _single_frame(self): + iframe = self._ts.frame + 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]): + self._ts = ts + j_ref = self.atoms.positions + dist = self._metric(i_ref, j_ref, weights=self._weights) + self.results.dist_matrix[self._frame_index, + j+self._frame_index] = ( + dist if dist > self._cutoff else 0) + self.results.dist_matrix[j+self._frame_index, + self._frame_index] = ( + self.results.dist_matrix[self._frame_index, + j+self._frame_index]) + self._ts = self._trajectory[iframe] + + @property + def dist_matrix(self): + wmsg = ("The `dist_matrix` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.dist_matrix` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.dist_matrix + + def _conclude(self): + self._calculated = True
+ + +
[docs]class DiffusionMap(object): + """Non-linear dimension reduction method + + Dimension reduction with diffusion mapping of selected structures in a + trajectory. + + Attributes + ---------- + eigenvalues: array (n_frames,) + Eigenvalues of the diffusion map + + Methods + ------- + run() + Constructs an anisotropic diffusion kernel and performs eigenvalue + decomposition on it. + transform(n_eigenvectors, time) + Perform an embedding of a frame into the eigenvectors representing + the collective coordinates. + + + .. versionchanged:: 2.2.0 + :class:`DiffusionMap` now also accepts `AtomGroup`. + """ + + def __init__(self, u, epsilon=1, **kwargs): + """ + Parameters + ------------- + u : MDAnalysis Universe or AtomGroup or DistanceMatrix object. + Can be a Universe or AtomGroup, in which case one must supply kwargs for the + initialization of a DistanceMatrix. Otherwise, this can be a + DistanceMatrix already initialized. Either way, this will be made + into a diffusion kernel. + epsilon : Float + Specifies the method used for the choice of scale parameter in the + diffusion map. More information in + :cite:p:`Coifman-Lafon,Ferguson2011,Clementi2011`, Default: 1. + **kwargs + Parameters to be passed for the initialization of a + :class:`DistanceMatrix`. + """ + if isinstance(u, AtomGroup) or isinstance(u, Universe): + self._dist_matrix = DistanceMatrix(u, **kwargs) + elif isinstance(u, DistanceMatrix): + self._dist_matrix = u + else: + raise ValueError("U is not a Universe or AtomGroup or DistanceMatrix and" + " so the DiffusionMap has no data to work with.") + self._epsilon = epsilon + +
[docs] def run(self, start=None, stop=None, step=None): + """ Create and decompose the diffusion matrix in preparation + for a diffusion map. + + 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 + + .. versionchanged:: 0.19.0 + Added start/stop/step kwargs + """ + # run only if distance matrix not already calculated + if not self._dist_matrix._calculated: + self._dist_matrix.run(start=start, stop=stop, step=step) + # important for transform function and length of .run() method + self._n_frames = self._dist_matrix.n_frames + if self._n_frames > 5000: + warnings.warn("The distance matrix is very large, and can " + "be very slow to compute. Consider picking a larger " + "step size in distance matrix initialization.") + self._scaled_matrix = (self._dist_matrix.results.dist_matrix ** 2 / + self._epsilon) + # take negative exponent of scaled matrix to create Isotropic kernel + self._kernel = np.exp(-self._scaled_matrix) + D_inv = np.diag(1 / self._kernel.sum(1)) + self._diff = np.dot(D_inv, self._kernel) + self._eigenvals, self._eigenvectors = np.linalg.eig(self._diff) + sort_idx = np.argsort(self._eigenvals)[::-1] + self.eigenvalues = self._eigenvals[sort_idx] + self._eigenvectors = self._eigenvectors[sort_idx] + self._calculated = True + return self
+ +
[docs] def transform(self, n_eigenvectors, time): + """ Embeds a trajectory via the diffusion map + + Parameters + --------- + n_eigenvectors : int + The number of dominant eigenvectors to be used for + diffusion mapping + time : float + Exponent that eigenvalues are raised to for embedding, for large + values, more dominant eigenvectors determine diffusion distance. + Return + ------ + diffusion_space : array (n_frames, n_eigenvectors) + The diffusion map embedding as defined by :cite:p:`Ferguson2011`. + """ + return (self._eigenvectors[1:n_eigenvectors+1,].T * + (self.eigenvalues[1:n_eigenvectors+1]**time))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/dihedrals.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/dihedrals.html new file mode 100644 index 0000000000..46c990915f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/dihedrals.html @@ -0,0 +1,806 @@ + + + + + + MDAnalysis.analysis.dihedrals — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.dihedrals

+# -*- 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-2017 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
+#
+r"""Dihedral angles analysis --- :mod:`MDAnalysis.analysis.dihedrals`
+=================================================================
+
+:Author: Henry Mull
+:Year: 2018
+:Copyright: GNU Public License v2
+
+.. versionadded:: 0.19.0
+
+This module contains classes for calculating dihedral angles for a given set of
+atoms or residues. This can be done for selected frames or whole trajectories.
+
+A list of time steps that contain angles of interest is generated and can be
+easily plotted if desired. For the :class:`~MDAnalysis.analysis.dihedrals.Ramachandran`
+and :class:`~MDAnalysis.analysis.dihedrals.Janin` classes, basic plots can be
+generated using the method :meth:`Ramachandran.plot` or :meth:`Janin.plot`.
+These plots are best used as references, but they also allow for user customization.
+
+
+See Also
+--------
+:func:`MDAnalysis.lib.distances.calc_dihedrals()`
+   function to calculate dihedral angles from atom positions
+
+
+Example applications
+--------------------
+
+General dihedral analysis
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`~MDAnalysis.analysis.dihedrals.Dihedral` class is useful for calculating
+angles for many dihedrals of interest. For example, we can find the phi angles
+for residues 5-10 of adenylate kinase (AdK). The trajectory is included within
+the test data files::
+
+   import MDAnalysis as mda
+   from MDAnalysisTests.datafiles import GRO, XTC
+   u = mda.Universe(GRO, XTC)
+
+   # selection of atomgroups
+   ags = [res.phi_selection() for res in u.residues[4:9]]
+
+   from MDAnalysis.analysis.dihedrals import Dihedral
+   R = Dihedral(ags).run()
+
+The angles can then be accessed with :attr:`Dihedral.results.angles`.
+
+Ramachandran analysis
+~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`~MDAnalysis.analysis.dihedrals.Ramachandran` class allows for the
+quick calculation of classical Ramachandran plots :cite:p:`Ramachandran1963` in
+the backbone :math:`phi` and :math:`psi` angles. Unlike the
+:class:`~MDanalysis.analysis.dihedrals.Dihedral` class which takes a list of
+`atomgroups`, this class only needs a list of residues or atoms from those
+residues. The previous example can repeated with::
+
+   u = mda.Universe(GRO, XTC)
+   r = u.select_atoms("resid 5-10")
+
+   R = Ramachandran(r).run()
+
+Then it can be plotted using the built-in plotting method :meth:`Ramachandran.plot()`::
+
+   import matplotlib.pyplot as plt
+   fig, ax = plt.subplots(figsize=plt.figaspect(1))
+   R.plot(ax=ax, color='k', marker='o', ref=True)
+   fig.tight_layout()
+
+as shown in the example :ref:`Ramachandran plot figure <figure-ramachandran>`.
+
+.. _figure-ramachandran:
+
+.. figure:: /images/rama_demo_plot.png
+   :scale: 50 %
+   :alt: Ramachandran plot
+
+   Ramachandran plot for residues 5 to 10 of AdK, sampled from the AdK test
+   trajectory (XTC). The contours in the background are the "allowed region"
+   and the "marginally allowed" regions.
+
+To plot the data yourself, the angles can be accessed using
+:attr:`Ramachandran.results.angles`.
+
+.. Note::
+
+   The Ramachandran analysis is prone to errors if the topology contains
+   duplicate or missing atoms (e.g. atoms with `altloc` or incomplete
+   residues). If the topology has as an `altloc` attribute, you must specify
+   only one `altloc` for the atoms with more than one (``"protein and not
+   altloc B"``).
+
+
+Janin analysis
+~~~~~~~~~~~~~~
+
+Janin plots :cite:p:`Janin1978` for side chain conformations (:math:`\chi_1`
+and :math:`chi_2` angles) can be created with the
+:class:`~MDAnalysis.analysis.dihedrals.Janin` class. It works in the same way,
+only needing a list of residues; see the :ref:`Janin plot figure
+<figure-janin>` as an example.
+
+The data for the angles can be accessed in the attribute
+:attr:`Janin.results.angles`.
+
+.. _figure-janin:
+
+.. figure:: /images/janin_demo_plot.png
+   :scale: 50 %
+   :alt: Janin plot
+
+   Janin plot for all residues of AdK, sampled from the AdK test trajectory
+   (XTC). The contours in the background are the "allowed region" and the
+   "marginally allowed" regions for all possible residues.
+
+.. Note::
+
+   The Janin analysis is prone to errors if the topology contains duplicate or
+   missing atoms (e.g. atoms with `altloc` or incomplete residues). If the
+   topology has as an `altloc` attribute, you must specify only one `altloc`
+   for the atoms with more than one (``"protein and not altloc B"``).
+
+   Furthermore, many residues do not have a :math:`\chi_2` dihedral and if the
+   selections of residues is not carefully filtered to only include those
+   residues with *both* sidechain dihedrals then a :exc:`ValueError` with the
+   message *Too many or too few atoms selected* is raised.
+
+
+Reference plots
+~~~~~~~~~~~~~~~
+
+Reference plots can be added to the axes for both the Ramachandran and Janin
+classes using the kwarg ``ref=True`` for the :meth:`Ramachandran.plot`
+and :meth:`Janin.plot` methods. The Ramachandran reference data
+(:data:`~MDAnalysis.analysis.data.filenames.Rama_ref`) and Janin reference data
+(:data:`~MDAnalysis.analysis.data.filenames.Janin_ref`) were made using data
+obtained from a large selection of 500 PDB files, and were analyzed using these
+classes :cite:p:`Mull2018`. The allowed and marginally allowed regions of the
+Ramachandran reference plot have cutoffs set to include 90% and 99% of the data
+points, and the Janin reference plot has cutoffs for 90% and 98% of the data
+points. The list of PDB files used for the reference plots was taken from
+:cite:p:`Lovell2003` and information about general Janin regions was taken from
+:cite:p:`Janin1978`.
+
+
+
+Analysis Classes
+----------------
+
+.. autoclass:: Dihedral
+   :members:
+   :inherited-members:
+
+   .. attribute:: results.angles
+
+       Contains the time steps of the angles for each atomgroup in the list as
+       an ``n_frames×len(atomgroups)`` :class:`numpy.ndarray` with content
+       ``[[angle 1, angle 2, ...], [time step 2], ...]``.
+
+       .. versionadded:: 2.0.0
+
+   .. attribute:: angles
+
+       Alias to the :attr:`results.angles` attribute.
+
+       .. deprecated:: 2.0.0
+          Will be removed in MDAnalysis 3.0.0. Please use
+          :attr:`results.angles` instead.
+
+
+.. autoclass:: Ramachandran
+   :members:
+   :inherited-members:
+
+   .. attribute:: results.angles
+
+       Contains the time steps of the :math:`\phi` and :math:`\psi` angles for
+       each residue as an ``n_frames×n_residues×2`` :class:`numpy.ndarray` with
+       content ``[[[phi, psi], [residue 2], ...], [time step 2], ...]``.
+
+       .. versionadded:: 2.0.0
+
+   .. attribute:: angles
+
+       Alias to the :attr:`results.angles` attribute.
+
+       .. deprecated:: 2.0.0
+          Will be removed in MDAnalysis 3.0.0. Please use
+          :attr:`results.angles` instead.
+
+
+.. autoclass:: Janin
+   :members:
+   :inherited-members:
+
+   .. attribute:: results.angles
+
+       Contains the time steps of the :math:`\chi_1` and :math:`\chi_2` angles
+       for each residue as an ``n_frames×n_residues×2`` :class:`numpy.ndarray`
+       with content ``[[[chi1, chi2], [residue 2], ...], [time step 2], ...]``.
+
+       .. versionadded:: 2.0.0
+
+   .. attribute:: angles
+
+       Alias to the :attr:`results.angles` attribute.
+
+       .. deprecated:: 2.0.0
+          Will be removed in MDAnalysis 3.0.0. Please use
+          :attr:`results.angles` instead.
+
+
+References
+----------
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Ramachandran1963
+    Janin1978
+    Lovell2003
+    Mull2018
+
+"""
+import numpy as np
+import matplotlib.pyplot as plt
+
+import warnings
+
+import MDAnalysis as mda
+from MDAnalysis.analysis.base import AnalysisBase
+from MDAnalysis.lib.distances import calc_dihedrals
+from MDAnalysis.analysis.data.filenames import Rama_ref, Janin_ref
+
+
+
[docs]class Dihedral(AnalysisBase): + """Calculate dihedral angles for specified atomgroups. + + Dihedral angles will be calculated for each atomgroup that is given for + each step in the trajectory. Each :class:`~MDAnalysis.core.groups.AtomGroup` + must contain 4 atoms. + + Note + ---- + This class takes a list as an input and is most useful for a large + selection of atomgroups. If there is only one atomgroup of interest, then + it must be given as a list of one atomgroup. + + + .. versionchanged:: 2.0.0 + :attr:`angles` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + + """ + + def __init__(self, atomgroups, **kwargs): + """Parameters + ---------- + atomgroups : list[AtomGroup] + a list of :class:`~MDAnalysis.core.groups.AtomGroup` for which + the dihedral angles are calculated + + Raises + ------ + ValueError + If any atomgroups do not contain 4 atoms + + """ + super(Dihedral, self).__init__( + atomgroups[0].universe.trajectory, **kwargs) + self.atomgroups = atomgroups + + if any([len(ag) != 4 for ag in atomgroups]): + raise ValueError("All AtomGroups must contain 4 atoms") + + self.ag1 = mda.AtomGroup([ag[0] for ag in atomgroups]) + self.ag2 = mda.AtomGroup([ag[1] for ag in atomgroups]) + self.ag3 = mda.AtomGroup([ag[2] for ag in atomgroups]) + self.ag4 = mda.AtomGroup([ag[3] for ag in atomgroups]) + + def _prepare(self): + self.results.angles = [] + + def _single_frame(self): + angle = calc_dihedrals(self.ag1.positions, self.ag2.positions, + self.ag3.positions, self.ag4.positions, + box=self.ag1.dimensions) + self.results.angles.append(angle) + + def _conclude(self): + self.results.angles = np.rad2deg(np.array(self.results.angles)) + + @property + def angles(self): + wmsg = ("The `angle` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.angles` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.angles
+ + +
[docs]class Ramachandran(AnalysisBase): + r"""Calculate :math:`\phi` and :math:`\psi` dihedral angles of selected + residues. + + :math:`\phi` and :math:`\psi` angles will be calculated for each residue + corresponding to `atomgroup` for each time step in the trajectory. A + :class:`~MDAnalysis.ResidueGroup` is generated from `atomgroup` which is + compared to the protein to determine if it is a legitimate selection. + + Parameters + ---------- + atomgroup : AtomGroup or ResidueGroup + atoms for residues for which :math:`\phi` and :math:`\psi` are + calculated + c_name : str (optional) + name for the backbone C atom + n_name : str (optional) + name for the backbone N atom + ca_name : str (optional) + name for the alpha-carbon atom + check_protein : bool (optional) + whether to raise an error if the provided atomgroup is not a + subset of protein atoms + + Example + ------- + For standard proteins, the default arguments will suffice to run a + Ramachandran analysis:: + + r = Ramachandran(u.select_atoms('protein')).run() + + For proteins with non-standard residues, or for calculating dihedral + angles for other linear polymers, you can switch off the protein checking + and provide your own atom names in place of the typical peptide backbone + atoms:: + + r = Ramachandran(u.atoms, c_name='CX', n_name='NT', ca_name='S', + check_protein=False).run() + + The above analysis will calculate angles from a "phi" selection of + CX'-NT-S-CX and "psi" selections of NT-S-CX-NT'. + + Raises + ------ + ValueError + If the selection of residues is not contained within the protein + and ``check_protein`` is ``True`` + + Note + ---- + If ``check_protein`` is ``True`` and the residue selection is beyond + the scope of the protein and, then an error will be raised. + If the residue selection includes the first or last residue, + then a warning will be raised and they will be removed from the list of + residues, but the analysis will still run. If a :math:`\phi` or :math:`\psi` + selection cannot be made, that residue will be removed from the analysis. + + + .. versionchanged:: 1.0.0 + added c_name, n_name, ca_name, and check_protein keyword arguments + .. versionchanged:: 2.0.0 + :attr:`angles` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + + """ + + def __init__(self, atomgroup, c_name='C', n_name='N', ca_name='CA', + check_protein=True, **kwargs): + super(Ramachandran, self).__init__( + atomgroup.universe.trajectory, **kwargs) + self.atomgroup = atomgroup + residues = self.atomgroup.residues + + if check_protein: + protein = self.atomgroup.universe.select_atoms("protein").residues + + if not residues.issubset(protein): + raise ValueError("Found atoms outside of protein. Only atoms " + "inside of a 'protein' selection can be used to " + "calculate dihedrals.") + elif not residues.isdisjoint(protein[[0, -1]]): + warnings.warn("Cannot determine phi and psi angles for the first " + "or last residues") + residues = residues.difference(protein[[0, -1]]) + + prev = residues._get_prev_residues_by_resid() + nxt = residues._get_next_residues_by_resid() + keep = np.array([r is not None for r in prev]) + keep = keep & np.array([r is not None for r in nxt]) + + if not np.all(keep): + warnings.warn("Some residues in selection do not have " + "phi or psi selections") + prev = sum(prev[keep]) + nxt = sum(nxt[keep]) + residues = residues[keep] + + # find n, c, ca + keep_prev = [sum(r.atoms.names==c_name)==1 for r in prev] + rnames = [n_name, c_name, ca_name] + keep_res = [all(sum(r.atoms.names == n) == 1 for n in rnames) + for r in residues] + keep_next = [sum(r.atoms.names == n_name) == 1 for r in nxt] + + # alright we'll keep these + keep = np.array(keep_prev) & np.array(keep_res) & np.array(keep_next) + prev = prev[keep] + res = residues[keep] + nxt = nxt[keep] + + rnames = res.atoms.names + self.ag1 = prev.atoms[prev.atoms.names == c_name] + self.ag2 = res.atoms[rnames == n_name] + self.ag3 = res.atoms[rnames == ca_name] + self.ag4 = res.atoms[rnames == c_name] + self.ag5 = nxt.atoms[nxt.atoms.names == n_name] + + + def _prepare(self): + self.results.angles = [] + + def _single_frame(self): + phi_angles = calc_dihedrals(self.ag1.positions, self.ag2.positions, + self.ag3.positions, self.ag4.positions, + box=self.ag1.dimensions) + psi_angles = calc_dihedrals(self.ag2.positions, self.ag3.positions, + self.ag4.positions, self.ag5.positions, + box=self.ag1.dimensions) + phi_psi = [(phi, psi) for phi, psi in zip(phi_angles, psi_angles)] + self.results.angles.append(phi_psi) + + def _conclude(self): + self.results.angles = np.rad2deg(np.array(self.results.angles)) + +
[docs] def plot(self, ax=None, ref=False, **kwargs): + """Plots data into standard Ramachandran plot. + + Each time step in :attr:`Ramachandran.results.angles` is plotted onto + the same graph. + + Parameters + ---------- + 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. + + ref : bool, optional + Adds a general Ramachandran plot which shows allowed and + marginally allowed regions + + kwargs : optional + All other kwargs are passed to :func:`matplotlib.pyplot.scatter`. + + Returns + ------- + ax : :class:`matplotlib.axes.Axes` + Axes with the plot, either `ax` or the current axes. + + """ + if ax is None: + ax = plt.gca() + ax.axis([-180, 180, -180, 180]) + ax.axhline(0, color='k', lw=1) + ax.axvline(0, color='k', lw=1) + ax.set(xticks=range(-180, 181, 60), yticks=range(-180, 181, 60), + xlabel=r"$\phi$", ylabel=r"$\psi$") + degree_formatter = plt.matplotlib.ticker.StrMethodFormatter( + r"{x:g}$\degree$") + ax.xaxis.set_major_formatter(degree_formatter) + ax.yaxis.set_major_formatter(degree_formatter) + + if ref: + X, Y = np.meshgrid(np.arange(-180, 180, 4), + np.arange(-180, 180, 4)) + levels = [1, 17, 15000] + colors = ['#A1D4FF', '#35A1FF'] + ax.contourf(X, Y, np.load(Rama_ref), levels=levels, colors=colors) + a = self.results.angles.reshape( + np.prod(self.results.angles.shape[:2]), 2) + ax.scatter(a[:, 0], a[:, 1], **kwargs) + return ax
+ + @property + def angles(self): + wmsg = ("The `angle` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.angles` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.angles
+ + +
[docs]class Janin(Ramachandran): + r"""Calculate :math:`\chi_1` and :math:`\chi_2` dihedral angles of selected + residues. + + :math:`\chi_1` and :math:`\chi_2` angles will be calculated for each residue + corresponding to `atomgroup` for each time step in the trajectory. A + :class:`~MDAnalysis.ResidueGroup` is generated from `atomgroup` which is + compared to the protein to determine if it is a legitimate selection. + + Note + ---- + If the residue selection is beyond the scope of the protein, then an error + will be raised. If the residue selection includes the residues ALA, CYS*, + GLY, PRO, SER, THR, or VAL (the default of the `select_remove` keyword + argument) then a warning will be raised and they will be removed from the + list of residues, but the analysis will still run. Some topologies have + altloc attributes which can add duplicate atoms to the selection and must + be removed. + + """ + + def __init__(self, atomgroup, + select_remove="resname ALA CYS* GLY PRO SER THR VAL", + select_protein="protein", + **kwargs): + r"""Parameters + ---------- + atomgroup : AtomGroup or ResidueGroup + atoms for residues for which :math:`\chi_1` and :math:`\chi_2` are + calculated + + select_remove : str + selection string to remove residues that do not have :math:`chi_2` + angles + + select_protein : str + selection string to subselect protein-only residues from + `atomgroup` to check that only amino acids are selected; if you + have non-standard amino acids then adjust this selection to include + them + + Raises + ------ + ValueError + if the final selection of residues is not contained within the + protein (as determined by + ``atomgroup.select_atoms(select_protein)``) + + ValueError + if not enough or too many atoms are found for a residue in the + selection, usually due to missing atoms or alternative locations, + or due to non-standard residues + + + .. versionchanged:: 2.0.0 + `select_remove` and `select_protein` keywords were added. + :attr:`angles` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + """ + super(Ramachandran, self).__init__( + atomgroup.universe.trajectory, **kwargs) + self.atomgroup = atomgroup + residues = atomgroup.residues + protein = atomgroup.select_atoms(select_protein).residues + remove = residues.atoms.select_atoms(select_remove).residues + + if not residues.issubset(protein): + raise ValueError("Found atoms outside of protein. Only atoms " + "inside of a protein " + f"(select_protein='{select_protein}') can be " + "used to calculate dihedrals.") + elif len(remove) != 0: + warnings.warn(f"All residues selected with '{select_remove}' " + "have been removed from the selection.") + residues = residues.difference(remove) + + self.ag1 = residues.atoms.select_atoms("name N") + self.ag2 = residues.atoms.select_atoms("name CA") + self.ag3 = residues.atoms.select_atoms("name CB") + self.ag4 = residues.atoms.select_atoms("name CG CG1") + self.ag5 = residues.atoms.select_atoms("name CD CD1 OD1 ND1 SD") + + # if there is an altloc attribute, too many atoms will be selected which + # must be removed before using the class, or the file is missing atoms + # for some residues which must also be removed + if any(len(self.ag1) != len(ag) for ag in [self.ag2, self.ag3, + self.ag4, self.ag5]): + raise ValueError("Too many or too few atoms selected. Check for " + "missing or duplicate atoms in topology.") + + def _conclude(self): + self.results.angles = (np.rad2deg(np.array( + self.results.angles)) + 360) % 360 + +
[docs] def plot(self, ax=None, ref=False, **kwargs): + """Plots data into standard Janin plot. + + Each time step in :attr:`Janin.results.angles` is plotted onto the + same graph. + + Parameters + ---------- + 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. + + ref : bool, optional + Adds a general Janin plot which shows allowed and marginally + allowed regions + + kwargs : optional + All other kwargs are passed to :func:`matplotlib.pyplot.scatter`. + + Returns + ------- + ax : :class:`matplotlib.axes.Axes` + Axes with the plot, either `ax` or the current axes. + + """ + if ax is None: + ax = plt.gca() + ax.axis([0, 360, 0, 360]) + ax.axhline(180, color='k', lw=1) + ax.axvline(180, color='k', lw=1) + ax.set(xticks=range(0, 361, 60), yticks=range(0, 361, 60), + xlabel=r"$\chi_1$", ylabel=r"$\chi_2$") + degree_formatter = plt.matplotlib.ticker.StrMethodFormatter( + r"{x:g}$\degree$") + ax.xaxis.set_major_formatter(degree_formatter) + ax.yaxis.set_major_formatter(degree_formatter) + + if ref: + X, Y = np.meshgrid(np.arange(0, 360, 6), np.arange(0, 360, 6)) + levels = [1, 6, 600] + colors = ['#A1D4FF', '#35A1FF'] + ax.contourf(X, Y, np.load(Janin_ref), levels=levels, colors=colors) + a = self.results.angles.reshape(np.prod( + self.results.angles.shape[:2]), 2) + ax.scatter(a[:, 0], a[:, 1], **kwargs) + return ax
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/distances.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/distances.html new file mode 100644 index 0000000000..57d3b13908 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/distances.html @@ -0,0 +1,354 @@ + + + + + + MDAnalysis.analysis.distances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.distances

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- https://www.mdanalysis.org
+# Copyright (c) 2006-2017 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
+#
+#
+
+
+"""
+Distance analysis --- :mod:`MDAnalysis.analysis.distances`
+==========================================================
+
+This module provides functions to rapidly compute distances between
+atoms or groups of atoms.
+
+:func:`dist` and :func:`between` can take atom groups that do not even
+have to be from the same :class:`~MDAnalysis.core.universe.Universe`.
+
+See Also
+--------
+:mod:`MDAnalysis.lib.distances`
+"""
+
+__all__ = ['distance_array', 'self_distance_array',
+           'contact_matrix', 'dist', 'between']
+
+import numpy as np
+import scipy.sparse
+
+from MDAnalysis.lib.distances import (
+           capped_distance,
+           self_distance_array, distance_array,  # legacy reasons
+)
+from MDAnalysis.lib.c_distances import contact_matrix_no_pbc, contact_matrix_pbc
+from MDAnalysis.lib.NeighborSearch import AtomNeighborSearch
+from MDAnalysis.lib.distances import calc_bonds
+
+
+import warnings
+import logging
+logger = logging.getLogger("MDAnalysis.analysis.distances")
+
+
+
[docs]def contact_matrix(coord, cutoff=15.0, returntype="numpy", box=None): + '''Calculates a matrix of contacts. + + There is a fast, high-memory-usage version for small systems + (*returntype* = 'numpy'), and a slower, low-memory-usage version for + larger systems (*returntype* = 'sparse'). + + If *box* dimensions are passed then periodic boundary conditions + are applied. + + Parameters + --------- + coord : array + Array of coordinates of shape ``(N, 3)`` and dtype float32. + cutoff : float, optional, default 15 + Particles within `cutoff` are considered to form a contact. + returntype : string, optional, default "numpy" + Select how the contact matrix is returned. + * ``"numpy"``: return as an ``(N. N)`` :class:`numpy.ndarray` + * ``"sparse"``: return as a :class:`scipy.sparse.lil_matrix` + box : array-like or ``None``, optional, default ``None`` + Simulation cell dimensions in the form of + :attr:`MDAnalysis.trajectory.timestep.Timestep.dimensions` when + periodic boundary conditions should be taken into account for + the calculation of contacts. + + Returns + ------- + array or sparse matrix + The contact matrix is returned in a format determined by the `returntype` + keyword. + + See Also + -------- + :mod:`MDAnalysis.analysis.contacts` for native contact analysis + + + .. versionchanged:: 0.11.0 + Keyword *suppress_progmet* and *progress_meter_freq* were removed. + ''' + + if returntype == "numpy": + adj = np.full((len(coord), len(coord)), False, dtype=bool) + pairs = capped_distance(coord, coord, max_cutoff=cutoff, box=box, return_distances=False) + + idx, idy = np.transpose(pairs) + adj[idx, idy]=True + + return adj + elif returntype == "sparse": + # Initialize square List of Lists matrix of dimensions equal to number + # of coordinates passed + sparse_contacts = scipy.sparse.lil_matrix((len(coord), len(coord)), dtype='bool') + if box is not None: + # with PBC + contact_matrix_pbc(coord, sparse_contacts, box, cutoff) + else: + # without PBC + contact_matrix_no_pbc(coord, sparse_contacts, cutoff) + return sparse_contacts
+ + +
[docs]def dist(A, B, offset=0, box=None): + """Return distance between atoms in two atom groups. + + The distance is calculated atom-wise. The residue ids are also + returned because a typical use case is to look at CA distances + before and after an alignment. Using the `offset` keyword one can + also add a constant offset to the resids which facilitates + comparison with PDB numbering. + + Arguments + --------- + A, B : AtomGroup + :class:`~MDAnalysis.core.groups.AtomGroup` with the + same number of atoms + offset : integer or tuple, optional, default 0 + An integer `offset` is added to *resids_A* and *resids_B* (see + below) in order to produce PDB numbers. + + If `offset` is :class:`tuple` then ``offset[0]`` is added to + *resids_A* and ``offset[1]`` to *resids_B*. Note that one can + actually supply numpy arrays of the same length as the atom + group so that an individual offset is added to each resid. + + Returns + ------- + resids_A : array + residue ids of the `A` group (possibly changed with `offset`) + resids_B : array + residue ids of the `B` group (possibly changed with `offset`) + distances : array + distances between the atoms + """ + + if A.atoms.n_atoms != B.atoms.n_atoms: + raise ValueError("AtomGroups A and B do not have the same number of atoms") + try: + off_A, off_B = offset + except (TypeError, ValueError): + off_A = off_B = int(offset) + residues_A = np.array(A.resids) + off_A + residues_B = np.array(B.resids) + off_B + + d = calc_bonds(A.positions, B.positions, box) + return np.array([residues_A, residues_B, d])
+ + +
[docs]def between(group, A, B, distance): + """Return sub group of `group` that is within `distance` of both `A` and `B` + + This function is not aware of periodic boundary conditions. + + Can be used to find bridging waters or molecules in an interface. + + Similar to "*group* and (AROUND *A* *distance* and AROUND *B* *distance*)". + + Parameters + ---------- + group : AtomGroup + Find members of `group` that are between `A` and `B` + A : AtomGroup + B : AtomGroup + `A` and `B` are the groups of atoms between which atoms in + `group` are searched for. The function works is more + efficient if `group` is bigger than either `A` or `B`. + distance : float + maximum distance for an atom to be counted as in the vicinity of + `A` or `B` + + Returns + ------- + AtomGroup + :class:`~MDAnalysis.core.groups.AtomGroup` of atoms that + fulfill the criterion + + + .. versionadded: 0.7.5 + + """ + ns_group = AtomNeighborSearch(group) + resA = ns_group.search(A, distance) + resB = ns_group.search(B, distance) + return resB.intersection(resA)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.html new file mode 100644 index 0000000000..511e5745c0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.html @@ -0,0 +1,305 @@ + + + + + + MDAnalysis.analysis.encore.bootstrap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.bootstrap

+# -*- 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-2017 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
+#
+"""
+bootstrap procedures --- :mod:`MDAnalysis.analysis.ensemble.bootstrap`
+======================================================================
+
+
+The module contains functions for bootstrapping either ensembles (Universe
+objects) or distance matrices, by resampling with replacement.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import numpy as np
+import logging
+import MDAnalysis as mda
+from .utils import TriangularMatrix, ParallelCalculation
+
+
+
[docs]def bootstrapped_matrix(matrix, ensemble_assignment): + """ + Bootstrap an input square matrix. The resulting matrix will have the same + shape as the original one, but the order of its elements will be drawn + (with repetition). Separately bootstraps each ensemble. + + Parameters + ---------- + + matrix : encore.utils.TriangularMatrix + similarity/dissimilarity matrix + + ensemble_assignment: numpy.array + array of ensemble assignments. This array must be matrix.size long. + + Returns + ------- + + this_m : encore.utils.TriangularMatrix + bootstrapped similarity/dissimilarity matrix + """ + ensemble_identifiers = np.unique(ensemble_assignment) + this_m = TriangularMatrix(size=matrix.size) + indexes = [] + for ens in ensemble_identifiers: + old_indexes = np.where(ensemble_assignment == ens)[0] + indexes.append(np.random.randint(low=np.min(old_indexes), + high=np.max(old_indexes) + 1, + size=old_indexes.shape[0])) + + indexes = np.hstack(indexes) + for j in range(this_m.size): + for k in range(j): + this_m[j, k] = matrix[indexes[j], indexes[k]] + + logging.info("Matrix bootstrapped.") + return this_m
+ + +
[docs]def get_distance_matrix_bootstrap_samples(distance_matrix, + ensemble_assignment, + samples=100, + ncores=1): + """ + Calculates distance matrices corresponding to bootstrapped ensembles, by + resampling with replacement. + + Parameters + ---------- + + distance_matrix : encore.utils.TriangularMatrix + Conformational distance matrix + + ensemble_assignment : str + Mapping from frames to which ensemble they are from (necessary because + ensembles are bootstrapped independently) + + samples : int, optional + How many bootstrap samples to create. + + ncores : int, optional + Maximum number of cores to be used (default is 1) + + Returns + ------- + + confdistmatrix : list of encore.utils.TriangularMatrix + """ + + bs_args = \ + [([distance_matrix, ensemble_assignment]) for i in range(samples)] + + pc = ParallelCalculation(ncores, bootstrapped_matrix, bs_args) + + pc_results = pc.run() + + bootstrap_matrices = list(zip(*pc_results))[1] + + return bootstrap_matrices
+ + +
[docs]def get_ensemble_bootstrap_samples(ensemble, + samples=100): + """ + Generates a bootstrapped ensemble by resampling with replacement. + + Parameters + ---------- + + ensemble : MDAnalysis.Universe + Conformational distance matrix + + samples : int, optional + How many bootstrap samples to create. + + Returns + ------- + + list of MDAnalysis.Universe objects + """ + + ensemble.transfer_to_memory() + + ensembles = [] + for i in range(samples): + indices = np.random.randint( + low=0, + high=ensemble.trajectory.timeseries().shape[1], + size=ensemble.trajectory.timeseries().shape[1]) + ensembles.append( + mda.Universe(ensemble.filename, + ensemble.trajectory.timeseries(order='fac')[indices,:,:], + format=mda.coordinates.memory.MemoryReader)) + return ensembles
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html new file mode 100644 index 0000000000..885ce932cf --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html @@ -0,0 +1,407 @@ + + + + + + MDAnalysis.analysis.encore.clustering.ClusterCollection — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.clustering.ClusterCollection

+# -*- 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-2017 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
+#
+"""
+Cluster representation --- :mod:`MDAnalysis.analysis.encore.clustering.ClusterCollection`
+=========================================================================================
+
+The module contains the Cluster and ClusterCollection classes which are
+designed to store results from clustering algorithms.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import numpy as np
+
+
+
[docs]class Cluster(object): + """ + Generic Cluster class for clusters with centroids. + + Attributes + ---------- + + id : int + Cluster ID number. Useful for the ClustersCollection class + + metadata : iterable + dict of lists or numpy.array, containing metadata for the cluster + elements. The iterable must return the same number of elements as + those that belong to the cluster. + + size : int + number of elements. + + centroid : element object + cluster centroid. + + elements : numpy.array + array containing the cluster elements. + """ + + def __init__(self, elem_list=None, centroid=None, idn=None, metadata=None): + """Class constructor. If elem_list is None, an empty cluster is created + and the remaining arguments ignored. + + Parameters + ---------- + + elem_list : numpy.array or None + numpy array of cluster elements + + centroid : None or element object + centroid + + idn : int + cluster ID + + metadata : iterable + metadata, one value for each cluster element. The iterable + must have the same length as the elements array. + + """ + + self.id = idn + + if elem_list is None: + self.size = 0 + self.elements = np.array([]) + self.centroid = None + self.metadata = {} + return + + self.metadata = {} + self.elements = elem_list + if centroid not in self.elements: + raise LookupError("Centroid of cluster not found in the element list") + + self.centroid = centroid + self.size = self.elements.shape[0] + if metadata: + for name, data in metadata.items(): + if len(data) != self.size: + raise TypeError('Size of metadata having label "{0}" ' + 'is not equal to the number of cluster ' + 'elements'.format(name)) + self.add_metadata(name, data) + + def __iter__(self): + """ + Iterate over elements in cluster + """ + return iter(self.elements) + + def __len__(self): + """ + Size of cluster + """ + return len(self.elements) + + def add_metadata(self, name, data): + if len(data) != self.size: + raise TypeError("Size of metadata is not equal to the number of " + "cluster elements") + self.metadata[name] = np.array(data) + + def __repr__(self): + """ + Textual representation + """ + if self.size == 0: + return "<Cluster with no elements>" + else: + return "<Cluster with {0} elements, centroid={1}, id={2}>".format( + self.size, + self.centroid, + self.id)
+ +
[docs]class ClusterCollection(object): + """Clusters collection class; this class represents the results of a full + clustering run. It stores a group of clusters defined as + encore.clustering.Cluster objects. + + Attributes + ---------- + + clusters : list + list of of Cluster objects which are part of the Cluster collection + +""" + + def __init__(self, elements=None, metadata=None): + """Class constructor. If elements is None, an empty cluster collection + will be created. Otherwise, the constructor takes as input an + iterable of ints, for instance: + + [ a, a, a, a, b, b, b, c, c, ... , z, z ] + + the variables a,b,c,...,z are cluster centroids, here as cluster + element numbers (i.e. 3 means the 4th element of the ordered input + for clustering). The array maps a correspondence between + cluster elements (which are implicitly associated with the + position in the array) with centroids, i. e. defines clusters. + For instance: + + [ 1, 1, 1, 4, 4, 5 ] + + means that elements 0, 1, 2 form a cluster which has 1 as centroid, + elements 3 and 4 form a cluster which has 4 as centroid, and + element 5 has its own cluster. + + + Parameters + ---------- + + elements : iterable of ints or None + clustering results. See the previous description for details + + metadata : {str:list, str:list,...} or None + metadata for the data elements. The list must be of the same + size as the elements array, with one value per element. + + """ + idn = 0 + if elements is None: + self.clusters = None + return + + if not len(set((type(el) for el in elements))) == 1: + raise TypeError("all the elements must have the same type") + self.clusters = [] + elements_array = np.array(elements) + centroids = np.unique(elements_array) + for i in centroids: + if elements[i] != i: + raise ValueError("element {0}, which is a centroid, doesn't " + "belong to its own cluster".format( + elements[i])) + for c in centroids: + this_metadata = {} + this_array = np.where(elements_array == c) + if metadata: + for k, v in metadata.items(): + this_metadata[k] = np.asarray(v)[this_array] + self.clusters.append( + Cluster(elem_list=this_array[0], idn=idn, centroid=c, + metadata=this_metadata)) + + idn += 1 + +
[docs] def get_ids(self): + """ + Get the ID numbers of the clusters + + Returns + ------- + + ids : list of int + list of cluster ids + """ + return [v.id for v in self.clusters]
+ +
[docs] def get_centroids(self): + """ + Get the centroids of the clusters + + Returns + ------- + + centroids : list of cluster element objects + list of cluster centroids + """ + + return [v.centroid for v in self.clusters]
+ + def __iter__(self): + """ + Iterate over clusters + + """ + return iter(self.clusters) + + def __len__(self): + """ + Length of clustering collection + """ + return len(self.clusters) + + def __repr__(self): + """ + Textual representation + """ + if self.clusters is None: + return "<ClusterCollection with no clusters>" + else: + return "<ClusterCollection with {0} clusters>".format( + len(self.clusters))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html new file mode 100644 index 0000000000..355fa06c73 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html @@ -0,0 +1,571 @@ + + + + + + MDAnalysis.analysis.encore.clustering.ClusteringMethod — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.clustering.ClusteringMethod

+# -*- 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-2017 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
+#
+"""
+clustering frontend --- :mod:`MDAnalysis.analysis.encore.clustering.ClusteringMethod`
+=====================================================================================
+
+The module defines classes for interfacing to various clustering algorithms.
+One has been implemented natively, and will always be available, while
+others are available only if scikit-learn is installed
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import numpy as np
+import warnings
+import logging
+
+# Import native affinity propagation implementation
+from . import affinityprop
+
+# Attempt to import scikit-learn clustering algorithms
+try:
+    import sklearn.cluster
+except ImportError:
+    sklearn = None
+    msg = "sklearn.cluster could not be imported: some functionality will " \
+          "not be available in encore.fit_clusters()"
+    warnings.warn(msg, category=ImportWarning)
+    logging.warning(msg)
+    del msg
+
+
+
[docs]def encode_centroid_info(clusters, cluster_centers_indices): + """ + Adjust cluster indices to include centroid information + as described in documentation for ClusterCollection + """ + values, indices = np.unique(clusters, return_inverse=True) + for c_center in cluster_centers_indices: + if clusters[c_center] != c_center: + values[indices[c_center]] = c_center + return values[indices]
+ + +
[docs]class ClusteringMethod (object): + """ + Base class for any Clustering Method + """ + + # Whether the method accepts a distance matrix + accepts_distance_matrix=True + + def __call__(self, x): + """ + Parameters + ---------- + + x + either trajectory coordinate data (np.array) or an + encore.utils.TriangularMatrix, encoding the conformational + distance matrix + + Raises + ------ + NotImplementedError + Method or behavior needs to be defined by a subclass + + """ + raise NotImplementedError("Class {0} doesn't implement __call__()" + .format(self.__class__.__name__))
+ + +
[docs]class AffinityPropagationNative(ClusteringMethod): + """ + Interface to the natively implemented Affinity propagation procedure. + """ + def __init__(self, + damping=0.9, preference=-1.0, + max_iter=500, convergence_iter=50, + add_noise=True): + """ + Parameters + ---------- + + damping : float, optional + Damping factor (default is 0.9). Parameter for the Affinity + Propagation for clustering. + + preference : float, optional + Preference parameter used in the Affinity Propagation algorithm for + clustering (default -1.0). A high preference value results in + many clusters, a low preference will result in fewer numbers of + clusters. + + max_iter : int, optional + Maximum number of iterations for affinity propagation (default is + 500). + + convergence_iter : int, optional + Minimum number of unchanging iterations to achieve convergence + (default is 50). Parameter in the Affinity Propagation for + clustering. + + add_noise : bool, optional + Apply noise to similarity matrix before running clustering + (default is True) + + """ + self.damping = damping + self.preference = preference + self.max_iter = max_iter + self.convergence_iter = convergence_iter + self.add_noise = add_noise + + def __call__(self, distance_matrix): + """ + Parameters + ---------- + + distance_matrix : encore.utils.TriangularMatrix + conformational distance matrix + + + Returns + ------- + numpy.array : array, shape(n_elements) + centroid frames of the clusters for all of the elements + + .. versionchanged:: 1.0.0 + This method no longer returns ``details`` + """ + clusters = affinityprop.AffinityPropagation( + s=distance_matrix * -1., # invert sign + preference=self.preference, + lam=self.damping, + max_iterations = self.max_iter, + convergence = self.convergence_iter, + noise=int(self.add_noise)) + + return clusters
+if sklearn: + +
[docs] class AffinityPropagation(ClusteringMethod): + """ + Interface to the Affinity propagation clustering procedure implemented + in sklearn. + """ + + def __init__(self, + damping=0.9, preference=-1.0, + max_iter=500, convergence_iter=50, + **kwargs): + """ + Parameters + ---------- + + damping : float, optional + Damping factor (default is 0.9). Parameter for the Affinity + Propagation for clustering. + + preference : float, optional + Preference parameter used in the Affinity Propagation algorithm + for clustering (default -1.0). A high preference value results + in many clusters, a low preference will result in fewer numbers + of clusters. + + max_iter : int, optional + Maximum number of iterations for affinity propagation (default + is 500). + + convergence_iter : int, optional + Minimum number of unchanging iterations to achieve convergence + (default is 50). Parameter in the Affinity Propagation for + clustering. + + **kwargs : optional + Other keyword arguments are passed to :class:`sklearn.cluster.AffinityPropagation`. + + """ + self.ap = \ + sklearn.cluster.AffinityPropagation( + damping=damping, + preference=preference, + max_iter=max_iter, + convergence_iter=convergence_iter, + affinity="precomputed", + **kwargs) + + def __call__(self, distance_matrix): + """ + Parameters + ---------- + + distance_matrix : encore.utils.TriangularMatrix + conformational distance matrix + + Returns + ------- + numpy.array : array, shape(n_elements) + centroid frames of the clusters for all of the elements + + .. versionchanged:: 1.0.0 + This method no longer returns ``details`` + """ + logging.info("Starting Affinity Propagation: {0}".format + (self.ap.get_params())) + + # Convert from distance matrix to similarity matrix + similarity_matrix = distance_matrix.as_array() * -1 + clusters = self.ap.fit_predict(similarity_matrix) + clusters = encode_centroid_info(clusters, + self.ap.cluster_centers_indices_) + + return clusters
+ + + +
[docs] class DBSCAN(ClusteringMethod): + """ + Interface to the DBSCAN clustering procedure implemented in sklearn. + """ + def __init__(self, + eps=0.5, + min_samples=5, + algorithm="auto", + leaf_size=30, + **kwargs): + """ + Parameters + ---------- + + eps : float, optional (default = 0.5) + The maximum distance between two samples for them to be + considered as in the same neighborhood. + + min_samples : int, optional (default = 5) + The number of samples (or total weight) in a neighborhood for + a point to be considered as a core point. This includes the + point itself. + + algorithm : {'auto', 'ball_tree', 'kd_tree', 'brute'}, optional + The algorithm to be used by the NearestNeighbors module + to compute pointwise distances and find nearest neighbors. + See NearestNeighbors module documentation for details. + + leaf_size : int, optional (default = 30) + Leaf size passed to BallTree or cKDTree. This can affect the + speed of the construction and query, as well as the memory + required to store the tree. The optimal value depends + on the nature of the problem. + + sample_weight : array, shape (n_samples,), optional + Weight of each sample, such that a sample with a weight of at + least ``min_samples`` is by itself a core sample; a sample with + negative weight may inhibit its eps-neighbor from being core. + Note that weights are absolute, and default to 1. + + """ + + self.dbscan = sklearn.cluster.DBSCAN(eps=eps, + min_samples = min_samples, + algorithm=algorithm, + leaf_size = leaf_size, + metric="precomputed", + **kwargs) + + def __call__(self, distance_matrix): + """ + Parameters + ---------- + + distance_matrix : encore.utils.TriangularMatrix + conformational distance matrix + + + Returns + ------- + numpy.array : array, shape(n_elements) + centroid frames of the clusters for all of the elements + + .. versionchanged:: 1.0.0 + This method no longer returns ``details`` + """ + logging.info("Starting DBSCAN: {0}".format( + self.dbscan.get_params())) + clusters = self.dbscan.fit_predict(distance_matrix.as_array()) + if np.min(clusters == -1): + clusters += 1 + # No centroid information is provided by DBSCAN, so we just + # pick random members + cluster_representatives = np.unique(clusters, return_index=True)[1] + clusters = encode_centroid_info(clusters, + cluster_representatives) + + return clusters
+ +
[docs] class KMeans(ClusteringMethod): + + # Whether the method accepts a distance matrix + accepts_distance_matrix = False + + """ + Interface to the KMeans clustering procedure implemented in sklearn. + """ + def __init__(self, + n_clusters, + max_iter=300, + n_init=10, + init='k-means++', + algorithm="auto", + tol=1e-4, + verbose=False, + random_state=None, + copy_x=True, + **kwargs): + """ + Parameters + ---------- + n_clusters : int + The number of clusters to form as well as the number of + centroids to generate. + + max_iter : int, optional (default 300) + Maximum number of iterations of the k-means algorithm to run. + + n_init : int, optional (default 10) + Number of time the k-means algorithm will be run with different + centroid seeds. The final results will be the best output of + n_init consecutive runs in terms of inertia. + + init : {'k-means++', 'random', or ndarray, or a callable}, optional + Method for initialization, default to 'k-means++': + 'k-means++' : selects initial cluster centers for k-mean + clustering in a smart way to speed up convergence. See section + Notes in k_init for more details. + 'random': generate k centroids from a Gaussian with mean and + variance estimated from the data. + If an ndarray is passed, it should be of shape + (n_clusters, n_features) and gives the initial centers. + If a callable is passed, it should take arguments X, k and + and a random state and return an initialization. + + tol : float, optional (default 1e-4) + The relative increment in the results before declaring + convergence. + + verbose : boolean, optional (default False) + Verbosity mode. + + random_state : integer or numpy.RandomState, optional + The generator used to initialize the centers. If an integer is + given, it fixes the seed. Defaults to the global numpy random + number generator. + + copy_x : boolean, optional + When pre-computing distances it is more numerically accurate to + center the data first. If copy_x is True, then the original + data is not modified. If False, the original data is modified, + and put back before the function returns, but small numerical + differences may be introduced by subtracting and then adding + the data mean. + + """ + self.kmeans = sklearn.cluster.KMeans(n_clusters=n_clusters, + max_iter=max_iter, + n_init=n_init, + init=init, + tol=tol, + verbose=verbose, + random_state=random_state, + copy_x=copy_x, + **kwargs) + + def __call__(self, coordinates): + """ + Parameters + ---------- + + coordinates : np.array + trajectory atom coordinates + + + Returns + ------- + numpy.array : array, shape(n_elements) + centroid frames of the clusters for all of the elements + + .. versionchanged:: 1.0.0 + This method no longer returns ``details`` + """ + logging.info("Starting Kmeans: {0}".format( + (self.kmeans.get_params()))) + clusters = self.kmeans.fit_predict(coordinates) + distances = self.kmeans.transform(coordinates) + cluster_center_indices = np.argmin(distances, axis=0) + clusters = encode_centroid_info(clusters, + cluster_center_indices) + + return clusters
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.html new file mode 100644 index 0000000000..793fb10ee0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.html @@ -0,0 +1,388 @@ + + + + + + MDAnalysis.analysis.encore.clustering.cluster — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.clustering.cluster

+# -*- 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-2017 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
+#
+"""
+clustering frontend --- :mod:`MDAnalysis.analysis.encore.clustering.cluster`
+============================================================================
+
+The module defines a function serving as front-end for various clustering
+algorithms, wrapping them to allow them to be used interchangably.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import numpy as np
+from ..utils import ParallelCalculation, merge_universes
+from .ClusterCollection import ClusterCollection
+from ..confdistmatrix import get_distance_matrix
+from . import ClusteringMethod
+
+
+
[docs]def cluster(ensembles, + method = ClusteringMethod.AffinityPropagationNative(), + select="name CA", + distance_matrix=None, + allow_collapsed_result=True, + ncores=1, + **kwargs): + """Cluster frames from one or more ensembles, using one or more + clustering methods. The function optionally takes pre-calculated distances + matrices as an argument. Note that not all clustering procedure can work + directly on distance matrices, so the distance matrices might be ignored + for particular choices of method. + + + Parameters + ---------- + + ensembles : MDAnalysis.Universe, or list, or list of list thereof + The function takes either a single Universe object, a list of Universe + objects or a list of lists of Universe objects. If given a single + universe, it simply clusters the conformations in the trajectory. If + given a list of ensembles, it will merge them and cluster them together, + keeping track of the ensemble to which each of the conformations belong. + Finally, if passed a list of list of ensembles, the function will just + repeat the functionality just described - merging ensembles for each + ensemble in the outer loop. + + method: encore.ClusteringMethod or list thereof, optional + A single or a list of instances of the Clustering classes from + the clustering module. A separate analysis will be run for each + method. Note that different parameters for the same clustering method + can be explored by adding different instances of the same clustering + class. + + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + + distance_matrix : encore.utils.TriangularMatrix or list thereof, optional + Distance matrix used for clustering. If this parameter + is not supplied the matrix will be calculated on the fly. + If several distance matrices are supplied, an analysis will be done + for each of them. The number of provided distance matrices should + match the number of provided ensembles. + + allow_collapsed_result: bool, optional + Whether a return value of a list of one value should be collapsed + into just the value. + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + + Returns + ------- + + list of ClustersCollection objects (or potentially a single + ClusteringCollection object if allow_collapsed_result is set to True) + + + Example + ------- + Two ensembles are created as Universe object using a topology file and + two trajectories. The topology- and trajectory files used are obtained + from the MDAnalysis test suite for two different simulations of the protein + AdK. + Here, we cluster two ensembles :: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF, DCD) + >>> ens2 = Universe(PSF, DCD2) + >>> cluster_collection = encore.cluster([ens1,ens2]) + >>> print cluster_collection + + You can change the parameters of the clustering method by explicitly + specifying the method :: + + >>> cluster_collection = + encore.cluster( + [ens1,ens2], + method=encore.AffinityPropagationNative(preference=-2.)) + + Here is an illustration using DBSCAN algorithm, instead + of the default clustering method :: + + >>> cluster_collection = + encore.cluster( + [ens1,ens2], + method=encore.DBSCAN()) + + You can also combine multiple methods in one call :: + + >>> cluster_collection = + encore.cluster( + [ens1,ens2], + method=[encore.AffinityPropagationNative(preference=-1.), + encore.AffinityPropagationNative(preference=-2.)]) + + In addition to standard cluster membership information, the + `cluster_collection` output keep track of the origin of each + conformation, so you check how the different trajectories are + represented in each cluster. Here, for brevity, we print just the + members of the two first clusters :: + + >>> print [cluster.metadata["ensemble_membership"] + for cluster in cluster_collection][:2] + [array([1, 1, 1, 1, 2]), array([1, 1, 1, 1, 1])] + + """ + + # Internally, ensembles are always transformed to a list of lists + if ensembles is not None: + if not hasattr(ensembles, '__iter__'): + ensembles = [ensembles] + + ensembles_list = ensembles + if not hasattr(ensembles[0], '__iter__'): + ensembles_list = [ensembles] + + # Calculate merged ensembles and transfer to memory + merged_ensembles = [] + for ensembles in ensembles_list: + # Transfer ensembles to memory + for ensemble in ensembles: + ensemble.transfer_to_memory() + merged_ensembles.append(merge_universes(ensembles)) + + methods = method + if not hasattr(method, '__iter__'): + methods = [method] + + # Check whether any of the clustering methods can make use of a distance + # matrix + any_method_accept_distance_matrix = \ + np.any([_method.accepts_distance_matrix for _method in methods]) + + # If distance matrices are provided, check that it matches the number + # of ensembles + if distance_matrix: + if not hasattr(distance_matrix, '__iter__'): + distance_matrix = [distance_matrix] + if ensembles is not None and \ + len(distance_matrix) != len(merged_ensembles): + raise ValueError("Dimensions of provided list of distance matrices " + "does not match that of provided list of " + "ensembles: {0} vs {1}" + .format(len(distance_matrix), + len(merged_ensembles))) + + else: + # Calculate distance matrices for all merged ensembles - if not provided + if any_method_accept_distance_matrix: + distance_matrix = [] + for merged_ensemble in merged_ensembles: + distance_matrix.append(get_distance_matrix(merged_ensemble, + select=select, + **kwargs)) + + args = [] + for method in methods: + if method.accepts_distance_matrix: + args += [(d,) for d in distance_matrix] + else: + for merged_ensemble in merged_ensembles: + coordinates = merged_ensemble.trajectory.timeseries(order="fac") + + # Flatten coordinate matrix into n_frame x n_coordinates + coordinates = np.reshape(coordinates, + (coordinates.shape[0], -1)) + + args.append((coordinates,)) + + # Execute clustering procedure + pc = ParallelCalculation(ncores, methods, args) + + # Run parallel calculation + results = pc.run() + + # Keep track of which sample belongs to which ensembles + metadata = None + if ensembles is not None: + ensemble_assignment = [] + for i, ensemble in enumerate(ensembles): + ensemble_assignment += [i+1]*len(ensemble.trajectory) + ensemble_assignment = np.array(ensemble_assignment) + metadata = {'ensemble_membership': ensemble_assignment} + + # Create clusters collections from clustering results, + # one for each cluster. None if clustering didn't work. + ccs = [ClusterCollection(clusters[1], + metadata=metadata) for clusters in results] + + if allow_collapsed_result and len(ccs) == 1: + ccs = ccs[0] + + return ccs
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.html new file mode 100644 index 0000000000..b725c4c9d5 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.html @@ -0,0 +1,529 @@ + + + + + + MDAnalysis.analysis.encore.confdistmatrix — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.confdistmatrix

+# -*- 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-2017 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
+#
+"""
+Distance Matrix calculation --- :mod:`MDAnalysis.analysis.ensemble.confdistmatrix`
+==================================================================================
+
+
+The module contains a base class to easily compute, using
+parallelization and shared memory, matrices of conformational
+distance between the structures stored as frames in a Universe. A
+class to compute an RMSD matrix in such a way is also available.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+from joblib import Parallel, delayed
+import numpy as np
+from getpass import getuser
+from socket import gethostname
+from datetime import datetime
+from time import sleep
+import logging
+import warnings
+
+from ...core.universe import Universe
+
+from ..align import rotation_matrix
+
+from .cutils import PureRMSD
+from .utils import TriangularMatrix, trm_indices
+
+
+
[docs]def conformational_distance_matrix(ensemble, + conf_dist_function, select="", + superimposition_select="", n_jobs=1, pairwise_align=True, weights='mass', + metadata=True, verbose=False, + max_nbytes=None): + """ + Run the conformational distance matrix calculation. + args and kwargs are passed to conf_dist_function. + + Parameters + ---------- + ensemble : Universe object + Universe object for which the conformational distance matrix will + be computed. + conf_dist_function : function object + Function that fills the matrix with conformational distance + values. See set_rmsd_matrix_elements for an example. + select : str, optional + use this selection for the calculation of conformational distance + superimposition_select : str, optional + use atoms from this selection for fitting instead of those of + `select` + pairwise_align : bool, optional + Whether to perform pairwise alignment between conformations. + Default is True (do the superimposition) + weights : str/array_like, optional + weights to be used for fit. Can be either 'mass' or an array_like + metadata : bool, optional + Whether to build a metadata dataset for the calculated matrix. + Default is True. + n_jobs : int, optional + Number of cores to be used for parallel calculation + Default is 1. -1 uses all available cores + max_nbytes : str, optional + Threshold on the size of arrays passed to the workers that triggers automated memory mapping in temp_folder (default is None). + See https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html for detailed documentation. + verbose : bool, optional + enable verbose output + + Returns + ------- + conf_dist_matrix : encore.utils.TriangularMatrix object + Conformational distance matrix in triangular representation. + + """ + + # framesn: number of frames + framesn = len(ensemble.trajectory.timeseries( + ensemble.select_atoms(select), order='fac')) + + # Prepare metadata recarray + if metadata: + metadata = np.array([(gethostname(), + getuser(), + str(datetime.now()), + ensemble.filename, + framesn, + pairwise_align, + select, + weights=='mass')], + dtype=[('host', object), + ('user', object), + ('date', object), + ('topology file', object), + ('number of frames', int), + ('pairwise superimposition', bool), + ('superimposition subset', object), + ('mass-weighted', bool)]) + + # Prepare alignment subset coordinates as necessary + + rmsd_coordinates = ensemble.trajectory.timeseries( + ensemble.select_atoms(select), + order='fac') + + if pairwise_align: + if superimposition_select: + subset_select = superimposition_select + else: + subset_select = select + + fitting_coordinates = ensemble.trajectory.timeseries( + ensemble.select_atoms(subset_select), + order='fac') + else: + fitting_coordinates = None + + if not isinstance(weights, (list, tuple, np.ndarray)) and weights == 'mass': + weights = ensemble.select_atoms(select).masses.astype(np.float64) + if pairwise_align: + subset_weights = ensemble.select_atoms(subset_select).masses.astype(np.float64) + else: + subset_weights = None + elif weights is None: + weights = np.ones((ensemble.trajectory.timeseries( + ensemble.select_atoms(select))[0].shape[0])).astype(np.float64) + if pairwise_align: + subset_weights = np.ones((fit_coords[0].shape[0])).astype(np.float64) + else: + subset_weights = None + else: + if pairwise_align: + if len(weights) != 2: + raise RuntimeError("used pairwise alignment with custom " + "weights. Please provide 2 tuple with " + "weights for 'select' and " + "'superimposition_select'") + subset_weights = weights[1] + weights = weights[0] + else: + subset_weights = None + + # Allocate for output matrix + matsize = framesn * (framesn + 1) // 2 + distmat = np.empty(matsize, np.float64) + + # Initialize workers. Simple worker doesn't perform fitting, + # fitter worker does. + indices = trm_indices((0, 0), (framesn - 1, framesn - 1)) + Parallel(n_jobs=n_jobs, verbose=verbose, require='sharedmem', + max_nbytes=max_nbytes)(delayed(conf_dist_function)( + np.int64(element), + rmsd_coordinates, + distmat, + weights, + fitting_coordinates, + subset_weights) for element in indices) + + + # When the workers have finished, return a TriangularMatrix object + return TriangularMatrix(distmat, metadata=metadata)
+ + +
[docs]def set_rmsd_matrix_elements(tasks, coords, rmsdmat, weights, fit_coords=None, + fit_weights=None, *args, **kwargs): + + ''' + RMSD Matrix calculator + + Parameters + ---------- + tasks : iterator of int of length 2 + Given a triangular matrix, this function will calculate RMSD + values from element tasks[0] to tasks[1]. Since the matrix + is triangular, the trm_indices matrix automatically + calculates the corrisponding i,j matrix indices. + The matrix is written as an array in a row-major + order (see the TriangularMatrix class for details). + + If fit_coords and fit_weights are specified, the structures + will be superimposed before calculating RMSD, and fit_coords and fit_weights + will be used to place both structures at their center of mass and + compute the rotation matrix. In this case, both fit_coords and fit_weights + must be specified. + coords : numpy.array + Array of the ensemble coordinates + weights : numpy.array + Array of atomic weights, having the same order as the + coordinates array + rmsdmat : encore.utils.TriangularMatrix + Memory-shared triangular matrix object + fit_coords : numpy.array or None, optional + Array of the coordinates used for fitting + fit_weights : numpy.array. optional + Array of atomic weights, having the same order as the + fit_coords array + ''' + i, j = tasks + + if fit_coords is None and fit_weights is None: + sumweights = np.sum(weights) + rmsdmat[(i + 1) * i // 2 + j] = PureRMSD(coords[i].astype(np.float64), + coords[j].astype(np.float64), + coords[j].shape[0], + weights, + sumweights) + + elif fit_coords is not None and fit_weights is not None: + sumweights = np.sum(weights) + subset_weights = np.asarray(fit_weights) / np.mean(fit_weights) + com_i = np.average(fit_coords[i], axis=0, + weights=fit_weights) + translated_i = coords[i] - com_i + subset1_coords = fit_coords[i] - com_i + com_j = np.average(fit_coords[j], axis=0, + weights=fit_weights) + translated_j = coords[j] - com_j + subset2_coords = fit_coords[j] - com_j + rotamat = rotation_matrix(subset1_coords, subset2_coords, + subset_weights)[0] + rotated_i = np.transpose(np.dot(rotamat, np.transpose(translated_i))) + rmsdmat[(i + 1) * i // 2 + j] = PureRMSD( + rotated_i.astype(np.float64), translated_j.astype(np.float64), + coords[j].shape[0], weights, sumweights) + else: + raise TypeError("Both fit_coords and fit_weights must be specified " + "if one of them is given")
+ + +
[docs]def get_distance_matrix(ensemble, + select="name CA", + load_matrix=None, + save_matrix=None, + superimpose=True, + superimposition_subset="name CA", + weights='mass', + n_jobs=1, + max_nbytes=None, + verbose=False, + *conf_dist_args, + **conf_dist_kwargs): + """ + Retrieves or calculates the conformational distance (RMSD) + matrix. The distance matrix is calculated between all the frames of all + the :class:`~MDAnalysis.core.universe.Universe` objects given as input. + The order of the matrix elements depends on the order of the coordinates + of the ensembles and on the order of the input ensembles themselves, + therefore the order of the input list is significant. + + The distance matrix can either be calculated from input ensembles or + loaded from an input numpy binary file. + + Please notice that the .npz file does not contain a bi-dimensional array, + but a flattened representation that is meant to represent the elements of + an encore.utils.TriangularMatrix object. + + + Parameters + ---------- + ensemble : Universe + select : str + Atom selection string in the MDAnalysis format. Default is "name CA" + load_matrix : str, optional + Load similarity/dissimilarity matrix from numpy binary file instead + of calculating it (default is None). A filename is required. + save_matrix : bool, optional + Save calculated matrix as numpy binary file (default is None). A + filename is required. + superimpose : bool, optional + Whether to superimpose structures before calculating distance + (default is True). + superimposition_subset : str, optional + Group for superimposition using MDAnalysis selection syntax + (default is CA atoms: "name CA") + weights : str/array_like, optional + weights to be used for fit. Can be either 'mass' or an array_like + n_jobs : int, optional + Maximum number of cores to be used (default is 1). If -1 use all cores. + max_nbytes : str, optional + Threshold on the size of arrays passed to the workers that triggers automated memory mapping in temp_folder (default is None). + See https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html for detailed documentation. + verbose : bool, optional + print progress + + Returns + ------- + + confdistmatrix : encore.utils.TriangularMatrix + Conformational distance matrix. . + """ + + # Load the matrix if required + if load_matrix: + logging.info( + " Loading similarity matrix from: {0}".format(load_matrix)) + confdistmatrix = \ + TriangularMatrix( + size=ensemble.trajectory.timeseries( + ensemble.select_atoms(select), + order='fac').shape[0], + loadfile=load_matrix) + logging.info(" Done!") + for key in confdistmatrix.metadata.dtype.names: + logging.info(" {0} : {1}".format( + key, str(confdistmatrix.metadata[key][0]))) + + # Check matrix size for consistency + if not confdistmatrix.size == \ + ensemble.trajectory.timeseries( + ensemble.select_atoms(select), + order='fac').shape[0]: + logging.error( + "ERROR: The size of the loaded matrix and of the ensemble" + " do not match") + return None + + + # Calculate the matrix + else: + + # Transfer universe to memory to ensure timeseries() support + ensemble.transfer_to_memory() + + if not isinstance(weights, (list, tuple, np.ndarray)) and weights == 'mass': + weight_type = 'Mass' + elif weights is None: + weight_type = 'None' + else: + weight_type = 'Custom' + logging.info( + " Perform pairwise alignment: {0}".format(str(superimpose))) + logging.info(" weighted alignment and RMSD: {0}".format(weight_type)) + if superimpose: + logging.info( + " Atoms subset for alignment: {0}" + .format(superimposition_subset)) + logging.info(" Calculating similarity matrix . . .") + + # Use superimposition subset, if necessary. If the pairwise alignment + # is not required, it will not be performed anyway. + confdistmatrix = conformational_distance_matrix(ensemble, + conf_dist_function=set_rmsd_matrix_elements, + select=select, + pairwise_align=superimpose, + weights=weights, + n_jobs=n_jobs, + max_nbytes=max_nbytes, + verbose=verbose) + + logging.info(" Done!") + + if save_matrix: + confdistmatrix.savez(save_matrix) + + return confdistmatrix
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.html new file mode 100644 index 0000000000..ee9eb819cb --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.html @@ -0,0 +1,397 @@ + + + + + + MDAnalysis.analysis.encore.covariance — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.covariance

+# -*- 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-2017 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
+#
+"""
+Covariance calculation --- :mod:`encore.covariance`
+=====================================================================
+
+The module contains functions to estimate the covariance matrix of
+an ensemble of structures.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+"""
+import numpy as np
+
+
[docs]def ml_covariance_estimator(coordinates, reference_coordinates=None): + """ + Standard maximum likelihood estimator of the covariance matrix. + + Parameters + ---------- + + coordinates : numpy.array + Flattened array of coordiantes + + reference_coordinates : numpy.array + Optional reference to use instead of mean + + Returns + ------- + + cov_mat : numpy.array + Estimate of covariance matrix + + """ + + if reference_coordinates is not None: + + # Offset from reference + coordinates_offset = coordinates - reference_coordinates + + else: + # Normal covariance calculation: distance to the average + coordinates_offset = coordinates - np.average(coordinates, axis=0) + + # Calculate covariance manually + coordinates_cov = np.zeros((coordinates.shape[1], + coordinates.shape[1])) + for frame in coordinates_offset: + coordinates_cov += np.outer(frame, frame) + coordinates_cov /= coordinates.shape[0] + + return coordinates_cov
+ +
[docs]def shrinkage_covariance_estimator( coordinates, + reference_coordinates=None, + shrinkage_parameter=None): + """ + Shrinkage estimator of the covariance matrix using the method described in + + Improved Estimation of the Covariance Matrix of Stock Returns With an + Application to Portfolio Selection. Ledoit, O.; Wolf, M., Journal of + Empirical Finance, 10, 5, 2003 + + This implementation is based on the matlab code made available by Olivier + Ledoit on his website: + http://www.ledoit.net/ole2_abstract.htm + + Parameters + ---------- + + coordinates : numpy.array + Flattened array of coordinates + + reference_coordinates: numpy.array + Optional reference to use instead of mean + + shrinkage_parameter: None or float + Optional shrinkage parameter + + Returns + -------- + + cov_mat : nump.array + Covariance matrix + """ + + x = coordinates + t = x.shape[0] + n = x.shape[1] + + mean_x = np.average(x, axis=0) + + # Use provided coordinates as "mean" if provided + if reference_coordinates is not None: + mean_x = reference_coordinates + + x = x - mean_x + xmkt = np.average(x, axis=1) + + # Call maximum likelihood estimator (note the additional column) + sample = ml_covariance_estimator(np.hstack([x, xmkt[:, np.newaxis]]), 0)\ + * (t-1)/float(t) + + # Split covariance matrix into components + covmkt = sample[0:n, n] + varmkt = sample[n, n] + sample = sample[:n, :n] + + # Prior + prior = np.outer(covmkt, covmkt)/varmkt + prior[np.ma.make_mask(np.eye(n))] = np.diag(sample) + + # If shrinkage parameter is not set, estimate it + if shrinkage_parameter is None: + + # Frobenius norm + c = np.linalg.norm(sample - prior, ord='fro')**2 + + y = x**2 + p = 1/float(t)*np.sum(np.dot(np.transpose(y), y))\ + - np.sum(np.sum(sample**2)) + rdiag = 1/float(t)*np.sum(np.sum(y**2))\ + - np.sum(np.diag(sample)**2) + z = x * np.repeat(xmkt[:, np.newaxis], n, axis=1) + v1 = 1/float(t) * np.dot(np.transpose(y), z) \ + - np.repeat(covmkt[:, np.newaxis], n, axis=1)*sample + roff1 = (np.sum( + v1*np.transpose( + np.repeat( + covmkt[:, np.newaxis], n, axis=1) + ) + )/varmkt - + np.sum(np.diag(v1)*covmkt)/varmkt) + v3 = 1/float(t)*np.dot(np.transpose(z), z) - varmkt*sample + roff3 = (np.sum(v3*np.outer(covmkt, covmkt))/varmkt**2 - + np.sum(np.diag(v3)*covmkt**2)/varmkt**2) + roff = 2*roff1-roff3 + r = rdiag+roff + + # Shrinkage constant + k = (p-r)/c + shrinkage_parameter = max(0, min(1, k/float(t))) + + # calculate covariance matrix + sigma = shrinkage_parameter*prior+(1-shrinkage_parameter)*sample + + return sigma
+ + + + +
[docs]def covariance_matrix(ensemble, + select="name CA", + estimator=shrinkage_covariance_estimator, + weights='mass', + reference=None): + """ + Calculates (optionally mass weighted) covariance matrix + + Parameters + ---------- + ensemble : Universe object + The structural ensemble + select : str (optional) + Atom selection string in the MDAnalysis format. + estimator : function (optional) + Function that estimates the covariance matrix. It requires at least + a "coordinates" numpy array (of shape (N,M,3), where N is the number + of frames and M the number of atoms). See ml_covariance_estimator and + shrinkage_covariance_estimator for reference. + weights : str/array_like (optional) + specify weights. If ``'mass'`` then chose masses of ensemble atoms, if ``None`` chose uniform weights + reference : MDAnalysis.Universe object (optional) + Use the distances to a specific reference structure rather than the + distance to the mean. + + Returns + ------- + cov_mat : numpy.array + Covariance matrix + + """ + # Extract coordinates from ensemble + coordinates = ensemble.trajectory.timeseries( + ensemble.select_atoms(select), + order='fac') + + # Flatten coordinate matrix into n_frame x n_coordinates + coordinates = np.reshape(coordinates, (coordinates.shape[0], -1)) + + # Extract coordinates from reference structure, if specified + reference_coordinates = None + if reference is not None: + # Select the same atoms in reference structure + reference_atom_selection = reference.select_atoms(select) + reference_coordinates = reference_atom_selection.atoms.positions + + # Flatten reference coordinates + reference_coordinates = reference_coordinates.flatten() + + sigma = estimator(coordinates, reference_coordinates) + + # Optionally correct with weights + if weights is not None: + # Calculate mass-weighted covariance matrix + if not isinstance(weights, (list, tuple, np.ndarray)) and weights == 'mass': + if select: + weights = ensemble.select_atoms(select).masses + else: + weights = ensemble.atoms.masses + else: + if select: + req_len = ensemble.select_atoms(select).n_atoms + else: + req_len = ensemble.atoms.n_atoms + if req_len != len(weights): + raise ValueError("number of weights is unequal to number of " + "atoms in ensemble") + + # broadcast to a (len(weights), 3) array + weights = np.repeat(weights, 3) + + weight_matrix = np.sqrt(np.identity(len(weights))*weights) + sigma = np.dot(weight_matrix, np.dot(sigma, weight_matrix)) + + return sigma
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html new file mode 100644 index 0000000000..64c76989e1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html @@ -0,0 +1,343 @@ + + + + + + MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod

+# -*- 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-2017 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
+#
+"""
+dimensionality reduction frontend --- :mod:`MDAnalysis.analysis.encore.clustering.DimensionalityReductionMethod`
+================================================================================================================
+
+The module defines classes for interfacing to various dimensionality reduction
+algorithms. One has been implemented natively, and will always be available,
+while others are available only if scikit-learn is installed
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import logging
+import warnings
+
+# Import native affinity propagation implementation
+from . import stochasticproxembed
+
+# Attempt to import scikit-learn clustering algorithms
+try:
+    import sklearn.decomposition
+except ImportError:
+    sklearn = None
+    import warnings
+    warnings.warn("sklearn.decomposition could not be imported: some "
+                  "functionality will not be available in "
+                  "encore.dimensionality_reduction()", category=ImportWarning)
+
+
+
[docs]class DimensionalityReductionMethod (object): + """ + Base class for any Dimensionality Reduction Method + """ + + # Whether the method accepts a distance matrix + accepts_distance_matrix=True + + def __call__(self, x): + """ + Parameters + ---------- + + x + either trajectory coordinate data (np.array) or an + encore.utils.TriangularMatrix, encoding the conformational + distance matrix + + + Returns + ------- + numpy.array + coordinates in reduced space + + """ + raise NotImplementedError("Class {0} doesn't implement __call__()" + .format(self.__class__.__name__))
+ + +
[docs]class StochasticProximityEmbeddingNative(DimensionalityReductionMethod): + """ + Interface to the natively implemented Affinity propagation procedure. + """ + def __init__(self, + dimension = 2, + distance_cutoff = 1.5, + min_lam = 0.1, + max_lam = 2.0, + ncycle = 100, + nstep = 10000,): + """ + Parameters + ---------- + + dimension : int + Number of dimensions to which the conformational space will be + reduced to (default is 3). + + min_lam : float, optional + Final lambda learning rate (default is 0.1). + + max_lam : float, optional + Starting lambda learning rate parameter (default is 2.0). + + ncycle : int, optional + Number of cycles per run (default is 100). At the end of every + cycle, lambda is updated. + + nstep : int, optional + Number of steps per cycle (default is 10000) + + """ + self.dimension = dimension + self.distance_cutoff = distance_cutoff + self.min_lam = min_lam + self.max_lam = max_lam + self.ncycle = ncycle + self.nstep = nstep + self.stressfreq = -1 + + def __call__(self, distance_matrix): + """ + Parameters + ---------- + + distance_matrix : encore.utils.TriangularMatrix + conformational distance matrix + + + Returns + ------- + numpy.array + coordinates in reduced space + + """ + final_stress, coordinates = \ + stochasticproxembed.StochasticProximityEmbedding( + s=distance_matrix, + rco=self.distance_cutoff, + dim=self.dimension, + minlam = self.min_lam, + maxlam = self.max_lam, + ncycle = self.ncycle, + nstep = self.nstep, + stressfreq = self.stressfreq + ) + return coordinates, {"final_stress": final_stress}
+ + + +if sklearn: + +
[docs] class PrincipalComponentAnalysis(DimensionalityReductionMethod): + """ + Interface to the PCA dimensionality reduction method implemented in + sklearn. + """ + + # Whether the method accepts a distance matrix + accepts_distance_matrix = False + + def __init__(self, + dimension = 2, + **kwargs): + """ + Parameters + ---------- + + dimension : int + Number of dimensions to which the conformational space will be + reduced to (default is 3). + """ + self.pca = sklearn.decomposition.PCA(n_components=dimension, + **kwargs) + + def __call__(self, coordinates): + """ + Parameters + ---------- + + coordinates : np.array + trajectory atom coordinates + + + Returns + ------- + numpy.array + coordinates in reduced space + """ + coordinates = self.pca.fit_transform(coordinates) + return coordinates.T, {}
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html new file mode 100644 index 0000000000..bfdf803382 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html @@ -0,0 +1,388 @@ + + + + + + MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality

+# -*- 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-2017 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
+#
+"""
+dimensionality reduction frontend --- :mod:`MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality`
+======================================================================================================================
+
+The module defines a function serving as front-end for various dimensionality
+reduction algorithms, wrapping them to allow them to be used interchangably.
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+"""
+import numpy as np
+from ..confdistmatrix import get_distance_matrix
+from ..utils import ParallelCalculation, merge_universes
+from ..dimensionality_reduction.DimensionalityReductionMethod import (
+    StochasticProximityEmbeddingNative)
+
+
+
[docs]def reduce_dimensionality(ensembles, + method=StochasticProximityEmbeddingNative(), + select="name CA", + distance_matrix=None, + allow_collapsed_result=True, + ncores=1, + **kwargs): + """ + Reduce dimensions in frames from one or more ensembles, using one or more + dimensionality reduction methods. The function optionally takes + pre-calculated distances matrices as an argument. Note that not all + dimensionality reduction procedure can work directly on distance matrices, + so the distance matrices might be ignored for particular choices of + method. + + + Parameters + ---------- + + ensembles : MDAnalysis.Universe, or list or list of list thereof + The function takes either a single Universe object, a list of Universe + objects or a list of lists of Universe objects. If given a single + universe, it simply works on the conformations in the trajectory. If + given a list of ensembles, it will merge them and analyse them together, + keeping track of the ensemble to which each of the conformations belong. + Finally, if passed a list of list of ensembles, the function will just + repeat the functionality just described - merging ensembles for each + ensemble in the outer loop. + + method : MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod or list + A single or a list of instances of the DimensionalityReductionMethod + classes from the dimensionality_reduction module. A separate analysis + will be run for each method. Note that different parameters for the + same method can be explored by adding different instances of + the same dimensionality reduction class. Options are Stochastic + Proximity Embedding or Principal Component Analysis. + + select : str, optional + Atom selection string in the MDAnalysis format (default is "name CA") + + distance_matrix : encore.utils.TriangularMatrix, optional + Distance matrix for stochastic proximity embedding. If this parameter + is not supplied an RMSD distance matrix will be calculated on the fly (default). + If several distance matrices are supplied, an analysis will be done + for each of them. The number of provided distance matrices should + match the number of provided ensembles. + + allow_collapsed_result: bool, optional + Whether a return value of a list of one value should be collapsed + into just the value (default = True). + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + + Returns + ------- + + list of coordinate arrays in the reduced dimensions (or potentially a single + coordinate array object if allow_collapsed_result is set to True) + + + Example + ------- + Two ensembles are created as Universe object using a topology file and + two trajectories. The topology- and trajectory files used are obtained + from the MDAnalysis test suite for two different simulations of the protein + AdK. + Here, we reduce two ensembles to two dimensions, and plot the result using + matplotlib: :: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF, DCD) + >>> ens2 = Universe(PSF, DCD2) + >>> coordinates, details = encore.reduce_dimensionality([ens1,ens2]) + >>> plt.scatter(coordinates[0], coordinates[1], + color=[["red", "blue"][m-1] for m + in details["ensemble_membership"]]) + + Note how we extracted information about which conformation belonged to + which ensemble from the details variable. + + You can change the parameters of the dimensionality reduction method + by explicitly specifying the method :: + + >>> coordinates, details = + encore.reduce_dimensionality([ens1,ens2], + method=encore.StochasticProximityEmbeddingNative(dimension=3)) + + Here is an illustration using Principal Component Analysis, instead + of the default dimensionality reduction method :: + + >>> coordinates, details = + encore.reduce_dimensionality( + [ens1,ens2], + method=encore.PrincipalComponentAnalysis(dimension=2)) + + You can also combine multiple methods in one call :: + + >>> coordinates, details = + encore.reduce_dimensionality( + [ens1,ens2], + method=[encore.PrincipalComponentAnalysis(dimension=2), + encore.StochasticProximityEmbeddingNative(dimension=2)]) + + """ + + if ensembles is not None: + if not hasattr(ensembles, '__iter__'): + ensembles = [ensembles] + + ensembles_list = ensembles + if not hasattr(ensembles[0], '__iter__'): + ensembles_list = [ensembles] + + # Calculate merged ensembles and transfer to memory + merged_ensembles = [] + for ensembles in ensembles_list: + # Transfer ensembles to memory + for ensemble in ensembles: + ensemble.transfer_to_memory() + merged_ensembles.append(merge_universes(ensembles)) + + methods = method + if not hasattr(method, '__iter__'): + methods = [method] + + # Check whether any of the methods can make use of a distance matrix + any_method_accept_distance_matrix = \ + np.any([_method.accepts_distance_matrix for _method in + methods]) + + + + # If distance matrices are provided, check that it matches the number + # of ensembles + if distance_matrix: + if not hasattr(distance_matrix, '__iter__'): + distance_matrix = [distance_matrix] + if ensembles is not None and \ + len(distance_matrix) != len(merged_ensembles): + raise ValueError("Dimensions of provided list of distance matrices " + "does not match that of provided list of " + "ensembles: {0} vs {1}" + .format(len(distance_matrix), + len(merged_ensembles))) + + else: + # Calculate distance matrices for all merged ensembles - if not provided + if any_method_accept_distance_matrix: + distance_matrix = [] + for merged_ensemble in merged_ensembles: + distance_matrix.append(get_distance_matrix(merged_ensemble, + select=select, + **kwargs)) + + args = [] + for method in methods: + if method.accepts_distance_matrix: + args += [(d,) for d in distance_matrix] + else: + for merged_ensemble in merged_ensembles: + coordinates = merged_ensemble.trajectory.timeseries(order="fac") + + # Flatten coordinate matrix into n_frame x n_coordinates + coordinates = np.reshape(coordinates, + (coordinates.shape[0], -1)) + + args.append((coordinates,)) + + # Execute dimensionality reduction procedure + pc = ParallelCalculation(ncores, methods, args) + + # Run parallel calculation + results = pc.run() + + # Keep track of which sample belongs to which ensembles + details = {} + if ensembles is not None: + ensemble_assignment = [] + for i, ensemble in enumerate(ensembles): + ensemble_assignment += [i+1]*len(ensemble.trajectory) + ensemble_assignment = np.array(ensemble_assignment) + details['ensemble_membership'] = ensemble_assignment + + coordinates = [] + for result in results: + coordinates.append(result[1][0]) + # details.append(result[1][1]) + + if allow_collapsed_result and len(coordinates)==1: + coordinates = coordinates[0] + # details = details[0] + + return coordinates, details
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.html new file mode 100644 index 0000000000..f9945bdc7c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.html @@ -0,0 +1,1851 @@ + + + + + + MDAnalysis.analysis.encore.similarity — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.similarity

+# -*- 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-2017 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
+#
+"""
+=================================================================================
+Ensemble Similarity Calculations --- :mod:`MDAnalysis.analysis.encore.similarity`
+=================================================================================
+
+:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen
+
+.. versionadded:: 0.16.0
+
+The module contains implementations of similarity measures between protein
+ensembles described in :cite:p:`b-LindorffLarsen2009`. The implementation and
+examples are described in :cite:p:`b-Tiberti2015`.
+
+The module includes facilities for handling ensembles and trajectories through
+the :class:`Universe` class, performing clustering or dimensionality reduction
+of the ensemble space, estimating multivariate probability distributions from
+the input data, and more. ENCORE can be used to compare experimental and
+simulation-derived ensembles, as well as estimate the convergence of
+trajectories from time-dependent simulations.
+
+ENCORE includes three different methods for calculations of similarity measures
+between ensembles implemented in individual functions:
+
++ **Harmonic Ensemble Similarity** : :func:`hes`
++ **Clustering Ensemble Similarity** : :func:`ces`
++ **Dimensional Reduction Ensemble Similarity** : :func:`dres`
+
+as well as two methods to evaluate the convergence of trajectories:
+
++ **Clustering based convergence evaluation** : :func:`ces_convergence`
++ **Dimensionality-reduction based convergence evaluation** : :func:`dres_convergence`
+
+When using this module in published work please cite :cite:p:`b-Tiberti2015`.
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+    :keyprefix: b-
+    :labelprefix: ᵇ
+
+    Tiberti2015
+    LindorffLarsen2009
+
+.. _Examples:
+Examples
+========
+
+The examples show how to use ENCORE to calculate a similarity measurement
+of two simple ensembles. The ensembles are obtained from the MDAnalysis
+test suite for two different simulations of the protein AdK.
+
+To calculate the Harmonic Ensemble Similarity (:func:`hes`)
+two ensemble objects are first created and then used for calculation:
+
+    >>> from MDAnalysis import Universe
+    >>> import MDAnalysis.analysis.encore as encore
+    >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+    >>> ens1 = Universe(PSF, DCD)
+    >>> ens2 = Universe(PSF, DCD2)
+    >>> HES, details = encore.hes([ens1, ens2])
+    >>> print(HES)
+    [[       0.         38279540.04524205]
+     [38279540.04524205        0.        ]]
+
+HES can assume any non-negative value, i.e. no upper bound exists and the
+measurement can therefore be used as an absolute scale.
+
+The calculation of the Clustering Ensemble Similarity (:func:`ces`)
+is computationally more expensive. It is based on clustering algorithms that in
+turn require a similarity matrix between the frames the ensembles are made
+of. The similarity matrix is derived from a distance matrix (By default a RMSD
+matrix; a full RMSD matrix between each pairs of elements needs to be computed).
+The RMSD matrix is automatically calculated:
+
+    >>> from MDAnalysis import Universe
+    >>> import MDAnalysis.analysis.encore as encore
+    >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+    >>> ens1 = Universe(PSF, DCD)
+    >>> ens2 = Universe(PSF, DCD2)
+    >>> CES, details = encore.ces([ens1, ens2])
+    >>> print(CES)
+    [[0.         0.68070702]
+     [0.68070702 0.        ]]
+
+The RMSD matrix can also be separately calculated to reuse it, e.g. for running
+CES with different parameters or running the
+Dimensional Reduction Ensemble Similarity (:func:`dres`) method.
+DRES is based on the estimation of the probability density in
+a dimensionally-reduced conformational space of the ensembles, obtained from
+the original space using either the Stochastic Proximity Embedding algorithm or
+the Principal Component Analysis.
+In the following example the dimensions are reduced to 3 using the
+RMSD matrix and the default SPE dimensional reduction method:
+
+    >>> from MDAnalysis import Universe
+    >>> import MDAnalysis.analysis.encore as encore
+    >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+    >>> ens1 = Universe(PSF, DCD)
+    >>> ens2 = Universe(PSF, DCD2)
+    >>> rmsd_matrix = encore.get_distance_matrix(
+    ...                             encore.utils.merge_universes([ens1, ens2]))
+    >>> DRES,details = encore.dres([ens1, ens2],
+    ...                             distance_matrix = rmsd_matrix)
+
+The RMSD matrix can also be saved on disk with the option ``save_matrix``: ::
+
+    rmsd_matrix = encore.get_distance_matrix(
+                                    encore.utils.merge_universes([ens1, ens2]),
+                                    save_matrix="rmsd.npz")
+
+It can then be loaded and reused at a later time instead of being recalculated: ::
+
+    rmsd_matrix = encore.get_distance_matrix(
+                                    encore.utils.merge_universes([ens1, ens2]),
+                                    load_matrix="rmsd.npz")
+
+In addition to the quantitative similarity estimate, the dimensional reduction
+can easily be visualized, see the ``Example`` section in
+:mod:`MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality`.
+Due to the stochastic nature of SPE, two identical ensembles will not
+necessarily result in an exactly 0 estimate of the similarity, but will be very
+close. For the same reason, calculating the similarity with the :func:`dres`
+twice will not result in necessarily identical values but rather two very close
+values.
+
+It should be noted that both in :func:`ces` and :func:`dres` the similarity is
+evaluated using the Jensen-Shannon divergence resulting in an upper bound of
+ln(2), which indicates no similarity between the ensembles and a lower bound
+of 0.0 signifying two identical ensembles. In contrast, the :func:`hes` function uses
+a symmetrized version of the Kullback-Leibler divergence, which is unbounded.
+
+
+Functions for ensemble comparisons
+==================================
+
+.. autofunction:: hes
+   :noindex:
+
+.. autofunction:: ces
+   :noindex:
+
+.. autofunction:: dres
+   :noindex:
+
+Function reference
+==================
+
+.. All functions are included via automodule :members:.
+
+"""
+import warnings
+import logging
+
+import numpy as np
+import scipy.stats
+
+import MDAnalysis as mda
+
+from ...coordinates.memory import MemoryReader
+from .confdistmatrix import get_distance_matrix
+from .bootstrap import (get_distance_matrix_bootstrap_samples,
+                        get_ensemble_bootstrap_samples)
+from .clustering.cluster import cluster
+from .clustering.ClusteringMethod import AffinityPropagationNative
+from .dimensionality_reduction.DimensionalityReductionMethod import (
+    StochasticProximityEmbeddingNative)
+from .dimensionality_reduction.reduce_dimensionality import (
+    reduce_dimensionality)
+from .covariance import (
+    covariance_matrix, ml_covariance_estimator, shrinkage_covariance_estimator)
+from .utils import merge_universes
+from .utils import trm_indices_diag, trm_indices_nodiag
+
+# Low boundary value for log() argument - ensure no nans
+EPSILON = 1E-15
+
+xlogy = np.vectorize(
+    lambda x, y: 0.0 if (x <= EPSILON and y <= EPSILON) else x * np.log(y))
+
+
+
[docs]def discrete_kullback_leibler_divergence(pA, pB): + """Kullback-Leibler divergence between discrete probability distribution. + Notice that since this measure is not symmetric :: + :math:`d_{KL}(p_A,p_B) != d_{KL}(p_B,p_A)` + + Parameters + ---------- + + pA : iterable of floats + First discrete probability density function + + pB : iterable of floats + Second discrete probability density function + + Returns + ------- + + dkl : float + Discrete Kullback-Liebler divergence + """ + + return np.sum(xlogy(pA, pA / pB))
+ + +# discrete dJS +
[docs]def discrete_jensen_shannon_divergence(pA, pB): + """Jensen-Shannon divergence between discrete probability distributions. + + Parameters + ---------- + + pA : iterable of floats + First discrete probability density function + + pB : iterable of floats + Second discrete probability density function + + Returns + ------- + + djs : float + Discrete Jensen-Shannon divergence +""" + return 0.5 * (discrete_kullback_leibler_divergence(pA, (pA + pB) * 0.5) + + discrete_kullback_leibler_divergence(pB, (pA + pB) * 0.5))
+ + +# calculate harmonic similarity +
[docs]def harmonic_ensemble_similarity(sigma1, + sigma2, + x1, + x2): + """ + Calculate the harmonic ensemble similarity measure + as defined in :cite:p:`b-Tiberti2015`. + + Parameters + ---------- + + sigma1 : numpy.array + Covariance matrix for the first ensemble. + + sigma2 : numpy.array + Covariance matrix for the second ensemble. + + x1: numpy.array + Mean for the estimated normal multivariate distribution of the first + ensemble. + + x2: numpy.array + Mean for the estimated normal multivariate distribution of the second + ensemble. + + Returns + ------- + + dhes : float + harmonic similarity measure + """ + + # Inverse covariance matrices + sigma1_inv = np.linalg.pinv(sigma1) + sigma2_inv = np.linalg.pinv(sigma2) + + # Difference between average vectors + d_avg = x1 - x2 + + # Distance measure + trace = np.trace(np.dot(sigma1, sigma2_inv) + + np.dot(sigma2, sigma1_inv) + - 2 * np.identity(sigma1.shape[0])) + + d_hes = 0.25 * (np.dot(np.transpose(d_avg), + np.dot(sigma1_inv + sigma2_inv, + d_avg)) + trace) + return d_hes
+ + +
[docs]def clustering_ensemble_similarity(cc, ens1, ens1_id, ens2, ens2_id, + select="name CA"): + """Clustering ensemble similarity: calculate the probability densities from + the clusters and calculate discrete Jensen-Shannon divergence. + + Parameters + ---------- + + cc : encore.clustering.ClustersCollection + Collection from cluster calculated by a clustering algorithm + (e.g. Affinity propagation) + + ens1 : :class:`~MDAnalysis.core.universe.Universe` + First ensemble to be used in comparison + + ens1_id : int + First ensemble id as detailed in the ClustersCollection metadata + + ens2 : :class:`~MDAnalysis.core.universe.Universe` + Second ensemble to be used in comparison + + ens2_id : int + Second ensemble id as detailed in the ClustersCollection metadata + + select : str + Atom selection string in the MDAnalysis format. Default is "name CA". + + Returns + ------- + + djs : float + Jensen-Shannon divergence between the two ensembles, as calculated by + the clustering ensemble similarity method + """ + ens1_coordinates = ens1.trajectory.timeseries(ens1.select_atoms(select), + order='fac') + ens2_coordinates = ens2.trajectory.timeseries(ens2.select_atoms(select), + order='fac') + tmpA = np.array([np.where(c.metadata['ensemble_membership'] == ens1_id)[ + 0].shape[0] / float(ens1_coordinates.shape[0]) for + c in cc]) + tmpB = np.array([np.where(c.metadata['ensemble_membership'] == ens2_id)[ + 0].shape[0] / float(ens2_coordinates.shape[0]) for + c in cc]) + + # Exclude clusters which have 0 elements in both ensembles + pA = tmpA[tmpA + tmpB > EPSILON] + pB = tmpB[tmpA + tmpB > EPSILON] + + return discrete_jensen_shannon_divergence(pA, pB)
+ + +
[docs]def cumulative_clustering_ensemble_similarity(cc, ens1_id, ens2_id, + ens1_id_min=1, ens2_id_min=1): + """ + Calculate clustering ensemble similarity between joined ensembles. + This means that, after clustering has been performed, some ensembles are + merged and the dJS is calculated between the probability distributions of + the two clusters groups. In particular, the two ensemble groups are defined + by their ensembles id: one of the two joined ensembles will comprise all + the ensembles with id [ens1_id_min, ens1_id], and the other ensembles will + comprise all the ensembles with id [ens2_id_min, ens2_id]. + + Parameters + ---------- + + cc : encore.ClustersCollection + Collection from cluster calculated by a clustering algorithm + (e.g. Affinity propagation) + + ens1_id : int + First ensemble id as detailed in the ClustersCollection + metadata + + ens2_id : int + Second ensemble id as detailed in the ClustersCollection + metadata + + Returns + ------- + + djs : float + Jensen-Shannon divergence between the two ensembles, as + calculated by the clustering ensemble similarity method + +""" + + ensA = [np.where(np.logical_and( + c.metadata['ensemble_membership'] <= ens1_id, + c.metadata['ensemble_membership']) + >= ens1_id_min)[0].shape[0] for c in cc] + ensB = [np.where(np.logical_and( + c.metadata['ensemble_membership'] <= ens2_id, + c.metadata['ensemble_membership']) + >= ens2_id_min)[0].shape[0] for c in cc] + sizeA = float(np.sum(ensA)) + sizeB = float(np.sum(ensB)) + + tmpA = np.array(ensA) / sizeA + tmpB = np.array(ensB) / sizeB + + # Exclude clusters which have 0 elements in both ensembles + pA = tmpA[tmpA + tmpB > EPSILON] + pB = tmpB[tmpA + tmpB > EPSILON] + + return discrete_jensen_shannon_divergence(pA, pB)
+ + +
[docs]def gen_kde_pdfs(embedded_space, ensemble_assignment, nensembles, + nsamples): + """ + Generate Kernel Density Estimates (KDE) from embedded spaces and + elaborate the coordinates for later use. + + Parameters + ---------- + + embedded_space : numpy.array + Array containing the coordinates of the embedded space + + ensemble_assignment : numpy.array + Array containing one int per ensemble conformation. These allow to + distinguish, in the complete embedded space, which conformations + belong to each ensemble. For instance if ensemble_assignment + is [1,1,1,1,2,2], it means that the first four conformations belong + to ensemble 1 and the last two to ensemble 2 + + nensembles : int + Number of ensembles + + nsamples : int + samples to be drawn from the ensembles. Will be required in + a later stage in order to calculate dJS. + + Returns + ------- + + kdes : scipy.stats.gaussian_kde + KDEs calculated from ensembles + + resamples : list of numpy.array + For each KDE, draw samples according to the probability distribution + of the KDE mixture model + + embedded_ensembles : list of numpy.array + List of numpy.array containing, each one, the elements of the + embedded space belonging to a certain ensemble + """ + kdes = [] + embedded_ensembles = [] + resamples = [] + + for i in range(1, nensembles + 1): + this_embedded = embedded_space.transpose()[ + np.where(np.array(ensemble_assignment) == i)].transpose() + embedded_ensembles.append(this_embedded) + kdes.append(scipy.stats.gaussian_kde(this_embedded)) + + # # Set number of samples + # if not nsamples: + # nsamples = this_embedded.shape[1] * 10 + + # Resample according to probability distributions + for this_kde in kdes: + resamples.append(this_kde.resample(nsamples)) + + return (kdes, resamples, embedded_ensembles)
+ + +
[docs]def dimred_ensemble_similarity(kde1, resamples1, kde2, resamples2, + ln_P1_exp_P1=None, ln_P2_exp_P2=None, + ln_P1P2_exp_P1=None, ln_P1P2_exp_P2=None): + r"""Calculate the Jensen-Shannon divergence according the Dimensionality + reduction method. + + In this case, we have continuous probability densities, this we need to + integrate over the measurable space. The aim is to first calculate the + Kullback-Liebler divergence, which is defined as: + + .. math:: + + D_{KL}(P(x) || Q(x)) = + \int_{-\infty}^{\infty}P(x_i) ln(P(x_i)/Q(x_i)) = + \langle{}ln(P(x))\rangle{}_P - \langle{}ln(Q(x))\rangle{}_P + + where the :math:`\langle{}.\rangle{}_P` denotes an expectation calculated + under the distribution P. We can, thus, just estimate the expectation + values of the components to get an estimate of dKL. Since the + Jensen-Shannon distance is actually more complex, we need to estimate four + expectation values: + + .. math:: + \langle{}log(P(x))\rangle{}_P + + \langle{}log(Q(x))\rangle{}_Q + + \langle{}log(0.5*(P(x)+Q(x)))\rangle{}_P + + \langle{}log(0.5*(P(x)+Q(x)))\rangle{}_Q + + Parameters + ---------- + + kde1 : scipy.stats.gaussian_kde + Kernel density estimation for ensemble 1 + + resamples1 : numpy.array + Samples drawn according do kde1. Will be used as samples to + calculate the expected values according to 'P' as detailed before. + + kde2 : scipy.stats.gaussian_kde + Kernel density estimation for ensemble 2 + + resamples2 : numpy.array + Samples drawn according do kde2. Will be used as sample to + calculate the expected values according to 'Q' as detailed before. + + ln_P1_exp_P1 : float or None + Use this value for :math:`\langle{}log(P(x))\rangle{}_P`; if ``None``, + calculate it instead + + ln_P2_exp_P2 : float or None + Use this value for :math:`\langle{}log(Q(x))\rangle{}_Q`; if + ``None``, calculate it instead + + ln_P1P2_exp_P1 : float or None + Use this value for + :math:`\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_P`; + if ``None``, calculate it instead + + ln_P1P2_exp_P2 : float or None + Use this value for + :math:`\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_Q`; + if ``None``, calculate it instead + + Returns + ------- + djs : float + Jensen-Shannon divergence calculated according to the dimensionality + reduction method + + """ + + if not ln_P1_exp_P1 and not ln_P2_exp_P2 and not ln_P1P2_exp_P1 and not \ + ln_P1P2_exp_P2: + ln_P1_exp_P1 = np.average(np.log(kde1.evaluate(resamples1))) + ln_P2_exp_P2 = np.average(np.log(kde2.evaluate(resamples2))) + ln_P1P2_exp_P1 = np.average(np.log( + 0.5 * (kde1.evaluate(resamples1) + kde2.evaluate(resamples1)))) + ln_P1P2_exp_P2 = np.average(np.log( + 0.5 * (kde1.evaluate(resamples2) + kde2.evaluate(resamples2)))) + + return 0.5 * ( + ln_P1_exp_P1 - ln_P1P2_exp_P1 + ln_P2_exp_P2 - ln_P1P2_exp_P2)
+ + +
[docs]def cumulative_gen_kde_pdfs(embedded_space, ensemble_assignment, nensembles, + nsamples, ens_id_min=1, ens_id_max=None): + """ + Generate Kernel Density Estimates (KDE) from embedded spaces and + elaborate the coordinates for later use. However, consider more than + one ensemble as the space on which the KDE will be generated. In + particular, will use ensembles with ID [ens_id_min, ens_id_max]. + + + Parameters + ---------- + + embedded_space : numpy.array + Array containing the coordinates of the embedded space + + ensemble_assignment : numpy.array + array containing one int per ensemble conformation. These allow + to distinguish, in the complete embedded space, which + conformations belong to each ensemble. For instance if + ensemble_assignment is [1,1,1,1,2,2], it means that the first + four conformations belong to ensemble 1 and the last two + to ensemble 2 + + nensembles : int + Number of ensembles + + nsamples : int + Samples to be drawn from the ensembles. Will be required in a later + stage in order to calculate dJS. + + ens_id_min : int + Minimum ID of the ensemble to be considered; see description + + ens_id_max : int + Maximum ID of the ensemble to be considered; see description. If None, + it will be set to the maximum possible value given the number of + ensembles. + + Returns + ------- + + kdes : scipy.stats.gaussian_kde + KDEs calculated from ensembles + + resamples : list of numpy.array + For each KDE, draw samples according to the probability + distribution of the kde mixture model + + embedded_ensembles : list of numpy.array + List of numpy.array containing, each one, the elements of the + embedded space belonging to a certain ensemble + + + """ + + kdes = [] + embedded_ensembles = [] + resamples = [] + if not ens_id_max: + ens_id_max = nensembles + 1 + for i in range(ens_id_min, ens_id_max): + this_embedded = embedded_space.transpose()[np.where( + np.logical_and(ensemble_assignment >= ens_id_min, + ensemble_assignment <= i))].transpose() + embedded_ensembles.append(this_embedded) + kdes.append(scipy.stats.gaussian_kde(this_embedded)) + + # Resample according to probability distributions + for this_kde in kdes: + resamples.append(this_kde.resample(nsamples)) + + return (kdes, resamples, embedded_ensembles)
+ + +
[docs]def write_output(matrix, base_fname=None, header="", suffix="", + extension="dat"): + """ + Write output matrix with a nice format, to stdout and optionally a file. + + Parameters + ---------- + + matrix : encore.utils.TriangularMatrix + Matrix containing the values to be printed + + base_fname : str + Basic filename for output. If None, no files will be written, and + the matrix will be just printed on standard output + + header : str + Text to be written just before the matrix + + suffix : str + String to be concatenated to basename, in order to get the final + file name + + extension : str + Extension for the output file + + """ + + if base_fname is not None: + fname = base_fname + "-" + suffix + "." + extension + else: + fname = None + matrix.square_print(header=header, fname=fname)
+ + +
[docs]def prepare_ensembles_for_convergence_increasing_window(ensemble, + window_size, + select="name CA"): + """ + Generate ensembles to be fed to ces_convergence or dres_convergence + from a single ensemble. Basically, the different slices the algorithm + needs are generated here. + + Parameters + ---------- + + ensemble : :class:`~MDAnalysis.core.universe.Universe` object + Input ensemble + + window_size : int + size of the window (in number of frames) to be used + + select : str + Atom selection string in the MDAnalysis format. Default is "name CA" + + Returns + ------- + + tmp_ensembles : + The original ensemble is divided into different ensembles, each being + a window_size-long slice of the original ensemble. The last + ensemble will be bigger if the length of the input ensemble + is not exactly divisible by window_size. + + """ + + ens_size = ensemble.trajectory.timeseries(ensemble.select_atoms(select), + order='fac').shape[0] + + rest_slices = ens_size // window_size + residuals = ens_size % window_size + slices_n = [0] + + tmp_ensembles = [] + + for rs in range(rest_slices - 1): + slices_n.append(slices_n[-1] + window_size) + slices_n.append(slices_n[-1] + residuals + window_size) + + for s,sl in enumerate(slices_n[:-1]): + tmp_ensembles.append(mda.Universe( + ensemble.filename, + ensemble.trajectory.timeseries(order='fac') + [slices_n[s]:slices_n[s + 1], :, :], + format=MemoryReader)) + + return tmp_ensembles
+ + +
[docs]def hes(ensembles, + select="name CA", + cov_estimator="shrinkage", + weights='mass', + align=False, + estimate_error=False, + bootstrapping_samples=100, + calc_diagonal=False): + r"""Calculates the Harmonic Ensemble Similarity (HES) between ensembles. + + The HES is calculated with the symmetrized version of Kullback-Leibler + divergence as described in :cite:p:`b-Tiberti2015`. + + Parameters + ---------- + ensembles : list + List of Universe objects for similarity measurements. + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + cov_estimator : str, optional + Covariance matrix estimator method, either shrinkage, `shrinkage`, + or Maximum Likelyhood, `ml`. Default is shrinkage. + weights : str/array_like, optional + specify optional weights. If ``mass`` then chose masses of ensemble atoms + align : bool, optional + Whether to align the ensembles before calculating their similarity. + Note: this changes the ensembles in-place, and will thus leave your + ensembles in an altered state. + (default is False) + estimate_error : bool, optional + Whether to perform error estimation (default is False). + bootstrapping_samples : int, optional + Number of times the similarity matrix will be bootstrapped (default + is 100), only if estimate_error is True. + calc_diagonal : bool, optional + Whether to calculate the diagonal of the similarity scores + (i.e. the similarities of every ensemble against itself). + If this is False (default), 0.0 will be used instead. + + Returns + ------- + hes, details : numpy.array, dictionary + Harmonic similarity measurements between each pair of ensembles, + and dict containing mean and covariance matrix for each ensemble + + Notes + ----- + The method assumes that each ensemble is derived from a multivariate normal + distribution. The mean and covariance matrix are, thus, estimatated from + the distribution of each ensemble and used for comparision by the + symmetrized version of Kullback-Leibler divergence defined as: + + .. math:: + D_{KL}(P(x) || Q(x)) = + \int_{-\infty}^{\infty}P(x_i) ln(P(x_i)/Q(x_i)) = + \langle{}ln(P(x))\rangle{}_P - \langle{}ln(Q(x))\rangle{}_P + + + where the :math:`\langle{}.\rangle{}_P` denotes an expectation + calculated under the distribution :math:`P`. + + For each ensemble, the mean conformation is estimated as the average over + the ensemble, and the covariance matrix is calculated by default using a + shrinkage estimation method (or by a maximum-likelihood method, + optionally). + + Note that the symmetrized version of the Kullback-Leibler divergence has no + upper bound (unlike the Jensen-Shannon divergence used by for instance CES and DRES). + + When using this similarity measure, consider whether you want to align + the ensembles first (see example below). + + Example + ------- + + To calculate the Harmonic Ensemble similarity, two ensembles are created + as Universe objects from a topology file and two trajectories. The + topology- and trajectory files used are obtained from the MDAnalysis + test suite for two different simulations of the protein AdK. + You can use the ``align=True`` option to align the ensembles first. This will + align everything to the current timestep in the first ensemble. Note that + this changes the ``ens1`` and ``ens2`` objects: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF, DCD) + >>> ens2 = Universe(PSF, DCD2) + >>> HES, details = encore.hes([ens1, ens2]) + >>> print(HES) + [[ 0. 38279540.04524205] + [38279540.04524205 0. ]] + >>> print(encore.hes([ens1, ens2], align=True)[0]) + [[ 0. 6889.89729056] + [6889.89729056 0. ]] + + Alternatively, for greater flexibility in how the alignment should be done + you can call use an :class:`~MDAnalysis.analysis.align.AlignTraj` object + manually: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> from MDAnalysis.analysis import align + >>> ens1 = Universe(PSF, DCD) + >>> ens2 = Universe(PSF, DCD2) + >>> _ = align.AlignTraj(ens1, ens1, select="name CA", in_memory=True).run() + >>> _ = align.AlignTraj(ens2, ens1, select="name CA", in_memory=True).run() + >>> print(encore.hes([ens1, ens2])[0]) + [[ 0. 6889.89729056] + [6889.89729056 0. ]] + + + .. versionchanged:: 1.0.0 + ``hes`` doesn't accept the `details` argument anymore, it always returns + the details of the calculation instead, in the form of a dictionary + + """ + + if not isinstance(weights, (list, tuple, np.ndarray)) and weights == 'mass': + weights = ['mass' for _ in range(len(ensembles))] + elif weights is not None: + if len(weights) != len(ensembles): + raise ValueError("need weights for every ensemble") + else: + weights = [None for _ in range(len(ensembles))] + + # Ensure in-memory trajectories either by calling align + # with in_memory=True or by directly calling transfer_to_memory + # on the universe. + if align: + for e, w in zip(ensembles, weights): + mda.analysis.align.AlignTraj(e, ensembles[0], + select=select, + weights=w, + in_memory=True).run() + else: + for ensemble in ensembles: + ensemble.transfer_to_memory() + + if calc_diagonal: + pairs_indices = list(trm_indices_diag(len(ensembles))) + else: + pairs_indices = list(trm_indices_nodiag(len(ensembles))) + + logging.info("Chosen metric: Harmonic similarity") + if cov_estimator == "shrinkage": + covariance_estimator = shrinkage_covariance_estimator + logging.info(" Covariance matrix estimator: Shrinkage") + elif cov_estimator == "ml": + covariance_estimator = ml_covariance_estimator + logging.info(" Covariance matrix estimator: Maximum Likelihood") + else: + logging.error( + "Covariance estimator {0} is not supported. " + "Choose between 'shrinkage' and 'ml'.".format(cov_estimator)) + return None + + out_matrix_eln = len(ensembles) + + xs = [] + sigmas = [] + + if estimate_error: + data = [] + ensembles_list = [] + for i, ensemble in enumerate(ensembles): + ensembles_list.append( + get_ensemble_bootstrap_samples( + ensemble, + samples=bootstrapping_samples)) + for t in range(bootstrapping_samples): + logging.info("The coordinates will be bootstrapped.") + + xs = [] + sigmas = [] + values = np.zeros((out_matrix_eln, out_matrix_eln)) + for i, e_orig in enumerate(ensembles): + xs.append(np.average( + ensembles_list[i][t].trajectory.timeseries( + e_orig.select_atoms(select), + order=('fac')), + axis=0).flatten()) + sigmas.append(covariance_matrix(ensembles_list[i][t], + weights=weights[i], + estimator=covariance_estimator, + select=select)) + + for pair in pairs_indices: + value = harmonic_ensemble_similarity(x1=xs[pair[0]], + x2=xs[pair[1]], + sigma1=sigmas[pair[0]], + sigma2=sigmas[pair[1]]) + values[pair[0], pair[1]] = value + values[pair[1], pair[0]] = value + data.append(values) + avgs = np.average(data, axis=0) + stds = np.std(data, axis=0) + + return (avgs, stds) + + # Calculate the parameters for the multivariate normal distribution + # of each ensemble + values = np.zeros((out_matrix_eln, out_matrix_eln)) + + for e, w in zip(ensembles, weights): + # Extract coordinates from each ensemble + coordinates_system = e.trajectory.timeseries(e.select_atoms(select), + order='fac') + + # Average coordinates in each system + xs.append(np.average(coordinates_system, axis=0).flatten()) + + # Covariance matrices in each system + sigmas.append(covariance_matrix(e, + weights=w, + estimator=covariance_estimator, + select=select)) + + for i, j in pairs_indices: + value = harmonic_ensemble_similarity(x1=xs[i], + x2=xs[j], + sigma1=sigmas[i], + sigma2=sigmas[j]) + values[i, j] = value + values[j, i] = value + + # Save details as required + details = {} + for i in range(out_matrix_eln): + details['ensemble{0:d}_mean'.format(i + 1)] = xs[i] + details['ensemble{0:d}_covariance_matrix'.format(i + 1)] = sigmas[i] + + return values, details
+ + +
[docs]def ces(ensembles, + select="name CA", + clustering_method=AffinityPropagationNative( + preference=-1.0, + max_iter=500, + convergence_iter=50, + damping=0.9, + add_noise=True), + distance_matrix=None, + estimate_error=False, + bootstrapping_samples=10, + ncores=1, + calc_diagonal=False, + allow_collapsed_result=True): + """ + + Calculates the Clustering Ensemble Similarity (CES) between ensembles + using the Jensen-Shannon divergence as described in + :cite:p:`b-Tiberti2015`. + + Parameters + ---------- + + ensembles : list + List of ensemble objects for similarity measurements + + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + + clustering_method : + A single or a list of instances of the + :class:`MDAnalysis.analysis.encore.clustering.ClusteringMethod` classes + from the clustering module. Different parameters for the same clustering + method can be explored by adding different instances of the same + clustering class. Clustering methods options are the + Affinity Propagation (default), the DBSCAN and the KMeans. The latter + two methods need the sklearn python module installed. + + distance_matrix : encore.utils.TriangularMatrix + Distance matrix clustering methods. If this parameter + is not supplied the matrix will be calculated on the fly. + + estimate_error : bool, optional + Whether to perform error estimation (default is False). + Only bootstrapping mode is supported. + + bootstrapping_samples : int, optional + number of samples to be used for estimating error. + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + calc_diagonal : bool, optional + Whether to calculate the diagonal of the similarity scores + (i.e. the similarities of every ensemble against itself). + If this is False (default), 0.0 will be used instead. + + allow_collapsed_result: bool, optional + Whether a return value of a list of one value should be collapsed + into just the value. + + + + Returns + ------- + + ces, details : numpy.array, numpy.array + + ces contains the similarity values, arranged in a numpy.array. + If only one clustering_method is provided the output will be a + 2-dimensional square symmetrical numpy.array. The order of the matrix + elements depends on the order of the input ensembles: for instance, if + + ensemble = [ens1, ens2, ens3] + + the matrix elements [0,2] and [2,0] will both contain the similarity + value between ensembles ens1 and ens3. + Elaborating on the previous example, if *n* ensembles are given and *m* + clustering_methods are provided the output will be a list of *m* arrays + ordered by the input sequence of methods, each with a *n*x*n* + symmetrical similarity matrix. + + details contains information on the clustering: the individual size of + each cluster, the centroids and the frames associated with each cluster. + + + Notes + ----- + + In the Jensen-Shannon divergence the upper bound of ln(2) signifies + no similarity between the two ensembles, the lower bound, 0.0, + signifies identical ensembles. + + To calculate the CES, the affinity propagation method (or others, if + specified) is used to partition the whole space of conformations. The + population of each ensemble in each cluster is then taken as a probability + density function. Different probability density functions from each + ensemble are finally compared using the Jensen-Shannon divergence measure. + + Examples + -------- + To calculate the Clustering Ensemble similarity, two ensembles are + created as Universe object using a topology file and two trajectories. The + topology- and trajectory files used are obtained from the MDAnalysis + test suite for two different simulations of the protein AdK. + To use a different clustering method, set the parameter clustering_method + (Note that the sklearn module must be installed). Likewise, different parameters + for the same clustering method can be explored by adding different + instances of the same clustering class. + Here the simplest case of just two instances of :class:`Universe` is illustrated: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF, DCD) + >>> ens2 = Universe(PSF, DCD2) + >>> CES, details = encore.ces([ens1,ens2]) + >>> print(CES) + [[0. 0.68070702] + [0.68070702 0. ]] + >>> CES, details = encore.ces([ens1,ens2], + ... clustering_method = [encore.DBSCAN(eps=0.45), + ... encore.DBSCAN(eps=0.50)]) + >>> print("eps=0.45: ", CES[0]) + eps=0.45: [[0. 0.20447236] + [0.20447236 0. ]] + + >>> print("eps=0.5: ", CES[1]) + eps=0.5: [[0. 0.25331629] + [0.25331629 0. ]] + + """ + + for ensemble in ensembles: + ensemble.transfer_to_memory() + + if calc_diagonal: + pairs_indices = list(trm_indices_diag(len(ensembles))) + else: + pairs_indices = list(trm_indices_nodiag(len(ensembles))) + + clustering_methods = clustering_method + if not hasattr(clustering_method, '__iter__'): + clustering_methods = [clustering_method] + + any_method_accept_distance_matrix = \ + np.any([method.accepts_distance_matrix for method in clustering_methods]) + all_methods_accept_distance_matrix = \ + np.all([method.accepts_distance_matrix for method in clustering_methods]) + + # Register which ensembles the samples belong to + ensemble_assignment = [] + for i, ensemble in enumerate(ensembles): + ensemble_assignment += [i+1]*len(ensemble.trajectory) + + # Calculate distance matrix if not provided + if any_method_accept_distance_matrix and not distance_matrix: + distance_matrix = get_distance_matrix(merge_universes(ensembles), + select=select, + ncores=ncores) + if estimate_error: + if any_method_accept_distance_matrix: + distance_matrix = \ + get_distance_matrix_bootstrap_samples( + distance_matrix, + ensemble_assignment, + samples=bootstrapping_samples, + ncores=ncores) + if not all_methods_accept_distance_matrix: + ensembles_list = [] + for i, ensemble in enumerate(ensembles): + ensembles_list.append( + get_ensemble_bootstrap_samples( + ensemble, + samples=bootstrapping_samples)) + ensembles = [] + for j in range(bootstrapping_samples): + ensembles.append([]) + for i, e in enumerate(ensembles_list): + ensembles[-1].append(e[j]) + else: + # if all methods accept distances matrices, duplicate + # ensemble so that it matches size of distance matrices + # (no need to resample them since they will not be used) + ensembles = [ensembles]*bootstrapping_samples + + + # Call clustering procedure + ccs = cluster(ensembles, + method= clustering_methods, + select=select, + distance_matrix = distance_matrix, + ncores = ncores, + allow_collapsed_result=False) + + # Do error analysis + if estimate_error: + k = 0 + values = {} + avgs = [] + stds = [] + for i, p in enumerate(clustering_methods): + failed_runs = 0 + values[i] = [] + for j in range(bootstrapping_samples): + if ccs[k].clusters is None: + failed_runs += 1 + k += 1 + continue + values[i].append(np.zeros((len(ensembles[j]), + len(ensembles[j])))) + + for pair in pairs_indices: + # Calculate dJS + this_djs = \ + clustering_ensemble_similarity(ccs[k], + ensembles[j][ + pair[0]], + pair[0] + 1, + ensembles[j][ + pair[1]], + pair[1] + 1, + select=select) + values[i][-1][pair[0], pair[1]] = this_djs + values[i][-1][pair[1], pair[0]] = this_djs + k += 1 + outs = np.array(values[i]) + avgs.append(np.average(outs, axis=0)) + stds.append(np.std(outs, axis=0)) + + if hasattr(clustering_method, '__iter__'): + pass + else: + avgs = avgs[0] + stds = stds[0] + + return avgs, stds + + values = [] + details = {} + for i, p in enumerate(clustering_methods): + if ccs[i].clusters is None: + continue + else: + values.append(np.zeros((len(ensembles), len(ensembles)))) + + for pair in pairs_indices: + # Calculate dJS + this_val = \ + clustering_ensemble_similarity(ccs[i], + ensembles[pair[0]], + pair[0] + 1, + ensembles[pair[1]], + pair[1] + 1, + select=select) + values[-1][pair[0], pair[1]] = this_val + values[-1][pair[1], pair[0]] = this_val + + details['clustering'] = ccs + + if allow_collapsed_result and not hasattr(clustering_method, '__iter__'): + values = values[0] + + return values, details
+ + +
[docs]def dres(ensembles, + select="name CA", + dimensionality_reduction_method = StochasticProximityEmbeddingNative( + dimension=3, + distance_cutoff = 1.5, + min_lam=0.1, + max_lam=2.0, + ncycle=100, + nstep=10000), + distance_matrix=None, + nsamples=1000, + estimate_error=False, + bootstrapping_samples=100, + ncores=1, + calc_diagonal=False, + allow_collapsed_result=True): + """ + + Calculates the Dimensional Reduction Ensemble Similarity (DRES) between + ensembles using the Jensen-Shannon divergence as described in + :cite:p:`b-Tiberti2015`. + + + Parameters + ---------- + + ensembles : list + List of ensemble objects for similarity measurements + + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + + dimensionality_reduction_method : + A single or a list of instances of the DimensionalityReductionMethod + classes from the dimensionality_reduction module. Different parameters + for the same method can be explored by adding different instances of + the same dimensionality reduction class. Provided methods are the + Stochastic Proximity Embedding (default) and the Principal Component + Analysis. + + distance_matrix : encore.utils.TriangularMatrix + conformational distance matrix, It will be calculated on the fly + from the ensemble data if it is not provided. + + nsamples : int, optional + Number of samples to be drawn from the ensembles (default is 1000). + This is used to resample the density estimates and calculate the + Jensen-Shannon divergence between ensembles. + + estimate_error : bool, optional + Whether to perform error estimation (default is False) + + bootstrapping_samples : int, optional + number of samples to be used for estimating error. + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + calc_diagonal : bool, optional + Whether to calculate the diagonal of the similarity scores + (i.e. the simlarities of every ensemble against itself). + If this is False (default), 0.0 will be used instead. + + allow_collapsed_result: bool, optional + Whether a return value of a list of one value should be collapsed + into just the value. + + + Returns + ------- + + dres, details : numpy.array, numpy.array + dres contains the similarity values, arranged in numpy.array. + If one number of dimensions is provided as an integer, + the output will be a 2-dimensional square symmetrical numpy.array. + The order of the matrix elements depends on the order of the + input ensemble: for instance, if + + ensemble = [ens1, ens2, ens3] + + then the matrix elements [0,2] and [2,0] will both contain the + similarity value between ensembles ens1 and ens3. + Elaborating on the previous example, if *n* ensembles are given and *m* + methods are provided the output will be a list of *m* arrays + ordered by the input sequence of methods, each with a *n*x*n* + symmetrical similarity matrix. + + details provide an array of the reduced_coordinates. + + Notes + ----- + + To calculate the similarity, the method first projects the ensembles into + lower dimensions by using the Stochastic Proximity Embedding (or others) + algorithm. A gaussian kernel-based density estimation method is then used + to estimate the probability density for each ensemble which is then used + to compute the Jensen-Shannon divergence between each pair of ensembles. + + In the Jensen-Shannon divergence the upper bound of ln(2) signifies + no similarity between the two ensembles, the lower bound, 0.0, + signifies identical ensembles. However, due to the stochastic nature of + the dimensional reduction in :func:`dres`, two identical ensembles will + not necessarily result in an exact 0.0 estimate of the similarity but + will be very close. For the same reason, calculating the similarity with + the :func:`dres` twice will not result in two identical numbers; small + differences have to be expected. + + Examples + -------- + + To calculate the Dimensional Reduction Ensemble similarity, two ensembles + are created as Universe objects from a topology file and two trajectories. + The topology- and trajectory files used are obtained from the MDAnalysis + test suite for two different simulations of the protein AdK. + To use a different dimensional reduction methods, simply set the + parameter dimensionality_reduction_method. Likewise, different parameters + for the same clustering method can be explored by adding different + instances of the same method class. + Here the simplest case of comparing just two instances of :class:`Universe` is + illustrated: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF,DCD) + >>> ens2 = Universe(PSF,DCD2) + >>> DRES, details = encore.dres([ens1,ens2]) + >>> PCA_method = encore.PrincipalComponentAnalysis(dimension=2) + >>> DRES, details = encore.dres([ens1,ens2], + ... dimensionality_reduction_method=PCA_method) + + In addition to the quantitative similarity estimate, the dimensional + reduction can easily be visualized, see the ``Example`` section in + :mod:`MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality`` + + """ + + for ensemble in ensembles: + ensemble.transfer_to_memory() + + if calc_diagonal: + pairs_indices = list(trm_indices_diag(len(ensembles))) + else: + pairs_indices = list(trm_indices_nodiag(len(ensembles))) + + dimensionality_reduction_methods = dimensionality_reduction_method + if not hasattr(dimensionality_reduction_method, '__iter__'): + dimensionality_reduction_methods = [dimensionality_reduction_method] + + any_method_accept_distance_matrix = \ + np.any([method.accepts_distance_matrix for method in dimensionality_reduction_methods]) + all_methods_accept_distance_matrix = \ + np.all([method.accepts_distance_matrix for method in dimensionality_reduction_methods]) + + # Register which ensembles the samples belong to + ensemble_assignment = [] + for i, ensemble in enumerate(ensembles): + ensemble_assignment += [i+1]*len(ensemble.trajectory) + + # Calculate distance matrix if not provided + if any_method_accept_distance_matrix and not distance_matrix: + distance_matrix = get_distance_matrix(merge_universes(ensembles), + select=select, + ncores=ncores) + if estimate_error: + if any_method_accept_distance_matrix: + distance_matrix = \ + get_distance_matrix_bootstrap_samples( + distance_matrix, + ensemble_assignment, + samples=bootstrapping_samples, + ncores=ncores) + if not all_methods_accept_distance_matrix: + ensembles_list = [] + for i, ensemble in enumerate(ensembles): + ensembles_list.append( + get_ensemble_bootstrap_samples( + ensemble, + samples=bootstrapping_samples)) + ensembles = [] + for j in range(bootstrapping_samples): + ensembles.append(ensembles_list[i, j] for i + in range(ensembles_list.shape[0])) + else: + # if all methods accept distances matrices, duplicate + # ensemble so that it matches size of distance matrices + # (no need to resample them since they will not be used) + ensembles = [ensembles] * bootstrapping_samples + + # Call dimensionality reduction procedure + coordinates, dim_red_details = reduce_dimensionality( + ensembles, + method=dimensionality_reduction_methods, + select=select, + distance_matrix = distance_matrix, + ncores = ncores, + allow_collapsed_result = False) + + details = {} + details["reduced_coordinates"] = coordinates + details["dimensionality_reduction_details"] = dim_red_details + + if estimate_error: + k = 0 + values = {} + avgs = [] + stds = [] + for i,method in enumerate(dimensionality_reduction_methods): + values[i] = [] + for j in range(bootstrapping_samples): + + values[i].append(np.zeros((len(ensembles[j]), + len(ensembles[j])))) + + kdes, resamples, embedded_ensembles = gen_kde_pdfs( + coordinates[k], + ensemble_assignment, + len(ensembles[j]), + nsamples=nsamples) + + for pair in pairs_indices: + this_value = dimred_ensemble_similarity(kdes[pair[0]], + resamples[pair[0]], + kdes[pair[1]], + resamples[pair[1]]) + values[i][-1][pair[0], pair[1]] = this_value + values[i][-1][pair[1], pair[0]] = this_value + + k += 1 + outs = np.array(values[i]) + avgs.append(np.average(outs, axis=0)) + stds.append(np.std(outs, axis=0)) + + if hasattr(dimensionality_reduction_method, '__iter__'): + pass + else: + avgs = avgs[0] + stds = stds[0] + + return avgs, stds + + values = [] + + for i,method in enumerate(dimensionality_reduction_methods): + + values.append(np.zeros((len(ensembles), len(ensembles)))) + kdes, resamples, embedded_ensembles = gen_kde_pdfs(coordinates[i], + ensemble_assignment, + len(ensembles), + nsamples=nsamples) + + for pair in pairs_indices: + this_value = dimred_ensemble_similarity(kdes[pair[0]], + resamples[pair[0]], + kdes[pair[1]], + resamples[pair[1]]) + values[-1][pair[0], pair[1]] = this_value + values[-1][pair[1], pair[0]] = this_value + + if allow_collapsed_result and not hasattr(dimensionality_reduction_method, + '__iter__'): + values = values[0] + + return values, details
+ + +
[docs]def ces_convergence(original_ensemble, + window_size, + select="name CA", + clustering_method=AffinityPropagationNative( + preference=-1.0, + max_iter=500, + convergence_iter=50, + damping=0.9, + add_noise=True), + ncores=1): + """ + Use the CES to evaluate the convergence of the ensemble/trajectory. + CES will be calculated between the whole trajectory contained in an + ensemble and windows of such trajectory of increasing sizes, so that + the similarity values should gradually drop to zero. The rate at which + the value reach zero will be indicative of how much the trajectory + keeps on resampling the same regions of the conformational space, and + therefore of convergence. + + + Parameters + ---------- + + original_ensemble : :class:`~MDAnalysis.core.universe.Universe` object + ensemble containing the trajectory whose convergence has to estimated + + window_size : int + Size of window to be used, in number of frames + + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + + clustering_method : MDAnalysis.analysis.encore.clustering.ClusteringMethod + A single or a list of instances of the ClusteringMethod classes from + the clustering module. Different parameters for the same clustering + method can be explored by adding different instances of the same + clustering class. + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + + Returns + ------- + + out : np.array + array of shape (number_of_frames / window_size, preference_values). + + + Example + -------- + To calculate the convergence of a trajectory using the clustering ensemble + similarity method a Universe object is created from a topology file and the + trajectory. The topology- and trajectory files used are obtained from the + MDAnalysis test suite for two different simulations of the protein AdK. + Here the simplest case of evaluating the convergence is illustrated by + splitting the trajectory into a window_size of 10 frames: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF,DCD) + >>> ces_conv = encore.ces_convergence(ens1, 10) + >>> print(ces_conv) + [[0.48194205] + [0.40284672] + [0.31699026] + [0.25220447] + [0.19829817] + [0.14642725] + [0.09911411] + [0.05667391] + [0. ]] + + """ + + ensembles = prepare_ensembles_for_convergence_increasing_window( + original_ensemble, window_size, select=select) + + ccs = cluster(ensembles, + select=select, + method=clustering_method, + allow_collapsed_result=False, + ncores=ncores) + + out = [] + for cc in ccs: + if cc.clusters is None: + continue + out.append(np.zeros(len(ensembles))) + for j, ensemble in enumerate(ensembles): + out[-1][j] = cumulative_clustering_ensemble_similarity( + cc, + len(ensembles), + j + 1) + + out = np.array(out).T + return out
+ + +
[docs]def dres_convergence(original_ensemble, + window_size, + select="name CA", + dimensionality_reduction_method = \ + StochasticProximityEmbeddingNative( + dimension=3, + distance_cutoff=1.5, + min_lam=0.1, + max_lam=2.0, + ncycle=100, + nstep=10000 + ), + nsamples=1000, + ncores=1): + """ + Use the DRES to evaluate the convergence of the ensemble/trajectory. + DRES will be calculated between the whole trajectory contained in an + ensemble and windows of such trajectory of increasing sizes, so that + the similarity values should gradually drop to zero. The rate at which + the value reach zero will be indicative of how much the trajectory + keeps on resampling the same ares of the conformational space, and + therefore of convergence. + + Parameters + ---------- + + original_ensemble : :class:`~MDAnalysis.core.universe.Universe` object + ensemble containing the trajectory whose convergence has to estimated + + window_size : int + Size of window to be used, in number of frames + + select : str, optional + Atom selection string in the MDAnalysis format. Default is "name CA" + + dimensionality_reduction_method : + A single or a list of instances of the DimensionalityReductionMethod + classes from the dimensionality_reduction module. Different parameters + for the same method can be explored by adding different instances of + the same dimensionality reduction class. + + nsamples : int, optional + Number of samples to be drawn from the ensembles (default is 1000). + This is akin to the nsamples parameter of dres(). + + ncores : int, optional + Maximum number of cores to be used (default is 1). + + + Returns + ------- + + out : np.array + array of shape (number_of_frames / window_size, preference_values). + + + + Example + -------- + To calculate the convergence of a trajectory using the DRES + method, a Universe object is created from a topology file and the + trajectory. The topology- and trajectory files used are obtained from the + MDAnalysis test suite for two different simulations of the protein AdK. + Here the simplest case of evaluating the convergence is illustrated by + splitting the trajectory into a window_size of 10 frames: + + >>> from MDAnalysis import Universe + >>> import MDAnalysis.analysis.encore as encore + >>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2 + >>> ens1 = Universe(PSF,DCD) + >>> dres_conv = encore.dres_convergence(ens1, 10) + + Here, the rate at which the values reach zero will be indicative of how + much the trajectory keeps on resampling the same ares of the conformational + space, and therefore of convergence. + """ + + ensembles = prepare_ensembles_for_convergence_increasing_window( + original_ensemble, window_size, select=select) + + coordinates, dimred_details = \ + reduce_dimensionality( + ensembles, + select=select, + method=dimensionality_reduction_method, + allow_collapsed_result=False, + ncores=ncores) + + ensemble_assignment = [] + for i, ensemble in enumerate(ensembles): + ensemble_assignment += [i+1]*len(ensemble.trajectory) + ensemble_assignment = np.array(ensemble_assignment) + + out = [] + for i, _ in enumerate(coordinates): + + out.append(np.zeros(len(ensembles))) + + kdes, resamples, embedded_ensembles = \ + cumulative_gen_kde_pdfs( + coordinates[i], + ensemble_assignment=ensemble_assignment, + nensembles=len(ensembles), + nsamples=nsamples) + + for j, ensemble in enumerate(ensembles): + out[-1][j] = dimred_ensemble_similarity(kdes[-1], + resamples[-1], + kdes[j], + resamples[j]) + + out = np.array(out).T + return out
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/utils.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/utils.html new file mode 100644 index 0000000000..773d4c2273 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/utils.html @@ -0,0 +1,558 @@ + + + + + + MDAnalysis.analysis.encore.utils — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.encore.utils

+# -*- 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-2017 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 numbers
+from multiprocessing.sharedctypes import SynchronizedArray
+from multiprocessing import Process, Manager
+from joblib import cpu_count
+import numpy as np
+import sys
+
+import MDAnalysis as mda
+from ...coordinates.memory import MemoryReader
+
+
+
[docs]class TriangularMatrix(object): + """Triangular matrix class. This class is designed to provide a + memory-efficient representation of a triangular matrix that still behaves + as a square symmetric one. The class wraps a numpy.array object, + in which data are memorized in row-major order. It also has few additional + facilities to conveniently load/write a matrix from/to file. It can be + accessed using the [] and () operators, similarly to a normal numpy array. + + """ + + def __init__(self, size, metadata=None, loadfile=None): + """Class constructor. + + Parameters + ---------- + + size : int / array_like + Size of the matrix (number of rows or columns). If an + array is provided instead, the size of the triangular matrix + will be calculated and the array copied as the matrix + elements. Otherwise, the matrix is just initialized to zero. + metadata : dict or None + Metadata dictionary. Used to generate the metadata attribute. + loadfile : str or None + Load the matrix from this file. All the attributes and data will + be determined by the matrix file itself (i.e. metadata will be + ignored); size has to be provided though. + + """ + if isinstance(metadata, dict): + self.metadata = np.array(metadata.items(), dtype=object) + else: + self.metadata = metadata + + self.size = size + if loadfile: + self.loadz(loadfile) + elif isinstance(size, numbers.Integral): + self.size = size + self._elements = np.zeros((size + 1) * size // 2, dtype=np.float64) + elif isinstance(size, SynchronizedArray): + self._elements = np.array(size.get_obj(), dtype=np.float64) + self.size = int((np.sqrt(1 + 8 * len(size)) - 1) / 2) + elif isinstance(size, np.ndarray): + self._elements = size + self.size = int((np.sqrt(1 + 8 * len(size)) - 1) / 2) + else: + raise TypeError + + def __getitem__(self, args): + x, y = args + if x < y: + x, y = y, x + return self._elements[x * (x + 1) // 2 + y] + + def __setitem__(self, args, val): + x, y = args + if x < y: + x, y = y, x + self._elements[x * (x + 1) // 2 + y] = val + +
[docs] def as_array(self): + """Return standard numpy array equivalent""" + # pylint: disable=unsubscriptable-object + a = np.zeros((self.size, self.size)) + a[np.tril_indices(self.size)] = self._elements + a[np.triu_indices(self.size)] = a.T[np.triu_indices(self.size)] + return a
+ +
[docs] def savez(self, fname): + """Save matrix in the npz compressed numpy format. Save metadata and + data as well. + + Parameters + ---------- + + fname : str + Name of the file to be saved. + """ + np.savez(fname, elements=self._elements, metadata=self.metadata)
+ +
[docs] def loadz(self, fname): + """Load matrix from the npz compressed numpy format. + + Parameters + ---------- + + fname : str + Name of the file to be loaded. + """ + loaded = np.load(fname, allow_pickle=True) + + if loaded['metadata'].shape != (): + if loaded['metadata']['number of frames'] != self.size: + raise TypeError + self.metadata = loaded['metadata'] + else: + if self.size*(self.size-1)/2+self.size != len(loaded['elements']): + raise TypeError + self._elements = loaded['elements']
+ + def __add__(self, scalar): + """Add scalar to matrix elements. + + Parameters + ---------- + + scalar : float + Scalar to be added. + """ + newMatrix = self.__class__(self.size) + newMatrix._elements = self._elements + scalar; + return newMatrix + + def __iadd__(self, scalar): + """Add scalar to matrix elements. + + Parameters + ---------- + + scalar : float + Scalar to be added. + """ + self._elements += scalar + return self + + + def __mul__(self, scalar): + """Multiply with scalar. + + Parameters + ---------- + + scalar : float + Scalar to multiply with. + """ + newMatrix = self.__class__(self.size) + newMatrix._elements = self._elements * scalar; + return newMatrix + + def __imul__(self, scalar): + """Multiply with scalar. + + Parameters + ---------- + + scalar : float + Scalar to multiply with. + """ + self._elements *= scalar + return self + + __rmul__ = __mul__ + + def __str__(self): + return str(self.as_array())
+ + +
[docs]class ParallelCalculation(object): + r""" + Generic parallel calculation class. Can use arbitrary functions, + arguments to functions and kwargs to functions. + + Attributes + ---------- + n_jobs : int + Number of cores to be used for parallel calculation. If -1 use all + available cores. + function : callable object + Function to be run in parallel. + args : list of tuples + Each tuple contains the arguments that will be passed to + function(). This means that a call to function() is performed for + each tuple. function is called as function(\*args, \*\*kwargs). Runs + are distributed on the requested numbers of cores. + kwargs : list of dicts + Each tuple contains the named arguments that will be passed to + function, similarly as described for the args attribute. + nruns : int + Number of runs to be performed. Must be equal to len(args) and + len(kwargs). + """ + + def __init__(self, n_jobs, function, args=None, kwargs=None): + """ + Parameters + ---------- + n_jobs : int + Number of cores to be used for parallel calculation. If -1 use all + available cores. + function : object that supports __call__, as functions + function to be run in parallel. + args : list of tuples + Arguments for function; see the ParallelCalculation class + description. + kwargs : list of dicts or None + kwargs for function; see the ParallelCalculation + class description. + """ + + # args[i] should be a list of args, one for each run + self.n_jobs = n_jobs + if self.n_jobs == -1: + self.n_jobs = cpu_count() + + self.functions = function + if not hasattr(self.functions, '__iter__'): + self.functions = [self.functions] * len(args) + if len(self.functions) != len(args): + self.functions = self.functions[:] * (len(args) // len(self.functions)) + + # Arguments should be present + if args is None: + args = [] + self.args = args + + # If kwargs are not present, use empty dicts + if kwargs: + self.kwargs = kwargs + else: + self.kwargs = [{} for i in self.args] + + self.nruns = len(args) + +
[docs] def worker(self, q, results): + """ + Generic worker. Will run function with the prescribed args and kwargs. + + Parameters + ---------- + + q : multiprocessing.Manager.Queue object + work queue, from which the worker fetches arguments and + messages + + results : multiprocessing.Manager.Queue object + results queue, where results are put after each calculation is + finished + + """ + while True: + i = q.get() + if i == 'STOP': + return + + results.put((i, self.functions[i](*self.args[i], **self.kwargs[i])))
+ +
[docs] def run(self): + r""" + Run parallel calculation. + + Returns + ------- + + results : tuple of ordered tuples (int, object) + int is the number of the calculation corresponding to a + certain argument in the args list, and object is the result of + corresponding calculation. For instance, in (3, output), output + is the return of function(\*args[3], \*\*kwargs[3]). + """ + results_list = [] + if self.n_jobs == 1: + for i in range(self.nruns): + results_list.append((i, self.functions[i](*self.args[i], + **self.kwargs[i]))) + else: + manager = Manager() + q = manager.Queue() + results = manager.Queue() + + workers = [Process(target=self.worker, args=(q, results)) for i in + range(self.n_jobs)] + + for i in range(self.nruns): + q.put(i) + for w in workers: + q.put('STOP') + + for w in workers: + w.start() + + for w in workers: + w.join() + + results.put('STOP') + for i in iter(results.get, 'STOP'): + results_list.append(i) + + return tuple(sorted(results_list, key=lambda x: x[0]))
+ + +
[docs]def trm_indices(a, b): + """ + Generate (i,j) indeces of a triangular matrix, between elements a and b. + The matrix size is automatically determined from the number of elements. + For instance: trm_indices((0,0),(2,1)) yields (0,0) (1,0) (1,1) (2,0) + (2,1). + + Parameters + ---------- + + a : (int i, int j) tuple + starting matrix element. + + b : (int i, int j) tuple + final matrix element. + """ + i, j = a + while i < b[0]: + if i == j: + yield (i, j) + j = 0 + i += 1 + else: + yield (i, j) + j += 1 + while j <= b[1]: + yield (i, j) + j += 1
+ + +
[docs]def trm_indices_nodiag(n): + """generate (i,j) indeces of a triangular matrix of n rows (or columns), + without diagonal (e.g. no elements (0,0),(1,1),...,(n,n)) + + Parameters + ---------- + + n : int + Matrix size +""" + + for i in range(1, n): + for j in range(i): + yield (i, j)
+ + +
[docs]def trm_indices_diag(n): + """generate (i,j) indeces of a triangular matrix of n rows (or columns), + with diagonal + + Parameters + ---------- + + n : int + Matrix size +""" + + for i in range(0, n): + for j in range(i + 1): + yield (i, j)
+ + +
[docs]def merge_universes(universes): + """ + Merge list of universes into one + + Parameters + ---------- + universes : list of Universe objects + + + Returns + ---------- + Universe object + """ + + for universe in universes: + universe.transfer_to_memory() + + return mda.Universe( + universes[0].filename, + np.concatenate(tuple([e.trajectory.timeseries(order='fac') for e in universes]), + axis=0), + format=MemoryReader)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/gnm.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/gnm.html new file mode 100644 index 0000000000..bb36e2b34c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/gnm.html @@ -0,0 +1,605 @@ + + + + + + MDAnalysis.analysis.gnm — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.gnm

+# -*- 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-2017 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
+#
+
+#Analyse a trajectory using elastic network models, following the approach of Hall et al (JACS 2007)
+#Ben Hall (benjamin.a.hall@ucl.ac.uk) is to blame
+#Copyright 2011; Consider under GPL v2 or later
+r"""
+Elastic network analysis of MD trajectories --- :mod:`MDAnalysis.analysis.gnm`
+==============================================================================
+
+:Author: Benjamin Hall <benjamin.a.hall@ucl.ac.uk>
+:Year: 2011
+:Copyright: GNU Public License v2 or later
+
+
+Analyse a trajectory using elastic network models, following the approach of
+:cite:p:`Hall2007`.
+
+An example is provided in the MDAnalysis Cookbook_, listed as GNMExample_.
+
+.. _GNMExample: https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/GNMExample.py
+.. _Cookbook: https://github.com/MDAnalysis/MDAnalysisCookbook
+
+The basic approach is to pass a trajectory to :class:`GNMAnalysis` and then run
+the analysis:
+
+.. code-block:: python
+
+    u = MDAnalysis.Universe(PSF, DCD)
+    C = MDAnalysis.analysis.gnm.GNMAnalysis(u, ReportVector="output.txt")
+
+    C.run()
+    output = zip(*C.results)
+
+    with open("eigenvalues.dat", "w") as outputfile:
+        for item in output[1]:
+            outputfile.write(item + "\n")
+
+
+The results are found in :attr:`GNMAnalysis.results`, which can be
+used for further processing (see :cite:p:`Hall2007`).
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Hall2007
+
+
+Analysis tasks
+--------------
+
+.. autoclass:: GNMAnalysis
+   :members:
+.. autoclass:: closeContactGNMAnalysis
+   :members:
+
+Utility functions
+-----------------
+
+The following functions are used internally and are typically not
+directly needed to perform the analysis.
+
+.. autofunction:: generate_grid
+.. autofunction:: order_list
+
+.. versionchanged:: 0.16.0
+   removed unused function :func:`backup_file`
+
+"""
+import itertools
+import logging
+import warnings
+
+import numpy as np
+
+from .base import AnalysisBase
+
+
+from MDAnalysis.analysis.base import Results
+
+logger = logging.getLogger('MDAnalysis.analysis.GNM')
+
+
+def _dsq(a, b):
+    diff = (a - b)
+    return np.dot(diff, diff)
+
+
+
[docs]def generate_grid(positions, cutoff): + """Simple grid search. + + An alternative to searching the entire list of each atom; divide the + structure into `cutoff` sized boxes This way, for each particle you only need + to search the neighbouring boxes to find the particles within the `cutoff`. + + Observed a 6x speed up for a smallish protein with ~300 residues; this + should get better with bigger systems. + + Parameters + ---------- + positions : array + coordinates of the atoms + cutoff : float + find particles with distance less than `cutoff` from each other; the + grid will consist of boxes with sides of at least length `cutoff` + + """ + positions = np.asarray(positions) + + x, y, z = positions.T + high_x = x.max() + high_y = y.max() + high_z = z.max() + low_x = x.min() + low_y = y.min() + low_z = z.min() + #Ok now generate a list with 3 dimensions representing boxes in x, y and z + grid = [[[[] for i in range(int((high_z - low_z) / cutoff) + 1)] + for j in range(int((high_y - low_y) / cutoff) + 1)] + for k in range(int((high_x - low_x) / cutoff) + 1)] + for i, pos in enumerate(positions): + x_pos = int((pos[0] - low_x) / cutoff) + y_pos = int((pos[1] - low_y) / cutoff) + z_pos = int((pos[2] - low_z) / cutoff) + grid[x_pos][y_pos][z_pos].append(i) + return grid
+ + +def neighbour_generator(positions, cutoff): + """ + return atom pairs that are in neighboring regions of space from a verlet-grid + + Parameters + ---------- + positions : ndarray + atom positions + cutoff : float + size of grid box + + Yields + ------ + i_atom, j_atom + indices of close atom pairs + """ + grid = generate_grid(positions, cutoff) + n_x = len(grid) + n_y = len(grid[0]) + n_z = len(grid[0][0]) + for cell_x, cell_y, cell_z in itertools.product( + range(n_x), range(n_y), range(n_z)): + atoms = grid[cell_x][cell_y][cell_z] + # collect all atoms in own cell and neighboring cell + all_atoms = [] + nei_cells = (-1, 0, 1) + for x, y, z in itertools.product(nei_cells, nei_cells, nei_cells): + gx = cell_x + x + gy = cell_y + y + gz = cell_z + z + if 0 <= gx < n_x and 0 <= gy < n_y and 0 <= gz < n_z: + all_atoms += grid[gx][gy][gz] + # return all possible atom pairs in current cell + for i_atom in atoms: + for j_atom in all_atoms: + yield i_atom, j_atom + + +
[docs]def order_list(w): + """Returns a dictionary showing the order of eigenvalues (which are reported scrambled normally)""" + ordered = list(w) + unordered = list(w) + ordered.sort() + list_map = {} + for i in range(len(w)): + list_map[i] = unordered.index(ordered[i]) + return list_map
+ + +
[docs]class GNMAnalysis(AnalysisBase): + """Basic tool for GNM analysis. + + Each frame is treated as a novel structure and the GNM + calculated. By default, this stores the dominant eigenvector + and its associated eigenvalue; either can be used to monitor + conformational change in a simulation. + + Parameters + ---------- + universe : Universe + Analyze the full trajectory in the universe. + select : str (optional) + MDAnalysis selection string + cutoff : float (optional) + Consider selected atoms within the cutoff as neighbors for the + Gaussian network model. + ReportVector : str (optional) + filename to write eigenvectors to, by default no output is written + Bonus_groups : tuple + This is a tuple of selection strings that identify additional groups + (such as ligands). The center of mass of each group will be added as + a single point in the ENM (it is a popular way of treating small + ligands such as drugs). You need to ensure that none of the atoms in + `Bonus_groups` is contained in `selection` as this could lead to + double counting. No checks are applied. + + Attributes + ---------- + results.times : numpy.ndarray + simulation times used in analysis + results.eigenvalues : numpy.ndarray + calculated eigenvalues + results.eigenvectors : numpy.ndarray + calculated eigenvectors + + See Also + -------- + :class:`closeContactGNMAnalysis` + + + .. versionchanged:: 0.16.0 + Made :meth:`generate_output` a private method :meth:`_generate_output`. + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + + .. versionchanged:: 2.0.0 + Use :class:`~MDAnalysis.analysis.AnalysisBase` as parent class and + store results as attributes ``times``, ``eigenvalues`` and + ``eigenvectors`` of the ``results`` attribute. + """ + + def __init__(self, + universe, + select='protein and name CA', + cutoff=7.0, + ReportVector=None, + Bonus_groups=None): + super(GNMAnalysis, self).__init__(universe.trajectory) + self.u = universe + self.select = select + self.cutoff = cutoff + self.results = Results() + self.results.eigenvalues = [] + self.results.eigenvectors = [] + self._timesteps = None # time for each frame + self.ReportVector = ReportVector + self.Bonus_groups = [self.u.select_atoms(item) for item in Bonus_groups] \ + if Bonus_groups else [] + self.ca = self.u.select_atoms(self.select) + + def _generate_output(self, w, v, outputobject, + ReportVector=None, counter=0): + """Appends time, eigenvalues and eigenvectors to results. + + This generates the output by adding eigenvalue and + eigenvector data to an appendable object and optionally + printing some of the results to file. This is the function + to replace if you want to generate a more complex set of + outputs + """ + list_map = order_list(w) + if ReportVector: + with open(ReportVector, "a") as oup: + for item in enumerate(v[list_map[1]]): + print( + "", + counter, + item[0] + 1, + w[list_map[1]], + item[1], + file=oup) + + outputobject.eigenvalues.append(w[list_map[1]]) + outputobject.eigenvectors.append(v[list_map[1]]) + +
[docs] def generate_kirchoff(self): + """Generate the Kirchhoff matrix of contacts. + + This generates the neighbour matrix by generating a grid of + near-neighbours and then calculating which are are within + the cutoff. + + Returns + ------- + array + the resulting Kirchhoff matrix + """ + positions = self.ca.positions + + #add the com from each bonus group to the ca_positions list + for item in self.Bonus_groups: + #bonus = self.u.select_atoms(item) + positions = np.vstack((positions, item.center_of_mass())) + + natoms = len(positions) + matrix = np.zeros((natoms, natoms), np.float64) + + cutoffsq = self.cutoff**2 + + for i_atom, j_atom in neighbour_generator(positions, self.cutoff): + if j_atom > i_atom and _dsq(positions[i_atom], + positions[j_atom]) < cutoffsq: + matrix[i_atom][j_atom] = -1.0 + matrix[j_atom][i_atom] = -1.0 + matrix[i_atom][i_atom] = matrix[i_atom][i_atom] + 1 + matrix[j_atom][j_atom] = matrix[j_atom][j_atom] + 1 + + return matrix
+ + def _single_frame(self): + matrix = self.generate_kirchoff() + try: + _, w, v = np.linalg.svd(matrix) + except np.linalg.LinAlgError: + msg = f"SVD with cutoff {self.cutoff} failed to converge. " + msg += f"Skip frame at {self._ts.time}." + warnings.warn(msg) + logger.warning(msg) + return + # Save the results somewhere useful in some useful format. Usefully. + self._generate_output( + w, + v, + self.results, + ReportVector=self.ReportVector, + counter=self._ts.frame) + + def _conclude(self): + self.results.times = self.times + self.results.eigenvalues = np.asarray(self.results.eigenvalues) + self.results.eigenvectors = np.asarray(self.results.eigenvectors)
+ + +
[docs]class closeContactGNMAnalysis(GNMAnalysis): + r"""GNMAnalysis only using close contacts. + + This is a version of the GNM where the Kirchoff matrix is + constructed from the close contacts between individual atoms + in different residues. + + Parameters + ---------- + universe : Universe + Analyze the full trajectory in the universe. + select : str (optional) + MDAnalysis selection string + cutoff : float (optional) + Consider selected atoms within the cutoff as neighbors for the + Gaussian network model. + ReportVector : str (optional) + filename to write eigenvectors to, by default no output is written + weights : {"size", None} (optional) + If set to "size" (the default) then weight the contact by + :math:`1/\sqrt{N_i N_j}` where :math:`N_i` and :math:`N_j` are the + number of atoms in the residues :math:`i` and :math:`j` that contain + the atoms that form a contact. + + Attributes + ---------- + results.times : numpy.ndarray + simulation times used in analysis + results.eigenvalues : numpy.ndarray + calculated eigenvalues + results.eigenvectors : numpy.ndarray + calculated eigenvectors + + Notes + ----- + The `MassWeight` option has now been removed. + + See Also + -------- + :class:`GNMAnalysis` + + + .. versionchanged:: 0.16.0 + Made :meth:`generate_output` a private method :meth:`_generate_output`. + + .. deprecated:: 0.16.0 + Instead of ``MassWeight=True`` use ``weights="size"``. + + .. versionchanged:: 1.0.0 + MassWeight option (see above deprecation entry). + Changed `selection` keyword to `select` + + .. versionchanged:: 2.0.0 + Use :class:`~MDAnalysis.analysis.AnalysisBase` as parent class and + store results as attributes ``times``, ``eigenvalues`` and + ``eigenvectors`` of the `results` attribute. + """ + + def __init__(self, + universe, + select='protein', + cutoff=4.5, + ReportVector=None, + weights="size"): + super(closeContactGNMAnalysis, self).__init__(universe, + select, + cutoff, + ReportVector) + self.weights = weights + +
[docs] def generate_kirchoff(self): + nresidues = self.ca.n_residues + positions = self.ca.positions + residue_index_map = [ + resnum + for [resnum, residue] in enumerate(self.ca.residues) + for atom in residue.atoms + ] + matrix = np.zeros((nresidues, nresidues), dtype=np.float64) + cutoffsq = self.cutoff**2 + + # cache sqrt of residue sizes (slow) so that sr[i]*sr[j] == sqrt(r[i]*r[j]) + inv_sqrt_res_sizes = np.ones(len(self.ca.residues)) + if self.weights == 'size': + inv_sqrt_res_sizes = 1 / np.sqrt( + [r.atoms.n_atoms for r in self.ca.residues]) + + for i_atom, j_atom in neighbour_generator(positions, self.cutoff): + if j_atom > i_atom and _dsq(positions[i_atom], + positions[j_atom]) < cutoffsq: + iresidue = residue_index_map[i_atom] + jresidue = residue_index_map[j_atom] + contact = (inv_sqrt_res_sizes[iresidue] * + inv_sqrt_res_sizes[jresidue]) + matrix[iresidue][jresidue] -= contact + matrix[jresidue][iresidue] -= contact + matrix[iresidue][iresidue] += contact + matrix[jresidue][jresidue] += contact + + return matrix
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.html new file mode 100644 index 0000000000..ce279e5b90 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.html @@ -0,0 +1,1567 @@ + + + + + + MDAnalysis.analysis.hole2.hole — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.hole2.hole

+# -*- 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 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 <http://www.holeprogram.org/doc/old/hole_d03.html>`_
+    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 = util.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
+
+
+
[docs]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 <http://www.holeprogram.org/doc/old/hole_d03.html>`_ + 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 <https://github.com/MDAnalysis/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 = util.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 = util.which(sos_triangle) + if sos_triangle_path is None: + path = os.path.join(self.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')) + sph_process_path = util.which(sph_process) + if sph_process_path is None: + path = os.path.join(self.base_path, sph_process) + sph_process_path = util.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) + +
[docs] 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 + +
[docs] 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)) + +
[docs] 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 + <http://www.holeprogram.org/doc/old/hole_d04.html#sph_process>`_ and + `sos_triangle + <http://www.holeprogram.org/doc/old/hole_d04.html#sos_triangle>`_ as + described under `Visualization of HOLE results + <http://www.holeprogram.org/doc/index.html>`_. + + 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
+ +
[docs] 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()])
+ +
[docs] 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 = plt.cm.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 + +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+ +
[docs] 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
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.html new file mode 100644 index 0000000000..3cfc7525cf --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.html @@ -0,0 +1,709 @@ + + + + + + MDAnalysis.analysis.hole2.utils — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.hole2.utils

+# -*- 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__)
+
+
+
[docs]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
+ + +
[docs]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 = 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 + + +
[docs]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
+ + +
[docs]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
+ + +
[docs]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
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html new file mode 100644 index 0000000000..1e65d49515 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html @@ -0,0 +1,1119 @@ + + + + + + MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.hydrogenbonds.hbond_analysis

+# -*- 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-2017 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
+#
+
+"""Hydrogen Bond Analysis --- :mod:`MDAnalysis.analysis.hydrogenbonds.hbond_analysis`
+=====================================================================================
+
+:Author: Paul Smith
+:Year: 2019
+:Copyright: GNU Public License v3
+
+.. versionadded:: 1.0.0
+
+This module provides methods to find and analyse hydrogen bonds in a Universe.
+
+The :class:`HydrogenBondAnalysis` class is a new version of the original
+:class:`MDAnalysis.analysis.hbonds.HydrogenBondAnalysis` class from the module
+:mod:`MDAnalysis.analysis.hbonds.hbond_analysis`, which itself was modeled after the `VMD
+HBONDS plugin`_.
+
+.. _`VMD HBONDS plugin`: http://www.ks.uiuc.edu/Research/vmd/plugins/hbonds/
+
+
+Input
+------
+
+Required:
+  - *universe* : an MDAnalysis Universe object
+
+Options:
+  - *donors_sel* [None] : Atom selection for donors. If `None`, then will be identified via the topology.
+  - *hydrogens_sel* [None] : Atom selection for hydrogens. If `None`, then will be identified via charge and mass.
+  - *acceptors_sel* [None] : Atom selection for acceptors. If `None`, then will be identified via charge.
+  - *d_h_cutoff* (Å) [1.2] : Distance cutoff used for finding donor-hydrogen pairs
+  - *d_a_cutoff* (Å) [3.0] : Distance cutoff for hydrogen bonds. This cutoff refers to the D-A distance.
+  - *d_h_a_angle_cutoff* (degrees) [150] : D-H-A angle cutoff for hydrogen bonds.
+  - *update_selections* [True] : If true, will update atom selections at each frame.
+
+
+Output
+------
+
+  - *frame* : frame at which a hydrogen bond was found
+  - *donor id* : atom id of the hydrogen bond donor atom
+  - *hydrogen id* : atom id of the hydrogen bond hydrogen atom
+  - *acceptor id* : atom id of the hydrogen bond acceptor atom
+  - *distance* (Å): length of the hydrogen bond
+  - *angle* (degrees): angle of the hydrogen bond
+
+Hydrogen bond data are returned in a :class:`numpy.ndarray` on a "one line, one observation" basis
+and can be accessed via :attr:`HydrogenBondAnalysis.results.hbonds`::
+
+    results = [
+        [
+            <frame>,
+            <donor index (0-based)>,
+            <hydrogen index (0-based)>,
+            <acceptor index (0-based)>,
+            <distance>,
+            <angle>
+        ],
+        ...
+    ]
+
+Example use of :class:`HydrogenBondAnalysis`
+--------------------------------------------
+
+The simplest use case is to allow :class:`HydrogenBondAnalysis` to guess the acceptor and hydrogen atoms, and to
+identify donor-hydrogen pairs via the bonding information in the topology::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+  u = MDAnalysis.Universe(psf, trajectory)
+
+  hbonds = HBA(universe=u)
+  hbonds.run()
+
+It is also possible to specify which hydrogens and acceptors to use in the analysis. For example, to find all hydrogen
+bonds in water::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+  u = MDAnalysis.Universe(psf, trajectory)
+
+  hbonds = HBA(universe=u, hydrogens_sel='resname TIP3 and name H1 H2', acceptors_sel='resname TIP3 and name OH2')
+  hbonds.run()
+
+Alternatively, :attr:`hydrogens_sel` and :attr:`acceptors_sel` may be generated via the :attr:`guess_hydrogens` and
+:attr:`guess_acceptors`. This selection strings may then be modified prior to calling :attr:`run`, or a subset of
+the universe may be used to guess the atoms. For example, find hydrogens and acceptors belonging to a protein::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+  u = MDAnalysis.Universe(psf, trajectory)
+
+  hbonds = HBA(universe=u)
+  hbonds.hydrogens_sel = hbonds.guess_hydrogens("protein")
+  hbonds.acceptors_sel = hbonds.guess_acceptors("protein")
+  hbonds.run()
+
+Slightly more complex selection strings are also possible. For example, to find hydrogen bonds involving a protein and
+any water molecules within 10 Å of the protein (which may be useful for subsequently finding the lifetime of
+protein-water hydrogen bonds or finding water-bridging hydrogen bond paths)::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+  u = MDAnalysis.Universe(psf, trajectory)
+
+  hbonds = HBA(universe=u)
+
+  protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
+  protein_acceptors_sel = hbonds.guess_acceptors("protein")
+
+  water_hydrogens_sel = "resname TIP3 and name H1 H2"
+  water_acceptors_sel = "resname TIP3 and name OH2"
+
+  hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel} and around 10 not resname TIP3})"
+  hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel} and around 10 not resname TIP3})"
+  hbonds.run()
+
+To calculate the hydrogen bonds between different groups, for example a
+protein and water, one can use the :attr:`between` keyword. The
+following will find protein-water hydrogen bonds but not protein-protein
+or water-water hydrogen bonds::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
+    HydrogenBondAnalysis as HBA)
+
+  u = MDAnalysis.Universe(psf, trajectory)
+
+  hbonds = HBA(
+    universe=u,
+    between=['resname TIP3', 'protein']
+    )
+
+  protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
+  protein_acceptors_sel = hbonds.guess_acceptors("protein")
+
+  water_hydrogens_sel = "resname TIP3 and name H1 H2"
+  water_acceptors_sel = "resname TIP3 and name OH2"
+
+  hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel})"
+  hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel})"
+
+  hbonds.run()
+
+It is further possible to compute hydrogen bonds between several groups with
+with use of :attr:`between`. If in the above example,
+`between=[['resname TIP3', 'protein'], ['protein', 'protein']]`, all
+protein-water and protein-protein hydrogen bonds will be found, but
+no water-water hydrogen bonds.
+
+One can also define hydrogen bonds with atom types::
+
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+  hbonds = HBA(
+               universe=u,
+               donors_sel='type 2',
+               hydrogens_sel='type 1',
+               acceptors_sel='type 2',
+              )
+
+In order to compute the hydrogen bond lifetime, after finding hydrogen bonds
+one can use the :attr:`lifetime` function::
+
+    ...
+    hbonds.run()
+    tau_timeseries, timeseries = hbonds.lifetime()
+
+It is **highly recommended** that a topology with bond information is used to
+generate the universe, e.g `PSF`, `TPR`, or `PRMTOP` files. This is the only
+method by which it can be guaranteed that donor-hydrogen pairs are correctly
+identified. However, if, for example, a `PDB` file is used instead, a
+:attr:`donors_sel` may be provided along with a :attr:`hydrogens_sel` and the
+donor-hydrogen pairs will be identified via a distance cutoff,
+:attr:`d_h_cutoff`::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
+    HydrogenBondAnalysis as HBA)
+
+  u = MDAnalysis.Universe(pdb, trajectory)
+
+  hbonds = HBA(
+    universe=u,
+    donors_sel='resname TIP3 and name OH2',
+    hydrogens_sel='resname TIP3 and name H1 H2',
+    acceptors_sel='resname TIP3 and name OH2',
+    d_h_cutoff=1.2
+  )
+  hbonds.run()
+
+The class and its methods
+-------------------------
+
+.. autoclass:: HydrogenBondAnalysis
+   :members:
+
+   .. attribute:: results.hbonds
+
+      A :class:`numpy.ndarray` which contains a list of all observed hydrogen
+      bond interactions. See `Output`_ for more information.
+
+      .. versionadded:: 2.0.0
+
+   .. attribute:: hbonds
+
+      Alias to the :attr:`results.hbonds` attribute.
+
+      .. deprecated:: 2.0.0
+         Will be removed in MDAnalysis 3.0.0. Please use
+         :attr:`results.hbonds` instead.
+"""
+import logging
+import warnings
+from collections.abc import Iterable
+
+import numpy as np
+
+from ..base import AnalysisBase, Results
+from MDAnalysis.lib.distances import capped_distance, calc_angles
+from MDAnalysis.lib.correlations import autocorrelation, correct_intermittency
+from MDAnalysis.exceptions import NoDataError
+from MDAnalysis.core.groups import AtomGroup
+from MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel import find_hydrogen_donors
+
+from ...due import due, Doi
+
+due.cite(Doi("10.1039/C9CP01532A"),
+         description="Hydrogen bond analysis implementation",
+         path="MDAnalysis.analysis.hydrogenbonds.hbond_analysis",
+         cite_module=True)
+
+del Doi
+
+
+
[docs]class HydrogenBondAnalysis(AnalysisBase): + """ + Perform an analysis of hydrogen bonds in a Universe. + """ + + def __init__(self, universe, + donors_sel=None, hydrogens_sel=None, acceptors_sel=None, + between=None, d_h_cutoff=1.2, + d_a_cutoff=3.0, d_h_a_angle_cutoff=150, + update_selections=True): + """Set up atom selections and geometric criteria for finding hydrogen + bonds in a Universe. + + Hydrogen bond selections with `donors_sel` , `hydrogens_sel`, and + `acceptors_sel` may be achieved with either a *resname*, atom *name* + combination, or when those are absent, with atom *type* selections. + + Parameters + ---------- + universe : Universe + MDAnalysis Universe object + donors_sel : str + Selection string for the hydrogen bond donor atoms. If the + universe topology contains bonding information, leave + :attr:`donors_sel` as `None` so that donor-hydrogen pairs can be + correctly identified. + hydrogens_sel : str + Selection string for the hydrogen bond hydrogen atoms. Leave as + `None` to guess which hydrogens to use in the analysis using + :attr:`guess_hydrogens`. If :attr:`hydrogens_sel` is left as + `None`, also leave :attr:`donors_sel` as None so that + donor-hydrogen pairs can be correctly identified. + acceptors_sel : str + Selection string for the hydrogen bond acceptor atoms. Leave as + `None` to guess which atoms to use in the analysis using + :attr:`guess_acceptors` + between : List (optional), + Specify two selection strings for non-updating atom groups between + which hydrogen bonds will be calculated. For example, if the donor + and acceptor selections include both protein and water, it is + possible to find only protein-water hydrogen bonds - and not + protein-protein or water-water - by specifying + between=["protein", "SOL"]`. If a two-dimensional list is + passed, hydrogen bonds between each pair will be found. For + example, between=[["protein", "SOL"], ["protein", "protein"]]` + will calculate all protein-water and protein-protein hydrogen + bonds but not water-water hydrogen bonds. If `None`, hydrogen + bonds between all donors and acceptors will be calculated. + d_h_cutoff : float (optional) + Distance cutoff used for finding donor-hydrogen pairs. + Only used to find donor-hydrogen pairs if the + universe topology does not contain bonding information + d_a_cutoff : float (optional) + Distance cutoff for hydrogen bonds. This cutoff refers to the D-A distance. + d_h_a_angle_cutoff : float (optional) + D-H-A angle cutoff for hydrogen bonds, in degrees. + update_selections : bool (optional) + Whether or not to update the acceptor, donor and hydrogen + lists at each frame. + + Note + ---- + + It is highly recommended that a universe topology with bond + information is used, as this is the only way that guarantees the + correct identification of donor-hydrogen pairs. + + + .. versionadded:: 2.0.0 + Added `between` keyword + .. versionchanged:: 2.4.0 + Added use of atom types in selection strings for hydrogen atoms, + bond donors, or bond acceptors + + """ + + self.u = universe + self._trajectory = self.u.trajectory + + self.donors_sel = donors_sel.strip() if donors_sel is not None else donors_sel + self.hydrogens_sel = hydrogens_sel.strip() if hydrogens_sel is not None else hydrogens_sel + self.acceptors_sel = acceptors_sel.strip() if acceptors_sel is not None else acceptors_sel + + msg = ("{} is an empty selection string - no hydrogen bonds will " + "be found. This may be intended, but please check your " + "selection." + ) + for sel in ['donors_sel', 'hydrogens_sel', 'acceptors_sel']: + val = getattr(self, sel) + if isinstance(val, str) and not val: + warnings.warn(msg.format(sel)) + + # If hydrogen bonding groups are selected, then generate + # corresponding atom groups + if between is not None: + if not isinstance(between, Iterable) or len(between) == 0: + raise ValueError("between must be a non-empty list/iterable") + if isinstance(between[0], str): + between = [between] + + between_ags = [] + for group1, group2 in between: + between_ags.append( + [ + self.u.select_atoms(group1, updating=False), + self.u.select_atoms(group2, updating=False) + ] + ) + + self.between_ags = between_ags + else: + self.between_ags = None + + + self.d_h_cutoff = d_h_cutoff + self.d_a_cutoff = d_a_cutoff + self.d_h_a_angle = d_h_a_angle_cutoff + self.update_selections = update_selections + self.results = Results() + self.results.hbonds = None + +
[docs] def guess_hydrogens(self, + select='all', + max_mass=1.1, + min_charge=0.3, + min_mass=0.9 + ): + """Guesses which hydrogen atoms should be used in the analysis. + + Parameters + ---------- + select: str (optional) + :ref:`Selection string <selection-commands-label>` for atom group + from which hydrogens will be identified. (e.g., ``(resname X and + name H1)`` or ``type 2``) + max_mass: float (optional) + The mass of a hydrogen atom must be less than this value. + min_mass: float (optional) + The mass of a hydrogen atom must be greater than this value. + min_charge: float (optional) + The charge of a hydrogen atom must be greater than this value. + + Returns + ------- + potential_hydrogens: str + String containing the :attr:`resname` and :attr:`name` of all + hydrogen atoms potentially capable of forming hydrogen bonds. + + Notes + ----- + Hydrogen selections may be achieved with either a resname, atom + name combination, or when those are absent, atom types. + + This function makes use of atomic masses and atomic charges to identify + which atoms are hydrogen atoms that are capable of participating in + hydrogen bonding. If an atom has a mass less than :attr:`max_mass` and + an atomic charge greater than :attr:`min_charge` then it is considered + capable of participating in hydrogen bonds. + + If :attr:`hydrogens_sel` is `None`, this function is called to guess + the selection. + + Alternatively, this function may be used to quickly generate a + :class:`str` of potential hydrogen atoms involved in hydrogen bonding. + This str may then be modified before being used to set the attribute + :attr:`hydrogens_sel`. + + + .. versionchanged:: 2.4.0 + Added ability to use atom types + + """ + + if min_mass > max_mass: + raise ValueError("min_mass is higher than (or equal to) max_mass") + + ag = self.u.select_atoms(select) + hydrogens_ag = ag[ + np.logical_and.reduce(( + ag.masses < max_mass, + ag.charges > min_charge, + ag.masses > min_mass, + )) + ] + + return self._group_categories(hydrogens_ag)
+ +
[docs] def guess_donors(self, select='all', max_charge=-0.5): + """Guesses which atoms could be considered donors in the analysis. Only + use if the universe topology does not contain bonding information, + otherwise donor-hydrogen pairs may be incorrectly assigned. + + Parameters + ---------- + select: str (optional) + :ref:`Selection string <selection-commands-label>` for atom group + from which donors will be identified. (e.g., ``(resname X and name + O1)`` or ``type 2``) + max_charge: float (optional) + The charge of a donor atom must be less than this value. + + Returns + ------- + potential_donors: str + String containing the :attr:`resname` and :attr:`name` of all atoms + that are potentially capable of forming hydrogen bonds. + + Notes + ----- + Donor selections may be achieved with either a resname, atom + name combination, or when those are absent, atom types. + + This function makes use of and atomic charges to identify which atoms + could be considered donor atoms in the hydrogen bond analysis. If an + atom has an atomic charge less than :attr:`max_charge`, and it is + within :attr:`d_h_cutoff` of a hydrogen atom, then it is considered + capable of participating in hydrogen bonds. + + If :attr:`donors_sel` is `None`, and the universe topology does not + have bonding information, this function is called to guess the + selection. + + Alternatively, this function may be used to quickly generate a + :class:`str` of potential donor atoms involved in hydrogen bonding. + This :class:`str` may then be modified before being used to set the + attribute :attr:`donors_sel`. + + + .. versionchanged:: 2.4.0 + Added ability to use atom types + + """ + + # We need to know `hydrogens_sel` before we can find donors + # Use a new variable `hydrogens_sel` so that we do not set + # `self.hydrogens_sel` if it is currently `None` + if self.hydrogens_sel is None: + hydrogens_sel = self.guess_hydrogens() + else: + hydrogens_sel = self.hydrogens_sel + hydrogens_ag = self.u.select_atoms(hydrogens_sel) + + # We're using u._topology.bonds rather than u.bonds as it is a million + # times faster to access. This is because u.bonds also calculates + # properties of each bond (e.g bond length). See: + # https://github.com/MDAnalysis/mdanalysis/issues/2396#issuecomment-596251787 + if (hasattr(self.u._topology, 'bonds') + and len(self.u._topology.bonds.values) != 0): + donors_ag = find_hydrogen_donors(hydrogens_ag) + donors_ag = donors_ag.intersection(self.u.select_atoms(select)) + else: + donors_ag = hydrogens_ag.residues.atoms.select_atoms( + "({donors_sel}) and around {d_h_cutoff} {hydrogens_sel}".format( + donors_sel=select, + d_h_cutoff=self.d_h_cutoff, + hydrogens_sel=hydrogens_sel + ) + ) + + donors_ag = donors_ag[donors_ag.charges < max_charge] + + return self._group_categories(donors_ag)
+ +
[docs] def guess_acceptors(self, select='all', max_charge=-0.5): + """Guesses which atoms could be considered acceptors in the analysis. + + Acceptor selections may be achieved with either a resname, atom + name combination, or when those are absent, atom types. + + Parameters + ---------- + select: str (optional) + :ref:`Selection string <selection-commands-label>` for atom group + from which acceptors will be identified. (e.g., ``(resname X and + name O1)`` or ``type 2``) + max_charge: float (optional) + The charge of an acceptor atom must be less than this value. + + Returns + ------- + potential_acceptors: str + String containing the :attr:`resname` and :attr:`name` of all atoms + that potentially capable of forming hydrogen bonds. + + Notes + ----- + Acceptor selections may be achieved with either a resname, atom + name combination, or when those are absent, atom types. + + This function makes use of and atomic charges to identify which atoms + could be considered acceptor atoms in the hydrogen bond analysis. If + an atom has an atomic charge less than :attr:`max_charge` then it is + considered capable of participating in hydrogen bonds. + + If :attr:`acceptors_sel` is `None`, this function is called to guess + the selection. + + Alternatively, this function may be used to quickly generate a + :class:`str` of potential acceptor atoms involved in hydrogen bonding. + This :class:`str` may then be modified before being used to set the + attribute :attr:`acceptors_sel`. + + + .. versionchanged:: 2.4.0 + Added ability to use atom types + + """ + + ag = self.u.select_atoms(select) + acceptors_ag = ag[ag.charges < max_charge] + + return self._group_categories(acceptors_ag)
+ + @staticmethod + def _group_categories(group): + """ Find categories according to universe constraints + + Parameters + ---------- + group : AtomGroup + AtomGroups corresponding to either hydrogen bond acceptors, + donors, or hydrogen atoms that meet their respective charge + and mass constraints. + + Returns + ------- + select : str + String for each hydrogen bond acceptor/donor/hydrogen atom category. + + + .. versionadded:: 2.4.0 + + """ + + if hasattr(group, "resnames") and hasattr(group, "names"): + group_list = np.unique([ + '(resname {} and name {})'.format(r, + p) for r, p in zip(group.resnames, group.names) + ]) + else: + group_list = np.unique( + [ + 'type {}'.format(tp) for tp in group.types + ] + ) + + return " or ".join(group_list) + + def _get_dh_pairs(self): + """Finds donor-hydrogen pairs. + + Returns + ------- + donors, hydrogens: AtomGroup, AtomGroup + AtomGroups corresponding to all donors and all hydrogens. + AtomGroups are ordered such that, if zipped, will + produce a list of donor-hydrogen pairs. + """ + + # If donors_sel is not provided, use topology to find d-h pairs + if self.donors_sel is None: + + # We're using u._topology.bonds rather than u.bonds as it is a million times faster to access. + # This is because u.bonds also calculates properties of each bond (e.g bond length). + # See https://github.com/MDAnalysis/mdanalysis/issues/2396#issuecomment-596251787 + if not (hasattr(self.u._topology, 'bonds') and len(self.u._topology.bonds.values) != 0): + raise NoDataError('Cannot assign donor-hydrogen pairs via topology as no bond information is present. ' + 'Please either: load a topology file with bond information; use the guess_bonds() ' + 'topology guesser; or set HydrogenBondAnalysis.donors_sel so that a distance cutoff ' + 'can be used.') + + hydrogens = self.u.select_atoms(self.hydrogens_sel) + donors = sum(h.bonded_atoms[0] for h in hydrogens) if hydrogens \ + else AtomGroup([], self.u) + + # Otherwise, use d_h_cutoff as a cutoff distance + else: + + hydrogens = self.u.select_atoms(self.hydrogens_sel) + donors = self.u.select_atoms(self.donors_sel) + donors_indices, hydrogen_indices = capped_distance( + donors.positions, + hydrogens.positions, + max_cutoff=self.d_h_cutoff, + box=self.u.dimensions, + return_distances=False + ).T + + donors = donors[donors_indices] + hydrogens = hydrogens[hydrogen_indices] + + return donors, hydrogens + + def _filter_atoms(self, donors, acceptors): + """Create a mask to filter donor, hydrogen and acceptor atoms. + + This can be used to consider only hydrogen bonds between two or more + specified groups. + + Groups are specified with the `between` keyword when creating the + HydrogenBondAnalysis object. + + Returns + ------- + mask: np.ndarray + + + .. versionchanged:: 2.5.0 + Change return value to a mask instead of separate AtomGroups. +`` + """ + + mask = np.full(donors.n_atoms, fill_value=False) + for group1, group2 in self.between_ags: + + # Find donors in G1 and acceptors in G2 + mask[ + np.logical_and( + np.in1d(donors.indices, group1.indices), + np.in1d(acceptors.indices, group2.indices) + ) + ] = True + + # Find acceptors in G1 and donors in G2 + mask[ + np.logical_and( + np.in1d(acceptors.indices, group1.indices), + np.in1d(donors.indices, group2.indices) + ) + ] = True + + return mask + + + def _prepare(self): + self.results.hbonds = [[], [], [], [], [], []] + + # Set atom selections if they have not been provided + if self.acceptors_sel is None: + self.acceptors_sel = self.guess_acceptors() + if self.hydrogens_sel is None: + self.hydrogens_sel = self.guess_hydrogens() + + # Select atom groups + self._acceptors = self.u.select_atoms(self.acceptors_sel, + updating=self.update_selections) + self._donors, self._hydrogens = self._get_dh_pairs() + + def _single_frame(self): + + box = self._ts.dimensions + + # Update donor-hydrogen pairs if necessary + if self.update_selections: + self._donors, self._hydrogens = self._get_dh_pairs() + + # find D and A within cutoff distance of one another + # min_cutoff = 1.0 as an atom cannot form a hydrogen bond with itself + d_a_indices, d_a_distances = capped_distance( + self._donors.positions, + self._acceptors.positions, + max_cutoff=self.d_a_cutoff, + min_cutoff=1.0, + box=box, + return_distances=True, + ) + + if np.size(d_a_indices) == 0: + warnings.warn( + "No hydrogen bonds were found given d-a cutoff of " + f"{self.d_a_cutoff} between Donor, {self.donors_sel}, and " + f"Acceptor, {self.acceptors_sel}." + ) + + # Remove D-A pairs more than d_a_cutoff away from one another + tmp_donors = self._donors[d_a_indices.T[0]] + tmp_hydrogens = self._hydrogens[d_a_indices.T[0]] + tmp_acceptors = self._acceptors[d_a_indices.T[1]] + + # Remove donor-acceptor pairs between pairs of AtomGroups we are not + # interested in + if self.between_ags is not None: + between_mask = self._filter_atoms(tmp_donors, tmp_acceptors) + tmp_donors = tmp_donors[between_mask] + tmp_hydrogens = tmp_hydrogens[between_mask] + tmp_acceptors = tmp_acceptors[between_mask] + d_a_distances = d_a_distances[between_mask] + + # Find D-H-A angles greater than d_h_a_angle_cutoff + d_h_a_angles = np.rad2deg( + calc_angles( + tmp_donors.positions, + tmp_hydrogens.positions, + tmp_acceptors.positions, + box=box + ) + ) + hbond_indices = np.where(d_h_a_angles > self.d_h_a_angle)[0] + + if np.size(hbond_indices) == 0: + warnings.warn( + "No hydrogen bonds were found given angle of " + f"{self.d_h_a_angle} between Donor, {self.donors_sel}, and " + f"Acceptor, {self.acceptors_sel}." + ) + + # Retrieve atoms, distances and angles of hydrogen bonds + hbond_donors = tmp_donors[hbond_indices] + hbond_hydrogens = tmp_hydrogens[hbond_indices] + hbond_acceptors = tmp_acceptors[hbond_indices] + hbond_distances = d_a_distances[hbond_indices] + hbond_angles = d_h_a_angles[hbond_indices] + + # Store data on hydrogen bonds found at this frame + self.results.hbonds[0].extend(np.full_like(hbond_donors, + self._ts.frame)) + self.results.hbonds[1].extend(hbond_donors.indices) + self.results.hbonds[2].extend(hbond_hydrogens.indices) + self.results.hbonds[3].extend(hbond_acceptors.indices) + self.results.hbonds[4].extend(hbond_distances) + self.results.hbonds[5].extend(hbond_angles) + + def _conclude(self): + + self.results.hbonds = np.asarray(self.results.hbonds).T + + @property + def hbonds(self): + wmsg = ("The `hbonds` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.hbonds` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.hbonds + +
[docs] def lifetime(self, tau_max=20, window_step=1, intermittency=0): + """Computes and returns the time-autocorrelation + (HydrogenBondLifetimes) of hydrogen bonds. + + Before calling this method, the hydrogen bonds must first be computed + with the `run()` function. The same `start`, `stop` and `step` + parameters used in finding hydrogen bonds will be used here for + calculating hydrogen bond lifetimes. That is, the same frames will be + used in the analysis. + + Unique hydrogen bonds are identified using hydrogen-acceptor pairs. + This means an acceptor switching to a different hydrogen atom - with + the same donor - from one frame to the next is considered a different + hydrogen bond. + + Please see :func:`MDAnalysis.lib.correlations.autocorrelation` and + :func:`MDAnalysis.lib.correlations.intermittency` functions for more + details. + + + Parameters + ---------- + window_step : int, optional + The number of frames between each t(0). + tau_max : int, optional + Hydrogen bond lifetime is calculated for frames in the range + 1 <= `tau` <= `tau_max` + intermittency : int, optional + The maximum number of consecutive frames for which a bond can + disappear but be counted as present if it returns at the next + frame. An intermittency of `0` is equivalent to a continuous + autocorrelation, which does not allow for hydrogen bond + disappearance. For example, for `intermittency=2`, any given + hydrogen bond may disappear for up to two consecutive frames yet + be treated as being present at all frames. The default is + continuous (intermittency=0). + + Returns + ------- + tau_timeseries : np.array + tau from 1 to `tau_max` + timeseries : np.array + autcorrelation value for each value of `tau` + """ + + if self.results.hbonds is None: + logging.error( + "Autocorrelation analysis of hydrogen bonds cannot be done" + "before the hydrogen bonds are found" + ) + logging.error( + "Autocorrelation: Please use the .run() before calling this" + "function" + ) + raise NoDataError(".hbonds attribute is None: use .run() first") + + if self.step != 1: + logging.warning( + "Autocorrelation: Hydrogen bonds were computed with step > 1." + ) + logging.warning( + "Autocorrelation: We recommend recomputing hydrogen bonds with" + " step = 1." + ) + logging.warning( + "Autocorrelation: if you would like to allow bonds to break" + " and reform, please use 'intermittency'" + ) + + # Extract the hydrogen bonds IDs only in the format + # [set(superset(x1,x2), superset(x3,x4)), ..] + found_hydrogen_bonds = [set() for _ in self.frames] + for frame_index, frame in enumerate(self.frames): + for hbond in self.results.hbonds[self.results.hbonds[:, 0] == frame]: + found_hydrogen_bonds[frame_index].add(frozenset(hbond[2:4])) + + intermittent_hbonds = correct_intermittency( + found_hydrogen_bonds, + intermittency=intermittency + ) + tau_timeseries, timeseries, timeseries_data = autocorrelation( + intermittent_hbonds, + tau_max, + window_step=window_step + ) + + return np.vstack([tau_timeseries, timeseries])
+ +
[docs] def count_by_time(self): + """Counts the number of hydrogen bonds per timestep. + + Returns + ------- + counts : numpy.ndarray + Contains the total number of hydrogen bonds found at each timestep. + Can be used along with :attr:`HydrogenBondAnalysis.times` to plot + the number of hydrogen bonds over time. + """ + + indices, tmp_counts = np.unique(self.results.hbonds[:, 0], axis=0, + return_counts=True) + + indices -= self.start + indices /= self.step + + counts = np.zeros_like(self.frames) + counts[indices.astype(np.intp)] = tmp_counts + + return counts
+ +
[docs] def count_by_type(self): + """Counts the total number of each unique type of hydrogen bond. + + Returns + ------- + counts : numpy.ndarray + Each row of the array contains the donor resname, donor atom type, + acceptor resname, acceptor atom type and the total number of times + the hydrogen bond was found. + + Note + ---- + Unique hydrogen bonds are determined through a consideration of the + resname and atom type of the donor and acceptor atoms in a hydrogen bond. + """ + + d = self.u.atoms[self.results.hbonds[:, 1].astype(np.intp)] + a = self.u.atoms[self.results.hbonds[:, 3].astype(np.intp)] + + if hasattr(d, "resnames"): + d_res = d.resnames + a_res = a.resnames + else: + d_res = len(d.types) * ["None"] + a_res = len(a.types) * ["None"] + + tmp_hbonds = np.array([d_res, d.types, a_res, a.types], dtype=str).T + hbond_type, type_counts = np.unique( + tmp_hbonds, axis=0, return_counts=True) + hbond_type_list = [] + for hb_type, hb_count in zip(hbond_type, type_counts): + hbond_type_list.append([":".join(hb_type[:2]), + ":".join(hb_type[2:4]), hb_count]) + + return np.array(hbond_type_list)
+ +
[docs] def count_by_ids(self): + """Counts the total number hydrogen bonds formed by unique combinations of donor, hydrogen and acceptor atoms. + + Returns + ------- + counts : numpy.ndarray + Each row of the array contains the donor atom id, hydrogen atom id, acceptor atom id and the total number + of times the hydrogen bond was observed. The array is sorted by frequency of occurrence. + + Note + ---- + Unique hydrogen bonds are determined through a consideration of the hydrogen atom id and acceptor atom id + in a hydrogen bond. + """ + + d = self.u.atoms[self.results.hbonds[:, 1].astype(np.intp)] + h = self.u.atoms[self.results.hbonds[:, 2].astype(np.intp)] + a = self.u.atoms[self.results.hbonds[:, 3].astype(np.intp)] + + tmp_hbonds = np.array([d.ids, h.ids, a.ids]).T + hbond_ids, ids_counts = np.unique(tmp_hbonds, axis=0, + return_counts=True) + + # Find unique hbonds and sort rows so that most frequent observed bonds are at the top of the array + unique_hbonds = np.concatenate((hbond_ids, ids_counts[:, None]), + axis=1) + unique_hbonds = unique_hbonds[unique_hbonds[:, 3].argsort()[::-1]] + + return unique_hbonds
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html new file mode 100644 index 0000000000..f8316a06d8 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html @@ -0,0 +1,760 @@ + + + + + + MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel

+# -*- 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-2017 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
+#
+"""\
+Hydrogen bond autocorrelation --- :mod:`MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel`
+===========================================================================================
+
+:Author: Richard J. Gowers
+:Year: 2014
+:Copyright: GNU Public License v3
+
+.. versionadded:: 0.9.0
+
+.. versionchanged:: 2.0.0
+
+   Module moved from :mod:`MDAnalysis.analysis.hbonds.hbond_autocorrel` to
+   :mod:`MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel`.
+
+
+Description
+-----------
+
+Calculates the time autocorrelation function, :math:`C_x(t)`, for the hydrogen
+bonds in the selections passed to it.  The population of hydrogen bonds at a
+given startpoint, :math:`t_0`, is evaluated based on geometric criteria and
+then the lifetime of these bonds is monitored over time.  Multiple passes
+through the trajectory are used to build an average of the behaviour.
+
+.. math::
+   C_x(t) = \\left \\langle \\frac{h_{ij}(t_0) h_{ij}(t_0 + t)}{h_{ij}(t_0)^2} \\right\\rangle
+
+The subscript :math:`x` refers to the definition of lifetime being used, either
+continuous or intermittent.  The continuous definition measures the time that
+a particular hydrogen bond remains continuously attached, whilst the
+intermittent definition allows a bond to break and then subsequently reform and
+be counted again.  The relevent lifetime, :math:`\\tau_x`, can then be found
+via integration of this function
+
+.. math::
+   \\tau_x = \\int_0^\\infty C_x(t) dt`
+
+For this, the observed behaviour is fitted to a multi exponential function,
+using 2 exponents for the continuous lifetime and 3 for the intermittent
+lifetime.
+
+    :math:`C_x(t) = A_1 \\exp( - t / \\tau_1)
+    + A_2 \\exp( - t / \\tau_2)
+    [+ A_3 \\exp( - t / \\tau_3)]`
+
+Where the final pre expoential factor :math:`A_n` is subject to the condition:
+
+    :math:`A_n = 1 - \\sum\\limits_{i=1}^{n-1} A_i`
+
+For further details see :cite:p:`Gowers2015`.
+
+Input
+-----
+
+Three AtomGroup selections representing the **hydrogens**, **donors** and
+**acceptors** that you wish to analyse.  Note that the **hydrogens** and
+**donors** selections must be aligned, that is **hydrogens[0]** and
+**donors[0]** must represent a bonded pair.  For systems such as water,
+this will mean that each oxygen appears twice in the **donors** AtomGroup.
+The function :func:`find_hydrogen_donors` can be used to construct the donor
+AtomGroup
+::
+
+  import MDAnalysis as mda
+  from MDAnalysis.analysis import hbonds
+  from MDAnalysis.tests.datafiles import waterPSF, waterDCD
+  u = mda.Universe(waterPSF, waterDCD)
+  hydrogens = u.select_atoms('name H*')
+  donors = hbonds.find_hydrogen_donors(hydrogens)
+
+
+Note that this requires the Universe to have bond information.  If this isn't
+present in the topology file, the
+:meth:`MDAnalysis.core.groups.AtomGroup.guess_bonds` method can be used
+as so
+::
+
+  import MDAnalysis as mda
+  from MDAnalysis.analysis import hbonds
+  from MDAnalysis.tests.datafiles import GRO
+  # we could load the Universe with guess_bonds=True
+  # but this would guess **all** bonds
+  u = mda.Universe(GRO)
+  water = u.select_atoms('resname SOL and not type DUMMY')
+  # guess bonds only within our water atoms
+  # this adds the bond information directly to the Universe
+  water.guess_bonds()
+  hydrogens = water.select_atoms('type H')
+  # this is now possible as we guessed the bonds
+  donors = hbonds.find_hydrogen_donors(hydrogens)
+
+
+The keyword **exclusions** allows a tuple of array addresses to be provided,
+(Hidx, Aidx),these pairs of hydrogen-acceptor are then not permitted to be
+counted as part of the analysis.  This could be used to exclude the
+consideration of hydrogen bonds within the same functional group, or to perform
+analysis on strictly intermolecular hydrogen bonding.
+
+Hydrogen bonds are defined on the basis of geometric criteria; a
+Hydrogen-Acceptor distance of less then **dist_crit** and a
+Donor-Hydrogen-Acceptor angle of greater than **angle_crit**.
+
+The length of trajectory to analyse in ps, **sample_time**, is used to choose
+what length to analyse.
+
+Multiple passes, controlled by the keyword **nruns**, through the trajectory
+are performed and an average calculated.  For each pass, **nsamples** number
+of points along the run are calculated.
+
+
+Output
+------
+
+All results of the analysis are available through the *solution* attribute.
+This is a dictionary with the following keys
+
+- *results*  The raw results of the time autocorrelation function.
+- *time*     Time axis, in ps, for the results.
+- *fit*      Results of the exponential curve fitting procedure. For the
+             *continuous* lifetime these are (A1, tau1, tau2), for the
+             *intermittent* lifetime these are (A1, A2, tau1, tau2, tau3).
+- *tau*      Calculated time constant from the fit.
+- *estimate* Estimated values generated by the calculated fit.
+
+The *results* and *time* values are only filled after the :meth:`run` method,
+*fit*, *tau* and *estimate* are filled after the :meth:`solve` method has been
+used.
+
+
+Worked Example for Polyamide
+----------------------------
+
+This example finds the continuous hydrogen bond lifetime between N-H..O in a
+polyamide system.  This will use the default geometric definition for hydrogen
+bonds of length 3.0 Å and angle of 130 degrees.
+It will observe a window of 2.0 ps (`sample_time`) and try to gather 1000
+sample point within this time window (this relies upon the trajectory being
+sampled frequently enough).  This process is repeated for 20 different start
+points to build a better average.
+
+::
+
+  import MDAnalysis as mda
+  from MDAnalysis.analysis import hbonds
+  from MDAnalysis.tests.datafiles import TRZ_psf, TRZ
+  import matplotlib.pyplot as plt
+  # load system
+  u = mda.Universe(TRZ_psf, TRZ)
+  # select atoms of interest into AtomGroups
+  H = u.select_atoms('name Hn')
+  N = u.select_atoms('name N')
+  O = u.select_atoms('name O')
+  # create analysis object
+  hb_ac = hbonds.HydrogenBondAutoCorrel(u,
+              acceptors=O, hydrogens=H, donors=N,
+              bond_type='continuous',
+              sample_time=2.0, nsamples=1000, nruns=20)
+  # call run to gather results
+  hb_ac.run()
+  # attempt to fit results to exponential equation
+  hb_ac.solve()
+  # grab results from inside object
+  tau = hb_ac.solution['tau']
+  time = hb_ac.solution['time']
+  results = hb_ac.solution['results']
+  estimate = hb_ac.solution['estimate']
+  # plot to check!
+  plt.plot(time, results, 'ro')
+  plt.plot(time, estimate)
+  plt.show()
+
+
+Functions and Classes
+---------------------
+
+.. autofunction:: find_hydrogen_donors
+
+.. autoclass:: HydrogenBondAutoCorrel
+   :members:
+
+"""
+import numpy as np
+import scipy.optimize
+import warnings
+
+from MDAnalysis.lib._cutil import _in2d
+from MDAnalysis.lib.log import ProgressBar
+from MDAnalysis.lib.distances import capped_distance, calc_angles, calc_bonds
+from MDAnalysis.core.groups import requires
+
+from MDAnalysis.due import due, Doi
+due.cite(Doi("10.1063/1.4922445"),
+         description="Hydrogen bonding autocorrelation time",
+         path='MDAnalysis.analysis.hbonds.hbond_autocorrel',
+)
+del Doi
+
+
+
[docs]@requires('bonds') +def find_hydrogen_donors(hydrogens): + """Returns the donor atom for each hydrogen + + Parameters + ---------- + hydrogens : AtomGroup + the hydrogens that will form hydrogen bonds + + Returns + ------- + donors : AtomGroup + the donor atom for each hydrogen, found via bond information + + + .. versionadded:: 0.20.0 + """ + return sum(h.bonded_atoms[0] for h in hydrogens)
+ + +
[docs]class HydrogenBondAutoCorrel(object): + """Perform a time autocorrelation of the hydrogen bonds in the system. + + Parameters + ---------- + universe : Universe + MDAnalysis Universe that all selections belong to + hydrogens : AtomGroup + AtomGroup of Hydrogens which can form hydrogen bonds + acceptors : AtomGroup + AtomGroup of all Acceptor atoms + donors : AtomGroup + The atoms which are connected to the hydrogens. This group + must be identical in length to the hydrogen group and matched, + ie hydrogens[0] is bonded to donors[0]. + For water, this will mean a donor appears twice in this + group, once for each hydrogen. + bond_type : str + Which definition of hydrogen bond lifetime to consider, either + 'continuous' or 'intermittent'. + exclusions : ndarray, optional + Indices of Hydrogen-Acceptor pairs to be excluded. + With nH and nA Hydrogens and Acceptors, a (nH x nA) array of distances + is calculated, *exclusions* is used as a mask on this array to exclude + some pairs. + angle_crit : float, optional + The angle (in degrees) which all bonds must be greater than [130.0] + dist_crit : float, optional + The maximum distance (in Angstroms) for a hydrogen bond [3.0] + sample_time : float, optional + The amount of time, in ps, that you wish to observe hydrogen + bonds for [100] + nruns : int, optional + The number of different start points within the trajectory + to use [1] + nsamples : int, optional + Within each run, the number of frames to analyse [50] + pbc : bool, optional + Whether to consider periodic boundaries in calculations [``True``] + + ..versionchanged: 1.0.0 + ``save_results()`` method was removed. You can instead use ``np.savez()`` + on :attr:`HydrogenBondAutoCorrel.solution['time']` and + :attr:`HydrogenBondAutoCorrel.solution['results']` instead. + """ + + def __init__(self, universe, + hydrogens=None, acceptors=None, donors=None, + bond_type=None, + exclusions=None, + angle_crit=130.0, dist_crit=3.0, # geometric criteria + sample_time=100, # expected length of the decay in ps + time_cut=None, # cutoff time for intermittent hbonds + nruns=1, # number of times to iterate through the trajectory + nsamples=50, # number of different points to sample in a run + pbc=True): + + #warnings.warn("This class is deprecated, use analysis.hbonds.HydrogenBondAnalysis " + # "which has .autocorrelation function", + # category=DeprecationWarning) + + self.u = universe + # check that slicing is possible + try: + self.u.trajectory[0] + except Exception: + raise ValueError("Trajectory must support slicing") from None + + self.h = hydrogens + self.a = acceptors + self.d = donors + if not len(self.h) == len(self.d): + raise ValueError("Donors and Hydrogen groups must be identical " + "length. Try using `find_hydrogen_donors`.") + + if exclusions is not None: + if len(exclusions[0]) != len(exclusions[1]): + raise ValueError( + "'exclusion' must be two arrays of identical length") + self.exclusions = np.column_stack(( + exclusions[0], exclusions[1] + )).astype(np.intp) + else: + self.exclusions = None + + self.bond_type = bond_type + if self.bond_type not in ['continuous', 'intermittent']: + raise ValueError( + "bond_type must be either 'continuous' or 'intermittent'") + + self.a_crit = np.deg2rad(angle_crit) + self.d_crit = dist_crit + self.pbc = pbc + self.sample_time = sample_time + self.nruns = nruns + self.nsamples = nsamples + self._slice_traj(sample_time) + self.time_cut = time_cut + + self.solution = { + 'results': None, # Raw results + 'time': None, # Time axis of raw results + 'fit': None, # coefficients for fit + 'tau': None, # integral of exponential fit + 'estimate': None # y values of fit against time + } + + def _slice_traj(self, sample_time): + """Set up start and end points in the trajectory for the + different passes + """ + dt = self.u.trajectory.dt # frame step size in time + req_frames = int(sample_time / dt) # the number of frames required + + n_frames = len(self.u.trajectory) + if req_frames > n_frames: + warnings.warn("Number of required frames ({}) greater than the" + " number of frames in trajectory ({})" + .format(req_frames, n_frames), RuntimeWarning) + + numruns = self.nruns + if numruns > n_frames: + numruns = n_frames + warnings.warn("Number of runs ({}) greater than the number of" + " frames in trajectory ({})" + .format(self.nruns, n_frames), RuntimeWarning) + + self._starts = np.arange(0, n_frames, n_frames / numruns, dtype=int) + # limit stop points using clip + self._stops = np.clip(self._starts + req_frames, 0, n_frames) + + self._skip = req_frames // self.nsamples + if self._skip == 0: # If nsamples > req_frames + warnings.warn("Desired number of sample points too high, using {0}" + .format(req_frames), RuntimeWarning) + self._skip = 1 + +
[docs] def run(self, force=False): + """Run all the required passes + + Parameters + ---------- + force : bool, optional + Will overwrite previous results if they exist + """ + # if results exist, don't waste any time + if self.solution['results'] is not None and not force: + return + + main_results = np.zeros_like(np.arange(self._starts[0], + self._stops[0], + self._skip), + dtype=np.float32) + # for normalising later + counter = np.zeros_like(main_results, dtype=np.float32) + + for i, (start, stop) in ProgressBar(enumerate(zip(self._starts, + self._stops)), total=self.nruns, + desc="Performing run"): + + # needed else trj seek thinks a np.int64 isn't an int? + results = self._single_run(int(start), int(stop)) + + nresults = len(results) + if nresults == len(main_results): + main_results += results + counter += 1.0 + else: + main_results[:nresults] += results + counter[:nresults] += 1.0 + + main_results /= counter + + self.solution['time'] = np.arange( + len(main_results), + dtype=np.float32) * self.u.trajectory.dt * self._skip + self.solution['results'] = main_results
+ + def _single_run(self, start, stop): + """Perform a single pass of the trajectory""" + self.u.trajectory[start] + + # Calculate partners at t=0 + box = self.u.dimensions if self.pbc else None + + # 2d array of all distances + pair = capped_distance(self.h.positions, self.a.positions, + max_cutoff=self.d_crit, box=box, + return_distances=False) + if self.exclusions is not None: + pair = pair[~ _in2d(pair, self.exclusions)] + + hidx, aidx = np.transpose(pair) + + + a = calc_angles(self.d.positions[hidx], self.h.positions[hidx], + self.a.positions[aidx], box=box) + # from amongst those, who also satisfiess angle crit + idx2 = np.where(a > self.a_crit) + hidx = hidx[idx2] + aidx = aidx[idx2] + + nbonds = len(hidx) # number of hbonds at t=0 + results = np.zeros_like(np.arange(start, stop, self._skip), + dtype=np.float32) + + if self.time_cut: + # counter for time criteria + count = np.zeros(nbonds, dtype=np.float64) + + for i, ts in enumerate(self.u.trajectory[start:stop:self._skip]): + box = self.u.dimensions if self.pbc else None + + d = calc_bonds(self.h.positions[hidx], self.a.positions[aidx], + box=box) + a = calc_angles(self.d.positions[hidx], self.h.positions[hidx], + self.a.positions[aidx], box=box) + + winners = (d < self.d_crit) & (a > self.a_crit) + results[i] = winners.sum() + + if self.bond_type == 'continuous': + # Remove losers for continuous definition + hidx = hidx[np.where(winners)] + aidx = aidx[np.where(winners)] + elif self.bond_type == 'intermittent': + if self.time_cut: + # Add to counter of where losers are + count[~ winners] += self._skip * self.u.trajectory.dt + count[winners] = 0 # Reset timer for winners + + # Remove if you've lost too many times + # New arrays contain everything but removals + hidx = hidx[count < self.time_cut] + aidx = aidx[count < self.time_cut] + count = count[count < self.time_cut] + else: + pass + + if len(hidx) == 0: # Once everyone has lost, the fun stops + break + + results /= nbonds + + return results + +
[docs] def solve(self, p_guess=None): + """Fit results to an multi exponential decay and integrate to find + characteristic time + + Parameters + ---------- + p_guess : tuple of floats, optional + Initial guess for the leastsq fit, must match the shape of the + expected coefficients + + + Continuous defition results are fitted to a double exponential with + :func:`scipy.optimize.leastsq`, intermittent definition are fit to a + triple exponential. + + The results of this fitting procedure are saved into the *fit*, + *tau* and *estimate* keywords in the solution dict. + + - *fit* contains the coefficients, (A1, tau1, tau2) or + (A1, A2, tau1, tau2, tau3) + - *tau* contains the calculated lifetime in ps for the hydrogen + bonding + - *estimate* contains the estimate provided by the fit of the time + autocorrelation function + + In addition, the output of the :func:`~scipy.optimize.leastsq` function + is saved into the solution dict + + - *infodict* + - *mesg* + - *ier* + + """ + + if self.solution['results'] is None: + raise ValueError( + "Results have not been generated use, the run method first") + + # Prevents an odd bug with leastsq where it expects + # double precision data sometimes... + time = self.solution['time'].astype(np.float64) + results = self.solution['results'].astype(np.float64) + + def within_bounds(p): + """Returns True/False if boundary conditions are met or not. + Uses length of p to detect whether it's handling continuous / + intermittent + + Boundary conditions are: + 0 < A_x < 1 + sum(A_x) < 1 + 0 < tau_x + """ + if len(p) == 3: + A1, tau1, tau2 = p + return (A1 > 0.0) & (A1 < 1.0) & \ + (tau1 > 0.0) & (tau2 > 0.0) + elif len(p) == 5: + A1, A2, tau1, tau2, tau3 = p + return (A1 > 0.0) & (A1 < 1.0) & (A2 > 0.0) & \ + (A2 < 1.0) & ((A1 + A2) < 1.0) & \ + (tau1 > 0.0) & (tau2 > 0.0) & (tau3 > 0.0) + + def err(p, x, y): + """Custom residual function, returns real residual if all + boundaries are met, else returns a large number to trick the + leastsq algorithm + """ + if within_bounds(p): + return y - self._my_solve(x, *p) + else: + return np.full_like(y, 100000) + + def double(x, A1, tau1, tau2): + """ Sum of two exponential functions """ + A2 = 1 - A1 + return A1 * np.exp(-x / tau1) + A2 * np.exp(-x / tau2) + + def triple(x, A1, A2, tau1, tau2, tau3): + """ Sum of three exponential functions """ + A3 = 1 - (A1 + A2) + return A1 * np.exp(-x / tau1) + A2 * np.exp(-x / tau2) + A3 * np.exp(-x / tau3) + + if self.bond_type == 'continuous': + self._my_solve = double + + if p_guess is None: + p_guess = (0.5, 10 * self.sample_time, self.sample_time) + + p, cov, infodict, mesg, ier = scipy.optimize.leastsq( + err, p_guess, args=(time, results), full_output=True) + self.solution['fit'] = p + A1, tau1, tau2 = p + A2 = 1 - A1 + self.solution['tau'] = A1 * tau1 + A2 * tau2 + else: + self._my_solve = triple + + if p_guess is None: + p_guess = (0.33, 0.33, 10 * self.sample_time, + self.sample_time, 0.1 * self.sample_time) + + p, cov, infodict, mesg, ier = scipy.optimize.leastsq( + err, p_guess, args=(time, results), full_output=True) + self.solution['fit'] = p + A1, A2, tau1, tau2, tau3 = p + A3 = 1 - A1 - A2 + self.solution['tau'] = A1 * tau1 + A2 * tau2 + A3 * tau3 + + self.solution['infodict'] = infodict + self.solution['mesg'] = mesg + self.solution['ier'] = ier + + if ier in [1, 2, 3, 4]: # solution found if ier is one of these values + self.solution['estimate'] = self._my_solve( + self.solution['time'], *p) + else: + warnings.warn("Solution to results not found", RuntimeWarning)
+ + def __repr__(self): + return ("<MDAnalysis HydrogenBondAutoCorrel analysis measuring the " + "{btype} lifetime of {n} different hydrogens>" + "".format(btype=self.bond_type, n=len(self.h)))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html new file mode 100644 index 0000000000..f13560f572 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html @@ -0,0 +1,2010 @@ + + + + + + MDAnalysis.analysis.hydrogenbonds.wbridge_analysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.hydrogenbonds.wbridge_analysis

+# -*- 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-2017 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
+#
+
+r"""Water Bridge analysis --- :mod:`MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis`
+==========================================================================================
+
+:Author: Zhiyi Wu
+:Year: 2017-2018
+:Copyright: GNU Public License v3
+:Maintainer: Zhiyi Wu <zhiyi.wu@gtc.ox.ac.uk>,  `@xiki-tempula`_ on GitHub
+
+
+.. _`@xiki-tempula`: https://github.com/xiki-tempula
+
+
+Given a :class:`~MDAnalysis.core.universe.Universe` (simulation
+trajectory with 1 or more frames) measure all water bridges for each
+frame between selections 1 and 2.
+Water bridge is defined as a bridging water which simultaneously forms
+two hydrogen bonds with atoms from both selection 1 and selection 2.
+
+A water bridge can form between two hydrogen bond acceptors.
+
+e.g. -CO\ :sub:`2`\ :sup:`-`:···H−O−H···:\ :sup:`-`\ O\ :sub:`2`\ C-
+
+A water bridge can also form between two hydrogen bond donors.
+
+e.g. -NH···:O:···HN- (where O is the oxygen of a bridging water)
+
+A hydrogen bond acceptor and another hydrogen bond donor can be bridged by a
+water.
+
+e.g. -CO\ :sub:`2`\ :sup:`-`:···H−O:···HN- (where H−O is part of **H−O**\ −H)
+
+A higher order water bridge is defined as more than one water bridging
+hydrogen bond acceptor and donor. An example of a second order water bridge:
+
+e.g. -CO\ :sub:`2`\ :sup:`-`:···H−O:···H−O:···HN-
+(where H−O is part of **H−O**\ −H)
+
+The following keyword arguments are important to control the behaviour of the
+water bridge analysis:
+
+ - *water_selection* (``resname SOL``): the selection string for the bridging
+   water
+ - *order* the maximum number of water bridging both ends
+ - donor-acceptor *distance* (Å): 3.0
+ - Angle *cutoff* (degrees): 120.0
+ - *forcefield* to switch between default values for different force fields
+ - *donors* and *acceptors* atom types (to add additional atom names)
+
+Theory
+------
+
+This module attempts to find multi-order water bridge by an approach similar
+to breadth-first search, where the first solvation shell of selection 1 is
+selected, followed by the selection of the second solvation shell as well as
+any hydrogen bonding partner from selection 1. After that, the third solvation
+shell, as well as any binding partners from selection 2, are detected. This
+process is repeated until the maximum order of water bridges is reached.
+
+.. _wb_Analysis_Network:
+
+Output as Network
+-----------------
+
+Since the waters connecting the two ends of the selections are by nature a
+network. We provide a network representation of the water network. Water bridge
+data are returned per frame, which is stored in
+:attr:`WaterBridgeAnalysis.results.network`. Each frame is represented as a
+dictionary, where the keys are the hydrogen bonds originating from selection
+1 and the values are new dictionaries representing the hydrogen bonds coming
+out of the corresponding molecules making hydrogen bonds with selection 1.
+
+As for the hydrogen bonds which reach the selection 2, the values of the
+corresponding keys are None. One example where selection 1 and selection 2 are
+joined by one water molecule (A) which also hydrogen bond to another water (B)
+which also hydrogen bond to selection 2 would be represented as ::
+
+    # (selection 1)-O:···H-O(water 1):···H-(selection 2)
+    #                      |             :
+    #                      H·············O-H(water2)
+    #                                    H
+    {(sele1_acceptor, None, water1_donor, water1_donor_heavy, distance, angle):
+         {(water1_acceptor, None, sele2_donor, sele2_donor_heavy,
+         distance, angle): None},
+         {(water1_donor, water1_donor_heavy, water2_acceptor, None,
+         distance, angle):
+              {(water2_acceptor, None, sele2_donor, sele2_donor_heavy,
+              distance, angle): None}
+          },
+    }
+
+The atoms are represented by atom index and if the atom is hydrogen bond donor,
+it is followed by the index of the corresponding heavy atom
+``(donor_proton, donor_heavy_atom)``.
+If the atom is a hydrogen bond acceptor, it is followed by none.
+
+.. _wb_Analysis_Timeseries:
+
+Output as Timeseries
+--------------------
+
+For lower order water bridges, it might be desirable to represent the
+connections as :attr:`WaterBridgeAnalysis.results.timeseries`. The results
+are returned per frame and are a list of hydrogen bonds between the selection
+1 or selection 2 and the bridging waters. Due to the complexity of the higher
+order water bridge and the fact that one hydrogen bond between two waters can
+appear in both third and fourth order water bridge, the hydrogen bonds in the
+:attr:`WaterBridgeAnalysis.results.timeseries` attribute are generated in a
+depth-first search manner to avoid duplication. Example code of how
+:attr:`WaterBridgeAnalysis.results.timeseries` is generated::
+
+    def network2timeseries(network, timeseries):
+        '''Traverse the network in a depth-first fashion.
+        expand_timeseries will expand the compact representation to the
+        familiar timeseries representation.'''
+
+        if network is None:
+            return
+        else:
+            for node in network:
+                timeseries.append(expand_timeseries(node))
+                network2timeseries(network[node], timeseries)
+
+    timeseries = []
+    network2timeseries(network, timeseries)
+
+An example would be. ::
+
+    results = [
+        [ # frame 1
+           [ <donor index>, <acceptor index>,
+            (<donor residue name>, <donor residue number>, <donor atom name>),
+            (<acceptor residue name>, <acceptor residue number>,
+            <acceptor atom name>),
+             <distance>, <angle>],
+           ....
+        ],
+        [ # frame 2
+          [ ... ], [ ... ], ...
+        ],
+        ...
+    ]
+
+Using the :meth:`WaterBridgeAnalysis.generate_table` method one can reformat
+the results as a flat "normalised" table that is easier to import into a
+database or dataframe for further processing.
+
+Detection of water bridges
+--------------------------
+Water bridges are recorded if a bridging water simultaneously forms
+hydrogen bonds with selection 1 and selection 2.
+
+Hydrogen bonds are detected based on a geometric criterion:
+
+1. The distance between acceptor and hydrogen is less than or equal to
+   `distance` (default is 3 Å).
+
+2. The angle between donor-hydrogen-acceptor is greater than or equal to
+   `angle` (default is 120º).
+
+The cut-off values `angle` and `distance` can be set as keywords to
+:class:`WaterBridgeAnalysis`.
+
+Donor and acceptor heavy atoms are detected from atom names. The current
+defaults are appropriate for the CHARMM27 and GLYCAM06 force fields as defined
+in Table `Default atom names for water bridge analysis`_.
+
+Hydrogen atoms bonded to a donor are searched based on its distance to the
+donor. The algorithm searches for all hydrogens
+(name "H*" or name "[123]H" or type "H") in the same residue as the donor atom
+within a cut-off distance of 1.2 Å.
+
+.. _Default atom names for water bridge analysis:
+
+.. table:: Default heavy atom names for CHARMM27 force field.
+
+   =========== ==============  =========== ====================================
+   group       donor           acceptor    comments
+   =========== ==============  =========== ====================================
+   main chain  N               O, OC1, OC2 OC1, OC2 from amber99sb-ildn
+                                           (Gromacs)
+   water       OH2, OW         OH2, OW     SPC, TIP3P, TIP4P (CHARMM27,Gromacs)
+
+   ARG         NE, NH1, NH2
+   ASN         ND2             OD1
+   ASP                         OD1, OD2
+   CYS         SG
+   CYH                         SG          possible false positives for CYS
+   GLN         NE2             OE1
+   GLU                         OE1, OE2
+   HIS         ND1, NE2        ND1, NE2    presence of H determines if donor
+   HSD         ND1             NE2
+   HSE         NE2             ND1
+   HSP         ND1, NE2
+   LYS         NZ
+   MET                         SD          see e.g. :cite:p:`Gregoret1991`
+   SER         OG              OG
+   THR         OG1             OG1
+   TRP         NE1
+   TYR         OH              OH
+   =========== ==============  =========== ====================================
+
+.. table:: Heavy atom types for GLYCAM06 force field.
+
+   =========== =========== ==================
+   element     donor       acceptor
+   =========== =========== ==================
+   N           N,NT,N3     N,NT
+   O           OH,OW       O,O2,OH,OS,OW,OY
+   S                       SM
+   =========== =========== ==================
+
+Donor and acceptor names for the CHARMM27 force field will also work for e.g.
+OPLS/AA or amber (tested in Gromacs). Residue names in the table are for
+information only and are not taken into account when determining acceptors and
+donors. This can potentially lead to some ambiguity in the assignment of
+donors/acceptors for residues such as histidine or cytosine.
+
+For more information about the naming convention in GLYCAM06 have a look at the
+`Carbohydrate Naming Convention in Glycam`_.
+
+.. _`Carbohydrate Naming Convention in Glycam`:
+   http://glycam.ccrc.uga.edu/documents/FutureNomenclature.htm
+
+The lists of donor and acceptor names can be extended by providing lists of
+atom names in the `donors` and `acceptors` keywords to
+:class:`WaterBridgeAnalysis`. If the lists are entirely inappropriate
+(e.g. when analysing simulations done with a force field that uses very
+different atom names) then one should either use the value "other" for
+`forcefield` to set no default values or derive a new class and set the
+default list oneself::
+
+ class WaterBridgeAnalysis_OtherFF(WaterBridgeAnalysis):
+       DEFAULT_DONORS = {"OtherFF": tuple(set([...]))}
+       DEFAULT_ACCEPTORS = {"OtherFF": tuple(set([...]))}
+
+Then simply use the new class instead of the parent class and call it with
+```forcefield` = "OtherFF"``. Please also consider contributing the list of
+heavy atom names to MDAnalysis.
+
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Gregoret1991
+
+
+How to perform ``WaterBridgeAnalysis``
+--------------------------------------
+
+All water bridges between arginine and aspartic acid can be analysed with ::
+
+  import MDAnalysis
+  import MDAnalysis.analysis.hbonds
+
+  u = MDAnalysis.Universe('topology', 'trajectory')
+  w = MDAnalysis.analysis.hbonds.WaterBridgeAnalysis(u, 'resname ARG',
+                                                     'resname ASP')
+  w.run()
+
+The maximum number of bridging waters detected can be changed using the order
+keyword. ::
+
+  w = MDAnalysis.analysis.hbonds.WaterBridgeAnalysis(u, 'resname ARG',
+                                                     'resname ASP', order=3)
+
+Thus, a maximum of three bridging waters will be detected.
+
+An example of using the :attr:`~WaterBridgeAnalysis` would be
+detecting the percentage of time a certain water bridge exits.
+
+Trajectory :code:`u` has two frames, where the first frame contains a water
+bridge from the oxygen of the first arginine to one of the oxygens in the
+carboxylic group of aspartate (ASP3:OD1). In the second frame, the same water
+bridge forms but is between the oxygen of the arginine and the other oxygen in
+the carboxylic group (ASP3:OD2). ::
+
+  # index residue id residue name atom name
+  #     0          1          ARG         O
+  #     1          2          SOL        OW
+  #     2          2          SOL       HW1
+  #     3          2          SOL       HW2
+  #     4          3          ASP       OD1
+  #     5          3          ASP       OD2
+  print(w.results.timeseries)
+
+prints out ::
+
+  [ # frame 1
+    # A water bridge SOL2 links O from ARG1 to the carboxylic group OD1 of ASP3
+   [[0,2,('ARG',1,  'O'),('SOL',2,'HW1'),  3.0,180],
+    [3,4,('SOL',2,'HW2'),('ASP',3,'OD1'),  3.0,180],
+   ],
+    # frame 2
+    # Another water bridge SOL2 links O from ARG1 to the other oxygen of the
+    # carboxylic group OD2 of ASP3
+   [[0,2,('ARG',1,  'O'),('SOL',2,'HW1'),  3.0,180],
+    [3,5,('SOL',2,'HW2'),('ASP',3,'OD2'),  3.0,180],
+   ],
+  ]
+
+
+.. _wb_count_by_type:
+
+Use ``count_by_type``
+---------------------
+
+We can use the :meth:`~WaterBridgeAnalysis.count_by_type` to
+generate the frequency of all water bridges in the simulation. ::
+
+  w.count_by_type()
+
+Returns ::
+
+  [(0, 3, 'ARG', 1, 'O', 'ASP', 3, 'OD1', 0.5),
+   (0, 4, 'ARG', 1, 'O', 'ASP', 3, 'OD2', 0.5),]
+
+You might think that the OD1 and OD2 are the same oxygen and the aspartate has
+just flipped and thus, they should be counted as the same type of water bridge.
+The type of the water bridge can be customised by supplying an analysis
+function to :meth:`~WaterBridgeAnalysis.count_by_type`.
+
+The analysis function has two parameters. The current and the output. The
+current is a list of hydrogen bonds from selection 1 to selection 2, formatted
+in the same fashion as :attr:`WaterBridgeAnalysis.network`, and an example will
+be ::
+
+  [
+  # sele1 acceptor idx,   , water donor index, donor heavy atom idx, dist, ang.
+   [                 0, None,                 2,                   1, 3.0,180],
+  # water donor idx, donor heavy atom idx, sele2 acceptor idx, distance, angle.
+   [              3,                    1,                  4, None, 3.0,180],]
+
+Where ``current[0]`` is the first hydrogen bond originating from selection 1
+and ``current[-1]`` is the final hydrogen bond ending in selection 2. The
+output sums up all the information in the current frame and is a dictionary
+with a user-defined key and the value is the weight of the corresponding key.
+During the analysis phase, the function analysis iterates through all the water
+bridges and modify the output in-place. At the end of the analysis, the keys
+from all the frames are collected and the corresponding values will be summed
+up and returned. ::
+
+  def analysis(current, output, u):
+      r'''This function defines how the type of water bridge should be
+      specified.
+
+        Parameters
+        ----------
+        current : list
+            The current water bridge being analysed is a list of hydrogen bonds
+            from selection 1 to selection 2.
+        output : dict
+            A dictionary which is modified in-place where the key is the type
+            of the water bridge and the value is the weight of this type of
+            water bridge.
+        u : MDAnalysis.universe
+            The current Universe for looking up atoms.'''
+
+      # decompose the first hydrogen bond.
+      sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+      current[0]
+      # decompose the last hydrogen bond.
+      atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+      current[-1]
+      # expand the atom index to the resname, resid, atom names
+      sele1 = u.atoms[sele1_index]
+      sele2 = u.atoms[sele2_index]
+      (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+      sele1.name)
+      (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+      sele2.name)
+      # if the residue name is ASP and the atom name is OD2 or OD1,
+      # the atom name is changed to OD
+      if s2_resname == 'ASP' and (s2_name == 'OD1' or s2_name == 'OD2'):
+          s2_name = 'OD'
+      # setting up the key which defines this type of water bridge.
+      key = (s1_resname, s1_resid, s1_name, s2_resname, s2_resid, s2_name)
+      # The number of this type of water bridge is incremented by 1.
+      output[key] += 1
+
+  w.count_by_type(analysis_func=analysis)
+
+Returns ::
+
+  [(('ARG', 1, 'O', 'ASP', 3, 'OD'), 1.0),]
+
+Note that the result is arranged in the format of
+``(key, the proportion of time)``. When no custom analysis function is supplied
+, the key is expanded and is formatted as ::
+
+  [('ARG', 1, 'O', 'ASP', 3, 'OD', 1.0),]
+
+Some people might only interested in contacts between residues and pay no
+attention to the details regarding the atom name. However, since multiple water
+bridges can exist between two residues, which sometimes can give a result such
+that the water bridge between two residues exists 300% of the time. Though this
+might be a desirable result for some people, others might want the water bridge
+between two residues to be only counted once per frame. This can also be
+achieved by supplying an analysis function to
+:meth:`~WaterBridgeAnalysis.count_by_type`. ::
+
+  def analysis(current, output, u):
+      '''This function defines how the type of water bridge should be specified
+      .
+
+        Parameters
+        ----------
+        current : list
+            The current water bridge being analysed is a list of hydrogen bonds
+            from selection 1 to selection 2.
+        output : dict
+            A dictionary which is modified in-place where the key is the type
+            of the water bridge and the value is the weight of this type of
+            water bridge.
+        u : MDAnalysis.universe
+            The current Universe for looking up atoms.
+      '''
+
+      # decompose the first hydrogen bond.
+      sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+      current[0]
+      # decompose the last hydrogen bond.
+      atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+      current[-1]
+      # expand the atom index to the resname, resid, atom names
+      sele1 = u.atoms[sele1_index]
+      sele2 = u.atoms[sele2_index]
+      (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+      sele1.name)
+      (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+      sele2.name)
+      # s1_name and s2_name are not included in the key
+      key = (s1_resname, s1_resid, s2_resname, s2_resid)
+
+      # Each residue is only counted once per frame
+      output[key] = 1
+
+  w.count_by_type(analysis_func=analysis)
+
+Returns ::
+
+  [(('ARG', 1, 'ASP', 3), 1.0),]
+
+On the other hand, other people may insist that the first order and
+second-order water bridges shouldn't be mixed together, which can also be
+achieved by supplying an analysis function to
+:meth:`~WaterBridgeAnalysis.count_by_type`.  ::
+
+  def analysis(current, output, u):
+      '''This function defines how the type of water bridge should be specified
+      .
+
+        Parameters
+        ----------
+        current : list
+            The current water bridge being analysed is a list of hydrogen bonds
+            from selection 1 to selection 2.
+        output : dict
+            A dictionary which is modified in-place where the key is the type
+            of the water bridge and the value is the weight of this type of
+            water bridge.
+        u : MDAnalysis.universe
+            The current Universe for looking up atoms.
+      '''
+
+      # decompose the first hydrogen bond.
+      sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+      current[0]
+      # decompose the last hydrogen bond.
+      atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+      current[-1]
+      # expand the atom index to the resname, resid, atom names
+      sele1 = u.atoms[sele1_index]
+      sele2 = u.atoms[sele2_index]
+      (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+      sele1.name)
+      (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+      sele2.name)
+      # order of the current water bridge is computed
+      order_of_water_bridge = len(current) - 1
+      # and is included in the key
+      key = (s1_resname, s1_resid, s2_resname, s2_resid, order_of_water_bridge)
+      # The number of this type of water bridge is incremented by 1.
+      output[key] += 1
+
+  w.count_by_type(analysis_func=analysis)
+
+The extra number 1 precede the 1.0 indicate that this is a first order water
+bridge ::
+
+  [(('ARG', 1, 'ASP', 3, 1), 1.0),]
+
+Some people might not be interested in the interactions related to arginine.
+The undesirable interactions can be discarded by supplying an analysis function
+to :meth:`~WaterBridgeAnalysis.count_by_type`.  ::
+
+  def analysis(current, output, u):
+      '''This function defines how the type of water bridge should be
+      specified.
+
+        Parameters
+        ----------
+        current : list
+            The current water bridge being analysed is a list of hydrogen bonds
+            from selection 1 to selection 2.
+        output : dict
+            A dictionary which is modified in-place where the key is the type
+            of the water bridge and the value is the number of this type of
+            water bridge.
+        u : MDAnalysis.universe
+            The current Universe for looking up atoms.
+      '''
+
+      # decompose the first hydrogen bond.
+      sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+      current[0]
+      # decompose the last hydrogen bond.
+      atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+      current[-1]
+      # expand the atom index to the resname, resid, atom names
+      sele1 = u.atoms[sele1_index]
+      sele2 = u.atoms[sele2_index]
+      (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+      sele1.name)
+      (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+      sele2.name)
+      if not s1_resname == 'ARG':
+          key = (s1_resname, s1_resid, s2_resname, s2_resid)
+          output[key] += 1
+
+  w.count_by_type(analysis_func=analysis)
+
+Returns nothing in this case ::
+
+  [,]
+
+Additional keywords can be supplied to the analysis function by passing through
+:meth:`~WaterBridgeAnalysis.count_by_type`.  ::
+
+  def analysis(current, output, **kwargs):
+      ...
+  w.count_by_type(analysis_func=analysis, **kwargs)
+
+
+.. _wb_count_by_time:
+
+Use ``count_by_time``
+---------------------
+
+:meth:`~WaterBridgeAnalysis.count_by_type` aggregates data across frames, which
+might be desirable in some cases but not the others.
+:meth:`~WaterBridgeAnalysis.count_by_time` provides additional functionality
+for aggregating results for each frame.
+
+The default behaviour of :meth:`~WaterBridgeAnalysis.count_by_time` is counting
+the number of water bridges from selection 1 to selection 2 for each frame.
+Take the previous ASP, ARG salt bridge for example:  ::
+
+  w.count_by_time()
+
+As one water bridge is found in both frames, the method returns ::
+
+  [(1.0, 1), (2.0, 1), ]
+
+Similar to :meth:`~WaterBridgeAnalysis.count_by_type`
+The behaviour of :meth:`~WaterBridgeAnalysis.count_by_time` can also be
+modified by supplying an analysis function.
+
+Suppose we want to count
+
+  - the **number** of water molecules involved in bridging selection 1 to
+    selection 2.
+  - only if water bridge terminates in atom name **OD1 of ASP**.
+  - only when water bridge is joined by less than **two** water.
+
+The analysis function can be written as::
+
+  def analysis(current, output, u, **kwargs):
+      '''This function defines how the counting of water bridge should be
+      specified.
+
+        Parameters
+        ----------
+        current : list
+            The current water bridge being analysed is a list of hydrogen bonds
+            from selection 1 to selection 2.
+        output : dict
+            A dictionary which is modified in-place where the key is the type
+            of the water bridge and the value is the number of this type of
+            water  bridge.
+        u : MDAnalysis.universe
+            The current Universe for looking up atoms.
+      '''
+
+      # decompose the first hydrogen bond.
+      sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+      current[0]
+      # decompose the last hydrogen bond.
+      atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+      current[-1]
+      # expand the atom index to the resname, resid, atom names
+      sele1 = u.atoms[sele1_index]
+      sele2 = u.atoms[sele2_index]
+      (s1_resname, s1_resid, s1_name) =
+      (sele1.resname, sele1.resid, sele1.name)
+      (s2_resname, s2_resid, s2_name) =
+      (sele2.resname, sele2.resid, sele2.name)
+
+      # only the residue name is ASP and the atom name is OD1,
+      if s2_resname == 'ASP' and s2_name == 'OD1':
+          # only if the order of water bridge is less than 2
+          if len(current) -1 < 2:
+              # extract all water molecules involved in the water bridge
+              # extract the first water from selection 1
+              s1_index, to_index, (s1_resname, s1_resid, s1_name),
+              (to_resname, to_resid, to_name), dist, angle = current[0]
+              key = (to_resname, to_resid)
+              output[key] = 1
+
+              # extract all the waters between selection 1 and selection 2
+              for hbond in current[1:-1]:
+                  # decompose the hydrogen bond.
+                  from_index, to_index, (from_resname, from_resid, from_name),
+                  (to_resname, to_resid, to_name), dist, angle = hbond
+                  # add first water
+                  key1 = (from_resname, from_resid)
+                  output[key1] = 1
+                  # add second water
+                  key2 = (to_resname, to_resid)
+                  output[key2] = 1
+
+              # extract the last water to selection 2
+              from_index, s2_index, (from_resname, from_resid, from_name),
+              (s2_resname, s2_resid, s2_name), dist, angle = current[-1]
+              key = (from_resname, from_resid)
+              output[key] = 1
+
+  w.count_by_time(analysis_func=analysis)
+
+Returns ::
+
+  [(1.0, 1), (2.0, 0),]
+
+Classes
+-------
+
+.. autoclass:: WaterBridgeAnalysis
+   :members:
+
+   .. attribute:: timesteps
+
+      List of the times of each timestep. This can be used together with
+      :attr:`~WaterBridgeAnalysis.results.timeseries` to find the specific
+      time point of a water bridge existence.
+
+   .. attribute:: results.network
+
+      Network representation of the water network.
+
+      .. versionadded:: 2.0.0
+
+   .. attribute:: network
+
+      Alias to the :attr:`results.network` attribute.
+
+      .. deprecated:: 2.0.0
+         Will be removed in MDAnalysis 3.0.0. Please use
+         :attr:`results.network` instead.
+
+   .. attribute:: table
+
+      .. deprecated:: 2.0.0
+         Will be removed in MDAnalysis 3.0.0. Please generate
+         the table with :meth:`generate_table` instead.
+
+   .. attribute:: results.timeseries
+
+      List of hydrogen bonds between the selection 1 or selection 2
+      and the bridging waters, for each frame.
+
+      .. versionadded:: 2.0.0
+
+   .. attribute:: timeseries
+
+      Alias to the :attr:`results.timeseries` attribute.
+
+      .. deprecated:: 2.0.0
+         Will be removed in MDAnalysis 3.0.0. Please use
+         :attr:`results.timeseries` instead.
+"""
+from collections import defaultdict
+import logging
+import warnings
+import numpy as np
+
+from ..base import AnalysisBase
+from MDAnalysis.lib.NeighborSearch import AtomNeighborSearch
+from MDAnalysis.lib.distances import capped_distance, calc_angles
+from MDAnalysis import NoDataError, MissingDataWarning, SelectionError
+
+logger = logging.getLogger('MDAnalysis.analysis.WaterBridgeAnalysis')
+
+
+
[docs]class WaterBridgeAnalysis(AnalysisBase): + """Perform a water bridge analysis + + The analysis of the trajectory is performed with the + :meth:`WaterBridgeAnalysis.run` method. The result is stored in + :attr:`WaterBridgeAnalysis.results.timeseries`. See + :meth:`~WaterBridgeAnalysis.run` for the format. + + .. versionadded:: 0.17.0 + + """ + # use tuple(set()) here so that one can just copy&paste names from the + # table; set() takes care for removing duplicates. At the end the + # DEFAULT_DONORS and DEFAULT_ACCEPTORS should simply be tuples. + + #: default heavy atom names whose hydrogens are treated as *donors* + #: (see :ref:`Default atom names for water bridge analysis`); + #: use the keyword `donors` to add a list of additional donor names. + DEFAULT_DONORS = { + 'CHARMM27': tuple( + {'N', 'OH2', 'OW', 'NE', 'NH1', 'NH2', 'ND2', 'SG', 'NE2', 'ND1', + 'NZ', 'OG', 'OG1', 'NE1', 'OH'}), + 'GLYCAM06': tuple({'N', 'NT', 'N3', 'OH', 'OW'}), + 'other': tuple(set([]))} + + #: default atom names that are treated as hydrogen *acceptors* + #: (see :ref:`Default atom names for water bridge analysis`); + #: use the keyword `acceptors` to add a list of additional acceptor names. + DEFAULT_ACCEPTORS = { + 'CHARMM27': tuple( + {'O', 'OC1', 'OC2', 'OH2', 'OW', 'OD1', 'OD2', 'SG', 'OE1', 'OE1', + 'OE2', 'ND1', 'NE2', 'SD', 'OG', 'OG1', 'OH'}), + 'GLYCAM06': + tuple({'N', 'NT', 'O', 'O2', 'OH', 'OS', 'OW', 'OY', 'SM'}), + 'other': tuple(set([]))} + + #: A :class:`collections.defaultdict` of covalent radii of common donors + #: (used in :meth`_get_bonded_hydrogens_list` to check if a hydrogen is + #: sufficiently close to its donor heavy atom). Values are stored for + #: N, O, P, and S. Any other heavy atoms are assumed to have hydrogens + #: covalently bound at a maximum distance of 1.5 Å. + r_cov = defaultdict(lambda: 1.5, # default value + N=1.31, O=1.31, P=1.58, S=1.55) # noqa: E741 + + def __init__(self, universe, selection1='protein', + selection2='not resname SOL', water_selection='resname SOL', + order=1, selection1_type='both', update_selection=False, + update_water_selection=True, filter_first=True, + distance_type='hydrogen', distance=3.0, angle=120.0, + forcefield='CHARMM27', donors=None, acceptors=None, + output_format="sele1_sele2", debug=None, + pbc=False, **kwargs): + """Set up the calculation of water bridges between two selections in a + universe. + + The timeseries is accessible as the attribute + :attr:`WaterBridgeAnalysis.results.timeseries`. + + If no hydrogen bonds are detected or if the initial check fails, look + at the log output (enable with :func:`MDAnalysis.start_logging` and set + `verbose` ``=True``). It is likely that the default names for donors + and acceptors are not suitable (especially for non-standard + ligands). In this case, either change the `forcefield` or use + customized `donors` and/or `acceptors`. + + Parameters + ---------- + universe : Universe + Universe object + selection1 : str (optional) + Selection string for first selection ['protein'] + selection2 : str (optional) + Selection string for second selection ['not resname SOL'] + This string selects everything except water where water is assumed + to have a residue name as SOL. + water_selection : str (optional) + Selection string for bridging water selection ['resname SOL'] + The default selection assumes that the water molecules have residue + name "SOL". Change it to the appropriate selection for your + specific force field. + + However, in theory, this selection can be anything which forms + a hydrogen bond with selection 1 and selection 2. + order : int (optional) + The maximum number of water bridges linking both selections. + if the order is set to 3, then all the residues linked with less + than three water molecules will be detected. [1] + + Computation of high order water bridges can be very time-consuming. + Think carefully before running the calculation, do you really want + to compute the 20th order water bridge between domain A and domain + B or you just want to know the third order water bridge between two + residues. + selection1_type : {"donor", "acceptor", "both"} (optional) + Selection 1 can be 'donor', 'acceptor' or 'both'. Note that the + value for `selection1_type` automatically determines how + `selection2` handles donors and acceptors: If `selection1` contains + 'both' then `selection2` will also contain 'both'. If `selection1` + is set to 'donor' then `selection2` is 'acceptor' (and vice versa). + ['both']. + update_selection : bool (optional) + Update selection 1 and 2 at each frame. Setting to ``True`` if the + selection is not static. Selections are filtered first to speed up + performance. Thus, setting to ``True`` is recommended if contact + surface between selection 1 and selection 2 is constantly + changing. [``False``] + update_water_selection : bool (optional) + Update selection of water at each frame. Setting to ``False`` is + **only** recommended when the total amount of water molecules in + the simulation are small and when water molecules remain static + across the simulation. + + However, in normal simulations, only a tiny proportion of water is + engaged in the formation of water bridge. It is recommended to + update the water selection and set keyword `filter_first` to + ``True`` so as to filter out water not residing between the two + selections. [``True``] + filter_first : bool (optional) + Filter the water selection to only include water within 4 Å + + `order` * (2 Å + `distance`) away from `both` selection 1 and + selection 2. + Selection 1 and selection 2 are both filtered to only include atoms + with the same distance away from the other selection. [``True``] + distance : float (optional) + Distance cutoff for hydrogen bonds; only interactions with a H-A + distance <= `distance` (and the appropriate D-H-A angle, see + `angle`) are recorded. (Note: `distance_type` can change this to + the D-A distance.) [3.0] + angle : float (optional) + Angle cutoff for hydrogen bonds; an ideal H-bond has an angle of + 180º. A hydrogen bond is only recorded if the D-H-A angle is + >= `angle`. The default of 120º also finds fairly non-specific + hydrogen interactions and possibly better value is 150º. [120.0] + forcefield : {"CHARMM27", "GLYCAM06", "other"} (optional) + Name of the forcefield used. Switches between different + :attr:`~DEFAULT_DONORS` and + :attr:`~DEFAULT_ACCEPTORS` values. + ["CHARMM27"] + donors : sequence (optional) + Extra H donor atom types (in addition to those in :attr:`~DEFAULT_DONORS`). + This shall be the name of the heavy atom that is bonded to the hydrogen. + For example, the oxygen ('O') in the hydroxyl group. Must be a sequence. + acceptors : sequence (optional) + Extra H acceptor atom types (in addition to those in + :attr:`~DEFAULT_ACCEPTORS`), must be a + sequence. + distance_type : {"hydrogen", "heavy"} (optional) + Measure hydrogen bond lengths between donor and acceptor heavy + atoms ("heavy") or between donor hydrogen and acceptor heavy + atom ("hydrogen"). If using "heavy" then one should set the + *distance* cutoff to a higher value such as 3.5 Å. ["hydrogen"] + output_format: {"sele1_sele2", "donor_acceptor"} (optional) + Setting the output format for timeseries and table. If set to + "sele1_sele2", for each hydrogen bond, the one close to selection 1 + will be placed before selection 2. If set to "donor_acceptor", the + donor will be placed before acceptor. "sele1_sele2"] + debug : bool (optional) + If set to ``True`` enables per-frame debug logging. This is + disabled by default because it generates a very large amount of + output in the log file. (Note that a logger must have been started + to see the output, e.g. using :func:`MDAnalysis.start_logging`.) + verbose : bool (optional) + Toggle progress output. (Can also be given as keyword argument to + :meth:`run`.) + + Notes + ----- + In order to speed up processing, atoms are filtered by a coarse + distance criterion before a detailed hydrogen bonding analysis is + performed (`filter_first` = ``True``). + + If selection 1 and selection 2 are very mobile during the simulation + and the contact surface is constantly changing (i.e. residues are + moving farther than 4 Å + `order` * (2 Å + `distance`)), you might + consider setting the `update_selection` keywords to ``True`` + to ensure correctness. + + .. versionchanged 0.20.0 + The :attr:`WaterBridgeAnalysis.timeseries` has been updated + see :attr:`WaterBridgeAnalysis.timeseries` for detail. + This class is now based on + :class:`~MDAnalysis.analysis.base.AnalysisBase`. + + + """ + super(WaterBridgeAnalysis, self).__init__(universe.trajectory, + **kwargs) + self.water_selection = water_selection + self.update_water_selection = update_water_selection + # per-frame debugging output? + self.debug = debug + + # set the output format + self.output_format = output_format + + self.u = universe + self.selection1 = selection1 + self.selection2 = selection2 + self.selection1_type = selection1_type + if "selection2_type" in kwargs: + raise ValueError("`selection2_type` is not a keyword argument.") + + # if the selection 1 and selection 2 are the same + if selection1 == selection2: + # eliminate the duplication + self.selection1_type = "donor" + self.update_selection = update_selection + self.filter_first = filter_first + self.distance = distance + if distance_type not in {"hydrogen", "heavy"}: + raise ValueError(f"Only 'hydrogen' and 'heavy' are allowed for option `distance_type' ({distance_type}).") + self.distance_type = distance_type + # will give the default behavior + self.angle = angle + self.pbc = pbc and all(self.u.dimensions[:3]) + self.order = order + + # set up the donors/acceptors lists + if donors is None: + donors = () + if acceptors is None: + acceptors = () + self.forcefield = forcefield + self.donors = tuple(set(self.DEFAULT_DONORS[forcefield]).union(donors)) + self.acceptors = tuple(set(self.DEFAULT_ACCEPTORS[forcefield]).union( + acceptors)) + + if self.selection1_type not in ('both', 'donor', 'acceptor'): + raise ValueError('WaterBridgeAnalysis: ' + 'Invalid selection type {0!s}'.format( + self.selection1_type)) + + # final result accessed as self.results.network + self.results.network = [] + self.results.timeseries = None + self.timesteps = None # time for each frame + + self._log_parameters() + + def _log_parameters(self): + """Log important parameters to the logfile.""" + logger.info("WaterBridgeAnalysis: selection = %r (update: %r)", + self.selection2, self.update_selection) + logger.info("WaterBridgeAnalysis: water selection = %r (update: %r)", + self.water_selection, self.update_water_selection) + logger.info("WaterBridgeAnalysis: criterion: donor %s atom and " + "acceptor atom distance <= %.3f A", self.distance_type, + self.distance) + logger.info("WaterBridgeAnalysis: criterion: " + "angle D-H-A >= %.3f degrees", + self.angle) + logger.info("WaterBridgeAnalysis: force field %s to guess donor and \ + acceptor names", self.forcefield) + + def _build_residue_dict(self, selection): + # Build the residue_dict where the key is the residue name + # The content is a dictionary where hydrogen bond donor heavy atom + # names is the key + # The content is the hydrogen bond donor hydrogen atom names + atom_group = self.u.select_atoms(selection) + for residue in atom_group.residues: + if residue.resname not in self._residue_dict: + self._residue_dict[residue.resname] = defaultdict(set) + for atom in residue.atoms: + if atom.name in self.donors: + self._residue_dict[residue.resname][atom.name].update( + self._get_bonded_hydrogens(atom).names) + + def _update_donor_h(self, atom_ix, h_donors, donors_h): + atom = self.u.atoms[atom_ix] + residue = atom.residue + hydrogen_names = self._residue_dict[residue.resname][atom.name] + if hydrogen_names: + hydrogens = residue.atoms.select_atoms('name {0}'.format( + ' '.join(hydrogen_names))).ix + for atom in hydrogens: + h_donors[atom] = atom_ix + donors_h[atom_ix].append(atom) + + def _update_selection(self): + self._s1_donors = [] + self._s1_h_donors = {} + self._s1_donors_h = defaultdict(list) + self._s1_acceptors = [] + + self._s2_donors = [] + self._s2_h_donors = {} + self._s2_donors_h = defaultdict(list) + self._s2_acceptors = [] + + self._s1 = self.u.select_atoms(self.selection1).ix + self._s2 = self.u.select_atoms(self.selection2).ix + + if self.filter_first and len(self._s1): + self.logger_debug('Size of selection 1 before filtering:' + ' {} atoms'.format(len(self._s1))) + ns_selection_1 = AtomNeighborSearch(self.u.atoms[self._s1], + box=self.box) + self._s1 = ns_selection_1.search(self.u.atoms[self._s2], + self.selection_distance).ix + self.logger_debug("Size of selection 1: {0} atoms".format( + len(self._s1))) + + if len(self._s1) == 0: + logger.warning('Selection 1 "{0}" did not select any atoms.' + .format(str(self.selection1)[:80])) + return + + if self.filter_first and len(self._s2): + self.logger_debug('Size of selection 2 before filtering:' + ' {} atoms'.format(len(self._s2))) + ns_selection_2 = AtomNeighborSearch(self.u.atoms[self._s2], + box=self.box) + self._s2 = ns_selection_2.search(self.u.atoms[self._s1], + self.selection_distance).ix + self.logger_debug('Size of selection 2: {0} atoms'.format( + len(self._s2))) + + if len(self._s2) == 0: + logger.warning('Selection 2 "{0}" did not select any atoms.' + .format(str(self.selection2)[:80])) + return + + if self.selection1_type in ('donor', 'both'): + self._s1_donors = self.u.atoms[self._s1].select_atoms( + 'name {0}'.format(' '.join(self.donors))).ix + for atom_ix in self._s1_donors: + self._update_donor_h(atom_ix, self._s1_h_donors, + self._s1_donors_h) + self.logger_debug("Selection 1 donors: {0}".format( + len(self._s1_donors))) + self.logger_debug("Selection 1 donor hydrogens: {0}".format( + len(self._s1_h_donors))) + if self.selection1_type in ('acceptor', 'both'): + self._s1_acceptors = self.u.atoms[self._s1].select_atoms( + 'name {0}'.format(' '.join(self.acceptors))).ix + self.logger_debug("Selection 1 acceptors: {0}".format( + len(self._s1_acceptors))) + + if len(self._s2) == 0: + return None + if self.selection1_type in ('donor', 'both'): + self._s2_acceptors = self.u.atoms[self._s2].select_atoms( + 'name {0}'.format(' '.join(self.acceptors))).ix + self.logger_debug("Selection 2 acceptors: {0:d}".format( + len(self._s2_acceptors))) + if self.selection1_type in ('acceptor', 'both'): + self._s2_donors = self.u.atoms[self._s2].select_atoms( + 'name {0}'.format(' '.join(self.donors))).ix + for atom_ix in self._s2_donors: + self._update_donor_h(atom_ix, self._s2_h_donors, + self._s2_donors_h) + self.logger_debug("Selection 2 donors: {0:d}".format( + len(self._s2_donors))) + self.logger_debug("Selection 2 donor hydrogens: {0:d}".format( + len(self._s2_h_donors))) + + def _update_water_selection(self): + self._water_donors = [] + self._water_h_donors = {} + self._water_donors_h = defaultdict(list) + self._water_acceptors = [] + + self._water = self.u.select_atoms(self.water_selection).ix + self.logger_debug('Size of water selection before filtering:' + ' {} atoms'.format(len(self._water))) + if len(self._water) and self.filter_first: + filtered_s1 = AtomNeighborSearch(self.u.atoms[self._water], + box=self.box).search( + self.u.atoms[self._s1], self.selection_distance) + if filtered_s1: + self._water = AtomNeighborSearch(filtered_s1, + box=self.box).search( + self.u.atoms[self._s2], self.selection_distance).ix + + self.logger_debug("Size of water selection: {0} atoms".format( + len(self._water))) + + if len(self._water) == 0: + logger.warning("Water selection '{0}' did not select any atoms." + .format(str(self.water_selection)[:80])) + else: + self._water_donors = self.u.atoms[self._water].select_atoms( + 'name {0}'.format(' '.join(self.donors))).ix + for atom_ix in self._water_donors: + self._update_donor_h(atom_ix, self._water_h_donors, + self._water_donors_h) + self.logger_debug("Water donors: {0}".format( + len(self._water_donors))) + self.logger_debug("Water donor hydrogens: {0}".format( + len(self._water_h_donors))) + self._water_acceptors = self.u.atoms[self._water].select_atoms( + 'name {0}'.format(' '.join(self.acceptors))).ix + self.logger_debug("Water acceptors: {0}".format( + len(self._water_acceptors))) + + def _get_bonded_hydrogens(self, atom): + """Find hydrogens bonded within cutoff to `atom`. + + Hydrogens are detected by either name ("H*", "[123]H*") or type ("H"); + this is not fool-proof as the atom type is not always a character but + the name pattern should catch most typical occurrences. + + The distance from `atom` is calculated for all hydrogens in the residue + and only those within a cutoff are kept. The cutoff depends on the + heavy atom (more precisely, on its element, which is taken as the first + letter of its name ``atom.name[0]``) and is parameterized in + :attr:`WaterBridgeAnalysis.r_cov`. If no match is found then the + default of 1.5 Å is used. + + + Parameters + ---------- + atom : groups.Atom + heavy atom + + Returns + ------- + hydrogen_atoms : AtomGroup or [] + list of hydrogens (can be a + :class:`~MDAnalysis.core.groups.AtomGroup`) + or empty list ``[]`` if none were found. + """ + try: + return atom.residue.atoms.select_atoms( + "(name H* 1H* 2H* 3H* or type H) and around {0:f} name {1!s}" + "".format(self.r_cov[atom.name[0]], atom.name)) + except NoDataError: + return [] + + def logger_debug(self, *args): + if self.debug: + logger.debug(*args) + + def _prepare(self): + # The distance for selection is defined as twice the maximum bond + # length of an O-H bond (2A) plus order of water bridge times the + # length of OH bond plus hydrogne bond distance + self.selection_distance = (2 * 2 + self.order * (2 + self.distance)) + + self.box = self.u.dimensions if self.pbc else None + self._residue_dict = {} + self._build_residue_dict(self.selection1) + self._build_residue_dict(self.selection2) + self._build_residue_dict(self.water_selection) + + self._update_selection() + + self.timesteps = [] + if len(self._s1) and len(self._s2): + self._update_water_selection() + else: + logger.info("WaterBridgeAnalysis: " + "no atoms found in the selection.") + + logger.info("WaterBridgeAnalysis: initial checks passed.") + + logger.info("WaterBridgeAnalysis: starting") + logger.debug("WaterBridgeAnalysis: donors %r", self.donors) + logger.debug("WaterBridgeAnalysis: acceptors %r", self.acceptors) + logger.debug("WaterBridgeAnalysis: water bridge %r", + self.water_selection) + + if self.debug: + logger.debug("Toggling debug to %r", self.debug) + else: + logger.debug("WaterBridgeAnalysis: For full step-by-step " + "debugging output use debug=True") + + logger.info("Starting analysis " + "(frame index start=%d stop=%d, step=%d)", + self.start, self.stop, self.step) + + def _donor2acceptor(self, donors, h_donors, acceptor): + if len(donors) == 0 or len(acceptor) == 0: + return [] + if self.distance_type != 'heavy': + donors_idx = list(h_donors.keys()) + else: + donors_idx = list(donors.keys()) + result = [] + # Code modified from p-j-smith + pairs, distances = capped_distance(self.u.atoms[donors_idx].positions, + self.u.atoms[acceptor].positions, + max_cutoff=self.distance, + box=self.box, + return_distances=True) + if self.distance_type == 'hydrogen': + tmp_distances = distances + tmp_donors = [h_donors[donors_idx[idx]] for idx in pairs[:, 0]] + tmp_hydrogens = [donors_idx[idx] for idx in pairs[:, 0]] + tmp_acceptors = [acceptor[idx] for idx in pairs[:, 1]] + else: + # To make sure that for the same index i, the donor (tmp_donors[i]), + # hydrogen (tmp_hydrogens[i]), acceptor (tmp_acceptors[i]) matches the + # distance (tmp_distances[i]). + tmp_donors = [] + tmp_hydrogens = [] + tmp_acceptors = [] + tmp_distances = [] + for idx, distance in enumerate(distances): + for h in donors[donors_idx[pairs[idx, 0]]]: + tmp_donors.append(donors_idx[pairs[idx, 0]]) + tmp_hydrogens.append(h) + tmp_acceptors.append(acceptor[pairs[idx, 1]]) + tmp_distances.append(distance) + + angles = np.rad2deg( + calc_angles( + self.u.atoms[tmp_donors].positions, + self.u.atoms[tmp_hydrogens].positions, + self.u.atoms[tmp_acceptors].positions, + box=self.box + ) + ) + hbond_indices = np.where(angles > self.angle)[0] + for index in hbond_indices: + h = tmp_hydrogens[index] + d = tmp_donors[index] + a = tmp_acceptors[index] + result.append((h, d, a, self._expand_index(h), + self._expand_index(a), + tmp_distances[index], angles[index])) + return result + + def _single_frame(self): + self.timesteps.append(self._ts.time) + self.box = self.u.dimensions if self.pbc else None + + if self.update_selection: + self._update_selection() + if len(self._s1) and len(self._s2): + if self.update_water_selection: + self._update_water_selection() + else: + self.results.network.append(defaultdict(dict)) + return + + selection_1 = [] + water_pool = defaultdict(list) + next_round_water = set([]) + selection_2 = [] + + if self.selection1_type in ('donor', 'both'): + # check for direct hbond from s1 to s2 + self.logger_debug("Selection 1 Donors <-> Selection 2 Acceptors") + results = self._donor2acceptor( + self._s1_donors_h, self._s1_h_donors, self._s2_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), \ + (a_resname, a_resid, a_name), dist, angle = line + water_pool[(a_resname, a_resid)] = None + selection_1.append( + (h_index, d_index, a_index, None, dist, angle)) + selection_2.append((a_resname, a_resid)) + if self.order > 0: + self.logger_debug("Selection 1 Donors <-> Water Acceptors") + results = self._donor2acceptor( + self._s1_donors_h, self._s1_h_donors, + self._water_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), ( + a_resname, a_resid, a_name), dist, angle = line + selection_1.append( + (h_index, d_index, a_index, None, dist, angle)) + + self.logger_debug("Water Donors <-> Selection 2 Acceptors") + results = self._donor2acceptor( + self._water_donors_h, self._water_h_donors, + self._s2_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), ( + a_resname, a_resid, a_name), dist, angle = line + water_pool[(h_resname, h_resid)].append( + (h_index, d_index, a_index, None, dist, angle)) + selection_2.append((a_resname, a_resid)) + + if self.selection1_type in ('acceptor', 'both'): + self.logger_debug("Selection 2 Donors <-> Selection 1 Acceptors") + results = self._donor2acceptor(self._s2_donors_h, + self._s2_h_donors, + self._s1_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), \ + (a_resname, a_resid, a_name), dist, angle = line + water_pool[(h_resname, h_resid)] = None + selection_1.append( + (a_index, None, h_index, d_index, dist, angle)) + selection_2.append((h_resname, h_resid)) + + if self.order > 0: + self.logger_debug("Selection 2 Donors <-> Water Acceptors") + results = self._donor2acceptor( + self._s2_donors_h, self._s2_h_donors, + self._water_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), ( + a_resname, a_resid, a_name), dist, angle = line + water_pool[(a_resname, a_resid)].append( + (a_index, None, h_index, d_index, dist, angle)) + selection_2.append((h_resname, h_resid)) + + self.logger_debug("Selection 1 Acceptors <-> Water Donors") + results = self._donor2acceptor( + self._water_donors_h, self._water_h_donors, + self._s1_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), ( + a_resname, a_resid, a_name), dist, angle = line + selection_1.append( + (a_index, None, h_index, d_index, dist, angle)) + + if self.order > 1: + self.logger_debug("Water donor <-> Water Acceptors") + results = self._donor2acceptor(self._water_donors_h, + self._water_h_donors, + self._water_acceptors) + for line in results: + h_index, d_index, a_index, (h_resname, h_resid, h_name), ( + a_resname, a_resid, a_name), dist, angle = line + water_pool[(a_resname, a_resid)].append( + (a_index, None, h_index, d_index, dist, angle)) + water_pool[(h_resname, h_resid)].append( + (h_index, d_index, a_index, None, dist, angle)) + + # solve the connectivity network + # The following code attempt to generate a water network which is + # formed by the class dict. + # Suppose we have a water bridge connection ARG1 to ASP3 via the two + # hydrogen bonds. + # [0,1,('ARG',1,'O'), ('SOL',2,'HW1'), 3.0,180], + # [2,3,('SOL',2,'HW2'),('ASP',3,'OD1'), 3.0,180], + # The resulting network will be + # {(0,1,('ARG',1,'O'), ('SOL',2,'HW1'), 3.0,180): + # {(2,3,('SOL',2,'HW2'),('ASP',3,'OD1'), 3.0,180): None}} + # Where the key of the a dict will be all the hydrogen bonds starting + # from this nodes. + # The corresponding value of a certain key will be a dictionary whose + # key will be all the hydrogen bonds from + # the destination of in the key. + # If the value of a certain key is None, which means it is reaching + # selection 2. + + result = {'start': defaultdict(dict), 'water': defaultdict(dict)} + + def add_route(result, route): + if len(route) == 1: + result['start'][route[0]] = None + else: + # exclude the the selection which goes back to itself + if (sorted(route[0][0:3:2]) == sorted(route[-1][0:3:2])): + return + + # selection 2 to water + result['water'][route[-1]] = None + # water to water + for i in range(1, len(route) - 1): + result['water'][route[i]][route[i+1]] = \ + result['water'][route[i+1]] + # selection 1 to water + result['start'][route[0]][route[1]] = result['water'][route[1]] + + def traverse_water_network(graph, node, end, route, maxdepth, result): + if len(route) > self.order + 1: + return + else: + if node in end: + # check if any duplication happens + heavy_atom = [line[3] or line[2] for line in route] + if len(heavy_atom) == len(set(heavy_atom)): + add_route(result, route) + else: + for new_node in graph[node]: + new_route = route[:] + new_route.append(new_node) + new_node = self._expand_timeseries( + new_node, 'sele1_sele2')[3][:2] + traverse_water_network(graph, new_node, end, new_route, + maxdepth, result) + for s1 in selection_1: + route = [s1, ] + next_mol = self._expand_timeseries(s1, 'sele1_sele2')[3][:2] + traverse_water_network(water_pool, next_mol, selection_2, route[:], + self.order, result) + + self.results.network.append(result['start']) + + def _traverse_water_network(self, graph, current, analysis_func=None, + output=None, link_func=None, **kwargs): + ''' + This function recursively traverses the water network + self.results.network and finds the hydrogen bonds which connect the + current atom to the next atom. The newly found hydrogen bond will be + appended to the hydrogen bonds connecting the selection 1 to the + current atom via link_func. When selection 2 is reached, the full list + of hydrogen bonds connecting the selection 1 to selection 2 will be + fed into analysis_func, which will then modify the output in place. + + :param graph: The connection network describes the connection between + the atoms in the water network. + :param current: The hydrogen bonds from selection 1 until now. + :param analysis_func: The analysis function which is called to analysis + the hydrogen bonds. + :param output: where the result is stored. + :param link_func: The new hydrogen bonds will be appended to current. + :param kwargs: the keywords which are passed into the analysis_func. + :return: + ''' + if link_func is None: + # If no link_func is provided, the default link_func will be used + link_func = self._full_link + + if graph is None: + # if selection 2 is reached + if analysis_func is not None: + # the result is analysed by analysis_func which will change the + # output + analysis_func(current, output, self.u, **kwargs) + else: + # make sure no loop can occur + if len(current) <= self.order: + for node in graph: + # the new hydrogen bond will be added to the existing bonds + new = link_func(current, node) + self._traverse_water_network(graph[node], new, + analysis_func, output, + link_func, **kwargs) + + def _expand_index(self, index): + ''' + Expand the index into (resname, resid, name). + ''' + atom = self.u.atoms[index] + return (atom.resname, atom.resid, atom.name) + + def _expand_timeseries(self, entry, output_format=None): + ''' + Expand the compact data format into the old timeseries form. + The old is defined as the format for release up to 0.19.2. + As is discussed in Issue #2177, the internal storage of the hydrogen + bond information has been changed to the compact format. + The function takes in the argument `output_format` to see which output + format will be chosen. + if `output_format` is not specified, the value will be taken from + :attr:`output_format`. + If `output_format` is 'sele1_sele2', the output will be the old water + bridge analysis format:: + + # donor from selection 1 to acceptor in selection 2 + [sele1_index, sele2_index, + (sele1_resname, sele1_resid, sele1_name), + (sele2_resname, sele2_resid, sele2_name), dist, angle] + + If `output_format` is 'donor_acceptor', the output will be the old + hydrogen bond analysis format:: + + # From donor to acceptor + [donor_index, acceptor_index, + (donor_resname, donor_resid, donor_name), + (acceptor_resname, acceptor_resid, acceptor_name), dist, angle] + ''' + output_format = output_format or self.output_format + # Expand the compact entry into atom1, which is the first index in the + # output and atom2, which is the second + # entry. + atom1, heavy_atom1, atom2, heavy_atom2, dist, angle = entry + if output_format == 'sele1_sele2': + # If the output format is the sele1_sele2, no change will be + # executed + atom1, atom2 = atom1, atom2 + elif output_format == 'donor_acceptor': + # If the output format is donor_acceptor, use heavy atom position + # to check which is donor and which is + # acceptor + if heavy_atom1 is None: + # atom1 is hydrogen bond acceptor and thus, the position of + # atom1 and atom2 are swapped. + atom1, atom2 = atom2, atom1 + else: + # atom1 is hydrogen bond donor, position not swapped. + atom1, atom2 = atom1, atom2 + else: + raise KeyError( + "Only 'sele1_sele2' or 'donor_acceptor' are allowed as output " + "format") + + return (atom1, atom2, self._expand_index(atom1), + self._expand_index(atom2), dist, angle) + + def _generate_timeseries(self, output_format=None): + r'''Time series of water bridges. + + The output is generated per frame as is explained in + :ref:`wb_Analysis_Timeseries`. The format of output can be changed via + the output_format selection. If ``output_format="sele1_sele2"``, the + hydrogen bond forms a directional link from selection 1 to selection 2. + If ``output_format="donor_acceptor"``, for each hydrogen bond, the + donor is always written before the acceptor. + + Note + ---- + To find an acceptor atom in :attr:`Universe.atoms` by + *index* one would use ``u.atoms[acceptor_index]``. + + .. versionchanged 0.20.0 + The :attr:`WaterBridgeAnalysis.timeseries` has been updated where + the donor and acceptor string has been changed to tuple + (resname string, resid, name_string). + + + ''' + output_format = output_format or self.output_format + + def analysis(current, output, *args, **kwargs): + output = current + + timeseries = [] + for frame in self.results.network: + new_frame = [] + self._traverse_water_network(frame, new_frame, + analysis_func=analysis, + output=new_frame, + link_func=self._compact_link) + timeseries.append([ + self._expand_timeseries(entry, output_format) + for entry in new_frame]) + return timeseries + + + def set_network(self, network): + wmsg = ("The `set_network` method was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.network` instead") + warnings.warn(wmsg, DeprecationWarning) + self.results.network = network + + @classmethod + def _full_link(self, output, node): + ''' + A function used in _traverse_water_network to add the new hydrogen + bond to the existing bonds. + :param output: The existing hydrogen bonds from selection 1 + :param node: The new hydrogen bond + :return: The hydrogen bonds from selection 1 with the new hydrogen + bond added + ''' + result = output[:] + result.append(node) + return result + + @classmethod + def _compact_link(self, output, node): + ''' + A function used in _traverse_water_network to add the new hydrogen + bond to the existing bonds. In this form no new list is created and + thus, one bridge will only appear once. + :param output: The existing hydrogen bonds from selection 1 + :param node: The new hydrogen bond + :return: The hydrogen bonds from selection 1 with the new hydrogen + bond added + ''' + output.append(node) + return output + + def _count_by_type_analysis(self, current, output, *args, **kwargs): + ''' + Generates the key for count_by_type analysis. + :return: + ''' + + s1_index, to_index, s1, to_residue, dist, angle = \ + self._expand_timeseries(current[0]) + s1_resname, s1_resid, s1_name = s1 + from_index, s2_index, from_residue, s2, dist, angle = \ + self._expand_timeseries(current[-1]) + s2_resname, s2_resid, s2_name = s2 + key = (s1_index, s2_index, + s1_resname, s1_resid, s1_name, s2_resname, s2_resid, s2_name) + output[key] += 1 + +
[docs] def count_by_type(self, analysis_func=None, **kwargs): + """Counts the frequency of water bridge of a specific type. + + If one atom *A* from *selection 1* is linked to atom *B* from + *selection 2* through one or more bridging waters, an entity will be + created and the proportion of time that this linkage exists in the + whole simulation will be calculated. + + The identification of a specific type of water bridge can be modified + by supplying the analysis_func function. See :ref:`wb_count_by_type` + for detail. + + Returns + ------- + counts : list + Returns a :class:`list` containing atom indices for *A* and + *B*, residue names, residue numbers, atom names (for both A and B) + and the fraction of the total time during which the water bridge + was detected. This method returns None if method + :meth:`WaterBridgeAnalysis.run` was not executed first. + + + """ + output = None + if analysis_func is None: + analysis_func = self._count_by_type_analysis + output = 'combined' + + if self.results.network: + length = len(self.results.network) + result_dict = defaultdict(int) + for frame in self.results.network: + frame_dict = defaultdict(int) + self._traverse_water_network(frame, [], + analysis_func=analysis_func, + output=frame_dict, + link_func=self._full_link, + **kwargs) + for key, value in frame_dict.items(): + result_dict[key] += frame_dict[key] + + if output == 'combined': + result = [[i for i in key] for key in result_dict] + [result[i].append(result_dict[key]/length) + for i, key in enumerate(result_dict)] + else: + result = [(key, + result_dict[key]/length) for key in result_dict] + return result + else: + return None
+ + def _count_by_time_analysis(self, current, output, *args, **kwargs): + s1_index, to_index, s1, to_residue, dist, angle = \ + self._expand_timeseries(current[0]) + s1_resname, s1_resid, s1_name = s1 + from_index, s2_index, from_residue, s2, dist, angle = \ + self._expand_timeseries(current[-1]) + s2_resname, s2_resid, s2_name = s2 + key = (s1_index, s2_index, + s1_resname, s1_resid, s1_name, s2_resname, s2_resid, s2_name) + output[key] += 1 + +
[docs] def count_by_time(self, analysis_func=None, **kwargs): + """Counts the number of water bridges per timestep. + + The counting behaviour can be adjusted by supplying analysis_func. + See :ref:`wb_count_by_time` for details. + + Returns + ------- + counts : list + Returns a time series ``N(t)`` where ``N`` is the total + number of observed water bridges at time ``t``. + + """ + if analysis_func is None: + analysis_func = self._count_by_time_analysis + if self.results.network: + result = [] + for time, frame in zip(self.timesteps, self.results.network): + result_dict = defaultdict(int) + self._traverse_water_network(frame, [], + analysis_func=analysis_func, + output=result_dict, + link_func=self._full_link, + **kwargs) + result.append((time, + sum([result_dict[key] for key in result_dict]))) + return result + else: + return None
+ + def _timesteps_by_type_analysis(self, current, output, *args, **kwargs): + s1_index, to_index, s1, to_residue, dist, angle = \ + self._expand_timeseries(current[0]) + s1_resname, s1_resid, s1_name = s1 + from_index, s2_index, from_residue, s2, dist, angle = \ + self._expand_timeseries(current[-1]) + s2_resname, s2_resid, s2_name = s2 + key = (s1_index, s2_index, s1_resname, s1_resid, s1_name, s2_resname, + s2_resid, s2_name) + output[key].append(kwargs.pop('time')) + +
[docs] def timesteps_by_type(self, analysis_func=None, **kwargs): + """Frames during which each water bridges existed, sorted by each water + bridges. + + Processes :attr:`WaterBridgeAnalysis.results.network` and returns a + :class:`list` containing atom indices, residue names, residue + numbers (from selection 1 and selection 2) and each timestep at which + the water bridge was detected. + + Similar to :meth:`~WaterBridgeAnalysis.count_by_type` and + :meth:`~WaterBridgeAnalysis.count_by_time`, the behavior can be + adjusted by supplying an analysis_func. + + Returns + ------- + data : list + + """ + output = None + if analysis_func is None: + analysis_func = self._timesteps_by_type_analysis + output = 'combined' + + if self.results.network: + result = defaultdict(list) + if self.timesteps is None: + timesteps = range(len(self.results.network)) + else: + timesteps = self.timesteps + for time, frame in zip(timesteps, self.results.network): + self._traverse_water_network(frame, [], + analysis_func=analysis_func, + output=result, + link_func=self._full_link, + time=time, **kwargs) + + result_list = [] + for key, time_list in result.items(): + for time in time_list: + if output == 'combined': + key = list(key) + key.append(time) + result_list.append(key) + else: + result_list.append((key, time)) + return result_list + else: + return None
+ +
[docs] def generate_table(self, output_format=None): + """Generate a normalised table of the results. + + Parameters + ---------- + output_format : {'sele1_sele2', 'donor_acceptor'} + The output format of the `table` can be changed a fashion similar + to :attr:`WaterBridgeAnalysis.results.timeseries` by changing the + labels of the columns of the participating atoms. + + Returns + ------- + table : numpy.recarray + A "tidy" table with one hydrogen bond per row, labeled according to + `output_format` and containing information of atom_1, atom_2, + distance, and angle. + + .. versionchanged:: 2.0.0 + Return the generated table (as well as storing it as :attr:`table`). + + .. deprecated:: 2.0.0 + In release 3.0.0, :meth:`generate_table()` will _only_ return the + table and no longer store it in :attr:`table`. + """ + output_format = output_format or self.output_format + if self.results.network == []: + msg = "No data computed, do run() first." + warnings.warn(msg, category=MissingDataWarning) + logger.warning(msg) + return None + + if self.results.timeseries is not None \ + and output_format == self.output_format: + timeseries = self.results.timeseries + else: + # Recompute timeseries with correct output format + timeseries = self._generate_timeseries(output_format) + + num_records = np.sum([len(hframe) for hframe in timeseries]) + # build empty output table + if output_format == 'sele1_sele2': + dtype = [ + ("time", float), + ("sele1_index", int), ("sele2_index", int), + ("sele1_resnm", "|U4"), ("sele1_resid", int), + ("sele1_atom", "|U4"), + ("sele2_resnm", "|U4"), ("sele2_resid", int), + ("sele2_atom", "|U4"), + ("distance", float), ("angle", float)] + elif output_format == 'donor_acceptor': + dtype = [ + ("time", float), + ("donor_index", int), ("acceptor_index", int), + ("donor_resnm", "|U4"), ("donor_resid", int), + ("donor_atom", "|U4"), + ("acceptor_resnm", "|U4"), ("acceptor_resid", int), + ("acceptor_atom", "|U4"), + ("distance", float), ("angle", float)] + + # according to Lukas' notes below, using a recarray at this stage is + # ineffective and speedups of ~x10 can be achieved by filling a + # standard array, like this: + out = np.empty((num_records,), dtype=dtype) + cursor = 0 # current row + for t, hframe in zip(self.timesteps, timeseries): + for (donor_index, acceptor_index, donor, + acceptor, distance, angle) in hframe: + # donor|acceptor = (resname, resid, atomid) + out[cursor] = (t, donor_index, acceptor_index) + \ + donor + acceptor + (distance, angle) + cursor += 1 + assert cursor == num_records, \ + "Internal Error: Not all wb records stored" + table = out.view(np.recarray) + logger.debug( + "WBridge: Stored results as table with %(num_records)d entries.", + vars()) + self.table = table + + return table
+ + def _conclude(self): + self.results.timeseries = self._generate_timeseries() + + @property + def network(self): + wmsg = ("The `network` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.network` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.network + + @property + def timeseries(self): + wmsg = ("The `timeseries` attribute was deprecated in MDAnalysis " + "2.0.0 and will be removed in MDAnalysis 3.0.0. Please use " + "`results.timeseries` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.timeseries
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/leaflet.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/leaflet.html new file mode 100644 index 0000000000..d2ec3c4764 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/leaflet.html @@ -0,0 +1,477 @@ + + + + + + MDAnalysis.analysis.leaflet — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.leaflet

+# -*- 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-2017 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
+#
+
+
+"""
+Leaflet identification --- :mod:`MDAnalysis.analysis.leaflet`
+==============================================================
+
+This module implements the *LeafletFinder* algorithm, described in
+[Michaud-Agrawal2011]_. It can identify the lipids in a bilayer of
+arbitrary shape and topology, including planar and undulating bilayers
+under periodic boundary conditions or vesicles.
+
+One can use this information to identify
+
+* the upper and lower leaflet of a *planar membrane* by comparing the
+  the :meth:`~MDAnalysis.core.groups.AtomGroup.center_of_geometry` of
+  the leaflet groups, or
+
+* the outer and inner leaflet of a *vesicle* by comparing histograms
+  of distances from the centre of geometry (or possibly simply the
+  :meth:`~MDAnalysis.core.groups.AtomGroup.radius_of_gyration`).
+
+See example scripts in the MDAnalysisCookbook_ on how to use
+:class:`LeafletFinder`. The function :func:`optimize_cutoff` implements a
+(slow) heuristic method to find the best cut off for the LeafletFinder
+algorithm.
+
+.. _MDAnalysisCookbook: https://github.com/MDAnalysis/MDAnalysisCookbook/tree/master/examples
+
+
+Algorithm
+---------
+
+1. build a graph of all phosphate distances < cutoff
+2. identify the largest connected subgraphs
+3. analyse first and second largest graph, which correspond to the leaflets
+
+For further details see [Michaud-Agrawal2011]_.
+
+
+Classes and Functions
+---------------------
+
+.. autoclass:: LeafletFinder
+   :members:
+
+.. autofunction:: optimize_cutoff
+
+"""
+import warnings
+
+import numpy as np
+import networkx as NX
+
+from .. import core
+from . import distances
+from .. import selections
+
+from ..due import due, Doi
+
+due.cite(Doi("10.1002/jcc.21787"),
+         description="LeafletFinder algorithm",
+         path="MDAnalysis.analysis.leaflet",
+         cite_module=True)
+del Doi
+
+
+
[docs]class LeafletFinder(object): + """Identify atoms in the same leaflet of a lipid bilayer. + + This class implements the *LeafletFinder* algorithm [Michaud-Agrawal2011]_. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` object. + select : AtomGroup or str + A AtomGroup instance or a + :meth:`Universe.select_atoms` selection string + for atoms that define the lipid head groups, e.g. + universe.atoms.PO4 or "name PO4" or "name P*" + cutoff : float (optional) + head group-defining atoms within a distance of `cutoff` + Angstroms are deemed to be in the same leaflet [15.0] + pbc : bool (optional) + take periodic boundary conditions into account [``False``] + sparse : bool (optional) + ``None``: use fastest possible routine; ``True``: use slow + sparse matrix implementation (for large systems); ``False``: + use fast :func:`~MDAnalysis.lib.distances.distance_array` + implementation [``None``]. + + Example + ------- + The components of the graph are stored in the list + :attr:`LeafletFinder.components`; the atoms in each component are numbered + consecutively, starting at 0. To obtain the atoms in the input structure + use :meth:`LeafletFinder.groups`:: + + u = mda.Universe(PDB) + L = LeafletFinder(u, 'name P*') + leaflet0 = L.groups(0) + leaflet1 = L.groups(1) + + The residues can be accessed through the standard MDAnalysis mechanism:: + + leaflet0.residues + + provides a :class:`~MDAnalysis.core.groups.ResidueGroup` + instance. Similarly, all atoms in the first leaflet are then :: + + leaflet0.residues.atoms + + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + .. versionchanged:: 2.0.0 + The universe keyword no longer accepts non-Universe arguments. Please + create a :class:`~MDAnalysis.core.universe.Universe` first. + """ + + def __init__(self, universe, select, cutoff=15.0, pbc=False, sparse=None): + self.universe = universe + self.selectionstring = select + if isinstance(self.selectionstring, core.groups.AtomGroup): + self.selection = self.selectionstring + else: + self.selection = universe.select_atoms(self.selectionstring) + self.pbc = pbc + self.sparse = sparse + self._init_graph(cutoff) + + def _init_graph(self, cutoff): + self.cutoff = cutoff + self.graph = self._get_graph() + self.components = self._get_components() + + # The last two calls in _get_graph() and the single line in + # _get_components() are all that are needed to make the leaflet + # detection work. + + def _get_graph(self): + """Build graph from adjacency matrix at the given cutoff. + Automatically select between high and low memory usage versions of + contact_matrix.""" + # could use self_distance_array to speed up but then need to deal with the sparse indexing + if self.pbc: + box = self.universe.trajectory.ts.dimensions + else: + box = None + coord = self.selection.positions + if self.sparse is False: + # only try distance array + try: + adj = distances.contact_matrix(coord, cutoff=self.cutoff, returntype="numpy", box=box) + except ValueError: # pragma: no cover + warnings.warn('N x N matrix too big, use sparse=True or sparse=None', category=UserWarning, + stacklevel=2) + raise + elif self.sparse is True: + # only try sparse + adj = distances.contact_matrix(coord, cutoff=self.cutoff, returntype="sparse", box=box) + else: + # use distance_array and fall back to sparse matrix + try: + # this works for small-ish systems and depends on system memory + adj = distances.contact_matrix(coord, cutoff=self.cutoff, returntype="numpy", box=box) + except ValueError: # pragma: no cover + # but use a sparse matrix method for larger systems for memory reasons + warnings.warn( + 'N x N matrix too big - switching to sparse matrix method (works fine, but is currently rather ' + 'slow)', + category=UserWarning, stacklevel=2) + adj = distances.contact_matrix(coord, cutoff=self.cutoff, returntype="sparse", box=box) + return NX.Graph(adj) + + def _get_components(self): + """Return connected components (as sorted numpy arrays), sorted by size.""" + return [np.sort(list(component)) for component in NX.connected_components(self.graph)] + +
[docs] def update(self, cutoff=None): + """Update components, possibly with a different *cutoff*""" + if cutoff is None: + cutoff = self.cutoff + self._init_graph(cutoff)
+ +
[docs] def sizes(self): + """Dict of component index with size of component.""" + return dict(((idx, len(component)) for idx, component in enumerate(self.components)))
+ +
[docs] def groups(self, component_index=None): + """Return a :class:`MDAnalysis.core.groups.AtomGroup` for *component_index*. + + If no argument is supplied, then a list of all leaflet groups is returned. + + See Also + -------- + :meth:`LeafletFinder.group` + :meth:`LeafletFinder.groups_iter` + """ + if component_index is None: + return list(self.groups_iter()) + else: + return self.group(component_index)
+ +
[docs] def group(self, component_index): + """Return a :class:`MDAnalysis.core.groups.AtomGroup` for *component_index*.""" + # maybe cache this? + indices = [i for i in self.components[component_index]] + return self.selection[indices]
+ +
[docs] def groups_iter(self): + """Iterator over all leaflet :meth:`groups`""" + for component_index in range(len(self.components)): + yield self.group(component_index)
+ +
[docs] def write_selection(self, filename, **kwargs): + """Write selections for the leaflets to *filename*. + + The format is typically determined by the extension of *filename* + (e.g. "vmd", "pml", or "ndx" for VMD, PyMol, or Gromacs). + + See :class:`MDAnalysis.selections.base.SelectionWriter` for all + options. + """ + sw = selections.get_writer(filename, kwargs.pop('format', None)) + with sw(filename, mode=kwargs.pop('mode', 'w'), + preamble="leaflets based on select={selectionstring!r} cutoff={cutoff:f}\n".format( + **vars(self)), + **kwargs) as writer: + for i, ag in enumerate(self.groups_iter()): + name = "leaflet_{0:d}".format((i + 1)) + writer.write(ag, name=name)
+ + def __repr__(self): + return "<LeafletFinder({0!r}, cutoff={1:.1f} A) with {2:d} atoms in {3:d} groups>".format( + self.selectionstring, self.cutoff, self.selection.n_atoms, + len(self.components))
+ + +
[docs]def optimize_cutoff(universe, select, dmin=10.0, dmax=20.0, step=0.5, + max_imbalance=0.2, **kwargs): + r"""Find cutoff that minimizes number of disconnected groups. + + Applies heuristics to find best groups: + + 1. at least two groups (assumes that there are at least 2 leaflets) + 2. reject any solutions for which: + + .. math:: + + \frac{|N_0 - N_1|}{|N_0 + N_1|} > \mathrm{max_imbalance} + + with :math:`N_i` being the number of lipids in group + :math:`i`. This heuristic picks groups with balanced numbers of + lipids. + + Parameters + ---------- + universe : Universe + :class:`MDAnalysis.Universe` instance + select : AtomGroup or str + AtomGroup or selection string as used for :class:`LeafletFinder` + dmin : float (optional) + dmax : float (optional) + step : float (optional) + scan cutoffs from `dmin` to `dmax` at stepsize `step` (in Angstroms) + max_imbalance : float (optional) + tuning parameter for the balancing heuristic [0.2] + kwargs : other keyword arguments + other arguments for :class:`LeafletFinder` + + Returns + ------- + (cutoff, N) + optimum cutoff and number of groups found + + + .. Note:: This function can die in various ways if really no + appropriate number of groups can be found; it ought to be + made more robust. + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + """ + kwargs.pop('cutoff', None) # not used, so we filter it + _sizes = [] + for cutoff in np.arange(dmin, dmax, step): + LF = LeafletFinder(universe, select, cutoff=cutoff, **kwargs) + # heuristic: + # 1) N > 1 + # 2) no imbalance between large groups: + sizes = LF.sizes() + if len(sizes) < 2: + continue + n0 = float(sizes[0]) # sizes of two biggest groups ... + n1 = float(sizes[1]) # ... assumed to be the leaflets + imbalance = np.abs(n0 - n1) / (n0 + n1) + # print "sizes: %(sizes)r; imbalance=%(imbalance)f" % vars() + if imbalance > max_imbalance: + continue + _sizes.append((cutoff, len(LF.sizes()))) + results = np.rec.fromrecords(_sizes, names="cutoff,N") + del _sizes + results.sort(order=["N", "cutoff"]) # sort ascending by N, then cutoff + return results[0] # (cutoff,N) with N>1 and shortest cutoff
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.html new file mode 100644 index 0000000000..d565aef0de --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.html @@ -0,0 +1,968 @@ + + + + + + MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.legacy.x3dna

+# -*- 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-2017 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
+#
+
+"""
+Generation and Analysis of X3DNA helicoidal parameter profiles --- :mod:`MDAnalysis.analysis.legacy.x3dna`
+==========================================================================================================
+
+:Author: Elizabeth Denning
+:Year: 2013-2014
+:Copyright: GNU Public License v2
+
+.. versionadded:: 0.8
+.. versionchanged:: 0.16.0
+   This module is difficult to test due to restrictions on the X3DNA_ code. It
+   is therefore considered unmaintained and legacy code. It was moved to the
+   :mod:`MDAnalysis.analysis.legacy` package (see `issue 906`_)
+
+.. _`issue 906`: https://github.com/MDAnalysis/mdanalysis/issues/906
+
+With the help of this module, X3DNA_ can be run on frames in a trajectory. Data
+can be combined and analyzed. X3DNA_ :cite:p:`Lu2003,Lu2008` must be installed
+separately.
+
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Lu2003
+    Lu2008
+
+.. _X3DNA: http://x3dna.org/
+
+
+Example applications
+--------------------
+
+Single structure
+~~~~~~~~~~~~~~~~
+
+B-DNA structure::
+
+   from MDAnalysis.analysis.x3dna import X3DNA, X3DNAtraj
+   from MDAnalysis.tests.datafiles import PDB_X3DNA
+
+   # set path to your x3dna binary in bashrc file
+   H = X3DNA(PDB_X3DNA, executable="x3dna_ensemble analyze -b 355d.bps -p pdbfile")
+   H.run()
+   H.collect()
+   H.plot()
+
+
+Trajectory
+~~~~~~~~~~
+
+Analyzing a trajectory::
+
+  u = MDAnalysis.Universe(psf, trajectory)
+  H = X3DNAtraj(u, ...)
+  H.run()
+  H.plot()
+  H.save()
+
+The profiles are available as the attribute :attr:`X3DNAtraj.profiles`
+(``H.profiles`` in the example) and are indexed by frame number but
+can also be indexed by an arbitrary order parameter as shown in the
+next example.
+
+
+
+Analysis classes
+----------------
+
+.. autoclass:: X3DNA
+   :members:
+   :inherited-members:
+
+   .. attribute:: profiles
+
+      ``x3dna_ensemble analyze -b 355d.bps -p pdbfile attribute``:
+      After running :meth:`X3DNA.collect`, this dict contains all the
+      X3DNA profiles, indexed by the frame number. If only a single
+      frame was analyzed then this will be ``X3DNA.profiles[0]``. Note
+      that the order is random; one needs to sort the keys first.
+
+.. autoclass:: X3DNAtraj
+   :members:
+   :inherited-members:
+
+   .. attribute:: profiles
+
+      After running :meth:`X3DNA.collect`, this dict contains all the
+      X3DNA profiles, indexed by the frame number.
+
+
+
+Utilities
+---------
+
+.. autoexception:: ApplicationError
+
+"""
+import glob
+import os
+import errno
+import shutil
+import warnings
+import os.path
+import subprocess
+import tempfile
+import textwrap
+from collections import OrderedDict
+
+import numpy as np
+import matplotlib.pyplot as plt
+
+from MDAnalysis import ApplicationError
+from MDAnalysis.lib.util import which, realpath, asiterable
+
+import logging
+
+logger = logging.getLogger("MDAnalysis.analysis.x3dna")
+
+
+def mean_std_from_x3dnaPickle(profile):
+    """Get mean and standard deviation of helicoidal parameters from a saved `profile`.
+
+    The `profile` should have been saved with :meth:`BaseX3DNA.save`. Then
+    load it with ::
+
+      profile = cPickle.load(open("x3dna.pickle"))
+      h_mean, h_std = mean_std_from_x3dnaPickle(profile)
+
+    Arguments
+    ---------
+    profile : dict
+        A :attr:`X3DNA.profiles` dict with results from the
+        :class:`X3DNA` analysis.
+
+    Returns
+    -------
+    (list, list)
+        The tuple contains two lists with the means and the standard deviations
+        for the helicoidal parameters. The order for both lists is ``[shear,
+        stretch, stagger, buckle, propeller, opening, shift, slide, rise, tilt,
+        roll, twist]``.
+
+    """
+    if profile.x3dna_param is False:
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = [], [], [], [], [], [], [], [], [], [], [], []
+        for i in range(len(profile)):
+            bp_shear.append(profile.values()[i].Shear)
+            bp_stretch.append(profile.values()[i].Stretch)
+            bp_stagger.append(profile.values()[i].Stagger)
+            bp_buckle.append(profile.values()[i].Buckle)
+            bp_prop.append(profile.values()[i].Propeller)
+            bp_open.append(profile.values()[i].Opening)
+            bp_rise.append(profile.values()[i].Rise)
+            bp_shift.append(profile.values()[i].Shift)
+            bp_slide.append(profile.values()[i].Slide)
+            bp_tilt.append(profile.values()[i].Tilt)
+            bp_roll.append(profile.values()[i].Roll)
+            bp_twist.append(profile.values()[i].Twist)
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = np.array(bp_shear), np.array(bp_stretch), np.array(bp_stagger), np.array(bp_rise),\
+            np.array(bp_shift), np.array(bp_slide), np.array(bp_buckle), np.array(bp_prop), \
+            np.array(bp_open), np.array(bp_tilt), np.array(bp_roll), np.array(bp_twist)
+        na_avg, na_std = [], []
+        for j in range(len(bp_shear[0])):
+            na_avg.append([
+                np.mean(bp_shear[:, j]), np.mean(bp_stretch[:, j]), np.mean(bp_stagger[:, j]),
+                np.mean(bp_buckle[:, j]), np.mean(bp_prop[:, j]), np.mean(bp_open[:, j]),
+                np.mean(bp_shift[:, j]), np.mean(bp_slide[:, j]), np.mean(bp_rise[:, j]),
+                np.mean(bp_tilt[:, j]), np.mean(bp_roll[:, j]), np.mean(bp_twist[:, j])])
+            na_std.append([
+                np.std(bp_shear[:, j]), np.std(bp_stretch[:, j]), np.std(bp_stagger[:, j]),
+                np.std(bp_buckle[:, j]), np.std(bp_prop[:, j]), np.std(bp_open[:, j]),
+                np.std(bp_shift[:, j]), np.std(bp_slide[:, j]), np.std(bp_rise[:, j]),
+                np.std(bp_tilt[:, j]), np.std(bp_roll[:, j]), np.std(bp_twist[:, j])])
+    else:
+        bp_rise, bp_shift, bp_slide, bp_tilt, bp_roll, bp_twist = [], [], [], [], [], [], [], [], [], [], [], []
+        for i in range(len(profile)):
+            #print i
+            bp_rise.append(profile.values()[i].Rise)
+            bp_shift.append(profile.values()[i].Shift)
+            bp_slide.append(profile.values()[i].Slide)
+            bp_tilt.append(profile.values()[i].Tilt)
+            bp_roll.append(profile.values()[i].Roll)
+            bp_twist.append(profile.values()[i].Twist)
+        bp_rise, bp_shift, bp_slide, bp_tilt, bp_roll, bp_twist = np.array(bp_shear),np.array(bp_stretch),\
+            np.array(bp_stagger), np.array(bp_rise), np.array(bp_shift), np.array(bp_slide),\
+            np.array(bp_buckle), np.array(bp_prop), np.array(bp_open), np.array(bp_tilt),\
+            np.array(bp_roll), np.array(bp_twist)
+        na_avg, na_std = [], []
+        for j in range(len(bp_shift[0])):
+            na_avg.append([
+                np.mean(bp_shift[:, j]), np.mean(bp_slide[:, j]), np.mean(bp_rise[:, j]),
+                np.mean(bp_tilt[:, j]), np.mean(bp_roll[:, j]), np.mean(bp_twist[:, j])])
+            na_std.append([
+                np.std(bp_shift[:, j]), np.std(bp_slide[:, j]), np.std(bp_rise[:, j]),
+                np.std(bp_tilt[:, j]), np.std(bp_roll[:, j]), np.std(bp_twist[:, j])])
+
+    na_avg, na_std = np.array(na_avg), np.array(na_std)
+    return na_avg, na_std
+
+
+class BaseX3DNA(object):
+    """Baseclass for X3DNA_ analysis, providing plotting and utility functions.
+
+    When methods return helicoidal basepair parameter as lists, then the order
+    is always
+
+    ====== ==============
+    index  parameter
+    ====== ==============
+     0     shear
+     1     stretch
+     2     stagger
+     3     buckle
+     4     propeller
+     5     opening
+     6     shift
+     7     slide
+     8     rise
+     9     tilt
+    10     roll
+    11     twist
+    ====== ==============
+
+    for each nucleic acid pair.
+
+    .. _X3DNA: http://x3dna.org
+
+    """
+
+    def save(self, filename="x3dna.pickle"):
+        """Save :attr:`profiles` as a Python pickle file *filename*.
+
+        Load profiles dictionary with ::
+
+           import cPickle
+           profiles = cPickle.load(open(filename))
+
+        """
+        import cPickle
+
+        cPickle.dump(self.profiles, open(filename, "wb"), cPickle.HIGHEST_PROTOCOL)
+
+    def mean_std(self):
+        """Returns the mean and standard deviation of base parameters.
+
+        Returns
+        -------
+        (list, list)
+            The tuple contains two lists with the means and the standard deviations
+            for the helicoidal parameters. The order for both lists is ``[shear,
+            stretch, stagger, buckle, propeller, opening, shift, slide, rise, tilt,
+            roll, twist]``.
+        """
+
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = [], [], [], [], [], [], [], [], [], [], [], []
+        for i in range(len(self.profiles)):
+            bp_shear.append(self.profiles.values()[i].Shear)
+            bp_stretch.append(self.profiles.values()[i].Stretch)
+            bp_stagger.append(self.profiles.values()[i].Stagger)
+            bp_buckle.append(self.profiles.values()[i].Buckle)
+            bp_prop.append(self.profiles.values()[i].Propeller)
+            bp_open.append(self.profiles.values()[i].Opening)
+            bp_rise.append(self.profiles.values()[i].Rise)
+            bp_shift.append(self.profiles.values()[i].Shift)
+            bp_slide.append(self.profiles.values()[i].Slide)
+            bp_tilt.append(self.profiles.values()[i].Tilt)
+            bp_roll.append(self.profiles.values()[i].Roll)
+            bp_twist.append(self.profiles.values()[i].Twist)
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = np.array(bp_shear), np.array(bp_stretch), np.array(bp_stagger), np.array(bp_rise),\
+            np.array(bp_shift), np.array(bp_slide), np.array(bp_buckle), np.array(bp_prop),\
+            np.array(bp_open), np.array(bp_tilt), np.array(bp_roll), np.array(bp_twist)
+        na_avg, na_std = [], []
+        for j in range(len(bp_shear[0])):
+            na_avg.append([
+                np.mean(bp_shear[:, j]), np.mean(bp_stretch[:, j]), np.mean(bp_stagger[:, j]),
+                np.mean(bp_buckle[:, j]), np.mean(bp_prop[:, j]), np.mean(bp_open[:, j]),
+                np.mean(bp_shift[:, j]), np.mean(bp_slide[:, j]), np.mean(bp_rise[:, j]),
+                np.mean(bp_tilt[:, j]), np.mean(bp_roll[:, j]), np.mean(bp_twist[:, j])])
+            na_std.append([
+                np.std(bp_shear[:, j]), np.std(bp_stretch[:, j]), np.std(bp_stagger[:, j]),
+                np.std(bp_buckle[:, j]), np.std(bp_prop[:, j]), np.std(bp_open[:, j]),
+                np.std(bp_shift[:, j]), np.std(bp_slide[:, j]), np.std(bp_rise[:, j]),
+                np.std(bp_tilt[:, j]), np.std(bp_roll[:, j]), np.std(bp_twist[:, j])])
+        na_avg, na_std = np.array(na_avg), np.array(na_std)
+        return na_avg, na_std
+
+    def mean(self):
+        """Returns the mean value for the base parameters.
+
+        Returns
+        -------
+        list
+            The list contains the means for the helicoidal parameters. The
+            order is ``[shear, stretch, stagger, buckle, propeller, opening,
+            shift, slide, rise, tilt, roll, twist]``.
+
+        """
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = [], [], [], [], [], [], [], [], [], [], [], []
+        for i in range(len(self.profiles)):
+            bp_shear.append(self.profiles.values()[i].Shear)
+            bp_stretch.append(self.profiles.values()[i].Stretch)
+            bp_stagger.append(self.profiles.values()[i].Stagger)
+            bp_buckle.append(self.profiles.values()[i].Buckle)
+            bp_prop.append(self.profiles.values()[i].Propeller)
+            bp_open.append(self.profiles.values()[i].Opening)
+            bp_rise.append(self.profiles.values()[i].Rise)
+            bp_shift.append(self.profiles.values()[i].Shift)
+            bp_slide.append(self.profiles.values()[i].Slide)
+            bp_tilt.append(self.profiles.values()[i].Tilt)
+            bp_roll.append(self.profiles.values()[i].Roll)
+            bp_twist.append(self.profiles.values()[i].Twist)
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = np.array(bp_shear), np.array(bp_stretch), np.array(bp_stagger), np.array(bp_rise),\
+            np.array(bp_shift), np.array(bp_slide), np.array(bp_buckle), np.array(bp_prop),\
+            np.array(bp_open), np.array(bp_tilt), np.array(bp_roll), np.array(bp_twist)
+
+        na_avg = []
+        for j in range(len(bp_shear[0])):
+            na_avg.append([
+                np.mean(bp_shear[:, j]), np.mean(bp_stretch[:, j]), np.mean(bp_stagger[:, j]),
+                np.mean(bp_buckle[:j]), np.mean(bp_prop[:, j]), np.mean(bp_open[:, j]),
+                np.mean(bp_shift[:, j]), np.mean(bp_slide[:, j]), np.mean(bp_rise[:, j]),
+                np.mean(bp_tilt[:, j]), np.mean(bp_roll[:, j]), np.mean(bp_twist[:, j])])
+        na_avg = np.array(na_avg)
+        return na_avg
+
+    def std(self):
+        """Returns the standard deviation for the base parameters.
+
+        Returns
+        -------
+        list
+            The list contains the standard deviations for the helicoidal
+            parameters. The order is ``[shear, stretch, stagger, buckle,
+            propeller, opening, shift, slide, rise, tilt, roll, twist]``.
+
+        """
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = [], [], [], [], [], [], [], [], [], [], [], []
+        for i in range(len(self.profiles)):
+            bp_shear.append(self.profiles.values()[i].Shear)
+            bp_stretch.append(self.profiles.values()[i].Stretch)
+            bp_stagger.append(self.profiles.values()[i].Stagger)
+            bp_buckle.append(self.profiles.values()[i].Buckle)
+            bp_prop.append(self.profiles.values()[i].Propeller)
+            bp_open.append(self.profiles.values()[i].Opening)
+            bp_rise.append(self.profiles.values()[i].Rise)
+            bp_shift.append(self.profiles.values()[i].Shift)
+            bp_slide.append(self.profiles.values()[i].Slide)
+            bp_tilt.append(self.profiles.values()[i].Tilt)
+            bp_roll.append(self.profiles.values()[i].Roll)
+            bp_twist.append(self.profiles.values()[i].Twist)
+        bp_shear, bp_stretch, bp_stagger, bp_rise, bp_shift, bp_slide, bp_buckle, bp_prop, bp_open, bp_tilt, bp_roll,\
+            bp_twist = np.array(bp_shear), np.array(bp_stretch), np.array(bp_stagger), np.array(bp_rise),\
+            np.array(bp_shift), np.array(bp_slide), np.array(bp_buckle), np.array(bp_prop),\
+            np.array(bp_open), np.array(bp_tilt), np.array(bp_roll), np.array(bp_twist)
+
+        na_std = []
+        for j in range(len(bp_shear[0])):
+            na_std.append([
+                np.std(bp_shear[:, j]), np.std(bp_stretch[:, j]), np.std(bp_stagger[:, j]),
+                np.std(bp_buckle[:j]), np.std(bp_prop[:, j]), np.std(bp_open[:, j]), np.std(bp_shift[:, j]),
+                np.std(bp_slide[:, j]), np.std(bp_rise[:, j]), np.std(bp_tilt[:, j]), np.std(bp_roll[:, j]),
+                np.std(bp_twist[:, j])])
+        na_std = np.array(na_std)
+        return na_std
+
+    def plot(self, **kwargs):
+        """Plot time-averaged base parameters for each basse pair in a 1D graph.
+
+        One plot is produced for each parameter. It shows the the mean and
+        standard deviation for each individual base pair. Each plot is saved to
+        PNG file with name "<parameter_name>.png".
+
+        Parameters
+        ----------
+        ax : matplotlib.pyplot.Axes (optional)
+             Provide `ax` to have all plots plotted in the same axes.
+
+        """
+
+        na_avg, na_std = self.mean_std()
+        for k in range(len(na_avg[0])):
+            ax = kwargs.pop('ax', plt.subplot(111))
+            x = list(range(1, len(na_avg[:, k]) + 1))
+            ax.errorbar(x, na_avg[:, k], yerr=na_std[:, k], fmt='-o')
+            ax.set_xlim(0, len(na_avg[:, k]) + 1)
+            ax.set_xlabel(r"Nucleic Acid Number")
+            param = self.profiles.values()[0].dtype.names[k]
+            if param in ["Shear", "Stretch", "Stagger", "Rise", "Shift", "Slide"]:
+                ax.set_ylabel(r"{!s} ($\AA$)".format(param))
+            else:
+                ax.set_ylabel("{0!s} (deg)".format((param)))
+            ax.figure.savefig("{0!s}.png".format((param)))
+            ax.figure.clf()
+
+    def sorted_profiles_iter(self):
+        """Return an iterator over profiles sorted by frame/order parameter.
+
+        The iterator produces tuples ``(q, profile)``. Typically, `q` is the
+        frame number.
+        """
+        if self.profiles is None:
+            return
+        for q in sorted(self.profiles):
+            yield (q, self.profiles[q])
+
+    __iter__ = sorted_profiles_iter
+
+
+
[docs]class X3DNA(BaseX3DNA): + """Run X3DNA_ on a single frame or a DCD trajectory. + + Only a subset of all X3DNA control parameters is supported and can be set + with keyword arguments. For further details on X3DNA_ see the `X3DNA docs`_. + + Running X3DNA with the :class:`X3DNA` class is a 3-step process: + + 1. set up the class with all desired parameters + 2. run X3DNA with :meth:`X3DNA.run` + 3. collect the data from the output file with :meth:`X3DNA.collect` + + The class also provides some simple plotting functions of the collected + data such as :meth:`X3DNA.plot` or :meth:`X3DNA.plot3D`. + + When methods return helicoidal basepair parameter as lists, then the order + is always + + ====== ============== + index parameter + ====== ============== + 0 shear + 1 stretch + 2 stagger + 3 buckle + 4 propeller + 5 opening + 6 shift + 7 slide + 8 rise + 9 tilt + 10 roll + 11 twist + ====== ============== + + .. versionadded:: 0.8 + + .. _`X3DNA docs`: http://forum.x3dna.org/ + """ + + def __init__(self, filename, **kwargs): + """Set up parameters to run X3DNA_ on PDB *filename*. + + Parameters + ---------- + filename : str + The `filename` is used as input for X3DNA in the + :program:`xdna_ensemble` command. 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. + executable : str (optional) + Path to the :program:`xdna_ensemble` executable directories + (e.g. ``/opt/x3dna/2.1 and /opt/x3dna/2.1/bin``) must be set + and then added to export in bashrc file. See X3DNA + documentation for set-up instructions. + x3dna_param : bool (optional) + Determines whether base step or base pair parameters will be + calculated. If ``True`` (default) then stacked *base step* + parameters will be analyzed. If ``False`` then stacked *base + pair* parameters will be analyzed. + logfile : str (optional) + Write output from X3DNA to `logfile` (default: "bp_step.par") + + + See Also + -------- + :class:`X3DNAtraj` + """ + # list of temporary files, to be cleaned up on __del__ + self.tempfiles = [ + "auxiliary.par", "bestpairs.pdb", "bp_order.dat", "bp_helical.par", "cf_7methods.par", + "col_chains.scr", "col_helices.scr", "hel_regions.pdb", "ref_frames.dat", "hstacking.pdb", "stacking.pdb" + ] + self.tempdirs = [] + self.filename = filename + + logger.info("Setting up X3DNA analysis for %(filename)r", vars(self)) + + # guess executables + self.exe = {} + x3dna_exe_name = kwargs.pop('executable', 'xdna_ensemble') + self.x3dna_param = kwargs.pop('x3dna_param', True) + self.exe['xdna_ensemble'] = which(x3dna_exe_name) + if self.exe['xdna_ensemble'] is None: + errmsg = "X3DNA binary {x3dna_exe_name!r} not found.".format(**vars()) + logger.fatal(errmsg) + logger.fatal("%(x3dna_exe_name)r must be on the PATH or provided as keyword argument 'executable'.", + vars()) + raise OSError(errno.ENOENT, errmsg) + x3dnapath = os.path.dirname(self.exe['xdna_ensemble']) + self.logfile = kwargs.pop("logfile", "bp_step.par") + + if self.x3dna_param is False: + self.template = textwrap.dedent("""x3dna_ensemble analyze -b 355d.bps --one %(filename)r """) + else: + self.template = textwrap.dedent("""find_pair -s %(filename)r stdout |analyze stdin """) + + # sanity checks + for program, path in self.exe.items(): + if path is None or which(path) is None: + logger.error("Executable %(program)r not found, should have been %(path)r.", + vars()) + # results + self.profiles = OrderedDict() + +
[docs] def run(self, **kwargs): + """Run X3DNA on the input file.""" + inpname = kwargs.pop("inpfile", None) + outname = kwargs.pop("outfile", self.logfile) + + x3dnaargs = vars(self).copy() + x3dnaargs.update(kwargs) + x3dna_param = kwargs.pop('x3dna_param', self.x3dna_param) + + inp = self.template % x3dnaargs + if inpname: + with open(inpname, "w") as f: + f.write(inp) + logger.debug("Wrote X3DNA input file %r for inspection", inpname) + + logger.info("Starting X3DNA on %(filename)r (trajectory: %(dcd)r)", x3dnaargs) + logger.debug("%s", self.exe['xdna_ensemble']) + with open(outname, "w") as output: + x3dna = subprocess.call([inp], shell=True) + with open(outname, "r") as output: + # X3DNA is not very good at setting returncodes so check ourselves + for line in output: + if line.strip().startswith(('*** ERROR ***', 'ERROR')): + x3dna.returncode = 255 + break + if x3dna.bit_length != 0: + logger.fatal("X3DNA Failure (%d). Check output %r", x3dna.bit_length, outname) + logger.info("X3DNA finished: output file %(outname)r", vars())
+ +
[docs] def collect(self, **kwargs): + """Parse the output from a X3DNA run into numpy recarrays. + + Can deal with outputs containing multiple frames. + + The method saves the result as :attr:`X3DNA.profiles`, a dictionary + indexed by the frame number. Each entry is a + :class:`np.recarray`. + + If the keyword `outdir` is supplied (e.g. ".") then each profile is + saved to a gzipped data file. + + Parameters + ---------- + run : str, int (optional + identifier, free form [1] + outdir : str (optional) + save output data under `outdir`/`run` if set to any other + value but ``None`` [``None``] + + """ + # Shear Stretch Stagger Buckle Prop-Tw Opening Shift Slide Rise Tilt Roll Twist + #0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789. + # 11 22 33 44 + #T-A -0.033 -0.176 0.158 -12.177 -8.979 1.440 0.000 0.000 0.000 0.000 0.000 0.000 + #C-G -0.529 0.122 -0.002 -7.983 -10.083 -0.091 -0.911 1.375 3.213 -0.766 -4.065 41.492 + # only parse bp_step.par + x3dna_output = kwargs.pop("x3dnaout", self.logfile) + + run = kwargs.pop("run", 1) # id number + outdir = kwargs.pop("outdir", os.path.curdir) + + logger.info("Collecting X3DNA profiles for run with id %s", run) + length = 1 # length of trajectory --- is this really needed?? No... just for info + if '*' in self.filename: + import glob + + filenames = glob.glob(self.filename) + length = len(filenames) + if length == 0: + logger.error("Glob pattern %r did not find any files.", self.filename) + raise ValueError("Glob pattern {0!r} did not find any files.".format(self.filename)) + logger.info("Found %d input files based on glob pattern %s", length, self.filename) + + # one recarray for each frame, indexed by frame number + self.profiles = OrderedDict() + + logger.info("Run %s: Reading %d X3DNA profiles from %r", run, length, x3dna_output) + x3dna_profile_no = 0 + records = [] + with open(x3dna_output, "r") as x3dna: + read_data = False + for line in x3dna: + line = line.rstrip() # preserve columns (FORTRAN output...) + if self.x3dna_param is False: + if line.startswith("# Shear"): + read_data = True + logger.debug("Started reading data") + fields = line.split() + x3dna_profile_no = int(1) # useless int value code based off hole plugin + records = [] + continue + if read_data: + if len(line.strip()) != 0: + try: + Sequence, Shear, Stretch, Stagger, Buckle, Propeller, Opening, Shift, Slide, Rise, \ + Tilt, Roll, Twist = line.split() + except: + logger.critical("Run %d: Problem parsing line %r", run, line.strip()) + logger.exception("Check input file %r.", x3dna_output) + raise + records.append( + [float(Shear), float(Stretch), float(Stagger), float(Buckle), float(Propeller), + float(Opening), float(Shift), float(Slide), float(Rise), float(Tilt), float(Roll), + float(Twist)]) + continue + else: + # end of records (empty line) + read_data = False + else: + if line.startswith("# Shift"): + read_data = True + logger.debug("Started reading data") + fields = line.split() + x3dna_profile_no = int(1) # useless int value code based off hole plugin + records = [] + continue + if read_data: + if len(line.strip()) != 0: + try: + Sequence, Shift, Slide, Rise, Tilt, Roll, Twist = line.split() + except: + logger.critical("Run %d: Problem parsing line %r", run, line.strip()) + logger.exception("Check input file %r.", x3dna_output) + raise + records.append( + [float(Shift), float(Slide), float(Rise), float(Tilt), float(Roll), float(Twist)]) + continue + else: + # end of records (empty line) + read_data = False + if self.x3dna_param is False: + frame_x3dna_output = np.rec.fromrecords(records, formats="f8,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8,f8", + names="Shear,Stretch,Stagger,Buckle,Propeller,Opening," + "Shift,Slide,Rise,Tilt,Roll,Twist") + else: + frame_x3dna_output = np.rec.fromrecords(records, formats="f8,f8,f8,f8,f8,f8", + names="Shift,Slide,Rise,Tilt,Roll,Twist") + # store the profile + self.profiles[x3dna_profile_no] = frame_x3dna_output + logger.debug("Collected X3DNA profile for frame %d (%d datapoints)", + x3dna_profile_no, len(frame_x3dna_output)) + # save a profile for each frame (for debugging and scripted processing) + # a tmp folder for each trajectory + if outdir is not None: + rundir = os.path.join(outdir, "run_" + str(run)) + os.system("rm -f tmp*.out") + if not os.path.exists(rundir): + os.makedirs(rundir) + frame_x3dna_txt = os.path.join(rundir, "bp_step_{0!s}_{1:04d}.dat.gz".format(run, x3dna_profile_no)) + np.savetxt(frame_x3dna_txt, frame_x3dna_output) + logger.debug("Finished with frame %d, saved as %r", x3dna_profile_no, frame_x3dna_txt) + # if we get here then we haven't found anything interesting + if len(self.profiles) == length: + logger.info("Collected X3DNA profiles for %d frames", len(self.profiles)) + else: + logger.warning("Missing data: Found %d X3DNA profiles from %d frames.", len(self.profiles), length)
+ + def __del__(self): + for f in self.tempfiles: + try: + os.unlink(f) + except OSError: + pass + for d in self.tempdirs: + shutil.rmtree(d, ignore_errors=True)
+ + +
[docs]class X3DNAtraj(BaseX3DNA): + """Analyze all frames in a trajectory. + + The :class:`X3DNA` class provides a direct interface to X3DNA. X3DNA itself + has limited support for analysing trajectories but cannot deal with all the + trajectory formats understood by MDAnalysis. This class can take any + universe and feed it to X3DNA. By default it sequentially creates a PDB for + each frame and runs X3DNA on the frame. + + """ + + def __init__(self, universe, **kwargs): + """Set up the class. + + Parameters + ---------- + universe : Universe + The input trajectory as part of a + :class:`~MDAnalysis.core.universe.Universe`; the trajectory is + converted to a sequence of PDB files and X3DNA is run on each + individual file. (Use the `start`, `stop`, and `step` keywords + to slice the trajectory.) + selection : str (optional) + MDAnalysis selection string (default: "nucleic") to select the + atoms that should be analyzed. + start : int (optional) + stop : int (optional) + step : int (optional) + frame indices to slice the trajectory as + ``universe.trajectory[start, stop, step]``; by default, the whole + trajectory is analyzed. + x3dna_param : bool (optional) + indicates whether stacked bases or stacked base-pairs will be + analyzed. ``True`` is bases and ``False`` is stacked base-pairs + [Default is ``True``]. + kwargs : keyword arguments (optional) + All other keywords are passed on to :class:`X3DNA` (see there + for description). + + + See Also + -------- + :class:`X3DNA` + + """ + self.universe = universe + self.selection = kwargs.pop("selection", "nucleic") + + self.x3dna_param = kwargs.pop('x3dna_param', True) + self.start = kwargs.pop('start', None) + self.stop = kwargs.pop('stop', None) + self.step = kwargs.pop('step', None) + + self.x3dna_kwargs = kwargs + + # processing + +
[docs] def run(self, **kwargs): + """Run X3DNA on the whole trajectory and collect profiles. + + Keyword arguments `start`, `stop`, and `step` can be used to only + analyse part of the trajectory. The defaults are the values provided to + the class constructor. + """ + start = kwargs.pop('start', self.start) + stop = kwargs.pop('stop', self.stop) + step = kwargs.pop('step', self.step) + x3dna_param = kwargs.pop('x3dna_param', self.x3dna_param) + x3dna_kw = self.x3dna_kwargs.copy() + x3dna_kw.update(kwargs) + + profiles = OrderedDict() + + nucleic = self.universe.select_atoms(self.selection) + for ts in self.universe.trajectory[start:stop:step]: + logger.info("X3DNA analysis frame %4d ", ts.frame) + fd, pdbfile = tempfile.mkstemp(suffix=".pdb") + os.close(fd) + nucleic.write(pdbfile) + os.system("find_pair {0!s} 355d.bps".format(pdbfile)) + try: + nucleic.write(pdbfile) + x3dna_profiles = self.run_x3dna(pdbfile, **x3dna_kw) + finally: + try: + os.unlink(pdbfile) + except OSError: + pass + if len(x3dna_profiles) != 1: + err_msg = "Got {0} profiles ({1}) --- should be 1 (time step {2})".format( + len(x3dna_profiles), x3dna_profiles.keys(), ts) + logger.error(err_msg) + warnings.warn(err_msg) + profiles[ts.frame] = x3dna_profiles.values()[0] + self.profiles = profiles
+ +
[docs] def run_x3dna(self, pdbfile, **kwargs): + """Run X3DNA on a single PDB file `pdbfile`.""" + kwargs['x3dna_param'] = self.x3dna_param + H = X3DNA(pdbfile, **kwargs) + H.run() + H.collect() + return H.profiles
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/lineardensity.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/lineardensity.html new file mode 100644 index 0000000000..3cd3c86836 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/lineardensity.html @@ -0,0 +1,484 @@ + + + + + + MDAnalysis.analysis.lineardensity — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.lineardensity

+# -*- 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-2017 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
+#
+"""
+Linear Density --- :mod:`MDAnalysis.analysis.lineardensity`
+===========================================================
+
+A tool to compute mass and charge density profiles along the three
+cartesian axes [xyz] of the simulation cell. Works only for orthorombic,
+fixed volume cells (thus for simulations in canonical NVT ensemble).
+"""
+import os.path as path
+
+import numpy as np
+import warnings
+
+from MDAnalysis.analysis.base import AnalysisBase, Results
+from MDAnalysis.units import constants
+from MDAnalysis.lib.util import deprecate
+
+
+# TODO: Remove in version 3.0.0
+
[docs]class Results(Results): + """From version 3.0.0 onwards, some entries in Results will be renamed. See + the docstring for LinearDensity for details. The Results class is defined + here to implement deprecation warnings for the user.""" + + _deprecation_dict = {"pos": "mass_density", + "pos_std": "mass_density_stddev", + "char": "charge_density", + "char_std": "charge_density_stddev"} + + def _deprecation_warning(self, key): + warnings.warn( + f"`{key}` is deprecated and will be removed in version 3.0.0. " + f"Please use `{self._deprecation_dict[key]}` instead.", + DeprecationWarning) + + def __getitem__(self, key): + if key in self._deprecation_dict.keys(): + self._deprecation_warning(key) + return super(Results, self).__getitem__(self._deprecation_dict[key]) + return super(Results, self).__getitem__(key) + + def __getattr__(self, attr): + if attr in self._deprecation_dict.keys(): + self._deprecation_warning(attr) + attr = self._deprecation_dict[attr] + return super(Results, self).__getattr__(attr)
+ + +
[docs]class LinearDensity(AnalysisBase): + r"""Linear density profile + + Parameters + ---------- + select : AtomGroup + any atomgroup + grouping : str {'atoms', 'residues', 'segments', 'fragments'} + Density profiles will be computed either on the atom positions (in + the case of 'atoms') or on the center of mass of the specified + grouping unit ('residues', 'segments', or 'fragments'). + binsize : float + Bin width in Angstrom used to build linear density + histograms. Defines the resolution of the resulting density + profile (smaller --> higher resolution) + verbose : bool, optional + Show detailed progress of the calculation if set to ``True`` + + Attributes + ---------- + results.x.dim : int + index of the [xyz] axes + results.x.mass_density : numpy.ndarray + mass density in :math:`g \cdot cm^{-3}` in [xyz] direction + results.x.mass_density_stddev : numpy.ndarray + standard deviation of the mass density in [xyz] direction + results.x.charge_density : numpy.ndarray + charge density in :math:`\mathrm{e} \cdot mol \cdot cm^{-3}` in + [xyz] direction + results.x.charge_density_stddev : numpy.ndarray + standard deviation of the charge density in [xyz] direction + results.x.pos: numpy.ndarray + Alias to the :attr:`results.x.mass_density` attribute. + + .. deprecated:: 2.2.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.x.mass_density` instead. + results.x.pos_std: numpy.ndarray + Alias to the :attr:`results.x.mass_density_stddev` attribute. + + .. deprecated:: 2.2.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.x.mass_density_stddev` instead. + results.x.char: numpy.ndarray + Alias to the :attr:`results.x.charge_density` attribute. + + .. deprecated:: 2.2.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.x.charge_density` instead. + results.x.char_std: numpy.ndarray + Alias to the :attr:`results.x.charge_density_stddev` attribute. + + .. deprecated:: 2.2.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.x.charge_density_stddev` instead. + results.x.slice_volume : float + volume of bin in [xyz] direction + results.x.hist_bin_edges : numpy.ndarray + edges of histogram bins for mass/charge densities, useful for, e.g., + plotting of histogram data. + Note: These density units are likely to be changed in the future. + + Example + ------- + First create a :class:`LinearDensity` object by supplying a selection, + then use the :meth:`run` method. Finally access the results + stored in results, i.e. the mass density in the x direction. + + .. code-block:: python + + ldens = LinearDensity(selection) + ldens.run() + print(ldens.results.x.mass_density) + + + Alternatively, other types of grouping can be selected using the + ``grouping`` keyword. For example to calculate the density based on + a grouping of the :class:`~MDAnalysis.core.groups.ResidueGroup` + of the input :class:`~MDAnalysis.core.groups.AtomGroup`. + + .. code-block:: python + + ldens = LinearDensity(selection, grouping='residues', binsize=1.0) + ldens.run() + + + + .. versionadded:: 0.14.0 + + .. versionchanged:: 1.0.0 + Support for the ``start``, ``stop``, and ``step`` keywords has been + removed. These should instead be passed to :meth:`LinearDensity.run`. + The ``save()`` method was also removed, you can use ``np.savetxt()`` or + ``np.save()`` on the :attr:`LinearDensity.results` dictionary contents + instead. + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + + .. versionchanged:: 2.0.0 + Results are now instances of + :class:`~MDAnalysis.core.analysis.Results` allowing access + via key and attribute. + + .. versionchanged:: 2.2.0 + + * Fixed a bug that caused LinearDensity to fail if grouping="residues" + or grouping="segments" were set. + * Residues, segments, and fragments will be analysed based on their + centre of mass, not centre of geometry as previously stated. + * LinearDensity now works with updating atom groups. + * Added new result container :attr:`results.x.hist_bin_edges`. + It contains the bin edges of the histrogram bins for calculated + densities and can be used for easier plotting of histogram data. + + + .. deprecated:: 2.2.0 + The `results` dictionary has been changed and the attributes + :attr:`results.x.pos`, :attr:`results.x.pos_std`, :attr:`results.x.char` + and :attr:`results.x.char_std` are now deprecated. They will be removed + in 3.0.0. Please use :attr:`results.x.mass_density`, + :attr:`results.x.mass_density_stddev`, :attr:`results.x.charge_density`, + and :attr:`results.x.charge_density_stddev` instead. + """ + + def __init__(self, select, grouping='atoms', binsize=0.25, **kwargs): + super(LinearDensity, self).__init__(select.universe.trajectory, + **kwargs) + # allows use of run(parallel=True) + self._ags = [select] + self._universe = select.universe + + self.binsize = binsize + + # group of atoms on which to compute the COM (same as used in + # AtomGroup.wrap()) + self.grouping = grouping + + # Initiate result instances + self.results["x"] = Results(dim=0) + self.results["y"] = Results(dim=1) + self.results["z"] = Results(dim=2) + + # Box sides + self.dimensions = self._universe.dimensions[:3] + self.volume = np.prod(self.dimensions) + # number of bins + bins = (self.dimensions // self.binsize).astype(int) + + # Here we choose a number of bins of the largest cell side so that + # x, y and z values can use the same "coord" column in the output file + self.nbins = bins.max() + slices_vol = self.volume / bins + + self.keys = ['mass_density', 'mass_density_stddev', + 'charge_density', 'charge_density_stddev'] + + # Initialize results array with zeros + for dim in self.results: + idx = self.results[dim]['dim'] + self.results[dim]['slice_volume'] = slices_vol[idx] + for key in self.keys: + self.results[dim][key] = np.zeros(self.nbins) + + # Variables later defined in _single_frame() method + self.masses = None + self.charges = None + self.totalmass = None + + def _single_frame(self): + # Get masses and charges for the selection + if self.grouping == "atoms": + self.masses = self._ags[0].masses + self.charges = self._ags[0].charges + + elif self.grouping in ["residues", "segments", "fragments"]: + self.masses = self._ags[0].total_mass(compound=self.grouping) + self.charges = self._ags[0].total_charge(compound=self.grouping) + + else: + raise AttributeError( + f"{self.grouping} is not a valid value for grouping.") + + self.totalmass = np.sum(self.masses) + + self.group = getattr(self._ags[0], self.grouping) + self._ags[0].wrap(compound=self.grouping) + + # Find position of atom/group of atoms + if self.grouping == 'atoms': + positions = self._ags[0].positions # faster for atoms + else: + # Centre of mass for residues, segments, fragments + positions = self._ags[0].center_of_mass(compound=self.grouping) + + for dim in ['x', 'y', 'z']: + idx = self.results[dim]['dim'] + + key = 'mass_density' + key_std = 'mass_density_stddev' + # histogram for positions weighted on masses + hist, _ = np.histogram(positions[:, idx], + weights=self.masses, + bins=self.nbins, + range=(0.0, max(self.dimensions))) + + self.results[dim][key] += hist + self.results[dim][key_std] += np.square(hist) + + key = 'charge_density' + key_std = 'charge_density_stddev' + # histogram for positions weighted on charges + hist, bin_edges = np.histogram(positions[:, idx], + weights=self.charges, + bins=self.nbins, + range=(0.0, max(self.dimensions))) + + self.results[dim][key] += hist + self.results[dim][key_std] += np.square(hist) + self.results[dim]['hist_bin_edges'] = bin_edges + + def _conclude(self): + avogadro = constants["N_Avogadro"] # unit: mol^{-1} + volume_conversion = 1e-24 # unit: A^3/cm^3 + # divide result values by avodagro and convert from A3 to cm3 + k = avogadro * volume_conversion + + # Average results over the number of configurations + for dim in ['x', 'y', 'z']: + for key in ['mass_density', 'mass_density_stddev', + 'charge_density', 'charge_density_stddev']: + self.results[dim][key] /= self.n_frames + # Compute standard deviation for the error + # For certain tests in testsuite, floating point imprecision + # can lead to negative radicands of tiny magnitude (yielding nan). + # radicand_mass and radicand_charge are therefore calculated first + # and negative values set to 0 before the square root + # is calculated. + radicand_mass = self.results[dim]['mass_density_stddev'] - \ + np.square(self.results[dim]['mass_density']) + radicand_mass[radicand_mass < 0] = 0 + self.results[dim]['mass_density_stddev'] = np.sqrt(radicand_mass) + + radicand_charge = self.results[dim]['charge_density_stddev'] - \ + np.square(self.results[dim]['charge_density']) + radicand_charge[radicand_charge < 0] = 0 + self.results[dim]['charge_density_stddev'] = \ + np.sqrt(radicand_charge) + + for dim in ['x', 'y', 'z']: + # norming factor, units of mol^-1 cm^3 + norm = k * self.results[dim]['slice_volume'] + for key in self.keys: + self.results[dim][key] /= norm + + # TODO: Remove in 3.0.0 + @deprecate(release="2.2.0", remove="3.0.0", + message="It will be replaced by a :meth:`_reduce` " + "method in the future") + def _add_other_results(self, other): + """For parallel analysis""" + for dim in ['x', 'y', 'z']: + for key in self.keys: + self.results[dim][key] += other.results[dim][key]
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/msd.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/msd.html new file mode 100644 index 0000000000..3b9e009a83 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/msd.html @@ -0,0 +1,568 @@ + + + + + + MDAnalysis.analysis.msd — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.msd

+# -*- 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-2017 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
+#
+
+r"""
+Mean Squared Displacement --- :mod:`MDAnalysis.analysis.msd`
+==============================================================
+
+:Authors: Hugo MacDermott-Opeskin
+:Year: 2020
+:Copyright: GNU Public License v2
+
+This module implements the calculation of Mean Squared Displacements (MSDs)
+by the Einstein relation. MSDs can be used to characterize the speed at
+which particles move and has its roots in the study of Brownian motion.
+For a full explanation of the theory behind MSDs and the subsequent calculation
+of self-diffusivities the reader is directed to :cite:p:`Maginn2019`.
+MSDs can be computed from the following expression, known as the
+**Einstein formula**:
+
+.. math::
+
+   MSD(r_{d}) = \bigg{\langle} \frac{1}{N} \sum_{i=1}^{N} |r_{d}
+    - r_{d}(t_0)|^2 \bigg{\rangle}_{t_{0}}
+
+where :math:`N` is the number of equivalent particles the MSD is calculated
+over, :math:`r` are their coordinates and :math:`d` the desired dimensionality
+of the MSD. Note that while the definition of the MSD is universal, there are
+many practical considerations to computing the MSD that vary between
+implementations. In this module, we compute a "windowed" MSD, where the MSD
+is averaged over all possible lag-times :math:`\tau \le \tau_{max}`,
+where :math:`\tau_{max}` is the length of the trajectory, thereby maximizing
+the number of samples.
+
+The computation of the MSD in this way can be computationally intensive due to
+its :math:`N^2` scaling with respect to :math:`\tau_{max}`. An algorithm to
+compute the MSD with :math:`N log(N)` scaling based on a Fast Fourier
+Transform is known and can be accessed by setting ``fft=True`` [Calandri2011]_
+[Buyl2018]_. The FFT-based approach requires that the
+`tidynamics <https://github.com/pdebuyl-lab/tidynamics>`_ package is
+installed; otherwise the code will raise an :exc:`ImportError`.
+
+Please cite [Calandri2011]_ [Buyl2018]_ if you use this module in addition to
+the normal MDAnalysis citations.
+
+.. warning::
+    To correctly compute the MSD using this analysis module, you must supply
+    coordinates in the **unwrapped** convention. That is, when atoms pass
+    the periodic boundary, they must not be **wrapped** back into the primary
+    simulation cell. MDAnalysis does not currently offer this functionality in
+    the ``MDAnalysis.transformations`` API despite having functions with
+    similar names. We plan to implement the appropriate transformations in the
+    future. In the meantime, various simulation packages provide utilities to
+    convert coordinates to the unwrapped convention. In GROMACS for example,
+    this can be done using ``gmx trjconv`` with the ``-pbc nojump`` flag.
+
+Computing an MSD
+----------------
+This example computes a 3D MSD for the movement of 100 particles undergoing a
+random walk. Files provided as part of the MDAnalysis test suite are used
+(in the variables :data:`~MDAnalysis.tests.datafiles.RANDOM_WALK` and
+:data:`~MDAnalysis.tests.datafiles.RANDOM_WALK_TOPO`)
+
+First load all modules and test data
+
+.. code-block:: python
+
+    import MDAnalysis as mda
+    import MDAnalysis.analysis.msd as msd
+    from MDAnalysis.tests.datafiles import RANDOM_WALK_TOPO, RANDOM_WALK
+
+Given a universe containing trajectory data we can extract the MSD
+analysis by using the class :class:`EinsteinMSD`
+
+.. code-block:: python
+
+    u = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+    MSD = msd.EinsteinMSD(u, select='all', msd_type='xyz', fft=True)
+    MSD.run()
+
+The MSD can then be accessed as
+
+.. code-block:: python
+
+    msd =  MSD.results.timeseries
+
+Visual inspection of the MSD is important, so let's take a look at it with a
+ simple plot.
+
+.. code-block:: python
+
+    import matplotlib.pyplot as plt
+    nframes = MSD.n_frames
+    timestep = 1 # this needs to be the actual time between frames
+    lagtimes = np.arange(nframes)*timestep # make the lag-time axis
+    fig = plt.figure()
+    ax = plt.axes()
+    # plot the actual MSD
+    ax.plot(lagtimes, msd, lc="black", ls="-", label=r'3D random walk')
+    exact = lagtimes*6
+    # plot the exact result
+    ax.plot(lagtimes, exact, lc="black", ls="--", label=r'$y=2 D\tau$')
+    plt.show()
+
+This gives us the plot of the MSD with respect to lag-time (:math:`\tau`).
+We can see that the MSD is approximately linear with respect to :math:`\tau`.
+This is a numerical example of a known theoretical result that the MSD of a
+random walk is linear with respect to lag-time, with a slope of :math:`2d`.
+In this expression :math:`d` is the dimensionality of the MSD. For our 3D MSD,
+this is 3. For comparison we have plotted the line :math:`y=6\tau` to which an
+ensemble of 3D random walks should converge.
+
+.. _figure-msd:
+
+.. figure:: /images/msd_demo_plot.png
+    :scale: 100 %
+    :alt: MSD plot
+
+Note that a segment of the MSD is required to be linear to accurately
+determine self-diffusivity. This linear segment represents the so called
+"middle" of the MSD plot, where ballistic trajectories at short time-lags are
+excluded along with poorly averaged data at long time-lags. We can select the
+"middle" of the MSD by indexing the MSD and the time-lags. Appropriately
+linear segments of the MSD can be confirmed with a log-log plot as is often
+reccomended :cite:p:`Maginn2019` where the "middle" segment can be identified
+as having a slope of 1.
+
+.. code-block:: python
+
+    plt.loglog(lagtimes, msd)
+    plt.show()
+
+Now that we have identified what segment of our MSD to analyse, let's compute
+a self-diffusivity.
+
+Computing Self-Diffusivity
+--------------------------------
+Self-diffusivity is closely related to the MSD.
+
+.. math::
+
+   D_d = \frac{1}{2d} \lim_{t \to \infty} \frac{d}{dt} MSD(r_{d})
+
+From the MSD, self-diffusivities :math:`D` with the desired dimensionality
+:math:`d` can be computed by fitting the MSD with respect to the lag-time to
+a linear model. An example of this is shown below, using the MSD computed in
+the example above. The segment between :math:`\tau = 20` and :math:`\tau = 60`
+is used to demonstrate selection of a MSD segment.
+
+.. code-block:: python
+
+    from scipy.stats import linregress
+    start_time = 20
+    start_index = int(start_time/timestep)
+    end_time = 60
+    linear_model = linregress(lagtimes[start_index:end_index],
+    				  		  msd[start_index:end_index])
+    slope = linear_model.slope
+    error = linear_model.stderr
+    # dim_fac is 3 as we computed a 3D msd with 'xyz'
+    D = slope * 1/(2*MSD.dim_fac)
+
+We have now computed a self-diffusivity!
+
+Combining Multiple Replicates
+--------------------------------
+It is common practice to combine replicates when calculating MSDs. An example
+of this is shown below using MSD1 and MSD2.
+
+.. code-block:: python
+
+    u1 = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+    MSD1 = msd.EinsteinMSD(u1, select='all', msd_type='xyz', fft=True)
+    MSD1.run()
+
+    u2 = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+    MSD2 = msd.EinsteinMSD(u2, select='all', msd_type='xyz', fft=True)
+    MSD2.run()
+
+    combined_msds = np.concatenate((MSD1.results.msds_by_particle,
+                                    MSD2.results.msds_by_particle), axis=1)
+    average_msd = np.mean(combined_msds, axis=1)
+
+The same cannot be achieved by concatenating the replicas in a single run as
+the jump between the last frame of the first trajectory and frame 0 of the
+next trajectory will lead to an artificial inflation of the MSD and hence
+any subsequent diffusion coefficient calculated.
+
+Notes
+_____
+
+There are several factors that must be taken into account when setting up and
+processing trajectories for computation of self-diffusivities.
+These include specific instructions around simulation settings, using
+unwrapped trajectories and maintaining a relatively small elapsed time between
+saved frames. Additionally, corrections for finite size effects are sometimes
+employed along with various means of estimating errors
+:cite:p:`Yeh2004,Bulow2020` The reader is directed to the following review,
+which describes many of the common pitfalls :cite:p:`Maginn2019`. There are
+other ways to compute self-diffusivity, such as from a Green-Kubo integral. At
+this point in time, these methods are beyond the scope of this module.
+
+
+Note also that computation of MSDs is highly memory intensive. If this is
+proving a problem, judicious use of the ``start``, ``stop``, ``step`` keywords
+to control which frames are incorporated may be required.
+
+References
+----------
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Maginn2019
+    Yeh2004
+    Bulow2020
+
+
+Classes
+-------
+
+.. autoclass:: EinsteinMSD
+    :members:
+    :inherited-members:
+
+"""
+
+import numpy as np
+import logging
+from ..due import due, Doi
+from .base import AnalysisBase
+from ..core import groups
+from tqdm import tqdm
+
+logger = logging.getLogger('MDAnalysis.analysis.msd')
+
+due.cite(Doi("10.21105/joss.00877"),
+         description="Mean Squared Displacements with tidynamics",
+         path="MDAnalysis.analysis.msd",
+         cite_module=True)
+due.cite(Doi("10.1051/sfn/201112010"),
+         description="FCA fast correlation algorithm",
+         path="MDAnalysis.analysis.msd",
+         cite_module=True)
+del Doi
+
+
+
[docs]class EinsteinMSD(AnalysisBase): + r"""Class to calculate Mean Squared Displacement by the Einstein relation. + + Parameters + ---------- + u : Universe or AtomGroup + An MDAnalysis :class:`Universe` or :class:`AtomGroup`. + Note that :class:`UpdatingAtomGroup` instances are not accepted. + select : str + A selection string. Defaults to "all" in which case + all atoms are selected. + msd_type : {'xyz', 'xy', 'yz', 'xz', 'x', 'y', 'z'} + Desired dimensions to be included in the MSD. Defaults to 'xyz'. + fft : bool + If ``True``, uses a fast FFT based algorithm for computation of + the MSD. Otherwise, use the simple "windowed" algorithm. + The tidynamics package is required for `fft=True`. + Defaults to ``True``. + + Attributes + ---------- + dim_fac : int + Dimensionality :math:`d` of the MSD. + results.timeseries : :class:`numpy.ndarray` + The averaged MSD over all the particles with respect to lag-time. + results.msds_by_particle : :class:`numpy.ndarray` + The MSD of each individual particle with respect to lag-time. + ag : :class:`AtomGroup` + The :class:`AtomGroup` resulting from your selection + n_frames : int + Number of frames included in the analysis. + n_particles : int + Number of particles MSD was calculated over. + + + .. versionadded:: 2.0.0 + """ + + def __init__(self, u, select='all', msd_type='xyz', fft=True, **kwargs): + r""" + Parameters + ---------- + u : Universe or AtomGroup + An MDAnalysis :class:`Universe` or :class:`AtomGroup`. + select : str + A selection string. Defaults to "all" in which case + all atoms are selected. + msd_type : {'xyz', 'xy', 'yz', 'xz', 'x', 'y', 'z'} + Desired dimensions to be included in the MSD. + fft : bool + If ``True``, uses a fast FFT based algorithm for computation of + the MSD. Otherwise, use the simple "windowed" algorithm. + The tidynamics package is required for `fft=True`. + """ + if isinstance(u, groups.UpdatingAtomGroup): + raise TypeError("UpdatingAtomGroups are not valid for MSD " + "computation") + + super(EinsteinMSD, self).__init__(u.universe.trajectory, **kwargs) + + # args + self.select = select + self.msd_type = msd_type + self._parse_msd_type() + self.fft = fft + + # local + self.ag = u.select_atoms(self.select) + self.n_particles = len(self.ag) + self._position_array = None + + # result + self.results.msds_by_particle = None + self.results.timeseries = None + + def _prepare(self): + # self.n_frames only available here + # these need to be zeroed prior to each run() call + self.results.msds_by_particle = np.zeros((self.n_frames, + self.n_particles)) + self._position_array = np.zeros( + (self.n_frames, self.n_particles, self.dim_fac)) + # self.results.timeseries not set here + + def _parse_msd_type(self): + r""" Sets up the desired dimensionality of the MSD. + + """ + keys = {'x': [0], 'y': [1], 'z': [2], 'xy': [0, 1], + 'xz': [0, 2], 'yz': [1, 2], 'xyz': [0, 1, 2]} + + self.msd_type = self.msd_type.lower() + + try: + self._dim = keys[self.msd_type] + except KeyError: + raise ValueError( + 'invalid msd_type: {} specified, please specify one of xyz, ' + 'xy, xz, yz, x, y, z'.format(self.msd_type)) + + self.dim_fac = len(self._dim) + + def _single_frame(self): + r""" Constructs array of positions for MSD calculation. + + """ + # shape of position array set here, use span in last dimension + # from this point on + self._position_array[self._frame_index] = ( + self.ag.positions[:, self._dim]) + + def _conclude(self): + if self.fft: + self._conclude_fft() + else: + self._conclude_simple() + + def _conclude_simple(self): + r""" Calculates the MSD via the simple "windowed" algorithm. + + """ + lagtimes = np.arange(1, self.n_frames) + positions = self._position_array.astype(np.float64) + for lag in tqdm(lagtimes): + disp = positions[:-lag, :, :] - positions[lag:, :, :] + sqdist = np.square(disp).sum(axis=-1) + self.results.msds_by_particle[lag, :] = np.mean(sqdist, axis=0) + self.results.timeseries = self.results.msds_by_particle.mean(axis=1) + + def _conclude_fft(self): # with FFT, np.float64 bit prescision required. + r""" Calculates the MSD via the FCA fast correlation algorithm. + + """ + try: + import tidynamics + except ImportError: + raise ImportError("""ERROR --- tidynamics was not found! + + tidynamics is required to compute an FFT based MSD (default) + + try installing it using pip eg: + + pip install tidynamics + + or set fft=False""") + + positions = self._position_array.astype(np.float64) + for n in tqdm(range(self.n_particles)): + self.results.msds_by_particle[:, n] = tidynamics.msd( + positions[:, n, :]) + self.results.timeseries = self.results.msds_by_particle.mean(axis=1)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.html new file mode 100644 index 0000000000..e146d4b10b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.html @@ -0,0 +1,382 @@ + + + + + + MDAnalysis.analysis.nucleicacids — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.nucleicacids

+# -*- 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-2017 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
+#
+
+r"""
+Updated nucleic acid analysis --- :mod:`MDAnalysis.analysis.nucleicacids`
+=========================================================================
+
+:Author: Alia Lescoulie
+:Year: 2022
+:copyright: GNU Public Licence v3
+
+The module provides classes for analyzing nucleic acids structures.
+This is an updated, higher performance version of previous nucleic acid tools.
+For applications see :cite:p:`b-Denning2011,b-Denning2012`.
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+    :keyprefix: b-
+    :labelprefix: ᵇ
+
+    Denning2011
+    Denning2012
+
+Distances
+---------
+
+.. autoclass:: NucPairDist
+    :members:
+    :inherited-members:
+
+.. autoclass:: WatsonCrickDist
+    :members:
+    :inherited-members:
+
+.. versionadded 2.2.0
+
+"""
+
+from typing import List, Dict
+import warnings
+
+import numpy as np
+
+import MDAnalysis as mda
+from .distances import calc_bonds
+from .base import AnalysisBase, Results
+from MDAnalysis.core.groups import Residue
+
+
+
[docs]class NucPairDist(AnalysisBase): + r"""Atom Pair distance calculation base class. + + Takes two lists of :class:`~MDAnalysis.core.groups.AtomGroup` and + computes the distances between them over a trajectory. Used as a + superclass for the other nucleic acid distances classes. The distance + will be measured between atoms sharing an index in the two lists of + :class:`~MDAnalysis.core.groups.AtomGroup`. + + Parameters + ---------- + selection1: List[AtomGroup] + List of :class:`~MDAnalysis.core.groups.AtomGroup` containing an atom + of each nucleic acid being analyzed. + selection2: List[AtomGroup] + List of :class:`~MDAnalysis.core.groups.AtomGroup` containing an atom + of each nucleic acid being analyzed. + kwargs: dict + Arguments for :class:`~MDAnalysis.analysis.base.AnalysisBase` + + Attributes + ---------- + times: numpy.ndarray + Simulation times for analysis. + results.pair_distances: numpy.ndarray + 2D array of pair distances. First dimension is simulation time, second + dimension contains the pair distances for each each entry pair in + selection1 and selection2. + + .. versionadded:: 2.4.0 + + + Raises + ------ + + ValueError + If the selections given are not the same length + + + .. versionchanged:: 2.5.0 + The ability to access by passing selection indices to :attr:`results` is + is now removed as of MDAnalysis version 2.5.0. Please use + :attr:`results.pair_distances` instead. + The :attr:`results.times` was deprecated and is now removed as of + MDAnalysis 2.5.0. Please use the class attribute :attr:`times` instead. + """ + + _s1: mda.AtomGroup + _s2: mda.AtomGroup + _n_sel: int + _res_dict: Dict[int, List[float]] + _times = List[float] + + def __init__(self, selection1: List[mda.AtomGroup], + selection2: List[mda.AtomGroup], + **kwargs) -> None: + super(NucPairDist, self).__init__(selection1[0].universe.trajectory, **kwargs) + + if len(selection1) != len(selection2): + raise ValueError("Selections must be same length") + + self._n_sel: int = len(selection1) + + self._s1 = selection1[0] + self._s2 = selection2[0] + + for i in range(1, self._n_sel): + self._s1 += selection1[i] + self._s2 += selection2[i] + + def _prepare(self) -> None: + self._res_array: np.ndarray = np.zeros([self.n_frames, self._n_sel]) + + def _single_frame(self) -> None: + dist: np.ndarray = calc_bonds(self._s1.positions, self._s2.positions) + self._res_array[self._frame_index, :] = dist + + def _conclude(self) -> None: + self.results['pair_distances'] = self._res_array
+ + +
[docs]class WatsonCrickDist(NucPairDist): + r"""Watson-Crick basepair distance for selected residues over a trajectory. + + Takes two lists of :class:`~MDAnalysis.core.groups.Residue` objects and calculates + the Watson-Crick distance between them over the trajectory. Bases are matched by + their index in the lists given as arguments. + + Parameters + ---------- + strand1: List[Residue] + First list of bases + strand2: List[Residue] + Second list of bases + n1_name: str (optional) + Name of Nitrogen 1 of nucleic acids, by default assigned to N1 + n3_name: str (optional) + Name of Nitrogen 3 of nucleic acids, by default assigned to N3 + g_name: str (optional) + Name of Guanine in topology, by default assigned to G + a_name: str (optional) + Name of Adenine in topology, by default assigned to A + u_name: str (optional) + Name of Uracil in topology, by default assigned to U + t_name: str (optional) + Name of Thymine in topology, by default assigned to T + c_name: str (optional) + Name of Cytosine in topology, by default assigned to C + **kwargs: dict + arguments for :class:`~MDAnalysis.analysis.base.AnalysisBase` + + Attributes + ---------- + times: numpy.ndarray + Simulation times for analysis. + results.pair_distances: numpy.ndarray + 2D array of Watson-Crick basepair distances. First dimension is + simulation time, second dimension contains the pair distances for + each each entry pair in strand1 and strand2. + + .. versionadded:: 2.4.0 + + + Raises + ------ + ValueError + If the residues given are not amino acids + ValueError + If the selections given are not the same length + + + .. versionchanged:: 2.5.0 + Accessing results by passing strand indices to :attr:`results` is + was deprecated and is now removed as of MDAnalysis version 2.5.0. Please + use :attr:`results.pair_distances` instead. + The :attr:`results.times` was deprecated and is now removed as of + MDAnalysis 2.5.0. Please use the class attribute :attr:`times` instead. + """ + + def __init__(self, strand1: List[Residue], strand2: List[Residue], + n1_name: str = 'N1', n3_name: str = "N3", + g_name: str = 'G', a_name: str = 'A', u_name: str = 'U', + t_name: str = 'T', c_name: str = 'C', + **kwargs) -> None: + sel1: List[mda.AtomGroup] = [] + sel2: List[mda.AtomGroup] = [] + strand = zip(strand1, strand2) + + for s in strand: + if s[0].resname[0] in [c_name, t_name, u_name]: + a1, a2 = n3_name, n1_name + elif s[0].resname[0] in [a_name, g_name]: + a1, a2 = n1_name, n3_name + else: + raise ValueError(f"{s} are not valid nucleic acids") + + sel1.append(s[0].atoms.select_atoms(f'name {a1}')) + sel2.append(s[1].atoms.select_atoms(f'name {a2}')) + + super(WatsonCrickDist, self).__init__(sel1, sel2, **kwargs)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.html new file mode 100644 index 0000000000..f4e9a63f9c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.html @@ -0,0 +1,911 @@ + + + + + + MDAnalysis.analysis.nuclinfo — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.nuclinfo

+# -*- 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-2017 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
+#
+
+"""
+Nucleic acid analysis --- :mod:`MDAnalysis.analysis.nuclinfo`
+=============================================================
+
+:Author: Elizabeth Denning
+:Year: 2011
+:Copyright: GNU Public License v3
+
+The module provides functions to analyze nucleic acid structures, in
+particular
+
+- backbone dihedrals,
+- chi dihedrals,
+- AS or CP phase angles,
+- Watson-Crick N1-N3 distances, C2-O2 distances, N6-O4 distances, O6-N4 distances.
+
+For applications of this kind of analysis see
+:cite:p:`a-Denning2011,a-Denning2012`.
+
+All functions take a :class:`~MDAnalysis.core.universe.Universe` as an
+argument together with further parameters that specify the base or bases in
+question. Angles are in degrees. The functions use standard CHARMM names for
+nucleic acids and atom names.
+
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+    :keyprefix: a-
+    :labelprefix: ᵃ
+
+    Denning2011
+    Denning2012
+
+Distances
+---------
+
+.. autofunction:: wc_pair
+
+.. autofunction:: minor_pair
+
+.. autofunction:: major_pair
+
+
+Phases
+------
+
+.. autofunction:: phase_cp
+
+.. autofunction:: phase_as
+
+
+Dihedral angles
+---------------
+
+.. autofunction:: tors
+
+.. autofunction:: tors_alpha
+
+.. autofunction:: tors_beta
+
+.. autofunction:: tors_gamma
+
+.. autofunction:: tors_delta
+
+.. autofunction:: tors_eps
+
+.. autofunction:: tors_zeta
+
+.. autofunction:: tors_chi
+
+.. autofunction:: hydroxyl
+
+.. autofunction:: pseudo_dihe_baseflip
+
+"""
+import numpy as np
+from math import pi, sin, cos, atan2, sqrt, pow
+
+from MDAnalysis.lib import mdamath
+
+
+
[docs]def wc_pair(universe, i, bp, seg1="SYSTEM", seg2="SYSTEM"): + """Watson-Crick basepair distance for residue `i` with residue `bp`. + + The distance of the nitrogen atoms in a Watson-Crick hydrogen bond is + computed. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + i : int + resid of the first base + bp : int + resid of the second base + seg1 : str (optional) + segment id for first base ["SYSTEM"] + seg2 : str (optional) + segment id for second base ["SYSTEM"] + + Returns + ------- + float + Watson-Crick base pair distance + + + Notes + ----- + If failure occurs be sure to check the segment identification. + + + .. versionadded:: 0.7.6 + """ + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DC", "DT", "U", "C", "T", "CYT", "THY", "URA"]: + a1, a2 = "N3", "N1" + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DG", "DA", "A", "G", "ADE", "GUA"]: + a1, a2 = "N1", "N3" + wc_dist = universe.select_atoms("(segid {0!s} and resid {1!s} and name {2!s}) " + "or (segid {3!s} and resid {4!s} and name {5!s}) " + .format(seg1, i, a1, seg2, bp, a2)) + wc = mdamath.norm(wc_dist[0].position - wc_dist[1].position) + return wc
+ + +
[docs]def minor_pair(universe, i, bp, seg1="SYSTEM", seg2="SYSTEM"): + """Minor-Groove basepair distance for residue `i` with residue `bp`. + + The distance of the nitrogen and oxygen atoms in a Minor-groove hydrogen + bond is computed. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + i : int + resid of the first base + bp : int + resid of the second base + seg1 : str (optional) + segment id for first base ["SYSTEM"] + seg2 : str (optional) + segment id for second base ["SYSTEM"] + + Returns + ------- + float + Minor groove base pair distance + + Notes + ----- + If failure occurs be sure to check the segment identification. + + + .. versionadded:: 0.7.6 + """ + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DC", "DT", "U", "C", "T", "CYT", "THY", "URA"]: + a1, a2 = "O2", "C2" + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DG", "DA", "A", "G", "ADE", "GUA"]: + a1, a2 = "C2", "O2" + c2o2_dist = universe.select_atoms("(segid {0!s} and resid {1!s} and name {2!s}) " + "or (segid {3!s} and resid {4!s} and name {5!s})" + .format(seg1, i, a1, seg2, bp, a2)) + c2o2 = mdamath.norm(c2o2_dist[0].position - c2o2_dist[1].position) + return c2o2
+ + +
[docs]def major_pair(universe, i, bp, seg1="SYSTEM", seg2="SYSTEM"): + """Major-Groove basepair distance for residue `i` with residue `bp`. + + The distance of the nitrogen and oxygen atoms in a Major-groove hydrogen + bond is computed. + + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + i : int + resid of the first base + bp : int + resid of the second base + seg1 : str (optional) + segment id for first base ["SYSTEM"] + seg2 : str (optional) + segment id for second base ["SYSTEM"] + + Returns + ------- + float + Major groove base pair distance + + Notes + ----- + If failure occurs be sure to check the segment identification. + + + .. versionadded:: 0.7.6 + """ + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DC", "DG", "C", "G", "CYT", "GUA"]: + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DC", "C", "CYT"]: + a1, a2 = "N4", "O6" + else: + a1, a2 = "O6", "N4" + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DT", "DA", "A", "T", "U", "ADE", "THY", "URA"]: + if universe.select_atoms(" resid {0!s} ".format(i)).resnames[0] in ["DT", "T", "THY", "U", "URA"]: + a1, a2 = "O4", "N6" + else: + a1, a2 = "N6", "O4" + no_dist = universe.select_atoms("(segid {0!s} and resid {1!s} and name {2!s}) " + "or (segid {3!s} and resid {4!s} and name {5!s}) " + .format(seg1, i, a1, seg2, bp, a2)) + major = mdamath.norm(no_dist[0].position - no_dist[1].position) + return major
+ + +
[docs]def phase_cp(universe, seg, i): + """Pseudo-angle describing the phase of the ribose pucker for residue `i` using the CP method. + + The angle is computed by the positions of atoms in the ribose ring. + + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + float + phase angle in degrees + + + .. versionadded:: 0.7.6 + """ + atom1 = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i)) + atom2 = universe.select_atoms(" atom {0!s} {1!s} C1\' ".format(seg, i)) + atom3 = universe.select_atoms(" atom {0!s} {1!s} C2\' ".format(seg, i)) + atom4 = universe.select_atoms(" atom {0!s} {1!s} C3\' ".format(seg, i)) + atom5 = universe.select_atoms(" atom {0!s} {1!s} C4\' ".format(seg, i)) + + data1 = atom1.positions + data2 = atom2.positions + data3 = atom3.positions + data4 = atom4.positions + data5 = atom5.positions + + r0 = (data1 + data2 + data3 + data4 + data5) * (1.0 / 5.0) + r1 = data1 - r0 + r2 = data2 - r0 + r3 = data3 - r0 + r4 = data4 - r0 + r5 = data5 - r0 + + R1 = ((r1 * sin(2 * pi * 0.0 / 5.0)) + (r2 * sin(2 * pi * 1.0 / 5.0)) + + (r3 * sin(2 * pi * 2.0 / 5.0)) + (r4 * sin(2 * pi * 3.0 / 5.0)) + + (r5 * sin(2 * pi * 4.0 / 5.0))) + + R2 = ((r1 * cos(2 * pi * 0.0 / 5.0)) + (r2 * cos(2 * pi * 1.0 / 5.0)) + + (r3 * cos(2 * pi * 2.0 / 5.0)) + (r4 * cos(2 * pi * 3.0 / 5.0)) + + (r5 * cos(2 * pi * 4.0 / 5.0))) + + x = np.cross(R1[0], R2[0]) + n = x / sqrt(pow(x[0], 2) + pow(x[1], 2) + pow(x[2], 2)) + + r1_d = np.dot(r1, n) + r2_d = np.dot(r2, n) + r3_d = np.dot(r3, n) + r4_d = np.dot(r4, n) + r5_d = np.dot(r5, n) + + D = ((r1_d * sin(4 * pi * 0.0 / 5.0)) + (r2_d * sin(4 * pi * 1.0 / 5.0)) + + (r3_d * sin(4 * pi * 2.0 / 5.0)) + (r4_d * sin(4 * pi * 3.0 / 5.0)) + + (r5_d * sin(4 * pi * 4.0 / 5.0))) * -1 * sqrt(2.0 / 5.0) + + C = ((r1_d * cos(4 * pi * 0.0 / 5.0)) + (r2_d * cos(4 * pi * 1.0 / 5.0)) + + (r3_d * cos(4 * pi * 2.0 / 5.0)) + (r4_d * cos(4 * pi * 3.0 / 5.0)) + + (r5_d * cos(4 * pi * 4.0 / 5.0))) * sqrt(2.0 / 5.0) + + phase_ang = (atan2(D, C) + (pi / 2.)) * 180. / pi + return phase_ang % 360
+ + +
[docs]def phase_as(universe, seg, i): + """Pseudo-angle describing the phase of the ribose pucker for residue `i` using the AS method + + The angle is computed by the position vector of atoms in the ribose ring. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + float + phase angle in degrees + + + .. versionadded:: 0.7.6 + """ + angle1 = universe.select_atoms(" atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} C2\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i)) + + angle2 = universe.select_atoms(" atom {0!s} {1!s} C2\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} O4\' ".format(seg, i)) + + angle3 = universe.select_atoms(" atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i)) + + angle4 = universe.select_atoms(" atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} C2\' ".format(seg, i)) + + angle5 = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} C2\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i)) + + data1 = angle1.dihedral.value() + data2 = angle2.dihedral.value() + data3 = angle3.dihedral.value() + data4 = angle4.dihedral.value() + data5 = angle5.dihedral.value() + + B = ((data1 * sin(2 * 2 * pi * (1 - 1.) / 5.)) + + (data2 * sin(2 * 2 * pi * (2 - 1.) / 5.)) + + (data3 * sin(2 * 2 * pi * (3 - 1.) / 5.)) + + (data4 * sin(2 * 2 * pi * (4 - 1.) / 5.)) + + (data5 * sin(2 * 2 * pi * (5 - 1.) / 5.))) * -2. / 5. + + A = ((data1 * cos(2 * 2 * pi * (1 - 1.) / 5.)) + + (data2 * cos(2 * 2 * pi * (2 - 1.) / 5.)) + + (data3 * cos(2 * 2 * pi * (3 - 1.) / 5.)) + + (data4 * cos(2 * 2 * pi * (4 - 1.) / 5.)) + + (data5 * cos(2 * 2 * pi * (5 - 1.) / 5.))) * 2. / 5. + + phase_ang = atan2(B, A) * 180. / pi + return phase_ang % 360
+ + +
[docs]def tors(universe, seg, i): + """Calculation of nucleic backbone dihedral angles. + + The dihedral angles are alpha, beta, gamma, delta, epsilon, zeta, chi. + + The dihedral is computed based on position of atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + [alpha, beta, gamma, delta, epsilon, zeta, chi] : list of floats + torsion angles in degrees + + Notes + ----- + If failure occurs be sure to check the segment identification. + + + .. versionadded:: 0.7.6 + + """ + a = universe.select_atoms(" atom {0!s} {1!s} O3\' ".format(seg, i - 1), + " atom {0!s} {1!s} P ".format(seg, i), + " atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i)) + + b = universe.select_atoms(" atom {0!s} {1!s} P ".format(seg, i), + " atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i)) + + g = universe.select_atoms(" atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i)) + + d = universe.select_atoms(" atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i)) + + e = universe.select_atoms(" atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i), + " atom {0!s} {1!s} P ".format(seg, i + 1)) + + z = universe.select_atoms(" atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i), + " atom {0!s} {1!s} P ".format(seg, i + 1), + " atom {0!s} {1!s} O5\' ".format(seg, i + 1)) + c = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} N9 ".format(seg, i), + " atom {0!s} {1!s} C4 ".format(seg, i)) + if len(c) < 4: + c = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} N1 ".format(seg, i), + " atom {0!s} {1!s} C2 ".format(seg, i)) + + alpha = a.dihedral.value() % 360 + beta = b.dihedral.value() % 360 + gamma = g.dihedral.value() % 360 + delta = d.dihedral.value() % 360 + epsilon = e.dihedral.value() % 360 + zeta = z.dihedral.value() % 360 + chi = c.dihedral.value() % 360 + + return [alpha, beta, gamma, delta, epsilon, zeta, chi]
+ + +
[docs]def tors_alpha(universe, seg, i): + """alpha backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + alpha : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + a = universe.select_atoms(" atom {0!s} {1!s} O3\' ".format(seg, i - 1), + " atom {0!s} {1!s} P ".format(seg, i), + " atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i)) + alpha = a.dihedral.value() % 360 + return alpha
+ + +
[docs]def tors_beta(universe, seg, i): + """beta backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + beta : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + b = universe.select_atoms(" atom {0!s} {1!s} P ".format(seg, i), + " atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i)) + beta = b.dihedral.value() % 360 + return beta
+ + +
[docs]def tors_gamma(universe, seg, i): + """ Gamma backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + gamma : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + g = universe.select_atoms(" atom {0!s} {1!s} O5\' ".format(seg, i), + " atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i)) + gamma = g.dihedral.value() % 360 + return gamma
+ + +
[docs]def tors_delta(universe, seg, i): + """delta backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + delta : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + d = universe.select_atoms(" atom {0!s} {1!s} C5\' ".format(seg, i), + " atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i)) + delta = d.dihedral.value() % 360 + return delta
+ + +
[docs]def tors_eps(universe, seg, i): + """Epsilon backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + epsilon : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + e = universe.select_atoms(" atom {0!s} {1!s} C4\' ".format(seg, i), + " atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i), + " atom {0!s} {1!s} P ".format(seg, i + 1)) + epsilon = e.dihedral.value() % 360 + return epsilon
+ + +
[docs]def tors_zeta(universe, seg, i): + """Zeta backbone dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + zeta : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + z = universe.select_atoms(" atom {0!s} {1!s} C3\' ".format(seg, i), + " atom {0!s} {1!s} O3\' ".format(seg, i), + " atom {0!s} {1!s} P ".format(seg, i + 1), + " atom {0!s} {1!s} O5\' ".format(seg, i + 1)) + zeta = z.dihedral.value() % 360 + return zeta
+ + +
[docs]def tors_chi(universe, seg, i): + """chi nucleic acid dihedral + + The dihedral is computed based on position atoms for resid `i`. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + chi : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + """ + c = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} N9 ".format(seg, i), + " atom {0!s} {1!s} C4 ".format(seg, i)) + if len(c) < 4: + c = universe.select_atoms(" atom {0!s} {1!s} O4\' ".format(seg, i), + " atom {0!s} {1!s} C1\' ".format(seg, i), + " atom {0!s} {1!s} N1 ".format(seg, i), + " atom {0!s} {1!s} C2 ".format(seg, i)) + chi = c.dihedral.value() % 360 + return chi
+ + +
[docs]def hydroxyl(universe, seg, i): + """2-hydroxyl dihedral. Useful only for RNA calculations. + + .. Note:: This dihedral calculation will only work if using atom + names as documented by charmm force field parameters, + namely "C1', C2', O2', H2'". + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the trajectory + seg : str + segment id for base + i : int + resid of the first base + + Returns + ------- + hydroxyl_angle : float + torsion angle in degrees + + + .. versionadded:: 0.7.6 + + """ + h = universe.select_atoms("atom {0!s} {1!s} C1'".format(seg, i), + "atom {0!s} {1!s} C2'".format(seg, i), + "atom {0!s} {1!s} O2'".format(seg, i), + "atom {0!s} {1!s} H2'".format(seg, i)) + try: + hydr = h.dihedral.value() % 360 + except ValueError: + errmsg = (f"Resid {i} does not contain atoms C1', C2', O2', H2' but " + f"atoms {list(h.atoms)}") + raise ValueError(errmsg) from None + + return hydr
+ + +
[docs]def pseudo_dihe_baseflip(universe, bp1, bp2, i, + seg1="SYSTEM", seg2="SYSTEM", seg3="SYSTEM"): + """pseudo dihedral for flipped bases. Useful only for nucleic acid base flipping + + The dihedral is computed based on position atoms for resid `i` + + .. Note:: This dihedral calculation will only work if using atom names as + documented by charmm force field parameters. + + Parameters + ---------- + universe : Universe + :class:`~MDAnalysis.core.universe.Universe` containing the + trajectory + bp1 : int + resid that base pairs with `bp2` + bp2 : int + resid below the base that flips + i : int + resid of the base that flips + segid1 : str (optional) + segid of resid base pairing with `bp2` + segid2 : str (optional) + segid, same as that of segid of flipping resid `i` + segid3 : str (optional) + segid of resid `i` that flips + + Returns + ------- + float + pseudo dihedral angle in degrees + + + .. versionadded:: 0.8.0 + """ + bf1 = universe.select_atoms( + " ( segid {0!s} and resid {1!s} and nucleicbase ) " + "or ( segid {2!s} and resid {3!s} and nucleicbase ) " + .format( seg1, bp1, seg2, bp2)) + bf4 = universe.select_atoms("(segid {0!s} and resid {1!s} and nucleicbase) ".format(seg3, i)) + bf2 = universe.select_atoms("(segid {0!s} and resid {1!s} and nucleicsugar) ".format(seg2, bp2)) + bf3 = universe.select_atoms("(segid {0!s} and resid {1!s} and nucleicsugar) ".format(seg3, i)) + x = [bf1.center_of_mass(), bf2.center_of_mass(), + bf3.center_of_mass(), bf4.center_of_mass()] + pseudo = mdamath.dihedral(x[0] - x[1], x[1] - x[2], x[2] - x[3]) + pseudo = np.rad2deg(pseudo) % 360 + return pseudo
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/pca.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/pca.html new file mode 100644 index 0000000000..580ddf36dc --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/pca.html @@ -0,0 +1,1044 @@ + + + + + + MDAnalysis.analysis.pca — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.pca

+# -*- 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-2017 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
+#
+
+r"""Principal Component Analysis (PCA) --- :mod:`MDAnalysis.analysis.pca`
+=====================================================================
+
+:Authors: John Detlefs
+:Year: 2016
+:Copyright: GNU Public License v3
+
+.. versionadded:: 0.16.0
+
+This module contains the linear dimensions reduction method Principal Component
+Analysis (PCA). PCA sorts a simulation into 3N directions of descending
+variance, with N being the number of atoms. These directions are called
+the principal components. The dimensions to be analyzed are reduced by only
+looking at a few projections of the first principal components. To learn how to
+run a Principal Component Analysis, please refer to the :ref:`PCA-tutorial`.
+
+The PCA problem is solved by solving the eigenvalue problem of the covariance
+matrix, a :math:`3N \times 3N` matrix where the element :math:`(i, j)` is the
+covariance between coordinates :math:`i` and :math:`j`. The principal
+components are the eigenvectors of this matrix.
+
+For each eigenvector, its eigenvalue is the variance that the eigenvector
+explains. Stored in :attr:`PCA.results.cumulated_variance`, a ratio for each
+number of eigenvectors up to index :math:`i` is provided to quickly find out
+how many principal components are needed to explain the amount of variance
+reflected by those :math:`i` eigenvectors. For most data,
+:attr:`PCA.results.cumulated_variance`
+will be approximately equal to one for some :math:`n` that is significantly
+smaller than the total number of components. These are the components of
+interest given by Principal Component Analysis.
+
+From here, we can project a trajectory onto these principal components and
+attempt to retrieve some structure from our high dimensional data.
+
+For a basic introduction to the module, the :ref:`PCA-tutorial` shows how
+to perform Principal Component Analysis.
+
+.. _PCA-tutorial:
+
+PCA Tutorial
+------------
+
+The example uses files provided as part of the MDAnalysis test suite
+(in the variables :data:`~MDAnalysis.tests.datafiles.PSF` and
+:data:`~MDAnalysis.tests.datafiles.DCD`). This tutorial shows how to use the
+PCA class.
+
+First load all modules and test data::
+
+    import MDAnalysis as mda
+    import MDAnalysis.analysis.pca as pca
+    from MDAnalysis.tests.datafiles import PSF, DCD
+
+
+Given a universe containing trajectory data we can perform Principal Component
+Analysis by using the class :class:`PCA` and retrieving the principal
+components.::
+
+    u = mda.Universe(PSF, DCD)
+    PSF_pca = pca.PCA(u, select='backbone')
+    PSF_pca.run()
+
+
+Inspect the components to determine the principal components you would like
+to retain. The choice is arbitrary, but I will stop when 95 percent of the
+variance is explained by the components. This cumulated variance by the
+components is conveniently stored in the one-dimensional array attribute
+:attr:`PCA.results.cumulated_variance`. The value at the ith index of
+:attr:`PCA.results.cumulated_variance` is the sum of the variances from 0 to
+i.::
+
+    n_pcs = np.where(PSF_pca.results.cumulated_variance > 0.95)[0][0]
+    atomgroup = u.select_atoms('backbone')
+    pca_space = PSF_pca.transform(atomgroup, n_components=n_pcs)
+
+
+From here, inspection of the ``pca_space`` and conclusions to be drawn from the
+data are left to the user.
+
+Classes and Functions
+---------------------
+
+.. autoclass:: PCA
+   :members:
+   :inherited-members:
+
+.. autofunction:: cosine_content
+
+.. autofunction:: rmsip
+
+.. autofunction:: cumulative_overlap
+
+"""
+import warnings
+
+import numpy as np
+import scipy.integrate
+
+from MDAnalysis import Universe
+from MDAnalysis.analysis.align import _fit_to
+from MDAnalysis.lib.log import ProgressBar
+
+from ..lib import util
+from ..due import due, Doi
+from .base import AnalysisBase
+
+
+
[docs]class PCA(AnalysisBase): + """Principal component analysis on an MD trajectory. + + After initializing and calling method with a universe or an atom group, + principal components ordering the atom coordinate data by decreasing + variance will be available for analysis. As an example::: + + pca = PCA(universe, select='backbone').run() + pca_space = pca.transform(universe.select_atoms('backbone'), 3) + + + 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. + + Parameters + ---------- + universe : Universe + Universe + select : string, optional + A valid selection statement for choosing a subset of atoms from + the atomgroup. + align : boolean, optional + If True, the trajectory will be aligned to a reference + structure. + mean : array_like, optional + Optional reference positions to be be used as the mean of the + covariance matrix. + n_components : int, optional + The number of principal components to be saved, default saves + all principal components + verbose : bool (optional) + Show detailed progress of the calculation if set to ``True``. + + Attributes + ---------- + results.p_components: array, (n_atoms * 3, n_components) + Principal components of the feature space, + representing the directions of maximum variance in the data. + The column vector p_components[:, i] is the eigenvector + corresponding to the variance[i]. + + .. versionadded:: 2.0.0 + + p_components: array, (n_atoms * 3, n_components) + Alias to the :attr:`results.p_components`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.p_components` instead. + + results.variance : array (n_components, ) + Raw variance explained by each eigenvector of the covariance + matrix. + + .. versionadded:: 2.0.0 + + variance : array (n_components, ) + Alias to the :attr:`results.variance`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.variance` instead. + + results.cumulated_variance : array, (n_components, ) + Percentage of variance explained by the selected components and the sum + of the components preceding it. If a subset of components is not chosen + then all components are stored and the cumulated variance will converge + to 1. + + .. versionadded:: 2.0.0 + + cumulated_variance : array, (n_components, ) + Alias to the :attr:`results.cumulated_variance`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.cumulated_variance` instead. + + Notes + ----- + Computation can be sped up by supplying precalculated mean positions. + + + .. versionchanged:: 0.19.0 + The start frame is used when performing selections and calculating + mean positions. Previously the 0th frame was always used. + .. versionchanged:: 1.0.0 + ``n_components`` now limits the correct axis of ``p_components``. + ``cumulated_variance`` now accurately represents the contribution of + each principal component and does not change when ``n_components`` is + given. If ``n_components`` is not None or is less than the number of + ``p_components``, ``cumulated_variance`` will not sum to 1. + ``align=True`` now correctly aligns the trajectory and computes the + correct means and covariance matrix. + .. versionchanged:: 2.0.0 + ``mean_atoms`` removed, as this did not reliably contain the mean + positions. + ``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. + """ + + def __init__(self, universe, select='all', align=False, mean=None, + n_components=None, **kwargs): + super(PCA, self).__init__(universe.trajectory, **kwargs) + self._u = universe + + # for transform function + self.align = align + + self._calculated = False + self._n_components = n_components + self._select = select + self._mean = mean + + def _prepare(self): + # access start index + self._u.trajectory[self.start] + # reference will be start index + self._reference = self._u.select_atoms(self._select) + self._atoms = self._u.select_atoms(self._select) + self._n_atoms = self._atoms.n_atoms + + if self._mean is None: + self.mean = np.zeros((self._n_atoms, 3)) + self._calc_mean = True + else: + self.mean = np.asarray(self._mean) + if self.mean.shape[0] != self._n_atoms: + raise ValueError('Number of atoms in reference ({}) does ' + 'not match number of atoms in the ' + 'selection ({})'.format(self._n_atoms, + self.mean.shape[0])) + self._calc_mean = False + + if self.n_frames == 1: + raise ValueError('No covariance information can be gathered from a' + 'single trajectory frame.\n') + n_dim = self._n_atoms * 3 + self.cov = np.zeros((n_dim, n_dim)) + self._ref_atom_positions = self._reference.positions + self._ref_cog = self._reference.center_of_geometry() + self._ref_atom_positions -= self._ref_cog + + if self._calc_mean: + for ts in ProgressBar(self._u.trajectory[self.start:self.stop:self.step], + verbose=self._verbose, desc="Mean Calculation"): + if self.align: + mobile_cog = self._atoms.center_of_geometry() + mobile_atoms, old_rmsd = _fit_to(self._atoms.positions - mobile_cog, + self._ref_atom_positions, + self._atoms, + mobile_com=mobile_cog, + ref_com=self._ref_cog) + + self.mean += self._atoms.positions + self.mean /= self.n_frames + self._xmean = np.ravel(self.mean) + + def _single_frame(self): + if self.align: + mobile_cog = self._atoms.center_of_geometry() + mobile_atoms, old_rmsd = _fit_to(self._atoms.positions - mobile_cog, + self._ref_atom_positions, + self._atoms, + mobile_com=mobile_cog, + ref_com=self._ref_cog) + # now all structures are aligned to reference + x = mobile_atoms.positions.ravel() + else: + x = self._atoms.positions.ravel() + x -= self._xmean + self.cov += np.dot(x[:, np.newaxis], x[:, np.newaxis].T) + + def _conclude(self): + self.cov /= self.n_frames - 1 + e_vals, e_vects = np.linalg.eig(self.cov) + sort_idx = np.argsort(e_vals)[::-1] + self._variance = e_vals[sort_idx] + self._p_components = e_vects[:, sort_idx] + self._calculated = True + self.n_components = self._n_components + + @property + def p_components(self): + wmsg = ("The `p_components` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.p_components` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.p_components + + @property + def variance(self): + wmsg = ("The `variance` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.variance` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.variance + + @property + def cumulated_variance(self): + wmsg = ("The `cumulated_variance` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.cumulated_variance` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.cumulated_variance + + @property + def n_components(self): + return self._n_components + + @n_components.setter + def n_components(self, n): + if self._calculated: + if n is None: + n = len(self._variance) + self.results.variance = self._variance[:n] + self.results.cumulated_variance = (np.cumsum(self._variance) / + np.sum(self._variance))[:n] + self.results.p_components = self._p_components[:, :n] + self._n_components = n + +
[docs] def transform(self, atomgroup, n_components=None, start=None, stop=None, + step=None): + """Apply the dimensionality reduction on a trajectory + + Parameters + ---------- + atomgroup : AtomGroup or Universe + The AtomGroup or Universe containing atoms to be PCA transformed. + n_components : int, optional + The number of components to be projected onto. The default + ``None`` maps onto all components. + start : int, optional + The frame to start on for the PCA transform. The default + ``None`` becomes 0, the first frame index. + stop : int, optional + Frame index to stop PCA transform. The default ``None`` becomes + the total number of frames in the trajectory. + Iteration stops *before* this frame number, which means that the + trajectory would be read until the end. + step : int, optional + 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``). + + Returns + ------- + pca_space : array, shape (n_frames, n_components) + + + .. versionchanged:: 0.19.0 + Transform now requires that :meth:`run` has been called before, + otherwise a :exc:`ValueError` is raised. + """ + if not self._calculated: + raise ValueError('Call run() on the PCA before using transform') + + if isinstance(atomgroup, Universe): + atomgroup = atomgroup.atoms + + if(self._n_atoms != atomgroup.n_atoms): + raise ValueError('PCA has been fit for' + '{} atoms. Your atomgroup' + 'has {} atoms'.format(self._n_atoms, + atomgroup.n_atoms)) + if not (self._atoms.types == atomgroup.types).all(): + warnings.warn('Atom types do not match with types used to fit PCA') + + traj = atomgroup.universe.trajectory + start, stop, step = traj.check_slice_indices(start, stop, step) + n_frames = len(range(start, stop, step)) + + dim = (n_components if n_components is not None else + self.results.p_components.shape[1]) + + dot = np.zeros((n_frames, dim)) + + for i, ts in enumerate(traj[start:stop:step]): + xyz = atomgroup.positions.ravel() - self._xmean + dot[i] = np.dot(xyz, self._p_components[:, :dim]) + + return dot
+ +
[docs] def project_single_frame(self, components=None, group=None, anchor=None): + r"""Computes a function to project structures onto selected PCs + + Applies Inverse-PCA transform to the PCA atomgroup. + Optionally, calculates one displacement vector per residue + to extrapolate the transform to atoms not in the PCA atomgroup. + + Parameters + ---------- + components : int, array, optional + Components to be projected onto. + The default ``None`` maps onto all components. + + group : AtomGroup, optional + The AtomGroup containing atoms to be projected. + The projection applies to whole residues in ``group``. + The atoms in the PCA class are not affected by this argument. + The default ``None`` does not extrapolate the projection + to non-PCA atoms. + + anchor : string, optional + The string to select the PCA atom whose displacement vector + is applied to non-PCA atoms in a residue. The ``anchor`` selection + is applied to ``group``.The resulting atomselection must have + exactly one PCA atom in each residue of ``group``. + The default ``None`` does not extrapolate the projection + to non-PCA atoms. + + Returns + ------- + function + The resulting function f(ts) takes as input a + :class:`~MDAnalysis.coordinates.timestep.Timestep` ts, + and returns ts with the projected structure + + .. warning:: + The transformation function takes a :class:``Timestep`` as input + because this is required for :ref:``transformations``. + However, the inverse-PCA transformation is applied on the atoms + of the Universe that was used for the PCA. It is *expected* + that the `ts` is from the same Universe but this is + currently not checked. + + Notes + ----- + When the PCA class is run for an atomgroup, the principal components + are cached. The trajectory can then be projected onto one or more of + these principal components. Since the principal components are sorted + in the order of decreasing explained variance, the first few components + capture the essential molecular motion. + + If N is the number of atoms in the PCA group, each component has the + length 3N. A PCA score :math:`w\_i`, along component :math:`u\_i`, is + calculated for a set of coordinates :math:`(r(t))` of the same atoms. + The PCA scores are then used to transform the structure, :math:`(r(t))` + at a timestep, back to the original space. + + .. math:: + + w_{i}(t) = ({\textbf r}(t) - \bar{{\textbf r}}) \cdot + {\textbf u}_i \\ + {\textbf r'}(t) = (w_{i}(t) \cdot {\textbf u}_i^T) + + \bar{{\textbf r}} + + For each residue, the projection can be extended to atoms that were + not part of PCA by applying the displacement vector of a PCA atom to + all the atoms in the residue. This could be useful to preserve the bond + distance between a PCA atom and other non-PCA atoms in a residue. + + If there are r residues and n non-PCA atoms in total, the displacement + vector has the size 3r. This needs to be broadcasted to a size 3n. An + extrapolation trick is used to shape the array, since going over each + residue for each frame can be expensive. Non-PCA atoms' displacement + vector is calculated with fancy indexing on the anchors' displacement + vector. `index_extrapolate` saves which atoms belong to which anchors. + If there are two non-PCA atoms in the first anchor's residue and three + in the second anchor's residue, `index_extrapolate` is [0, 0, 1, 1, 1] + + Examples + -------- + Run PCA class before using this function. For backbone PCA, run:: + + pca = PCA(universe, select='backbone').run() + + Obtain a transformation function to project the + backbone trajectory onto the first principal component:: + + project = pca.project_single_frame(components=0) + + To project onto the first two components, run:: + + project = pca.project_single_frame(components=[0,1]) + + Alternatively, the transformation can be applied to PCA atoms and + extrapolated to other atoms according to the CA atom's translation + in each residue:: + + all = u.select_atoms('all') + project = pca.project_single_frame(components=0, + group=all, anchor='name CA') + + Finally, apply the transformation function to a timestep:: + + project(u.trajectory.ts) + + or apply the projection to the universe:: + + u.trajectory.add_transformations(project) + + + .. versionadded:: 2.2.0 + """ + if not self._calculated: + raise ValueError('Call run() on the PCA before projecting') + + if group is not None: + if anchor is None: + raise ValueError("'anchor' cannot be 'None'" + + " if 'group' is not 'None'") + + anchors = group.select_atoms(anchor) + anchors_res_ids = anchors.resindices + if np.unique(anchors_res_ids).size != anchors_res_ids.size: + raise ValueError("More than one 'anchor' found in residues") + if not np.isin(group.resindices, anchors_res_ids).all(): + raise ValueError("Some residues in 'group'" + + " do not have an 'anchor'") + if not anchors.issubset(self._atoms): + raise ValueError("Some 'anchors' are not part of PCA class") + + # non_pca has "all" the atoms in residues of `group`. This makes + # sure that extrapolation works on residues, not random atoms. + non_pca = group.residues.atoms - self._atoms + pca_res_indices, pca_res_counts = np.unique( + self._atoms.resindices, return_counts=True) + + non_pca_atoms = np.array([], dtype=int) + 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] + 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 + index_extrapolate = np.repeat(np.arange(anchors.atoms.n_atoms), + non_pca_atoms) + + if components is None: + components = np.arange(self.results.p_components.shape[1]) + + def wrapped(ts): + """Projects a timestep""" + if group is not None: + anchors_coords_old = anchors.positions + + xyz = self._atoms.positions.ravel() - self._xmean + self._atoms.positions = np.reshape( + (np.dot(np.dot(xyz, self._p_components[:, components]), + self._p_components[:, components].T) + + self._xmean), (-1, 3) + ) + + if group is not None: + non_pca.positions += (anchors.positions - + anchors_coords_old)[index_extrapolate] + return ts + return wrapped
+ +
[docs] @due.dcite( + Doi('10.1002/(SICI)1097-0134(19990901)36:4<419::AID-PROT5>3.0.CO;2-U'), + Doi('10.1529/biophysj.104.052449'), + description="RMSIP", + path='MDAnalysis.analysis.pca', + ) + def rmsip(self, other, n_components=None): + """Compute the root mean square inner product between subspaces. + + This is only symmetric if the number of components is the same for + both instances. The RMSIP effectively measures how + correlated the vectors of this instance are to those of ``other``. + + Please cite [Amadei1999]_ and [Leo-Macias2004]_ if you use this function. + + Parameters + ---------- + other : :class:`~MDAnalysis.analysis.pca.PCA` + Another PCA class. This must have already been run. + n_components : int or tuple of ints, optional + number of components to compute for the inner products. + ``None`` computes all of them. + + Returns + ------- + float: + Root mean square inner product of the selected subspaces. + 0 indicates that they are mutually orthogonal, whereas 1 indicates + that they are identical. + + Examples + -------- + + .. testsetup:: + + >>> import MDAnalysis as mda + >>> import MDAnalysis.analysis.pca as pca + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + + + You can compare the RMSIP between different intervals of the same trajectory. + For example, to compare similarity within the top three principal components: + + .. doctest:: + + >>> 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 + + + See also + -------- + :func:`~MDAnalysis.analysis.pca.rmsip` + + + .. versionadded:: 1.0.0 + """ + try: + a = self.results.p_components + except AttributeError: + raise ValueError('Call run() on the PCA before using rmsip') + + try: + b = other.results.p_components + except AttributeError: + if isinstance(other, type(self)): + raise ValueError( + 'Call run() on the other PCA before using rmsip') + else: + raise ValueError('other must be another PCA class') + + return rmsip(a.T, b.T, n_components=n_components)
+ +
[docs] @due.dcite( + Doi('10.1016/j.str.2007.12.011'), + description="Cumulative overlap", + path='MDAnalysis.analysis.pca', + ) + def cumulative_overlap(self, other, i=0, n_components=None): + """Compute the cumulative overlap of a vector in a subspace. + + This is not symmetric. The cumulative overlap measures the overlap of + the chosen vector in this instance, in the ``other`` subspace. + + Please cite [Yang2008]_ if you use this function. + + Parameters + ---------- + other : :class:`~MDAnalysis.analysis.pca.PCA` + Another PCA class. This must have already been run. + i : int, optional + The index of eigenvector to be analysed. + n_components : int, optional + number of components in ``other`` to compute for the cumulative overlap. + ``None`` computes all of them. + + Returns + ------- + float: + Cumulative overlap of the chosen vector in this instance to + the ``other`` subspace. 0 indicates that they are mutually + orthogonal, whereas 1 indicates that they are identical. + + See also + -------- + :func:`~MDAnalysis.analysis.pca.cumulative_overlap` + + + .. versionadded:: 1.0.0 + """ + + try: + a = self.results.p_components + except AttributeError: + raise ValueError( + 'Call run() on the PCA before using cumulative_overlap') + + try: + b = other.results.p_components + except AttributeError: + if isinstance(other, type(self)): + raise ValueError( + 'Call run() on the other PCA before using cumulative_overlap') + else: + raise ValueError('other must be another PCA class') + + return cumulative_overlap(a.T, b.T, i=i, n_components=n_components)
+ + +
[docs]def cosine_content(pca_space, i): + """Measure the cosine content of the PCA projection. + + The cosine content of pca projections can be used as an indicator if a + simulation is converged. Values close to 1 are an indicator that the + simulation isn't converged. For values below 0.7 no statement can be made. + If you use this function please cite :cite:p:`BerkHess2002`. + + + Parameters + ---------- + pca_space : array, shape (number of frames, number of components) + The PCA space to be analyzed. + i : int + The index of the pca_component projection to be analyzed. + + Returns + ------- + A float reflecting the cosine content of the ith projection in the PCA + space. The output is bounded by 0 and 1, with 1 reflecting an agreement + with cosine while 0 reflects complete disagreement. + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + BerkHess2002 + + """ + + t = np.arange(len(pca_space)) + T = len(pca_space) + cos = np.cos(np.pi * t * (i + 1) / T) + return ((2.0 / T) * (scipy.integrate.simps(cos*pca_space[:, i])) ** 2 / + scipy.integrate.simps(pca_space[:, i] ** 2))
+ + +
[docs]@due.dcite( + Doi('10.1002/(SICI)1097-0134(19990901)36:4<419::AID-PROT5>3.0.CO;2-U'), + Doi('10.1529/biophysj.104.052449'), + description="RMSIP", + path='MDAnalysis.analysis.pca', +) +def rmsip(a, b, n_components=None): + """Compute the root mean square inner product between subspaces. + + This is only symmetric if the number of components is the same for + ``a`` and ``b``. The RMSIP effectively measures how + correlated the vectors of ``a`` are to those of ``b``. + + Please cite [Amadei1999]_ and [Leo-Macias2004]_ if you use this function. + + Parameters + ---------- + a : array, shape (n_components, n_features) + The first subspace. Must have the same number of features as ``b``. + If you are using the results of :class:`~MDAnalysis.analysis.pca.PCA`, + this is the TRANSPOSE of ``p_components`` (i.e. ``p_components.T``). + b : array, shape (n_components, n_features) + The second subspace. Must have the same number of features as ``a``. + If you are using the results of :class:`~MDAnalysis.analysis.pca.PCA`, + this is the TRANSPOSE of ``p_components`` (i.e. ``p_components.T``). + n_components : int or tuple of ints, optional + number of components to compute for the inner products. + ``None`` computes all of them. + + Returns + ------- + float: + Root mean square inner product of the selected subspaces. + 0 indicates that they are mutually orthogonal, whereas 1 indicates + that they are identical. + + + Examples + -------- + + .. testsetup:: + + >>> import MDAnalysis as mda + >>> import MDAnalysis.analysis.pca as pca + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + + + You can compare the RMSIP between different intervals of the same trajectory. + For example, to compare similarity within the top three principal components: + + .. doctest:: + + >>> 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, + ... second_interval.results.p_components.T, + ... n_components=3) + 0.38147609331128324 + >>> pca.rmsip(first_interval.results.p_components.T, + ... last_interval.results.p_components.T, + ... n_components=3) + 0.17478244043688052 + + + .. versionadded:: 1.0.0 + """ + n_components = util.asiterable(n_components) + if len(n_components) == 1: + n_a = n_b = n_components[0] + elif len(n_components) == 2: + n_a, n_b = n_components + else: + raise ValueError('Too many values provided for n_components') + + if n_a is None: + n_a = len(a) + if n_b is None: + n_b = len(b) + + sip = np.matmul(a[:n_a], b[:n_b].T) ** 2 + msip = sip.sum()/n_a + return msip**0.5
+ + +
[docs]@due.dcite( + Doi('10.1016/j.str.2007.12.011'), + description="Cumulative overlap", + path='MDAnalysis.analysis.pca', +) +def cumulative_overlap(a, b, i=0, n_components=None): + """Compute the cumulative overlap of a vector in a subspace. + + This is not symmetric. The cumulative overlap measures the overlap of + the chosen vector in ``a``, in the ``b`` subspace. + + Please cite [Yang2008]_ if you use this function. + + Parameters + ---------- + a : array, shape (n_components, n_features) or vector, length n_features + The first subspace containing the vector of interest. Alternatively, + the actual vector. Must have the same number of features as ``b``. + b : array, shape (n_components, n_features) + The second subspace. Must have the same number of features as ``a``. + i : int, optional + The index of eigenvector to be analysed. + n_components : int, optional + number of components in ``b`` to compute for the cumulative overlap. + ``None`` computes all of them. + + Returns + ------- + float: + Cumulative overlap of the chosen vector in ``a`` to the ``b`` subspace. + 0 indicates that they are mutually orthogonal, whereas 1 indicates + that they are identical. + + + .. versionadded:: 1.0.0 + """ + + if len(a.shape) < len(b.shape): + a = a[np.newaxis, :] + + vec = a[i][np.newaxis, :] + vec_norm = (vec**2).sum() ** 0.5 + + if n_components is None: + n_components = len(b) + + b = b[:n_components] + b_norms = (b**2).sum(axis=1) ** 0.5 + + o = np.abs(np.matmul(vec, b.T)) / (b_norms*vec_norm) + return (o**2).sum() ** 0.5
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/polymer.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/polymer.html new file mode 100644 index 0000000000..5abde1e49f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/polymer.html @@ -0,0 +1,526 @@ + + + + + + MDAnalysis.analysis.polymer — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.polymer

+# -*- 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-2017 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
+#
+
+"""
+Polymer analysis --- :mod:`MDAnalysis.analysis.polymer`
+=======================================================
+
+
+:Author: Richard J. Gowers
+:Year: 2015, 2018
+:Copyright: GNU Public License v3
+
+This module contains various commonly used tools in analysing polymers.
+"""
+import numpy as np
+import scipy.optimize
+import warnings
+import logging
+
+from .. import NoDataError
+from ..core.groups import requires, AtomGroup
+from ..lib.distances import calc_bonds
+from .base import AnalysisBase
+
+logger = logging.getLogger(__name__)
+
+
+
[docs]@requires('bonds') +def sort_backbone(backbone): + """Rearrange a linear AtomGroup into backbone order + + Requires that the backbone has bond information, + and that only backbone atoms are provided (ie no side + chains or hydrogens). + + Parameters + ---------- + backbone : AtomGroup + the backbone atoms, not necessarily in order + + Returns + ------- + sorted_backbone : AtomGroup + backbone in order, so `sorted_backbone[i]` is bonded to + `sorted_backbone[i - 1]` and `sorted_backbone[i + 1]` + + + .. versionadded:: 0.20.0 + """ + if not backbone.n_fragments == 1: + raise ValueError("{} fragments found in backbone. " + "backbone must be a single contiguous AtomGroup" + "".format(backbone.n_fragments)) + + branches = [at for at in backbone + if len(at.bonded_atoms & backbone) > 2] + if branches: + # find which atom has too many bonds for easier debug + raise ValueError( + "Backbone is not linear. " + "The following atoms have more than two bonds in backbone: {}." + "".format(','.join(str(a) for a in branches))) + + caps = [atom for atom in backbone + if len(atom.bonded_atoms & backbone) == 1] + if not caps: + # cyclical structure + raise ValueError("Could not find starting point of backbone, " + "is the backbone cyclical?") + + # arbitrarily choose one of the capping atoms to be the startpoint + sorted_backbone = AtomGroup([caps[0]]) + + # iterate until the sorted chain length matches the backbone size + while len(sorted_backbone) < len(backbone): + # current end of the chain + end_atom = sorted_backbone[-1] + + # look at all bonded atoms which are also part of the backbone + # and subtract any that have already been added + next_atom = (end_atom.bonded_atoms & backbone) - sorted_backbone + + # append this to the sorted backbone + sorted_backbone += next_atom + + return sorted_backbone
+ + +
[docs]class PersistenceLength(AnalysisBase): + r"""Calculate the persistence length for polymer chains + + The persistence length is the length at which two points on the polymer + chain become decorrelated. This is determined by first measuring the + autocorrelation (:math:`C(n)`) of two bond vectors + (:math:`\mathbf{a}_i, \mathbf{a}_{i + n}`) separated by :math:`n` bonds + + .. math:: + + C(n) = \langle \cos\theta_{i, i+n} \rangle = + \langle \mathbf{a_i} \cdot \mathbf{a_{i+n}} \rangle + + An exponential decay is then fitted to this, which yields the + persistence length + + .. math:: + + C(n) \approx \exp\left( - \frac{n \bar{l_B}}{l_P} \right) + + where :math:`\bar{l_B}` is the average bond length, and :math:`l_P` is + the persistence length which is fitted + + Parameters + ---------- + atomgroups : iterable + List of AtomGroups. Each should represent a single + polymer chain, ordered in the correct order. + verbose : bool, optional + Show detailed progress of the calculation if set to ``True``. + + Attributes + ---------- + results.bond_autocorrelation : numpy.ndarray + the measured bond autocorrelation + results.lb : float + the average bond length + + .. versionadded:: 2.0.0 + + lb : float + + Alias to the :attr:`results.lb`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.lb` instead. + + results.x : numpy.ndarray + length of the decorrelation predicted by *lp* + + .. versionadded:: 2.0.0 + + results.lp : float + calculated persistence length + + .. versionadded:: 2.0.0 + + lp : float + + Alias to the :attr:`results.lp`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.lp` instead. + + results.fit : numpy.ndarray + the modelled backbone decorrelation predicted by *lp* + + .. versionadded:: 2.0.0 + + fit : float + + Alias to the :attr:`results.fit`. + + .. deprecated:: 2.0.0 + Will be removed in MDAnalysis 3.0.0. Please use + :attr:`results.fit` instead. + + See Also + -------- + :func:`sort_backbone` + for producing the sorted AtomGroup required for input. + + Example + ------- + .. code-block:: python + + from MDAnalysis.tests.datafiles import TRZ_psf, TRZ + import MDAnalysis as mda + from MDAnalysis.analysis import polymer + u = mda.Universe(TRZ_psf, TRZ) + + # this system is a pure polymer melt of polyamide, + # so we can select the chains by using the .fragments attribute + chains = u.atoms.fragments + + # select only the backbone atoms for each chain + backbones = [chain.select_atoms('not name O* H*') for chain in chains] + + # sort the chains, removing any non-backbone atoms + sorted_backbones = [polymer.sort_backbone(bb) for bb in backbones] + persistence_length = polymer.PersistenceLength(sorted_backbones) + + # Run the analysis, this will average over all polymer chains + # and all timesteps in trajectory + persistence_length = persistence_length.run() + print(f'The persistence length is: {persistence_length.results.lp}') + + # always check the visualisation of this: + persistence_length.plot() + + + .. versionadded:: 0.13.0 + .. versionchanged:: 0.20.0 + The run method now automatically performs the exponential fit + .. versionchanged:: 1.0.0 + Deprecated :meth:`PersistenceLength.perform_fit` has now been removed. + .. versionchanged:: 2.0.0 + Former ``results`` are now stored as ``results.bond_autocorrelation``. + :attr:`lb`, :attr:`lp`, :attr:`fit` are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + """ + def __init__(self, atomgroups, **kwargs): + super(PersistenceLength, self).__init__( + atomgroups[0].universe.trajectory, **kwargs) + self._atomgroups = atomgroups + + # Check that all chains are the same length + lens = [len(ag) for ag in atomgroups] + chainlength = len(atomgroups[0]) + if not all(l == chainlength for l in lens): + raise ValueError("Not all AtomGroups were the same size") + + self._results = np.zeros(chainlength - 1, dtype=np.float32) + + def _single_frame(self): + # could optimise this by writing a "self dot array" + # we're only using the upper triangle of np.inner + # function would accept a bunch of coordinates and spit out the + # decorrel for that + n = len(self._atomgroups[0]) + + for chain in self._atomgroups: + # Vector from each atom to next + vecs = chain.positions[1:] - chain.positions[:-1] + # Normalized to unit vectors + vecs /= np.sqrt((vecs * vecs).sum(axis=1))[:, None] + + inner_pr = np.inner(vecs, vecs) + for i in range(n-1): + self._results[:(n-1)-i] += inner_pr[i, i:] + + @property + def lb(self): + wmsg = ("The `lb` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.variance` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.lb + + @property + def lp(self): + wmsg = ("The `lp` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.variance` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.lp + + @property + def fit(self): + wmsg = ("The `fit` attribute was deprecated in " + "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " + "Please use `results.variance` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.fit + + def _conclude(self): + n = len(self._atomgroups[0]) + + norm = np.linspace(n - 1, 1, n - 1) + norm *= len(self._atomgroups) * self.n_frames + + self.results.bond_autocorrelation = self._results / norm + self._calc_bond_length() + + self._perform_fit() + + def _calc_bond_length(self): + """calculate average bond length""" + bs = [] + for ag in self._atomgroups: + pos = ag.positions + b = calc_bonds(pos[:-1], pos[1:]).mean() + bs.append(b) + self.results.lb = np.mean(bs) + + def _perform_fit(self): + """Fit the results to an exponential decay""" + try: + self.results.bond_autocorrelation + except AttributeError: + raise NoDataError("Use the run method first") from None + self.results.x = self.results.lb *\ + np.arange(len(self.results.bond_autocorrelation)) + + self.results.lp = fit_exponential_decay(self.results.x, + self.results.bond_autocorrelation) + + self.results.fit = np.exp(-self.results.x/self.results.lp) + +
[docs] def plot(self, ax=None): + """Visualize the results and fit + + Parameters + ---------- + ax : matplotlib.Axes, optional + if provided, the graph is plotted on this axis + + Returns + ------- + ax : the axis that the graph was plotted on + """ + import matplotlib.pyplot as plt + if ax is None: + fig, ax = plt.subplots() + ax.plot(self.results.x, + self.results.bond_autocorrelation, + 'ro', + label='Result') + ax.plot(self.results.x, + self.results.fit, + label='Fit') + ax.set_xlabel(r'x') + ax.set_ylabel(r'$C(x)$') + ax.set_xlim(0.0, 40 * self.results.lb) + + ax.legend(loc='best') + + return ax
+ + +
[docs]def fit_exponential_decay(x, y): + r"""Fit a function to an exponential decay + + .. math:: y = \exp\left(- \frac{x}{a}\right) + + Parameters + ---------- + x, y : array_like + The two arrays of data + + Returns + ------- + a : float + The coefficient *a* for this decay + + Notes + ----- + This function assumes that data starts at 1.0 and decays to 0.0 + + """ + def expfunc(x, a): + return np.exp(-x/a) + + a = scipy.optimize.curve_fit(expfunc, x, y)[0][0] + + return a
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/psa.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/psa.html new file mode 100644 index 0000000000..7762e482e2 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/psa.html @@ -0,0 +1,2382 @@ + + + + + + MDAnalysis.analysis.psa — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.psa

+# -*- 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-2017 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
+#
+
+r"""
+Calculating path similarity --- :mod:`MDAnalysis.analysis.psa`
+==========================================================================
+
+:Author: Sean Seyler
+:Year: 2015
+:Copyright: GNU Public License v3
+
+.. versionadded:: 0.10.0
+
+The module contains code to calculate the geometric similarity of trajectories
+using path metrics such as the Hausdorff or Fréchet distances
+:cite:p:`Seyler2015`. The path metrics are functions of two paths and return a
+nonnegative number, i.e., a distance. Two paths are identical if their distance
+is zero, and large distances indicate dissimilarity. Each path metric is a
+function of the individual points (e.g., coordinate snapshots) that comprise
+each path and, loosely speaking, identify the two points, one per path of a
+pair of paths, where the paths deviate the most.  The distance between these
+points of maximal deviation is measured by the root mean square deviation
+(RMSD), i.e., to compute structural similarity.
+
+One typically computes the pairwise similarity for an ensemble of paths to
+produce a symmetric distance matrix, which can be clustered to, at a glance,
+identify patterns in the trajectory data. To properly analyze a path ensemble,
+one must select a suitable reference structure to which all paths (each
+conformer in each path) will be universally aligned using the rotations
+determined by the best-fit rmsds. Distances between paths and their structures
+are then computed directly with no further alignment. This pre-processing step
+is necessary to preserve the metric properties of the Hausdorff and Fréchet
+metrics; using the best-fit rmsd on a pairwise basis does not generally
+preserve the triangle inequality.
+
+Note
+----
+The `PSAnalysisTutorial`_ outlines a typical application of PSA to
+a set of trajectories, including doing proper alignment,
+performing distance comparisons, and generating heat
+map-dendrogram plots from hierarchical clustering.
+
+
+.. Rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Seyler2015
+
+.. _`PSAnalysisTutorial`: https://github.com/Becksteinlab/PSAnalysisTutorial
+
+
+Helper functions and variables
+------------------------------
+The following convenience functions are used by other functions in this module.
+
+.. autofunction:: sqnorm
+.. autofunction:: get_msd_matrix
+.. autofunction:: get_coord_axes
+
+
+Classes, methods, and functions
+-------------------------------
+
+.. autofunction:: get_path_metric_func
+.. autofunction:: hausdorff
+.. autofunction:: hausdorff_wavg
+.. autofunction:: hausdorff_avg
+.. autofunction:: hausdorff_neighbors
+.. autofunction:: discrete_frechet
+.. autofunction:: dist_mat_to_vec
+
+.. autoclass:: Path
+   :members:
+
+   .. attribute:: u_original
+
+      :class:`MDAnalysis.Universe` object with a trajectory
+
+   .. attribute:: u_reference
+
+      :class:`MDAnalysis.Universe` object containing a reference structure
+
+   .. attribute:: select
+
+      string, selection for
+      :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` to select frame
+      from :attr:`Path.u_reference`
+
+   .. attribute:: path_select
+
+      string, selection for
+      :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` to select atoms
+      to compose :attr:`Path.path`
+
+   .. attribute:: ref_frame
+
+      int, frame index to select frame from :attr:`Path.u_reference`
+
+   .. attribute:: u_fitted
+
+      :class:`MDAnalysis.Universe` object with the fitted trajectory
+
+   .. attribute:: path
+
+      :class:`numpy.ndarray` object representation of the fitted trajectory
+
+.. autoclass:: PSAPair
+
+   .. attribute:: npaths
+
+      int, total number of paths in the comparison in which *this*
+      :class:`PSAPair` was generated
+
+   .. attribute:: matrix_id
+
+      (int, int), (row, column) indices of the location of *this*
+      :class:`PSAPair` in the corresponding pairwise distance matrix
+
+   .. attribute:: pair_id
+
+      int, ID of *this* :class:`PSAPair` (the pair_id:math:`^\text{th}`
+      comparison) in the distance vector corresponding to the pairwise distance
+      matrix
+
+   .. attribute:: nearest_neighbors
+
+      dict, contains the nearest neighbors by frame index and the
+      nearest neighbor distances for each path in *this* :class:`PSAPair`
+
+   .. attribute:: hausdorff_pair
+
+      dict, contains the frame indices of the Hausdorff pair for each path in
+      *this* :class:`PSAPair` and the corresponding (Hausdorff) distance
+
+.. autoclass:: PSAnalysis
+   :members:
+
+   .. attribute:: universes
+
+      list of :class:`MDAnalysis.Universe` objects containing trajectories
+
+   .. attribute:: u_reference
+
+      :class:`MDAnalysis.Universe` object containing a reference structure
+
+   .. attribute:: select
+
+      string, selection for
+      :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` to select frame
+      from :attr:`PSAnalysis.u_reference`
+
+   .. attribute:: path_select
+
+      string, selection for
+      :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` to select atoms
+      to compose :attr:`Path.path`
+
+   .. attribute:: ref_frame
+
+      int, frame index to select frame from :attr:`Path.u_reference`
+
+   .. attribute:: paths
+
+      list of :class:`numpy.ndarray` objects representing the set/ensemble of
+      fitted trajectories
+
+   .. attribute:: D
+
+      :class:`numpy.ndarray` which stores the calculated distance matrix
+
+
+.. Markup definitions
+.. ------------------
+..
+.. |3Dp| replace:: :math:`N_p \times N \times 3`
+.. |2Dp| replace:: :math:`N_p \times (3N)`
+.. |3Dq| replace:: :math:`N_q \times N \times 3`
+.. |2Dq| replace:: :math:`N_q \times (3N)`
+.. |3D| replace:: :math:`N_p\times N\times 3`
+.. |2D| replace:: :math:`N_p\times 3N`
+.. |Np| replace:: :math:`N_p`
+
+"""
+import pickle
+import os
+import warnings
+import numbers
+
+import numpy as np
+from scipy import spatial, cluster
+from scipy.spatial.distance import directed_hausdorff
+import matplotlib
+
+import MDAnalysis
+import MDAnalysis.analysis.align
+from MDAnalysis import NoDataError
+from MDAnalysis.lib.util import deprecate
+
+import logging
+logger = logging.getLogger('MDAnalysis.analysis.psa')
+
+
+from ..due import due, Doi
+
+due.cite(Doi("10.1371/journal.pcbi.1004568"),
+         description="Path Similarity Analysis algorithm and implementation",
+         path="MDAnalysis.analysis.psa",
+         cite_module=True)
+del Doi
+
+
+
[docs]def get_path_metric_func(name): + """Selects a path metric function by name. + + Parameters + ---------- + name : str + name of path metric + + Returns + ------- + path_metric : function + The path metric function specified by *name* (if found). + """ + path_metrics = { + 'hausdorff' : hausdorff, + 'weighted_average_hausdorff' : hausdorff_wavg, + 'average_hausdorff' : hausdorff_avg, + 'hausdorff_neighbors' : hausdorff_neighbors, + 'discrete_frechet' : discrete_frechet + } + try: + return path_metrics[name] + except KeyError as key: + errmsg = (f'Path metric "{key}" not found. Valid selections: ' + f'{" ".join(n for n in path_metrics.keys())}') + raise KeyError(errmsg) from None
+ + +
[docs]def sqnorm(v, axis=None): + """Compute the sum of squares of elements along specified axes. + + Parameters + ---------- + v : numpy.ndarray + coordinates + axes : None / int / tuple (optional) + Axes or axes along which a sum is performed. The default + (*axes* = ``None``) performs a sum over all the dimensions of + the input array. The value of *axes* may be negative, in + which case it counts from the last axis to the zeroth axis. + + Returns + ------- + float + the sum of the squares of the elements of `v` along `axes` + + """ + return np.sum(v*v, axis=axis)
+ + +
[docs]def get_msd_matrix(P, Q, axis=None): + r"""Generate the matrix of pairwise mean-squared deviations between paths. + + The MSDs between all pairs of points in `P` and `Q` are + calculated, each pair having a point from `P` and a point from + `Q`. + + `P` (`Q`) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). The pairwise MSD + matrix has dimensions :math:`N_p` by :math:`N_q`. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + msd_matrix : numpy.ndarray + matrix of pairwise MSDs between points in `P` and points + in `Q` + + Notes + ----- + We calculate the MSD matrix + + .. math:: + M_{ij} = ||p_i - q_j||^2 + + where :math:`p_i \in P` and :math:`q_j \in Q`. + """ + return np.asarray([sqnorm(p - Q, axis=axis) for p in P])
+ + +def reshaper(path, axis): + """Flatten path when appropriate to facilitate calculations + requiring two dimensional input. + """ + if len(axis) > 1: + path = path.reshape(len(path), -1) + return path + +
[docs]def get_coord_axes(path): + """Return the number of atoms and the axes corresponding to atoms + and coordinates for a given path. + + The `path` is assumed to be a :class:`numpy.ndarray` where the 0th axis + corresponds to a frame (a snapshot of coordinates). The :math:`3N` + (Cartesian) coordinates are assumed to be either: + + 1. all in the 1st axis, starting with the x,y,z coordinates of the + first atom, followed by the *x*,*y*,*z* coordinates of the 2nd, etc. + 2. in the 1st *and* 2nd axis, where the 1st axis indexes the atom + number and the 2nd axis contains the *x*,*y*,*z* coordinates of + each atom. + + Parameters + ---------- + path : numpy.ndarray + representing a path + + Returns + ------- + (int, (int, ...)) + the number of atoms and the axes containing coordinates + + """ + path_dimensions = len(path.shape) + if path_dimensions == 3: + N = path.shape[1] + axis = (1,2) # 1st axis: atoms, 2nd axis: x,y,z coords + elif path_dimensions == 2: + # can use mod to check if total # coords divisible by 3 + N = path.shape[1] / 3 + axis = (1,) # 1st axis: 3N structural coords (x1,y1,z1,...,xN,xN,zN) + else: + raise ValueError("Path must have 2 or 3 dimensions; the first " + "dimensions (axis 0) must correspond to frames, " + "axis 1 (and axis 2, if present) must contain atomic " + "coordinates.") + return N, axis
+ + +
[docs]def hausdorff(P, Q): + r"""Calculate the symmetric Hausdorff distance between two paths. + + The metric used is RMSD, as opposed to the more conventional L2 + (Euclidean) norm, because this is convenient for i.e., comparing + protein configurations. + + *P* (*Q*) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). *P* (*Q*) has + either shape |3Dp| (|3Dq|), or |2Dp| (|2Dq|) in flattened form. + + Note that reversing the path does not change the Hausdorff distance. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + float + the Hausdorff distance between paths `P` and `Q` + + Example + ------- + Calculate the Hausdorff distance between two halves of a trajectory: + + >>> import MDAnalysis as mda + >>> import numpy + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> from MDAnalysis.analysis import psa + >>> u = mda.Universe(PSF,DCD) + >>> mid = int(len(u.trajectory)/2) + >>> ca = u.select_atoms('name CA') + >>> P = numpy.array([ + ... ca.positions for _ in u.trajectory[:mid:] + ... ]) # first half of trajectory + >>> Q = numpy.array([ + ... ca.positions for _ in u.trajectory[mid::] + ... ]) # second half of trajectory + >>> psa.hausdorff(P,Q) + 4.778663899862152 + >>> psa.hausdorff(P,Q[::-1]) # hausdorff distance w/ reversed 2nd trajectory + 4.778663899862152 + + + Notes + ----- + :func:`scipy.spatial.distance.directed_hausdorff` is an optimized + implementation of the early break algorithm of :cite:p:`Taha2015`; the + latter code is used here to calculate the symmetric Hausdorff + distance with an RMSD metric + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + Taha2015 + + """ + N_p, axis_p = get_coord_axes(P) + N_q, axis_q = get_coord_axes(Q) + + if N_p != N_q: + raise ValueError("P and Q must have matching sizes") + + P = reshaper(P, axis_p) + Q = reshaper(Q, axis_q) + + return max(directed_hausdorff(P, Q)[0], + directed_hausdorff(Q, P)[0]) / np.sqrt(N_p)
+ + +
[docs]def hausdorff_wavg(P, Q): + r"""Calculate the weighted average Hausdorff distance between two paths. + + *P* (*Q*) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). *P* (*Q*) has + either shape |3Dp| (|3Dq|), or |2Dp| (|2Dq|) in flattened form. The nearest + neighbor distances for *P* (to *Q*) and those of *Q* (to *P*) are averaged + individually to get the average nearest neighbor distance for *P* and + likewise for *Q*. These averages are then summed and divided by 2 to get a + measure that gives equal weight to *P* and *Q*. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + float + the weighted average Hausdorff distance between paths `P` and `Q` + + Example + ------- + + >>> import MDAnalysis as mda + >>> from MDAnalysis import Universe + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> from MDAnalysis.analysis import psa + >>> u = mda.Universe(PSF,DCD) + >>> mid = int(len(u.trajectory)/2) + >>> ca = u.select_atoms('name CA') + >>> P = numpy.array([ + ... ca.positions for _ in u.trajectory[:mid:] + ... ]) # first half of trajectory + >>> Q = numpy.array([ + ... ca.positions for _ in u.trajectory[mid::] + ... ]) # second half of trajectory + >>> psa.hausdorff_wavg(P,Q) + 2.5669644353703447 + >>> psa.hausdorff_wavg(P,Q[::-1]) # weighted avg hausdorff dist w/ Q reversed + 2.5669644353703447 + + Notes + ----- + The weighted average Hausdorff distance is not a true metric (it does not + obey the triangle inequality); see :cite:p:`Seyler2015` for further + details. + + + """ + N, axis = get_coord_axes(P) + d = get_msd_matrix(P, Q, axis=axis) + out = 0.5*( np.mean(np.amin(d,axis=0)) + np.mean(np.amin(d,axis=1)) ) + return ( out / N )**0.5
+ + +
[docs]def hausdorff_avg(P, Q): + r"""Calculate the average Hausdorff distance between two paths. + + *P* (*Q*) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). *P* (*Q*) has + either shape |3Dp| (|3Dq|), or |2Dp| (|2Dq|) in flattened form. The nearest + neighbor distances for *P* (to *Q*) and those of *Q* (to *P*) are all + averaged together to get a mean nearest neighbor distance. This measure + biases the average toward the path that has more snapshots, whereas weighted + average Hausdorff gives equal weight to both paths. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + float + the average Hausdorff distance between paths `P` and `Q` + + Example + ------- + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> from MDAnalysis.analysis import psa + >>> u = mda.Universe(PSF,DCD) + >>> mid = int(len(u.trajectory)/2) + >>> ca = u.select_atoms('name CA') + >>> P = numpy.array([ + ... ca.positions for _ in u.trajectory[:mid:] + ... ]) # first half of trajectory + >>> Q = numpy.array([ + ... ca.positions for _ in u.trajectory[mid::] + ... ]) # second half of trajectory + >>> psa.hausdorff_avg(P,Q) + 2.5669646575869005 + >>> psa.hausdorff_avg(P,Q[::-1]) # hausdorff distance w/ reversed 2nd trajectory + 2.5669646575869005 + + + Notes + ----- + The average Hausdorff distance is not a true metric (it does not obey the + triangle inequality); see :cite:p:`Seyler2015` for further details. + + """ + N, axis = get_coord_axes(P) + d = get_msd_matrix(P, Q, axis=axis) + out = np.mean( np.append( np.amin(d,axis=0), np.amin(d,axis=1) ) ) + return ( out / N )**0.5
+ + +
[docs]def hausdorff_neighbors(P, Q): + r"""Find the Hausdorff neighbors of two paths. + + *P* (*Q*) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). *P* (*Q*) has + either shape |3Dp| (|3Dq|), or |2Dp| (|2Dq|) in flattened form. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + dict + dictionary of two pairs of numpy arrays, the first pair (key + "frames") containing the indices of (Hausdorff) nearest + neighbors for `P` and `Q`, respectively, the second (key + "distances") containing (corresponding) nearest neighbor + distances for `P` and `Q`, respectively + + Notes + ----- + - Hausdorff neighbors are those points on the two paths that are separated by + the Hausdorff distance. They are the farthest nearest neighbors and are + maximally different in the sense of the Hausdorff distance + :cite:p:`Seyler2015`. + - :func:`scipy.spatial.distance.directed_hausdorff` can also provide the + hausdorff neighbors. + + """ + N, axis = get_coord_axes(P) + d = get_msd_matrix(P, Q, axis=axis) + nearest_neighbors = { + 'frames' : (np.argmin(d, axis=1), np.argmin(d, axis=0)), + 'distances' : ((np.amin(d,axis=1)/N)**0.5, (np.amin(d, axis=0)/N)**0.5) + } + return nearest_neighbors
+ + +
[docs]def discrete_frechet(P, Q): + r"""Calculate the discrete Fréchet distance between two paths. + + *P* (*Q*) is a :class:`numpy.ndarray` of :math:`N_p` (:math:`N_q`) time + steps, :math:`N` atoms, and :math:`3N` coordinates (e.g., + :attr:`MDAnalysis.core.groups.AtomGroup.positions`). *P* (*Q*) has + either shape |3Dp| (|3Dq|), or :|2Dp| (|2Dq|) in flattened form. + + Parameters + ---------- + P : numpy.ndarray + the points in the first path + Q : numpy.ndarray + the points in the second path + + Returns + ------- + float + the discrete Fréchet distance between paths *P* and *Q* + + Example + ------- + Calculate the discrete Fréchet distance between two halves of a + trajectory. + + >>> import MDAnalysis as mda + >>> import numpy as np + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> from MDAnalysis.analysis import psa + >>> u = mda.Universe(PSF,DCD) + >>> mid = int(len(u.trajectory)/2) + >>> ca = u.select_atoms('name CA') + >>> P = np.array([ + ... ca.positions for _ in u.trajectory[:mid:] + ... ]) # first half of trajectory + >>> Q = np.array([ + ... ca.positions for _ in u.trajectory[mid::] + ... ]) # second half of trajectory + >>> psa.discrete_frechet(P,Q) + 4.778663984013591 + >>> psa.discrete_frechet(P,Q[::-1]) # frechet distance w/ 2nd trj reversed 2nd + 6.842901117711383 + + Note that reversing the direction increased the Fréchet distance: + it is sensitive to the direction of the path. + + Notes + ----- + + The discrete Fréchet metric is an approximation to the continuous Fréchet + metric :cite:p:`Frechet1906,Alt1995`. The calculation of the continuous + Fréchet distance is implemented with the dynamic programming algorithm of + :cite:p:`EiterMannila1994,EiterMannila1997`. + + + References + ---------- + + .. bibliography:: + :filter: False + :style: MDA + + Frechet1906 + Alt1995 + EiterMannila1994 + EiterMannila1997 + + + """ + + N, axis = get_coord_axes(P) + Np, Nq = len(P), len(Q) + d = get_msd_matrix(P, Q, axis=axis) + ca = -np.ones((Np, Nq)) + + def c(i, j): + """Compute the coupling distance for two partial paths formed by *P* and + *Q*, where both begin at frame 0 and end (inclusive) at the respective + frame indices :math:`i-1` and :math:`j-1`. The partial path of *P* (*Q*) + up to frame *i* (*j*) is formed by the slicing ``P[0:i]`` (``Q[0:j]``). + + :func:`c` is called recursively to compute the coupling distance + between the two full paths *P* and *Q* (i.e., the discrete Frechet + distance) in terms of coupling distances between their partial paths. + + Parameters + ---------- + i : int + partial path of *P* through final frame *i-1* + j : int + partial path of *Q* through final frame *j-1* + + Returns + ------- + dist : float + the coupling distance between partial paths `P[0:i]` and `Q[0:j]` + """ + if ca[i,j] != -1 : + return ca[i,j] + if i > 0: + if j > 0: + ca[i,j] = max( min(c(i-1,j),c(i,j-1),c(i-1,j-1)), d[i,j] ) + else: + ca[i,j] = max( c(i-1,0), d[i,0] ) + elif j > 0: + ca[i,j] = max( c(0,j-1), d[0,j] ) + else: + ca[i,j] = d[0,0] + return ca[i,j] + + return (c(Np-1, Nq-1) / N)**0.5
+ + +
[docs]def dist_mat_to_vec(N, i, j): + """Convert distance matrix indices (in the upper triangle) to the index of + the corresponding distance vector. + + This is a convenience function to locate distance matrix elements (and the + pair generating it) in the corresponding distance vector. The row index *j* + should be greater than *i+1*, corresponding to the upper triangle of the + distance matrix. + + Parameters + ---------- + N : int + size of the distance matrix (of shape *N*-by-*N*) + i : int + row index (starting at 0) of the distance matrix + j : int + column index (starting at 0) of the distance matrix + + Returns + ------- + int + index (of the matrix element) in the corresponding distance vector + + """ + + if not (isinstance(N, numbers.Integral) and isinstance(i, numbers.Integral) + and isinstance(j, numbers.Integral)): + raise ValueError("N, i, j all must be of type int") + + if i < 0 or j < 0 or N < 2: + raise ValueError("Matrix indices are invalid; i and j must be greater " + "than 0 and N must be greater the 2") + + if (j > i and (i > N - 1 or j > N)) or (j < i and (i > N or j > N - 1)): + raise ValueError("Matrix indices are out of range; i and j must be " + "less than N = {0:d}".format(N)) + if j > i: + return (N*i) + j - (i+2)*(i+1) // 2 # old-style division for int output + elif j < i: + warnings.warn("Column index entered (j = {:d} is smaller than row " + "index (i = {:d}). Using symmetric element in upper " + "triangle of distance matrix instead: i --> j, " + "j --> i".format(j, i)) + return (N*j) + i - (j+2)*(j+1) // 2 # old-style division for int output + else: + raise ValueError("Error in processing matrix indices; i and j must " + "be integers less than integer N = {0:d} such that" + " j >= i+1.".format(N))
+ + +
[docs]class Path(object): + """Represent a path based on a :class:`~MDAnalysis.core.universe.Universe`. + + Pre-process a :class:`Universe` object: (1) fit the trajectory to a + reference structure, (2) convert fitted time series to a + :class:`numpy.ndarray` representation of :attr:`Path.path`. + + The analysis is performed with :meth:`PSAnalysis.run` and stores the result + in the :class:`numpy.ndarray` distance matrix :attr:`PSAnalysis.D`. + :meth:`PSAnalysis.run` also generates a fitted trajectory and path from + alignment of the original trajectories to a reference structure. + + .. versionadded:: 0.9.1 + + """ + + def __init__(self, universe, reference, select='name CA', + path_select='all', ref_frame=0): + """Setting up trajectory alignment and fitted path generation. + + Parameters + ---------- + universe : Universe + :class:`MDAnalysis.Universe` object containing a trajectory + reference : Universe + reference structure (uses `ref_frame` from the trajectory) + select : str or dict or tuple (optional) + The selection to operate on for rms fitting; can be one of: + + 1. any valid selection string for + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` that + produces identical selections in *mobile* and *reference*; or + 2. a dictionary ``{'mobile':sel1, 'reference':sel2}`` (the + :func:`MDAnalysis.analysis.align.fasta2select` function returns + such a dictionary based on a ClustalW_ or STAMP_ sequence + alignment); or + 3. a tuple ``(sel1, sel2)`` + + When using 2. or 3. with *sel1* and *sel2* then these selections + can also each be a list of selection strings (to generate an + AtomGroup with defined atom order as described under + :ref:`ordered-selections-label`). + ref_frame : int + frame index to select the coordinate frame from + `select.trajectory` + path_select : selection_string + atom selection composing coordinates of (fitted) path; if ``None`` + then `path_select` is set to `select` [``None``] + + """ + self.u_original = universe + self.u_reference = reference + self.select = select + self.ref_frame = ref_frame + self.path_select = path_select + + self.top_name = self.u_original.filename + self.trj_name = self.u_original.trajectory.filename + self.newtrj_name = None + self.u_fitted = None + self.path = None + self.natoms = None + +
[docs] def fit_to_reference(self, filename=None, prefix='', postfix='_fit', + rmsdfile=None, targetdir=os.path.curdir, + weights=None, tol_mass=0.1): + """Align each trajectory frame to the reference structure + + Parameters + ---------- + filename : str (optional) + file name for the RMS-fitted trajectory or pdb; defaults to the + original trajectory filename (from :attr:`Path.u_original`) with + `prefix` prepended + prefix : str (optional) + prefix for auto-generating the new output filename + rmsdfile : str (optional) + file name for writing the RMSD time series [``None``] + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses as weights; with + ``None`` weigh each atom equally. If a float array of the same + length as the selected AtomGroup is provided, use each element of + the `array_like` as a weight for the corresponding atom in the + AtomGroup. + tol_mass : float (optional) + Reject match if the atomic masses for matched atoms differ by more + than `tol_mass` [0.1] + + Returns + ------- + Universe + :class:`MDAnalysis.Universe` object containing a fitted trajectory + + Notes + ----- + Uses :class:`MDAnalysis.analysis.align.AlignTraj` for the fitting. + + + .. deprecated:: 0.16.1 + Instead of ``mass_weighted=True`` use new ``weights='mass'``; + refactored to fit with AnalysisBase API + + .. versionchanged:: 0.17.0 + Deprecated keyword `mass_weighted` was removed. + """ + head, tail = os.path.split(self.trj_name) + oldname, ext = os.path.splitext(tail) + filename = filename or oldname + self.newtrj_name = os.path.join(targetdir, filename + postfix + ext) + self.u_reference.trajectory[self.ref_frame] # select frame from ref traj + aligntrj = MDAnalysis.analysis.align.AlignTraj(self.u_original, + self.u_reference, + select=self.select, + filename=self.newtrj_name, + prefix=prefix, + weights=weights, + tol_mass=tol_mass).run() + if rmsdfile is not None: + aligntrj.save(rmsdfile) + return MDAnalysis.Universe(self.top_name, self.newtrj_name)
+ +
[docs] def to_path(self, fitted=False, select=None, flat=False): + r"""Generates a coordinate time series from the fitted universe + trajectory. + + Given a selection of *N* atoms from *select*, the atomic positions for + each frame in the fitted universe (:attr:`Path.u_fitted`) trajectory + (with |Np| total frames) are appended sequentially to form a 3D or 2D + (if *flat* is ``True``) :class:`numpy.ndarray` representation of the + fitted trajectory (with dimensions |3D| or |2D|, respectively). + + Parameters + ---------- + fitted : bool (optional) + construct a :attr:`Path.path` from the :attr:`Path.u_fitted` + trajectory; if ``False`` then :attr:`Path.path` is generated with + the trajectory from :attr:`Path.u_original` [``False``] + select : str (optional) + the selection for constructing the coordinates of each frame in + :attr:`Path.path`; if ``None`` then :attr:`Path.path_select` + is used, else it is overridden by *select* [``None``] + flat : bool (optional) + represent :attr:`Path.path` as a 2D (|2D|) :class:`numpy.ndarray`; + if ``False`` then :attr:`Path.path` is a 3D (|3D|) + :class:`numpy.ndarray` [``False``] + + Returns + ------- + numpy.ndarray + representing a time series of atomic positions of an + :class:`MDAnalysis.core.groups.AtomGroup` selection from + :attr:`Path.u_fitted.trajectory` + + """ + select = select if select is not None else self.path_select + if fitted: + if not isinstance(self.u_fitted, MDAnalysis.Universe): + raise TypeError("Fitted universe not found. Generate a fitted " + + "universe with fit_to_reference() first, or explicitly "+ + "set argument \"fitted\" to \"False\" to generate a " + + "path from the original universe.") + u = self.u_fitted + else: + u = self.u_original + frames = u.trajectory + atoms = u.select_atoms(select) + self.natoms = len(atoms) + frames.rewind() + if flat: + return np.array([atoms.positions.flatten() for _ in frames]) + else: + return np.array([atoms.positions for _ in frames])
+ +
[docs] def run(self, align=False, filename=None, postfix='_fit', rmsdfile=None, + targetdir=os.path.curdir, weights=None, tol_mass=0.1, + flat=False): + r"""Generate a path from a trajectory and reference structure. + + As part of the path generation, the trajectory can be superimposed + ("aligned") to a reference structure if specified. + + This is a convenience method to generate a fitted trajectory from an + inputted universe (:attr:`Path.u_original`) and reference structure + (:attr:`Path.u_reference`). :meth:`Path.fit_to_reference` and + :meth:`Path.to_path` are used consecutively to generate a new universe + (:attr:`Path.u_fitted`) containing the fitted trajectory along with the + corresponding :attr:`Path.path` represented as an + :class:`numpy.ndarray`. The method returns a tuple of the topology name + and new trajectory name, which can be fed directly into an + :class:`MDAnalysis.Universe` object after unpacking the tuple using the + ``*`` operator, as in + ``MDAnalysis.Universe(*(top_name, newtraj_name))``. + + Parameters + ---------- + align : bool (optional) + Align trajectory to atom selection :attr:`Path.select` of + :attr:`Path.u_reference`. If ``True``, a universe containing an + aligned trajectory is produced with :meth:`Path.fit_to_reference` + [``False``] + filename : str (optional) + filename for the RMS-fitted trajectory or pdb; defaults to the + original trajectory filename (from :attr:`Path.u_original`) with + *prefix* prepended + postfix : str (optional) + prefix for auto-generating the new output filename + rmsdfile : str (optional) + file name for writing the RMSD time series [``None``] + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses as weights; with + ``None`` weigh each atom equally. If a float array of the same + length as the selected AtomGroup is provided, use each element of + the `array_like` as a weight for the corresponding atom in the + AtomGroup. + tol_mass : float (optional) + Reject match if the atomic masses for matched atoms differ by more + than *tol_mass* [0.1] + flat : bool (optional) + represent :attr:`Path.path` with 2D (|2D|) :class:`numpy.ndarray`; + if ``False`` then :attr:`Path.path` is a 3D (|3D|) + :class:`numpy.ndarray` [``False``] + + Returns + ------- + topology_trajectory : tuple + A tuple of the topology name and new trajectory name. + + + .. deprecated:: 0.16.1 + Instead of ``mass_weighted=True`` use new ``weights='mass'``; + refactored to fit with AnalysisBase API + + .. versionchanged:: 0.17.0 + Deprecated keyword `mass_weighted` was removed. + """ + if align: + self.u_fitted = self.fit_to_reference( + filename=filename, postfix=postfix, + rmsdfile=rmsdfile, targetdir=targetdir, + weights=weights, tol_mass=0.1) + self.path = self.to_path(fitted=align, flat=flat) + return self.top_name, self.newtrj_name
+ +
[docs] def get_num_atoms(self): + """Return the number of atoms used to construct the :class:`Path`. + + Must run :meth:`Path.to_path` prior to calling this method. + + Returns + ------- + int + the number of atoms in the :class:`Path` + + + """ + if self.natoms is None: + raise ValueError("No path data; do 'Path.to_path()' first.") + return self.natoms
+ + +
[docs]class PSAPair(object): + """Generate nearest neighbor and Hausdorff pair information between a pair + of paths from an all-pairs comparison generated by :class:`PSA`. + + The nearest neighbors for each path of a pair of paths is generated by + :meth:`PSAPair.compute_nearest_neighbors` and stores the result + in a dictionary (:attr:`nearest_neighbors`): each path has a + :class:`numpy.ndarray` of the frames of its nearest neighbors, and a + :class:`numpy.ndarray` of its nearest neighbor distances + :attr:`PSAnalysis.D`. For example, *nearest_neighbors['frames']* is a pair + of :class:`numpy.ndarray`, the first being the frames of the nearest + neighbors of the first path, *i*, the second being those of the second path, + *j*. + + The Hausdorff pair for the pair of paths is found by calling + :meth:`find_hausdorff_pair` (locates the nearest neighbor pair having the + largest overall distance separating them), which stores the result in a + dictionary (:attr:`hausdorff_pair`) containing the frames (indices) of the + pair along with the corresponding (Hausdorff) distance. + *hausdorff_pair['frame']* contains a pair of frames in the first path, *i*, + and the second path, *j*, respectively, that correspond to the Hausdorff + distance between them. + + .. versionadded:: 0.11 + """ + + def __init__(self, npaths, i, j): + """Set up a :class:`PSAPair` for a pair of paths that are part of a + :class:`PSA` comparison of *npaths* total paths. + + Each unique pair of paths compared using :class:`PSA` is related by + their nearest neighbors (and corresponding distances) and the Hausdorff + pair and distance. :class:`PSAPair` is a convenience class for + calculating and encapsulating nearest neighbor and Hausdorff pair + information for one pair of paths. + + Given *npaths*, :class:`PSA` performs and all-pairs comparison among all + paths for a total of :math:`\text{npaths}*(\text{npaths}-1)/2` unique + comparisons. If distances between paths are computed, the all-pairs + comparison can be summarized in a symmetric distance matrix whose upper + triangle can be mapped to a corresponding distance vector form in a + one-to-one manner. A particular comparison of a pair of paths in a + given instance of :class:`PSAPair` is thus unique identified by the row + and column indices in the distance matrix representation (whether or not + distances are actually computed), or a single ID (index) in the + corresponding distance vector. + + Parameters + ---------- + npaths : int + total number of paths in :class:`PSA` used to generate *this* + :class:`PSAPair` + i : int + row index (starting at 0) of the distance matrix + j : int + column index (starting at 0) of the distance matrix + """ + self.npaths = npaths + self.matrix_idx = (i,j) + self.pair_idx = self._dvec_idx(i,j) + + # Set by calling hausdorff_nn + self.nearest_neighbors = {'frames' : None, 'distances' : None} + + # Set by self.getHausdorffPair + self.hausdorff_pair = {'frames' : (None, None), 'distance' : None} + + def _dvec_idx(self, i, j): + """Convert distance matrix indices (in the upper triangle) to the index + of the corresponding distance vector. + + This is a convenience function to locate distance matrix elements (and + the pair generating it) in the corresponding distance vector. The row + index *j* should be greater than *i+1*, corresponding to the upper + triangle of the distance matrix. + + Parameters + ---------- + i : int + row index (starting at 0) of the distance matrix + j : int + column index (starting at 0) of the distance matrix + + Returns + ------- + int + (matrix element) index in the corresponding distance vector + """ + return (self.npaths*i) + j - (i+2)*(i+1)/2 + + def compute_nearest_neighbors(self, P,Q, N=None): + """Generates Hausdorff nearest neighbor lists of *frames* (by index) and + *distances* for *this* pair of paths corresponding to distance matrix + indices (*i*,*j*). + + :meth:`PSAPair.compute_nearest_neighbors` calls + :func:`hausdorff_neighbors` to populate the dictionary of the nearest + neighbor lists of frames (by index) and distances + (:attr:`PSAPair.nearest_neighbors`). This method must explicitly take as + arguments a pair of paths, *P* and *Q*, where *P* is the + :math:`i^\text{th}` path and *Q* is the :math:`j^\text{th}` path among + the set of *N* total paths in the comparison. + + Parameters + ---------- + P : numpy.ndarray + representing a path + Q : numpy.ndarray + representing a path + N : int + size of the distance matrix (of shape *N*-by-*N*) [``None``] + + """ + hn = hausdorff_neighbors(P, Q) + self.nearest_neighbors['frames'] = hn['frames'] + self.nearest_neighbors['distances'] = hn['distances'] + + def find_hausdorff_pair(self): + r"""Find the Hausdorff pair (of frames) for *this* pair of paths. + + :meth:`PSAPair.find_hausdorff_pair` requires that + `:meth:`PSAPair.compute_nearest_neighbors` be called first to + generate the nearest neighbors (and corresponding distances) for each + path in *this* :class:`PSAPair`. The Hausdorff pair is the nearest + neighbor pair (of snapshots/frames), one in the first path and one in + the second, with the largest separation distance. + """ + if self.nearest_neighbors['distances'] is None: + raise NoDataError("Nearest neighbors have not been calculated yet;" + " run compute_nearest_neighbors() first.") + + nn_idx_P, nn_idx_Q = self.nearest_neighbors['frames'] + nn_dist_P, nn_dist_Q = self.nearest_neighbors['distances'] + max_nn_dist_P = max(nn_dist_P) + max_nn_dist_Q = max(nn_dist_Q) + if max_nn_dist_P > max_nn_dist_Q: + max_nn_idx_P = np.argmax(nn_dist_P) + self.hausdorff_pair['frames'] = max_nn_idx_P, nn_idx_P[max_nn_idx_P] + self.hausdorff_pair['distance'] = max_nn_dist_P + else: + max_nn_idx_Q = np.argmax(nn_dist_Q) + self.hausdorff_pair['frames'] = nn_idx_Q[max_nn_idx_Q], max_nn_idx_Q + self.hausdorff_pair['distance'] = max_nn_dist_Q + + def get_nearest_neighbors(self, frames=True, distances=True): + """Returns the nearest neighbor frame indices, distances, or both, for + each path in *this* :class:`PSAPair`. + + :meth:`PSAPair.get_nearest_neighbors` requires that the nearest + neighbors (:attr:`nearest_neighbors`) be initially computed by first + calling :meth:`compute_nearest_neighbors`. At least one of *frames* + or *distances* must be ``True``, or else a ``NoDataError`` is raised. + + Parameters + ---------- + frames : bool + if ``True``, return nearest neighbor frame indices + [``True``] + distances : bool + if ``True``, return nearest neighbor distances [``True``] + + Returns + ------- + dict or tuple + If both *frames* and *distances* are ``True``, return the entire + dictionary (:attr:`nearest_neighbors`); if only *frames* is + ``True``, return a pair of :class:`numpy.ndarray` containing the + indices of the frames (for the pair of paths) of the nearest + neighbors; if only *distances* is ``True``, return a pair of + :class:`numpy.ndarray` of the nearest neighbor distances (for the + pair of paths). + + """ + if self.nearest_neighbors['distances'] is None: + raise NoDataError("Nearest neighbors have not been calculated yet;" + " run compute_nearest_neighbors() first.") + + if frames: + if distances: + return self.nearest_neighbors + else: + return self.nearest_neighbors['frames'] + elif distances: + return self.nearest_neighbors['distances'] + else: + raise NoDataError('Need to select Hausdorff pair "frames" or' + ' "distances" or both. "frames" and "distances"' + ' cannot both be set to False.') + + def get_hausdorff_pair(self, frames=True, distance=True): + """Returns the Hausdorff pair of frames indices, the Hausdorff distance, + or both, for the paths in *this* :class:`PSAPair`. + + :meth:`PSAPair.get_hausdorff_pair` requires that the Hausdorff pair + (and distance) be initially found by first calling + :meth:`find_hausdorff_pair`. At least one of *frames* or *distance* + must be ``True``, or else a ``NoDataError`` is raised. + + Parameters + ---------- + frames : bool + if ``True``, return the indices of the frames + of the Hausdorff pair [``True``] + distances : bool + if ``True``, return Hausdorff distance [``True``] + + Returns + ------- + dict or tuple + If both *frames* and *distance* are ``True``, return the entire + dictionary (:attr:`hausdorff_pair`); if only *frames* is + ``True``, return a pair of ``int`` containing the indices of the + frames (one index per path) of the Hausdorff pair; if only *distance* + is ``True``, return the Hausdorff distance for this path pair. + """ + if self.hausdorff_pair['distance'] is None: + raise NoDataError("Hausdorff pair has not been calculated yet;" + " run find_hausdorff_pair() first.") + + if frames: + if distance: + return self.hausdorff_pair + else: + return self.hausdorff_pair['frames'] + elif distance: + return self.hausdorff_pair['distance'] + else: + raise NoDataError('Need to select Hausdorff pair "frames" or' + ' "distance" or both. "frames" and "distance"' + ' cannot both be set to False.')
+ + +
[docs]class PSAnalysis(object): + """Perform Path Similarity Analysis (PSA) on a set of trajectories. + + The analysis is performed with :meth:`PSAnalysis.run` and stores the result + in the :class:`numpy.ndarray` distance matrix :attr:`PSAnalysis.D`. + :meth:`PSAnalysis.run` also generates a fitted trajectory and path from + alignment of the original trajectories to a reference structure. + + .. versionadded:: 0.8 + + .. versionchanged:: 1.0.0 + ``save_result()`` method has been removed. You can use ``np.save()`` on + :attr:`PSAnalysis.D` instead. + """ + def __init__(self, universes, reference=None, select='name CA', + ref_frame=0, path_select=None, labels=None, + targetdir=os.path.curdir): + """Setting up Path Similarity Analysis. + + The mutual similarity between all unique pairs of trajectories + are computed using a selected path metric. + + Parameters + ---------- + universes : list + a list of universes (:class:`MDAnalysis.Universe` object), each + containing a trajectory + reference : Universe + reference coordinates; :class:`MDAnalysis.Universe` object; if + ``None`` the first time step of the first item in `universes` is used + [``None``] + select : str or dict or tuple + The selection to operate on; can be one of: + + 1. any valid selection string for + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` that + produces identical selections in *mobile* and *reference*; or + 2. a dictionary ``{'mobile':sel1, 'reference':sel2}`` (the + :func:`MDAnalysis.analysis.align.fasta2select` function returns + such a dictionary based on a ClustalW_ or STAMP_ sequence + alignment); or + 3. a tuple ``(sel1, sel2)`` + + When using 2. or 3. with *sel1* and *sel2* then these selections + can also each be a list of selection strings (to generate an + AtomGroup with defined atom order as described under + :ref:`ordered-selections-label`). + tol_mass : float + Reject match if the atomic masses for matched atoms differ by more + than *tol_mass* [0.1] + ref_frame : int + frame index to select frame from *reference* [0] + path_select : str + atom selection composing coordinates of (fitted) path; if ``None`` + then *path_select* is set to *select* [``None``] + targetdir : str + output files are saved there; if ``None`` then "./psadata" is + created and used [.] + labels : list + list of strings, names of trajectories to be analyzed + (:class:`MDAnalysis.Universe`); if ``None``, defaults to trajectory + names [``None``] + + + .. _ClustalW: http://www.clustal.org/ + .. _STAMP: http://www.compbio.dundee.ac.uk/manuals/stamp.4.2/ + + """ + self.universes = universes + self.u_reference = self.universes[0] if reference is None else reference + self.select = select + self.ref_frame = ref_frame + self.path_select = self.select if path_select is None else path_select + if targetdir is None: + try: + targetdir = os.path.join(os.path.curdir, 'psadata') + os.makedirs(targetdir) + except OSError: + if not os.path.isdir(targetdir): + raise + self.targetdir = os.path.realpath(targetdir) + + # Set default directory names for storing topology/reference structures, + # fitted trajectories, paths, distance matrices, and plots + self.datadirs = {'fitted_trajs' : 'fitted_trajs', + 'paths' : 'paths', + 'distance_matrices' : 'distance_matrices', + 'plots' : 'plots'} + for dir_name, directory in self.datadirs.items(): + try: + full_dir_name = os.path.join(self.targetdir, dir_name) + os.makedirs(full_dir_name) + except OSError: + if not os.path.isdir(full_dir_name): + raise + + # Keep track of topology, trajectory, and related files + trj_names = [] + for i, u in enumerate(self.universes): + head, tail = os.path.split(u.trajectory.filename) + filename, ext = os.path.splitext(tail) + trj_names.append(filename) + self.trj_names = trj_names + self.fit_trj_names = None + self.path_names = None + self.top_name = self.universes[0].filename if len(universes) != 0 else None + self.labels = labels or self.trj_names + + # Names of persistence (pickle) files where topology and trajectory + # filenames are stored--should not be modified by user + self._top_pkl = os.path.join(self.targetdir, "psa_top-name.pkl") + self._trjs_pkl = os.path.join(self.targetdir, "psa_orig-traj-names.pkl") + self._fit_trjs_pkl = os.path.join(self.targetdir, "psa_fitted-traj-names.pkl") + self._paths_pkl = os.path.join(self.targetdir, "psa_path-names.pkl") + self._labels_pkl = os.path.join(self.targetdir, "psa_labels.pkl") + # Pickle topology and trajectory filenames for this analysis to curdir + with open(self._top_pkl, 'wb') as output: + pickle.dump(self.top_name, output) + with open(self._trjs_pkl, 'wb') as output: + pickle.dump(self.trj_names, output) + with open(self._labels_pkl, 'wb') as output: + pickle.dump(self.labels, output) + + self.natoms = None + self.npaths = None + self.paths = None + self.D = None # pairwise distances + self._HP = None # (distance vector order) list of all Hausdorff pairs + self._NN = None # (distance vector order) list of all nearest neighbors + self._psa_pairs = None # (distance vector order) list of all PSAPairs + +
[docs] def generate_paths(self, align=False, filename=None, infix='', weights=None, + tol_mass=False, ref_frame=None, flat=False, save=True, store=False): + """Generate paths, aligning each to reference structure if necessary. + + Parameters + ---------- + align : bool + Align trajectories to atom selection :attr:`PSAnalysis.select` + of :attr:`PSAnalysis.u_reference` [``False``] + filename : str + strings representing base filename for fitted trajectories and + paths [``None``] + infix : str + additional tag string that is inserted into the output filename of + the fitted trajectory files [''] + weights : {"mass", ``None``} or array_like (optional) + choose weights. With ``"mass"`` uses masses as weights; with + ``None`` weigh each atom equally. If a float array of the same + length as the selected AtomGroup is provided, use each element of + the `array_like` as a weight for the corresponding atom in the + AtomGroup [``None``] + tol_mass : float + Reject match if the atomic masses for matched atoms differ by more + than *tol_mass* [``False``] + ref_frame : int + frame index to select frame from *reference* [``None``] + flat : bool + represent :attr:`Path.path` as a 2D (|2D|) :class:`numpy.ndarray`; + if ``False`` then :attr:`Path.path` is a 3D (|3D|) + :class:`numpy.ndarray` [``False``] + save : bool + if ``True``, pickle list of names for fitted trajectories + [``True``] + store : bool + if ``True`` then writes each path (:class:`numpy.ndarray`) + in :attr:`PSAnalysis.paths` to compressed npz (numpy) files + [``False``] + + + The fitted trajectories are written to new files in the + "/trj_fit" subdirectory in :attr:`PSAnalysis.targetdir` named + "filename(*trajectory*)XXX*infix*_psa", where "XXX" is a number between + 000 and 999; the extension of each file is the same as its original. + Optionally, the trajectories can also be saved in numpy compressed npz + format in the "/paths" subdirectory in :attr:`PSAnalysis.targetdir` for + persistence and can be accessed as the attribute + :attr:`PSAnalysis.paths`. + + + .. deprecated:: 0.16.1 + Instead of ``mass_weighted=True`` use new ``weights='mass'``; + refactored to fit with AnalysisBase API + + .. versionchanged:: 0.17.0 + Deprecated keyword `mass_weighted` was removed. + + .. versionchanged:: 1.0.0 + Defaults for the `store` and `filename` keywords have been changed + from `True` and `fitted` to `False` and `None` respectively. These + now match the docstring documented defaults. + """ + if ref_frame is None: + ref_frame = self.ref_frame + + paths = [] + fit_trj_names = [] + for i, u in enumerate(self.universes): + p = Path(u, self.u_reference, select=self.select, + path_select=self.path_select, ref_frame=ref_frame) + trj_dir = os.path.join(self.targetdir, self.datadirs['fitted_trajs']) + postfix = '{0}{1}{2:03n}'.format(infix, '_psa', i+1) + top_name, fit_trj_name = p.run(align=align, filename=filename, + postfix=postfix, + targetdir=trj_dir, + weights=weights, + tol_mass=tol_mass, flat=flat) + paths.append(p.path) + fit_trj_names.append(fit_trj_name) + self.natoms, axis = get_coord_axes(paths[0]) + self.paths = paths + self.npaths = len(paths) + self.fit_trj_names = fit_trj_names + if save: + with open(self._fit_trjs_pkl, 'wb') as output: + pickle.dump(self.fit_trj_names, output) + if store: + self.save_paths(filename=filename)
+ +
[docs] def run(self, **kwargs): + """Perform path similarity analysis on the trajectories to compute + the distance matrix. + + A number of parameters can be changed from the defaults. The + result is stored as the array :attr:`PSAnalysis.D`. + + Parameters + ---------- + metric : str or callable + selection string specifying the path metric to measure pairwise + distances among :attr:`PSAnalysis.paths` or a callable with the + same call signature as :func:`hausdorff` + [``'hausdorff'``] + start : int + `start` and `stop` frame index with `step` size: analyze + ``trajectory[start:stop:step]`` [``None``] + stop : int + step : int + + .. versionchanged:: 1.0.0 + `store` and `filename` have been removed. + + """ + metric = kwargs.pop('metric', 'hausdorff') + start = kwargs.pop('start', None) + stop = kwargs.pop('stop', None) + step = kwargs.pop('step', None) + + if isinstance(metric, str): + metric_func = get_path_metric_func(str(metric)) + else: + metric_func = metric + numpaths = self.npaths + D = np.zeros((numpaths,numpaths)) + + for i in range(0, numpaths-1): + for j in range(i+1, numpaths): + P = self.paths[i][start:stop:step] + Q = self.paths[j][start:stop:step] + D[i,j] = metric_func(P, Q) + D[j,i] = D[i,j] + self.D = D
+ +
[docs] def run_pairs_analysis(self, **kwargs): + """Perform PSA Hausdorff (nearest neighbor) pairs analysis on all unique + pairs of paths in :attr:`PSAnalysis.paths`. + + Partial results can be stored in separate lists, where each list is + indexed according to distance vector convention (i.e., element *(i,j)* + in distance matrix representation corresponds to element + :math:`s=N*i+j-(i+1)*(i+2)` in distance vector representation, which is + the :math:`s^\text{th}` comparison). For each unique pair of paths, the + nearest neighbors for that pair can be stored in :attr:`NN` and the + Hausdorff pair in :attr:`HP`. :attr:`PP` stores the full information + of Hausdorff pairs analysis that is available for each pair of path, + including nearest neighbors lists and the Hausdorff pairs. + + The pairwise distances are stored as the array :attr:`PSAnalysis.D`. + + Parameters + ---------- + start : int + `start` and `stop` frame index with `step` size: analyze + ``trajectory[start:stop:step]`` [``None``] + stop : int + step : int + neighbors : bool + if ``True``, then stores dictionary of nearest neighbor + frames/distances in :attr:`PSAnalysis.NN` [``False``] + hausdorff_pairs : bool + if ``True``, then stores dictionary of Hausdorff pair + frames/distances in :attr:`PSAnalysis.HP` [``False``] + """ + start = kwargs.pop('start', None) + stop = kwargs.pop('stop', None) + step = kwargs.pop('step', None) + neighbors = kwargs.pop('neighbors', False) + hausdorff_pairs = kwargs.pop('hausdorff_pairs', False) + + numpaths = self.npaths + D = np.zeros((numpaths,numpaths)) + self._NN = [] # list of nearest neighbors pairs + self._HP = [] # list of Hausdorff pairs + self._psa_pairs = [] # list of PSAPairs + + for i in range(0, numpaths-1): + for j in range(i+1, numpaths): + pp = PSAPair(i, j, numpaths) + P = self.paths[i][start:stop:step] + Q = self.paths[j][start:stop:step] + pp.compute_nearest_neighbors(P, Q, self.natoms) + pp.find_hausdorff_pair() + D[i,j] = pp.hausdorff_pair['distance'] + D[j,i] = D[i,j] + self._psa_pairs.append(pp) + if neighbors: + self._NN.append(pp.get_nearest_neighbors()) + if hausdorff_pairs: + self._HP.append(pp.get_hausdorff_pair()) + self.D = D
+ +
[docs] def save_paths(self, filename=None): + """Save fitted :attr:`PSAnalysis.paths` to numpy compressed npz files. + + The data are saved with :func:`numpy.savez_compressed` in the directory + specified by :attr:`PSAnalysis.targetdir`. + + Parameters + ---------- + filename : str + specifies filename [``None``] + + Returns + ------- + filename : str + + See Also + -------- + load + + """ + filename = filename or 'path_psa' + head = os.path.join(self.targetdir, self.datadirs['paths']) + outfile = os.path.join(head, filename) + if self.paths is None: + raise NoDataError("Paths have not been calculated yet") + path_names = [] + for i, path in enumerate(self.paths): + current_outfile = "{0}{1:03n}.npy".format(outfile, i+1) + np.save(current_outfile, self.paths[i]) + path_names.append(current_outfile) + logger.info("Wrote path to file %r", current_outfile) + self.path_names = path_names + with open(self._paths_pkl, 'wb') as output: + pickle.dump(self.path_names, output) + return filename
+ +
[docs] def load(self): + """Load fitted paths specified by 'psa_path-names.pkl' in + :attr:`PSAnalysis.targetdir`. + + All filenames are determined by :class:`PSAnalysis`. + + See Also + -------- + save_paths + + """ + if not os.path.exists(self._paths_pkl): + raise NoDataError("Fitted trajectories cannot be loaded; save file" + + "{0} does not exist.".format(self._paths_pkl)) + self.path_names = np.load(self._paths_pkl, allow_pickle=True) + self.paths = [np.load(pname) for pname in self.path_names] + if os.path.exists(self._labels_pkl): + self.labels = np.load(self._labels_pkl, allow_pickle=True) + logger.info("Loaded paths from %r", self._paths_pkl)
+ +
[docs] def plot(self, filename=None, linkage='ward', count_sort=False, + distance_sort=False, figsize=4.5, labelsize=12): + """Plot a clustered distance matrix. + + Usese method *linkage* and plots the corresponding dendrogram. Rows + (and columns) are identified using the list of strings specified by + :attr:`PSAnalysis.labels`. + + If `filename` is supplied then the figure is also written to file (the + suffix determines the file type, e.g. pdf, png, eps, ...). All other + keyword arguments are passed on to :func:`matplotlib.pyplot.matshow`. + + + Parameters + ---------- + filename : str + save figure to *filename* [``None``] + linkage : str + name of linkage criterion for clustering [``'ward'``] + count_sort : bool + see :func:`scipy.cluster.hierarchy.dendrogram` [``False``] + distance_sort : bool + see :func:`scipy.cluster.hierarchy.dendrogram` [``False``] + figsize : float + set the vertical size of plot in inches [``4.5``] + labelsize : float + set the font size for colorbar labels; font size for path labels on + dendrogram default to 3 points smaller [``12``] + + Returns + ------- + Z + `Z` from :meth:`cluster` + dgram + `dgram` from :meth:`cluster` + dist_matrix_clus + clustered distance matrix (reordered) + + .. versionchanged:: 1.0.0 + :attr:`tick1On`, :attr:`tick2On`, :attr:`label1On` and :attr:`label2On` + changed to :attr:`tick1line`, :attr:`tick2line`, :attr:`label1` and + :attr:`label2` due to upstream deprecation (see #2493) + """ + from matplotlib.pyplot import figure, colorbar, cm, savefig, clf + + if self.D is None: + raise ValueError( + "No distance data; do 'PSAnalysis.run()' first.") + npaths = len(self.D) + dist_matrix = self.D + + dgram_loc, hmap_loc, cbar_loc = self._get_plot_obj_locs() + aspect_ratio = 1.25 + clf() + fig = figure(figsize=(figsize*aspect_ratio, figsize)) + ax_hmap = fig.add_axes(hmap_loc) + ax_dgram = fig.add_axes(dgram_loc) + + Z, dgram = self.cluster(method=linkage, \ + count_sort=count_sort, \ + distance_sort=distance_sort) + rowidx = colidx = dgram['leaves'] # get row-wise ordering from clustering + ax_dgram.invert_yaxis() # Place origin at up left (from low left) + + minDist, maxDist = 0, np.max(dist_matrix) + dist_matrix_clus = dist_matrix[rowidx,:] + dist_matrix_clus = dist_matrix_clus[:,colidx] + im = ax_hmap.matshow(dist_matrix_clus, aspect='auto', origin='lower', \ + cmap=cm.YlGn, vmin=minDist, vmax=maxDist) + ax_hmap.invert_yaxis() # Place origin at upper left (from lower left) + ax_hmap.locator_params(nbins=npaths) + ax_hmap.set_xticks(np.arange(npaths), minor=True) + ax_hmap.set_yticks(np.arange(npaths), minor=True) + ax_hmap.tick_params(axis='x', which='both', labelleft='off', \ + labelright='off', labeltop='on', labelsize=0) + ax_hmap.tick_params(axis='y', which='both', labelleft='on', \ + labelright='off', labeltop='off', labelsize=0) + rowlabels = [self.labels[i] for i in rowidx] + collabels = [self.labels[i] for i in colidx] + ax_hmap.set_xticklabels(collabels, rotation='vertical', \ + size=(labelsize-4), multialignment='center', minor=True) + ax_hmap.set_yticklabels(rowlabels, rotation='horizontal', \ + size=(labelsize-4), multialignment='left', ha='right', \ + minor=True) + + ax_color = fig.add_axes(cbar_loc) + colorbar(im, cax=ax_color, ticks=np.linspace(minDist, maxDist, 10), \ + format="%0.1f") + ax_color.tick_params(labelsize=labelsize) + + # Remove major ticks and labels from both heat map axes + for tic in ax_hmap.xaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + tic.label1.set_visible(False) + tic.label2.set_visible(False) + for tic in ax_hmap.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + tic.label1.set_visible(False) + tic.label2.set_visible(False) + # Remove minor ticks from both heat map axes + for tic in ax_hmap.xaxis.get_minor_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + for tic in ax_hmap.yaxis.get_minor_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + # Remove tickmarks from colorbar + for tic in ax_color.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + if filename is not None: + head = os.path.join(self.targetdir, self.datadirs['plots']) + outfile = os.path.join(head, filename) + savefig(outfile, dpi=300, bbox_inches='tight') + + return Z, dgram, dist_matrix_clus
+ +
[docs] def plot_annotated_heatmap(self, filename=None, linkage='ward', \ + count_sort=False, distance_sort=False, \ + figsize=8, annot_size=6.5): + """Plot a clustered distance matrix. + + Uses method `linkage` and plots annotated distances in the matrix. Rows + (and columns) are identified using the list of strings specified by + :attr:`PSAnalysis.labels`. + + If `filename` is supplied then the figure is also written to file (the + suffix determines the file type, e.g. pdf, png, eps, ...). All other + keyword arguments are passed on to :func:`matplotlib.pyplot.imshow`. + + Parameters + ---------- + filename : str + save figure to *filename* [``None``] + linkage : str + name of linkage criterion for clustering [``'ward'``] + count_sort : bool + see :func:`scipy.cluster.hierarchy.dendrogram` [``False``] + distance_sort : bool + see :func:`scipy.cluster.hierarchy.dendrogram` [``False``] + figsize : float + set the vertical size of plot in inches [``4.5``] + annot_size : float + font size of annotation labels on heat map [``6.5``] + + Returns + ------- + Z + `Z` from :meth:`cluster` + dgram + `dgram` from :meth:`cluster` + dist_matrix_clus + clustered distance matrix (reordered) + + + Note + ---- + This function requires the seaborn_ package, which can be installed + with `pip install seaborn` or `conda install seaborn`. + + .. _seaborn: https://seaborn.pydata.org/ + + .. versionchanged:: 1.0.0 + :attr:`tick1On`, :attr:`tick2On`, :attr:`label1On` and :attr:`label2On` + changed to :attr:`tick1line`, :attr:`tick2line`, :attr:`label1` and + :attr:`label2` due to upstream deprecation (see #2493) + + """ + from matplotlib.pyplot import figure, colorbar, cm, savefig, clf + + try: + import seaborn as sns + except ImportError: + raise ImportError( + """ERROR --- The seaborn package cannot be found! + + The seaborn API could not be imported. Please install it first. + You can try installing with pip directly from the + internet: + + pip install seaborn + + Alternatively, download the package from + + http://pypi.python.org/pypi/seaborn/ + + and install in the usual manner. + """ + ) from None + + if self.D is None: + raise ValueError( + "No distance data; do 'PSAnalysis.run()' first.") + dist_matrix = self.D + + Z, dgram = self.cluster(method=linkage, \ + count_sort=count_sort, \ + distance_sort=distance_sort, \ + no_plot=True) + rowidx = colidx = dgram['leaves'] # get row-wise ordering from clustering + dist_matrix_clus = dist_matrix[rowidx,:] + dist_matrix_clus = dist_matrix_clus[:,colidx] + + clf() + aspect_ratio = 1.25 + fig = figure(figsize=(figsize*aspect_ratio, figsize)) + ax_hmap = fig.add_subplot(111) + ax_hmap = sns.heatmap(dist_matrix_clus, \ + linewidths=0.25, cmap=cm.YlGn, annot=True, fmt='3.1f', \ + square=True, xticklabels=rowidx, yticklabels=colidx, \ + annot_kws={"size": 7}, ax=ax_hmap) + + # Remove major ticks from both heat map axes + for tic in ax_hmap.xaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + tic.label1.set_visible(False) + tic.label2.set_visible(False) + for tic in ax_hmap.yaxis.get_major_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + tic.label1.set_visible(False) + tic.label2.set_visible(False) + # Remove minor ticks from both heat map axes + for tic in ax_hmap.xaxis.get_minor_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + for tic in ax_hmap.yaxis.get_minor_ticks(): + tic.tick1line.set_visible(False) + tic.tick2line.set_visible(False) + + if filename is not None: + head = os.path.join(self.targetdir, self.datadirs['plots']) + outfile = os.path.join(head, filename) + savefig(outfile, dpi=600, bbox_inches='tight') + + return Z, dgram, dist_matrix_clus
+ +
[docs] def plot_nearest_neighbors(self, filename=None, idx=0, \ + labels=('Path 1', 'Path 2'), figsize=4.5, \ + multiplot=False, aspect_ratio=1.75, \ + labelsize=12): + """Plot nearest neighbor distances as a function of normalized frame + number. + + The frame number is mapped to the interval *[0, 1]*. + + If `filename` is supplied then the figure is also written to file (the + suffix determines the file type, e.g. pdf, png, eps, ...). All other + keyword arguments are passed on to :func:`matplotlib.pyplot.imshow`. + + Parameters + ---------- + filename : str + save figure to *filename* [``None``] + idx : int + index of path (pair) comparison to plot [``0``] + labels : (str, str) + pair of names to label nearest neighbor distance + curves [``('Path 1', 'Path 2')``] + figsize : float + set the vertical size of plot in inches [``4.5``] + multiplot : bool + set to ``True`` to enable plotting multiple nearest + neighbor distances on the same figure [``False``] + aspect_ratio : float + set the ratio of width to height of the plot [``1.75``] + labelsize : float + set the font size for colorbar labels; font size for path labels on + dendrogram default to 3 points smaller [``12``] + + Returns + ------- + ax : axes + + Note + ---- + This function requires the seaborn_ package, which can be installed + with `pip install seaborn` or `conda install seaborn`. + + .. _seaborn: https://seaborn.pydata.org/ + + """ + from matplotlib.pyplot import figure, savefig, tight_layout, clf, show + try: + import seaborn as sns + except ImportError: + raise ImportError( + """ERROR --- The seaborn package cannot be found! + + The seaborn API could not be imported. Please install it first. + You can try installing with pip directly from the + internet: + + pip install seaborn + + Alternatively, download the package from + + http://pypi.python.org/pypi/seaborn/ + + and install in the usual manner. + """ + ) from None + + colors = sns.xkcd_palette(["cherry", "windows blue"]) + + if self._NN is None: + raise ValueError("No nearest neighbor data; run " + "'PSAnalysis.run_pairs_analysis(neighbors=True)' first.") + + sns.set_style('whitegrid') + + if not multiplot: + clf() + fig = figure(figsize=(figsize*aspect_ratio, figsize)) + ax = fig.add_subplot(111) + + nn_dist_P, nn_dist_Q = self._NN[idx]['distances'] + frames_P = len(nn_dist_P) + frames_Q = len(nn_dist_Q) + progress_P = np.asarray(range(frames_P))/(1.0*frames_P) + progress_Q = np.asarray(range(frames_Q))/(1.0*frames_Q) + + ax.plot(progress_P, nn_dist_P, color=colors[0], lw=1.5, label=labels[0]) + ax.plot(progress_Q, nn_dist_Q, color=colors[1], lw=1.5, label=labels[1]) + + ax.legend() + ax.set_xlabel(r'(normalized) progress by frame number', fontsize=12) + ax.set_ylabel(r'nearest neighbor rmsd ($\AA$)', fontsize=12) + ax.tick_params(axis='both', which='major', labelsize=12, pad=4) + + sns.despine(bottom=True, left=True, ax=ax) + tight_layout() + + if filename is not None: + head = os.path.join(self.targetdir, self.datadirs['plots']) + outfile = os.path.join(head, filename) + savefig(outfile, dpi=300, bbox_inches='tight') + + return ax
+ +
[docs] def cluster(self, dist_mat=None, method='ward', count_sort=False, \ + distance_sort=False, no_plot=False, no_labels=True, \ + color_threshold=4): + """Cluster trajectories and optionally plot the dendrogram. + + This method is used by :meth:`PSAnalysis.plot` to generate a heatmap- + dendrogram combination plot. By default, the distance matrix, + :attr:`PSAnalysis.D`, is assumed to exist, converted to + distance-vector form, and inputted to :func:`cluster.hierarchy.linkage` + to generate a clustering. For convenience in plotting arbitrary + distance matrices, one can also be specify `dist_mat`, which will be + checked for proper distance matrix form by + :func:`spatial.distance.squareform` + + Parameters + ---------- + dist_mat : numpy.ndarray + user-specified distance matrix to be clustered [``None``] + method : str + name of linkage criterion for clustering [``'ward'``] + no_plot : bool + if ``True``, do not render the dendrogram [``False``] + no_labels : bool + if ``True`` then do not label dendrogram [``True``] + color_threshold : float + For brevity, let t be the color_threshold. Colors all the + descendent links below a cluster node k the same color if k is + the first node below the cut threshold t. All links connecting + nodes with distances greater than or equal to the threshold are + colored blue. If t is less than or equal to zero, all nodes are + colored blue. If color_threshold is None or ‘default’, + corresponding with MATLAB(TM) behavior, the threshold is set to + 0.7*max(Z[:,2]). [``4``]] + + Returns + ------- + Z + output from :func:`scipy.cluster.hierarchy.linkage`; + list of indices representing the row-wise order of the objects + after clustering + dgram + output from :func:`scipy.cluster.hierarchy.dendrogram` + """ + # perhaps there is a better way to manipulate the plot... or perhaps it + # is not even necessary? In any case, the try/finally makes sure that + # we are not permanently changing the user's global state + orig_linewidth = matplotlib.rcParams['lines.linewidth'] + matplotlib.rcParams['lines.linewidth'] = 0.5 + try: + if dist_mat: + dist_vec = spatial.distance.squareform(dist_mat, + force='tovector', + checks=True) + else: + dist_vec = self.get_pairwise_distances(vectorform=True) + Z = cluster.hierarchy.linkage(dist_vec, method=method) + dgram = cluster.hierarchy.dendrogram( + Z, no_labels=no_labels, orientation='left', + count_sort=count_sort, distance_sort=distance_sort, + no_plot=no_plot, color_threshold=color_threshold) + finally: + matplotlib.rcParams['lines.linewidth'] = orig_linewidth + return Z, dgram
+ + def _get_plot_obj_locs(self): + """Find and return coordinates for dendrogram, heat map, and colorbar. + + Returns + ------- + tuple + tuple of coordinates for placing the dendrogram, heat map, and + colorbar in the plot. + """ + plot_xstart = 0.04 + plot_ystart = 0.04 + label_margin = 0.155 + + dgram_height = 0.2 # dendrogram heights(s) + hmap_xstart = plot_xstart + dgram_height + label_margin + + # Set locations for dendrogram(s), matrix, and colorbar + hmap_height = 0.8 + hmap_width = 0.6 + dgram_loc = [plot_xstart, plot_ystart, dgram_height, hmap_height] + cbar_width = 0.02 + cbar_xstart = hmap_xstart + hmap_width + 0.01 + cbar_loc = [cbar_xstart, plot_ystart, cbar_width, hmap_height] + hmap_loc = [hmap_xstart, plot_ystart, hmap_width, hmap_height] + + return dgram_loc, hmap_loc, cbar_loc + +
[docs] def get_num_atoms(self): + """Return the number of atoms used to construct the :class:`Path` instances in + :class:`PSA`. + + Returns + ------- + int + the number of atoms in any path + + Note + ---- + Must run :meth:`PSAnalysis.generate_paths` prior to calling this + method. + """ + if self.natoms is None: + raise ValueError( + "No path data; do 'PSAnalysis.generate_paths()' first.") + return self.natoms
+ +
[docs] def get_num_paths(self): + """Return the number of paths in :class:`PSA`. + + Note + ---- + Must run :meth:`PSAnalysis.generate_paths` prior to calling this method. + + Returns + ------- + int + the number of paths in :class:`PSA` + """ + if self.npaths is None: + raise ValueError( + "No path data; do 'PSAnalysis.generate_paths()' first.") + return self.npaths
+ +
[docs] def get_paths(self): + """Return the paths in :class:`PSA`. + + Note + ---- + Must run :meth:`PSAnalysis.generate_paths` prior to calling this + method. + + Returns + ------- + list + list of :class:`numpy.ndarray` representations of paths in + :class:`PSA` + """ + if self.paths is None: + raise ValueError( + "No path data; do 'PSAnalysis.generate_paths()' first.") + return self.paths
+ +
[docs] def get_pairwise_distances(self, vectorform=False, checks=False): + """Return the distance matrix (or vector) of pairwise path distances. + + Note + ---- + Must run :meth:`PSAnalysis.run` prior to calling this method. + + Parameters + ---------- + vectorform : bool + if ``True``, return the distance vector instead [``False``] + checks : bool + if ``True``, check that :attr:`PSAnalysis.D` is a proper distance + matrix [``False``] + + Returns + ------- + numpy.ndarray + representation of the distance matrix (or vector) + + """ + if self.D is None: + raise ValueError( + "No distance data; do 'PSAnalysis.run()' first.") + if vectorform: + return spatial.distance.squareform(self.D, force='tovector', + checks=checks) + else: + return self.D
+ + @property + def psa_pairs(self): + """The list of :class:`PSAPair` instances for each pair of paths. + + :attr:`psa_pairs` is a list of all :class:`PSAPair` objects (in + distance vector order). The elements of a :class:`PSAPair` are pairs of + paths that have been compared using + :meth:`PSAnalysis.run_pairs_analysis`. Each :class:`PSAPair` contains + nearest neighbor and Hausdorff pair information specific to a pair of + paths. The nearest neighbor frames and distances for a :class:`PSAPair` + can be accessed in the nearest neighbor dictionary using the keys + 'frames' and 'distances', respectively. E.g., + :attr:`PSAPair.nearest_neighbors['distances']` returns a *pair* of + :class:`numpy.ndarray` corresponding to the nearest neighbor distances + for each path. Similarly, Hausdorff pair information can be accessed + using :attr:`PSAPair.hausdorff_pair` with the keys 'frames' and + 'distance'. + + Note + ---- + Must run :meth:`PSAnalysis.run_pairs_analysis` prior to calling this + method. + + """ + if self._psa_pairs is None: + raise ValueError("No nearest neighbors data; do" + " 'PSAnalysis.run_pairs_analysis()' first.") + return self._psa_pairs + + @property + def hausdorff_pairs(self): + """The Hausdorff pair for each (unique) pairs of paths. + + This attribute contains a list of Hausdorff pair information (in + distance vector order), where each element is a dictionary containing + the pair of frames and the (Hausdorff) distance between a pair of + paths. See :meth:`PSAnalysis.psa_pairs` and + :attr:`PSAPair.hausdorff_pair` for more information about accessing + Hausdorff pair data. + + Note + ---- + Must run :meth:`PSAnalysis.run_pairs_analysis` with + ``hausdorff_pairs=True`` prior to calling this method. + + """ + if self._HP is None: + raise ValueError("No Hausdorff pairs data; do " + "'PSAnalysis.run_pairs_analysis(hausdorff_pairs=True)' " + "first.") + return self._HP + + @property + def nearest_neighbors(self): + """The nearest neighbors for each (unique) pair of paths. + + This attribute contains a list of nearest neighbor information (in + distance vector order), where each element is a dictionary containing + the nearest neighbor frames and distances between a pair of paths. See + :meth:`PSAnalysis.psa_pairs` and :attr:`PSAPair.nearest_neighbors` for + more information about accessing nearest neighbor data. + + Note + ---- + Must run :meth:`PSAnalysis.run_pairs_analysis` with + ``neighbors=True`` prior to calling this method. + + """ + if self._NN is None: + raise ValueError("No nearest neighbors data; do" + " 'PSAnalysis.run_pairs_analysis(neighbors=True)'" + " first.") + return self._NN
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/rdf.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/rdf.html new file mode 100644 index 0000000000..600cebdc7e --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/rdf.html @@ -0,0 +1,828 @@ + + + + + + MDAnalysis.analysis.rdf — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.rdf

+# -*- 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-2017 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
+#
+
+r"""Radial Distribution Functions --- :mod:`MDAnalysis.analysis.rdf`
+====================================================================
+
+This module contains two classes to calculate radial
+`pair distribution functions`_ (`radial distribution functions`_ or "RDF").
+The RDF :math:`g_{ab}(r)` between types of particles :math:`a` and :math:`b` is
+
+.. _equation-gab:
+
+.. math::
+
+   g_{ab}(r) = (N_{a} N_{b})^{-1} \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
+homogenous system. The RDF effectively counts the average number of :math:`b`
+neighbours in a shell at distance :math:`r` around a :math:`a` particle and
+represents it as a density.
+
+The radial cumulative distribution function is
+
+.. math::
+
+   G_{ab}(r) = \int_0^r \!\!dr' 4\pi r'^2 g_{ab}(r')
+
+and the average number of :math:`b` particles within radius :math:`r`
+
+.. _equation-countab:
+
+.. math::
+
+   N_{ab}(r) = \rho G_{ab}(r)
+
+(with the appropriate density :math:`\rho`). The latter function can be used to
+compute, for instance, coordination numbers such as the number of neighbors in
+the first solvation shell :math:`N(r_1)` where :math:`r_1` is the position of
+the first minimum in :math:`g(r)`.
+
+We provide options for calculating the density of particle :math:`b`
+in a shell at distance :math:`r` around a :math:`a` particle, which is
+
+.. _equation-nab:
+
+.. math::
+   n_{ab}(r) = \rho g_{ab}(r)
+
+.. _`pair distribution functions`:
+   https://en.wikipedia.org/wiki/Pair_distribution_function
+.. _`radial distribution functions`:
+   https://en.wikipedia.org/wiki/Radial_distribution_function
+
+.. Not Implemented yet:
+.. - Structure factor?
+.. - Coordination number
+"""
+import warnings
+import numpy as np
+
+from ..lib import distances
+from .base import AnalysisBase
+
+
+
[docs]class InterRDF(AnalysisBase): + r"""Radial distribution function + + :class:`InterRDF` is a tool to calculate average radial distribution + functions between two groups of atoms. Suppose we have two AtomGroups ``A`` + and ``B``. ``A`` contains atom ``A1``, ``A2``, and ``B`` contains ``B1``, + ``B2``. Given ``A`` and ``B`` to :class:`InterRDF`, the output will be the + average of RDFs between ``A1`` and ``B1``, ``A1`` and ``B2``, ``A2`` and + ``B1``, ``A2`` and ``B2``. A typical application is to calculate the RDF of + solvent with itself or with another solute. + + The :ref:`radial distribution function<equation-gab>` is calculated by + histogramming distances between all particles in `g1` and `g2` while taking + periodic boundary conditions into account via the minimum image + convention. + + The `exclusion_block` keyword may be used to exclude a set of distances + from the calculations. + + Results are available in the attributes :attr:`results.rdf` + and :attr:`results.count`. + + Parameters + ---------- + g1 : AtomGroup + First AtomGroup + g2 : AtomGroup + Second AtomGroup + nbins : int + Number of bins in the histogram + range : tuple or list + The size of the RDF + norm : str, {'rdf', 'density', 'none'} + For 'rdf' calculate :math:`g_{ab}(r)`. For + 'density' the :ref:`single particle density<equation-nab>` + :math:`n_{ab}(r)` is computed. 'none' computes the number of + particles occurences in each spherical shell. + + .. versionadded:: 2.3.0 + + exclusion_block : tuple + A tuple representing the tile to exclude from the distance array. + exclude_same : str + Will exclude pairs of atoms that share the same "residue", "segment", or "chain". + Those are the only valid values. This is intended to remove atoms that are + spatially correlated due to direct bonded connections. + verbose : bool + Show detailed progress of the calculation if set to `True` + + Attributes + ---------- + results.bins : numpy.ndarray + :class:`numpy.ndarray` of the centers of the `nbins` histogram + bins. + + .. versionadded:: 2.0.0 + + bins : numpy.ndarray + Alias to the :attr:`results.bins` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.bins` instead. + + results.edges : numpy.ndarray + + :class:`numpy.ndarray` of the `nbins + 1` edges of the histogram + bins. + + .. versionadded:: 2.0.0 + + edges : numpy.ndarray + + Alias to the :attr:`results.edges` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.edges` instead. + + results.rdf : numpy.ndarray + :class:`numpy.ndarray` of the :ref:`radial distribution + function<equation-gab>` values for the :attr:`results.bins`. + + .. versionadded:: 2.0.0 + + rdf : numpy.ndarray + Alias to the :attr:`results.rdf` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.rdf` instead. + + results.count : numpy.ndarray + :class:`numpy.ndarray` representing the radial histogram, i.e., + the raw counts, for all :attr:`results.bins`. + + .. versionadded:: 2.0.0 + + count : numpy.ndarray + Alias to the :attr:`results.count` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.count` instead. + + Example + ------- + First create the :class:`InterRDF` object, by supplying two + AtomGroups then use the :meth:`run` method :: + + rdf = InterRDF(ag1, ag2) + rdf.run() + + Results are available through the :attr:`results.bins` and + :attr:`results.rdf` attributes:: + + plt.plot(rdf.results.bins, rdf.results.rdf) + + The `exclusion_block` keyword allows the masking of pairs from + within the same molecule. For example, if there are 7 of each + atom in each molecule, the exclusion mask ``(7, 7)`` can be used. + + + .. versionadded:: 0.13.0 + + .. versionchanged:: 1.0.0 + Support for the `start`, `stop`, and `step` keywords has been + removed. These should instead be passed to :meth:`InterRDF.run`. + + .. versionchanged:: 2.0.0 + Store results as attributes `bins`, `edges`, `rdf` and `count` + of the `results` attribute of + :class:`~MDAnalysis.analysis.AnalysisBase`. + """ + def __init__(self, + g1, + g2, + nbins=75, + range=(0.0, 15.0), + norm="rdf", + exclusion_block=None, + exclude_same=None, + **kwargs): + super(InterRDF, self).__init__(g1.universe.trajectory, **kwargs) + self.g1 = g1 + self.g2 = g2 + self.norm = str(norm).lower() + + self.rdf_settings = {'bins': nbins, + 'range': range} + self._exclusion_block = exclusion_block + if exclude_same is not None and exclude_same not in ['residue', 'segment', 'chain']: + raise ValueError( + "The exclude_same argument to InterRDF must be None, 'residue', 'segment' " + "or 'chain'." + ) + if exclude_same is not None and exclusion_block is not None: + raise ValueError( + "The exclude_same argument to InterRDF cannot be used with exclusion_block." + ) + name_to_attr = {'residue': 'resindices', 'segment': 'segindices', 'chain': 'chainIDs'} + self.exclude_same = name_to_attr.get(exclude_same) + + if self.norm not in ['rdf', 'density', 'none']: + raise ValueError(f"'{self.norm}' is an invalid norm. " + "Use 'rdf', 'density' or 'none'.") + + def _prepare(self): + # Empty histogram to store the RDF + count, edges = np.histogram([-1], **self.rdf_settings) + count = count.astype(np.float64) + count *= 0.0 + self.results.count = count + self.results.edges = edges + self.results.bins = 0.5 * (edges[:-1] + edges[1:]) + + if self.norm == "rdf": + # Cumulative volume for rdf normalization + self.volume_cum = 0 + # Set the max range to filter the search radius + self._maxrange = self.rdf_settings['range'][1] + + def _single_frame(self): + pairs, dist = distances.capped_distance(self.g1.positions, + self.g2.positions, + self._maxrange, + box=self._ts.dimensions) + # Maybe exclude same molecule distances + if self._exclusion_block is not None: + idxA = pairs[:, 0]//self._exclusion_block[0] + idxB = pairs[:, 1]//self._exclusion_block[1] + mask = np.where(idxA != idxB)[0] + dist = dist[mask] + + if self.exclude_same is not None: + # Ignore distances between atoms in the same attribute + attr_ix_a = getattr(self.g1, self.exclude_same)[pairs[:, 0]] + attr_ix_b = getattr(self.g2, self.exclude_same)[pairs[:, 1]] + mask = np.where(attr_ix_a != attr_ix_b)[0] + dist = dist[mask] + + count, _ = np.histogram(dist, **self.rdf_settings) + self.results.count += count + + if self.norm == "rdf": + self.volume_cum += self._ts.volume + + def _conclude(self): + norm = self.n_frames + if self.norm in ["rdf", "density"]: + # Volume in each radial shell + vols = np.power(self.results.edges, 3) + norm *= 4/3 * np.pi * np.diff(vols) + + if self.norm == "rdf": + # Number of each selection + nA = len(self.g1) + nB = len(self.g2) + N = nA * nB + + # If we had exclusions, take these into account + if self._exclusion_block: + xA, xB = self._exclusion_block + nblocks = nA / xA + N -= xA * xB * nblocks + + # Average number density + box_vol = self.volume_cum / self.n_frames + norm *= N / box_vol + + self.results.rdf = self.results.count / norm + + @property + def edges(self): + wmsg = ("The `edges` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.edges + + @property + def count(self): + wmsg = ("The `count` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.count + + @property + def bins(self): + wmsg = ("The `bins` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.bins + + @property + def rdf(self): + wmsg = ("The `rdf` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.rdf` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rdf
+ + +
[docs]class InterRDF_s(AnalysisBase): + r"""Site-specific radial distribution function + + Calculates site-specific radial distribution + functions. Instead of two groups of atoms it takes as input a list of + pairs of AtomGroup, ``[[A, B], [C, D], ...]``. Given the same ``A`` and + ``B`` to + :class:`InterRDF_s`, the output will be a list of individual RDFs between + ``A1`` and ``B1``, ``A1`` and ``B2``, ``A2`` and ``B1``, ``A2`` and ``B2`` + (and + similarly for ``C`` and ``D``). These site-specific radial distribution + functions are typically calculated if one is interested in the solvation + shells of a ligand in a binding site or the solvation of specific residues + in a protein. + + Parameters + ---------- + u : Universe + a Universe that contains atoms in `ags` + + .. deprecated:: 2.3.0 + This parameter is superflous and will be removed in + MDAnalysis 3.0.0. + + ags : list + a list of pairs of :class:`~MDAnalysis.core.groups.AtomGroup` + instances + nbins : int + Number of bins in the histogram + range : tuple or list + The size of the RDF + norm : str, {'rdf', 'density', 'none'} + For 'rdf' calculate :math:`g_{ab}(r)`. For + 'density' the :ref:`single particle density<equation-nab>` + :math:`n_{ab}(r)` is computed. 'none' computes the number of + particles occurences in each spherical shell. + + .. versionadded:: 2.3.0 + + density : bool + `False`: calculate :math:`g_{ab}(r)`; `True`: calculate + the true :ref:`single particle density<equation-nab>` + :math:`n_{ab}(r)`. `density` overwrites the `norm` parameter. + + .. versionadded:: 1.0.1 + + This keyword was available since 0.19.0 but was not + documented. Furthermore, it had the opposite + meaning. Since 1.0.1 it is officially supported as + documented. + + .. deprecated:: 2.3.0 + Instead of `density=True` use `norm='density'` + + Attributes + ---------- + results.bins : numpy.ndarray + :class:`numpy.ndarray` of the centers of the `nbins` histogram + bins; all individual site-specific RDFs have the same bins. + + .. versionadded:: 2.0.0 + + bins : numpy.ndarray + Alias to the :attr:`results.bins` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.bins` instead. + + results.edges : numpy.ndarray + array of the ``nbins + 1`` edges of the histogram + bins; all individual site-specific RDFs have the same bins. + + .. versionadded:: 2.0.0 + + edges : numpy.ndarray + Alias to the :attr:`results.edges` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.edges` instead. + + results.rdf : list + :class:`list` of the site-specific :ref:`radial distribution + functions<equation-gab>` if `norm='rdf'` or :ref:`density + functions<equation-nab>` for the :attr:`bins` + if `norm='density'`. The list contains + ``len(ags)`` entries. Each entry for the ``i``-th pair `[A, B] + = ags[i]` in `ags` is a :class:`numpy.ndarray` with shape + ``(len(A), len(B))``, i.e., a stack of RDFs. For example, + ``results.rdf[i][0, 2]`` is the RDF between atoms ``A[0]`` + and ``B[2]``. + + .. versionadded:: 2.0.0 + + rdf : list + Alias to the :attr:`results.rdf` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.rdf` instead. + + results.count : list + :class:`list` of the site-specific radial histograms, i.e., the + raw counts, for all :attr:`results.bins`. The data have the same + structure as :attr:`results.rdf` except that the arrays contain + the raw counts. + + .. versionadded:: 2.0.0 + + count : list + Alias to the :attr:`results.count` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.count` instead. + + results.cdf : list + :class:`list` of the site-specific :ref:`cumulative + counts<equation-countab>`, for all :attr:`results.bins`. The data + have the same structure as :attr:`results.rdf` except that the arrays + contain the cumulative counts. + + This attribute only exists after :meth:`get_cdf` has been run. + + .. versionadded:: 2.0.0 + + cdf : list + Alias to the :attr:`results.cdf` attribute. + + .. deprecated:: 2.0.0 + This attribute will be removed in 3.0.0. + Use :attr:`results.cdf` instead. + + Example + ------- + First create the :class:`InterRDF_s` object, by supplying one Universe and + one list of pairs of AtomGroups, then use the :meth:`~InterRDF_s.run` + method:: + + from MDAnalysisTests.datafiles import GRO_MEMPROT, XTC_MEMPROT + u = mda.Universe(GRO_MEMPROT, XTC_MEMPROT) + + s1 = u.select_atoms('name ZND and resid 289') + s2 = u.select_atoms('(name OD1 or name OD2) and resid 51 and sphzone 5.0 (resid 289)') + s3 = u.select_atoms('name ZND and (resid 291 or resid 292)') + s4 = u.select_atoms('(name OD1 or name OD2) and sphzone 5.0 (resid 291)') + ags = [[s1, s2], [s3, s4]] + + rdf = InterRDF_s(u, ags) + rdf.run() + + Results are available through the :attr:`results.bins` + and :attr:`results.rdf` attributes:: + + plt.plot(rdf.results.bins, rdf.results.rdf[0][0, 0]) + + (Which plots the rdf between the first atom in ``s1`` and the first atom in + ``s2``) + + To generate the *cumulative distribution function* (cdf) in the sense of + "particles within radius :math:`r`", i.e., :math:`N_{ab}(r)`, use the + :meth:`~InterRDF_s.get_cdf` method :: + + cdf = rdf.get_cdf() + + Results are available through the :attr:`results.cdf` attribute:: + + plt.plot(rdf.results.bins, rdf.results.cdf[0][0, 0]) + + (Which plots the cdf between the first atom in ``s1`` and the first atom in + ``s2``) + + + .. versionadded:: 0.19.0 + + .. versionchanged:: 1.0.0 + Support for the `start`, `stop`, and `step` keywords has been + removed. These should instead be passed to :meth:`InterRDF_s.run`. + + .. versionchanged:: 2.0.0 + Store results as attributes `bins`, `edges`, `rdf`, `count` + and `cdf` of the `results` attribute + of :class:`~MDAnalysis.analysis.AnalysisBase`. + + .. versionchanged:: 2.3.0 + Introduce `norm` and `exclusion_blocks` attributes. + .. deprecated:: 2.3.0 + Instead of `density=True` use `norm='density'` + .. deprecated:: 2.3.0 + The `universe` parameter is superflous. + """ + def __init__(self, + u, + ags, + nbins=75, + range=(0.0, 15.0), + norm="rdf", + density=False, + **kwargs): + super(InterRDF_s, self).__init__(ags[0][0].universe.trajectory, + **kwargs) + + warnings.warn("The `u` attribute is superflous and will be removed " + "in MDAnalysis 3.0.0.", DeprecationWarning) + + self.ags = ags + self.norm = str(norm).lower() + self.rdf_settings = {'bins': nbins, + 'range': range} + + if self.norm not in ['rdf', 'density', 'none']: + raise ValueError(f"'{self.norm}' is an invalid norm. " + "Use 'rdf', 'density' or 'none'.") + + if density: + warnings.warn("The `density` attribute was deprecated in " + "MDAnalysis 2.3.0 and will be removed in " + "MDAnalysis 3.0.0. Please use `norm=density` " + "instead.", DeprecationWarning) + self.norm = "density" + + def _prepare(self): + count, edges = np.histogram([-1], **self.rdf_settings) + self.results.count = [np.zeros((ag1.n_atoms, ag2.n_atoms, len(count)), + dtype=np.float64) for ag1, ag2 in self.ags] + self.results.edges = edges + self.results.bins = 0.5 * (edges[:-1] + edges[1:]) + + if self.norm == "rdf": + # Cumulative volume for rdf normalization + self.volume_cum = 0 + self._maxrange = self.rdf_settings['range'][1] + + def _single_frame(self): + for i, (ag1, ag2) in enumerate(self.ags): + pairs, dist = distances.capped_distance(ag1.positions, + ag2.positions, + self._maxrange, + box=self._ts.dimensions) + + for j, (idx1, idx2) in enumerate(pairs): + count, _ = np.histogram(dist[j], **self.rdf_settings) + self.results.count[i][idx1, idx2, :] += count + + if self.norm == "rdf": + self.volume_cum += self._ts.volume + + def _conclude(self): + norm = self.n_frames + if self.norm in ["rdf", "density"]: + # Volume in each radial shell + vols = np.power(self.results.edges, 3) + norm *= 4/3 * np.pi * np.diff(vols) + + if self.norm == "rdf": + # Average number density + norm *= 1 / (self.volume_cum / self.n_frames) + + # Empty lists to restore indices, RDF + self.results.indices = [] + self.results.rdf = [] + + for i, (ag1, ag2) in enumerate(self.ags): + # Number of each selection + self.results.indices.append([ag1.indices, ag2.indices]) + self.results.rdf.append(self.results.count[i] / norm) + +
[docs] def get_cdf(self): + r"""Calculate the cumulative counts for all sites. + + This is the :ref:`cumulative count<equation-countab>` within a given + radius, i.e., :math:`N_{ab}(r)`. + + The result is returned and also stored in the attribute + :attr:`results.cdf`. + + Returns + ------- + cdf : list + list of arrays with the same structure as :attr:`results.rdf` + """ + self.results.cdf = [] + + for count in self.results.count: + self.results.cdf.append(np.cumsum(count, axis=2) / self.n_frames) + + return self.results.cdf
+ + @property + def edges(self): + wmsg = ("The `edges` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.edges + + @property + def count(self): + wmsg = ("The `count` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.count + + @property + def bins(self): + wmsg = ("The `bins` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.bins` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.bins + + @property + def rdf(self): + wmsg = ("The `rdf` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.rdf` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rdf + + @property + def cdf(self): + wmsg = ("The `cdf` attribute was deprecated in MDAnalysis 2.0.0 " + "and will be removed in MDAnalysis 3.0.0. Please use " + "`results.cdf` instead") + warnings.warn(wmsg, DeprecationWarning) + return self.results.cdf
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/rms.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/rms.html new file mode 100644 index 0000000000..34f945e792 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/rms.html @@ -0,0 +1,1042 @@ + + + + + + MDAnalysis.analysis.rms — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.analysis.rms

+# -*- 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-2017 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
+#
+"""
+Calculating root mean square quantities --- :mod:`MDAnalysis.analysis.rms`
+==========================================================================
+
+:Author: Oliver Beckstein, David L. Dotson, John Detlefs
+:Year: 2016
+:Copyright: GNU Public License v2
+
+.. versionadded:: 0.7.7
+.. versionchanged:: 0.11.0
+   Added :class:`RMSF` analysis.
+.. versionchanged:: 0.16.0
+   Refactored RMSD to fit AnalysisBase API
+
+The module contains code to analyze root mean square quantities such
+as the coordinat root mean square distance (:class:`RMSD`) or the
+per-residue root mean square fluctuations (:class:`RMSF`).
+
+This module uses the fast QCP algorithm [Theobald2005]_ to calculate
+the root mean square distance (RMSD) between two coordinate sets (as
+implemented in
+:func:`MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix`).
+
+When using this module in published work please cite [Theobald2005]_.
+
+
+See Also
+--------
+:mod:`MDAnalysis.analysis.align`
+   aligning structures based on RMSD
+:mod:`MDAnalysis.lib.qcprot`
+   implements the fast RMSD algorithm.
+
+
+Example applications
+--------------------
+
+Calculating RMSD for multiple domains
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In this example we will globally fit a protein to a reference
+structure and investigate the relative movements of domains by
+computing the RMSD of the domains to the reference. The example is a
+DIMS trajectory of adenylate kinase, which samples a large
+closed-to-open transition. The protein consists of the CORE, LID, and
+NMP domain.
+
+* superimpose on the closed structure (frame 0 of the trajectory),
+  using backbone atoms
+
+* calculate the backbone RMSD and RMSD for CORE, LID, NMP (backbone atoms)
+
+The trajectory is included with the test data files. The data in
+:attr:`RMSD.results.rmsd` is plotted with :func:`matplotlib.pyplot.plot` (see Figure :ref:`RMSD plot figure <figure-RMSD>`)::
+
+   import MDAnalysis
+   from MDAnalysis.tests.datafiles import PSF,DCD,CRD
+   u = MDAnalysis.Universe(PSF,DCD)
+   ref = MDAnalysis.Universe(PSF,DCD)     # reference closed AdK (1AKE) (with the default ref_frame=0)
+   #ref = MDAnalysis.Universe(PSF,CRD)    # reference open AdK (4AKE)
+
+   import MDAnalysis.analysis.rms
+
+   R = MDAnalysis.analysis.rms.RMSD(u, ref,
+              select="backbone",             # superimpose on whole backbone of the whole protein
+              groupselections=["backbone and (resid 1-29 or resid 60-121 or resid 160-214)",   # CORE
+                               "backbone and resid 122-159",                                   # LID
+                               "backbone and resid 30-59"])                                    # NMP
+   R.run()
+
+   import matplotlib.pyplot as plt
+   rmsd = R.results.rmsd.T   # transpose makes it easier for plotting
+   time = rmsd[1]
+   fig = plt.figure(figsize=(4,4))
+   ax = fig.add_subplot(111)
+   ax.plot(time, rmsd[2], 'k-',  label="all")
+   ax.plot(time, rmsd[3], 'k--', label="CORE")
+   ax.plot(time, rmsd[4], 'r--', label="LID")
+   ax.plot(time, rmsd[5], 'b--', label="NMP")
+   ax.legend(loc="best")
+   ax.set_xlabel("time (ps)")
+   ax.set_ylabel(r"RMSD ($\\AA$)")
+   fig.savefig("rmsd_all_CORE_LID_NMP_ref1AKE.pdf")
+   
+.. _figure-RMSD:
+
+.. figure:: /images/RSMD_plot.png
+      :scale: 50 %
+      :alt: RMSD plot
+      
+      RMSD plot for backbone and CORE, LID, NMP domain of the protein.
+
+      
+Functions
+---------
+
+.. autofunction:: rmsd
+
+Analysis classes
+----------------
+
+.. autoclass:: RMSD
+   :members:
+   :inherited-members:
+
+   .. attribute:: results.rmsd
+
+       Contains the time series of the RMSD as an N×3 :class:`numpy.ndarray`
+       array with content ``[[frame, time (ps), RMSD (A)], [...], ...]``.
+
+       .. versionadded:: 2.0.0
+
+   .. attribute:: rmsd
+
+       Alias to the :attr:`results.rmsd` attribute.
+
+       .. deprecated:: 2.0.0
+          Will be removed in MDAnalysis 3.0.0. Please use :attr:`results.rmsd`
+          instead.
+
+
+.. autoclass:: RMSF
+   :members:
+   :inherited-members:
+
+   .. attribute:: results.rmsf
+
+      Results are stored in this N-length :class:`numpy.ndarray` array,
+      giving RMSFs for each of the given atoms.
+
+      .. versionadded:: 2.0.0
+
+   .. attribute:: rmsf
+
+      Alias to the :attr:`results.rmsf` attribute.
+
+      .. deprecated:: 2.0.0
+         Will be removed in MDAnalysis 3.0.0. Please use :attr:`results.rmsf`
+         instead.
+
+"""
+import numpy as np
+
+import logging
+import warnings
+
+import MDAnalysis.lib.qcprot as qcp
+from MDAnalysis.analysis.base import AnalysisBase
+from MDAnalysis.exceptions import SelectionError, NoDataError
+from MDAnalysis.lib.util import asiterable, iterable, get_weights
+
+
+logger = logging.getLogger('MDAnalysis.analysis.rmsd')
+
+
+
[docs]def rmsd(a, b, weights=None, center=False, superposition=False): + r"""Returns RMSD between two coordinate sets `a` and `b`. + + `a` and `b` are arrays of the coordinates of N atoms of shape + :math:`N times 3` as generated by, e.g., + :meth:`MDAnalysis.core.groups.AtomGroup.positions`. + + Note + ---- + If you use trajectory data from simulations performed under **periodic + boundary conditions** then you *must make your molecules whole* before + performing RMSD calculations so that the centers of mass of the mobile and + reference structure are properly superimposed. + + + Parameters + ---------- + a : array_like + coordinates to align to `b` + b : array_like + coordinates to align to (same shape as `a`) + weights : array_like (optional) + 1D array with weights, use to compute weighted average + center : bool (optional) + subtract center of geometry before calculation. With weights given + compute weighted average as center. + superposition : bool (optional) + perform a rotational and translational superposition with the fast QCP + algorithm [Theobald2005]_ before calculating the RMSD; implies + ``center=True``. + + Returns + ------- + rmsd : float + RMSD between `a` and `b` + + Notes + ----- + The RMSD :math:`\rho(t)` as a function of time is calculated as + + .. math:: + + \rho(t) = \sqrt{\frac{1}{N} \sum_{i=1}^N w_i \left(\mathbf{x}_i(t) + - \mathbf{x}_i^{\text{ref}}\right)^2} + + It is the Euclidean distance in configuration space of the current + configuration (possibly after optimal translation and rotation) from a + reference configuration divided by :math:`1/\sqrt{N}` where :math:`N` is + the number of coordinates. + + The weights :math:`w_i` are calculated from the input weights + `weights` :math:`w'_i` as relative to the mean: + + .. math:: + + w_i = \frac{w'_i}{\langle w' \rangle} + + + Example + ------- + >>> import MDAnalysis as mda + >>> from MDAnalysis.analysis.rms import rmsd + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> bb = u.select_atoms('backbone') + >>> A = bb.positions.copy() # coordinates of first frame + >>> _ = u.trajectory[-1] # forward to last frame + >>> B = bb.positions.copy() # coordinates of last frame + >>> rmsd(A, B, center=True) + 6.838544558398293 + + + .. versionchanged:: 0.8.1 + *center* keyword added + .. versionchanged:: 0.14.0 + *superposition* keyword added + + """ + + a = np.asarray(a, dtype=np.float64) + b = np.asarray(b, dtype=np.float64) + N = b.shape[0] + if a.shape != b.shape: + raise ValueError('a and b must have same shape') + + # superposition only works if structures are centered + if center or superposition: + # make copies (do not change the user data!) + # weights=None is equivalent to all weights 1 + a = a - np.average(a, axis=0, weights=weights) + b = b - np.average(b, axis=0, weights=weights) + + if weights is not None: + if len(weights) != len(a): + raise ValueError('weights must have same length as a and b') + # weights are constructed as relative to the mean + weights = np.asarray(weights, dtype=np.float64) / np.mean(weights) + + if superposition: + return qcp.CalcRMSDRotationalMatrix(a, b, N, None, weights) + else: + if weights is not None: + return np.sqrt(np.sum(weights[:, np.newaxis] + * ((a - b) ** 2)) / N) + else: + return np.sqrt(np.sum((a - b) ** 2) / N)
+ + +def process_selection(select): + """Return a canonical selection dictionary. + + Parameters + ---------- + select : str or tuple or dict + + - `str` -> Any valid string selection + - `dict` -> ``{'mobile':sel1, 'reference':sel2}`` + - `tuple` -> ``(sel1, sel2)`` + + Returns + ------- + dict + selections for 'reference' and 'mobile'. Values are guarenteed to be + iterable (so that one can provide selections to retain order) + + Notes + ----- + The dictionary input for `select` can be generated by + :func:`fasta2select` based on a ClustalW_ or STAMP_ sequence alignment. + """ + + if isinstance(select, str): + select = {'reference': str(select), 'mobile': str(select)} + elif type(select) is tuple: + try: + select = {'mobile': select[0], 'reference': select[1]} + except IndexError: + raise IndexError( + "select must contain two selection strings " + "(reference, mobile)") from None + elif type(select) is dict: + # compatability hack to use new nomenclature + try: + select['mobile'] + select['reference'] + except KeyError: + raise KeyError( + "select dictionary must contain entries for keys " + "'mobile' and 'reference'." + ) from None + else: + raise TypeError("'select' must be either a string, 2-tuple, or dict") + select['mobile'] = asiterable(select['mobile']) + select['reference'] = asiterable(select['reference']) + return select + + +
[docs]class RMSD(AnalysisBase): + r"""Class to perform RMSD analysis on a trajectory. + + The RMSD will be computed for two groups of atoms and all frames in the + trajectory belonging to `atomgroup`. The groups of atoms are obtained by + applying the selection selection `select` to the changing `atomgroup` and + the fixed `reference`. + + Note + ---- + If you use trajectory data from simulations performed under **periodic + boundary conditions** then you *must make your molecules whole* before + performing RMSD calculations so that the centers of mass of the selected + and reference structure are properly superimposed. + + + Run the analysis with :meth:`RMSD.run`, which stores the results + in the array :attr:`RMSD.results.rmsd`. + + + .. versionchanged:: 1.0.0 + ``save()`` method was removed, use ``np.savetxt()`` on + :attr:`RMSD.results.rmsd` instead. + .. versionchanged:: 2.0.0 + :attr:`rmsd` results are now stored in a + :class:`MDAnalysis.analysis.base.Results` instance. + + """ + def __init__(self, atomgroup, reference=None, select='all', + groupselections=None, weights=None, weights_groupselections=False, + tol_mass=0.1, ref_frame=0, **kwargs): + r"""Parameters + ---------- + atomgroup : AtomGroup or Universe + Group of atoms for which the RMSD is calculated. If a trajectory is + associated with the atoms then the computation iterates over the + trajectory. + reference : AtomGroup or Universe (optional) + Group of reference atoms; if ``None`` then the current frame of + `atomgroup` is used. + select : str or dict or tuple (optional) + The selection to operate on; can be one of: + + 1. any valid selection string for + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` that + produces identical selections in `atomgroup` and `reference`; or + + 2. a dictionary ``{'mobile': sel1, 'reference': sel2}`` where *sel1* + and *sel2* are valid selection strings that are applied to + `atomgroup` and `reference` respectively (the + :func:`MDAnalysis.analysis.align.fasta2select` function returns such + a dictionary based on a ClustalW_ or STAMP_ sequence alignment); or + + 3. a tuple ``(sel1, sel2)`` + + When using 2. or 3. with *sel1* and *sel2* then these selection strings + are applied to `atomgroup` and `reference` respectively and should + generate *groups of equivalent atoms*. *sel1* and *sel2* can each also + be a *list of selection strings* to generate a + :class:`~MDAnalysis.core.groups.AtomGroup` with defined atom order as + described under :ref:`ordered-selections-label`). + + groupselections : list (optional) + A list of selections as described for `select`, with the difference + that these selections are *always applied to the full universes*, + i.e., ``atomgroup.universe.select_atoms(sel1)`` and + ``reference.universe.select_atoms(sel2)``. Each selection describes + additional RMSDs to be computed *after the structures have been + superimposed* according to `select`. No additional fitting is + performed.The output contains one additional column for each + selection. + + .. Note:: Experimental feature. Only limited error checking + implemented. + + weights : {"mass", ``None``} or array_like (optional) + 1. "mass" will use masses as weights for both `select` and `groupselections`. + + 2. ``None`` will weigh each atom equally for both `select` and `groupselections`. + + 3. If 1D float array of the same length as `atomgroup` is provided, + use each element of the `array_like` as a weight for the + corresponding atom in `select`, and assumes ``None`` for `groupselections`. + + weights_groupselections : False or list of {"mass", ``None`` or array_like} (optional) + 1. ``False`` will apply imposed weights to `groupselections` from + ``weights`` option if ``weights`` is either ``"mass"`` or ``None``. + Otherwise will assume a list of length equal to length of + `groupselections` filled with ``None`` values. + + 2. A list of {"mass", ``None`` or array_like} with the length of `groupselections` + will apply the weights to `groupselections` correspondingly. + + tol_mass : float (optional) + Reject match if the atomic masses for matched atoms differ by more + than `tol_mass`. + ref_frame : int (optional) + frame index to select frame from `reference` + verbose : bool (optional) + Show detailed progress of the calculation if set to ``True``; the + default is ``False``. + + Raises + ------ + SelectionError + If the selections from `atomgroup` and `reference` do not match. + TypeError + If `weights` or `weights_groupselections` is not of the appropriate type; + see also :func:`MDAnalysis.lib.util.get_weights` + ValueError + If `weights` are not compatible with `atomgroup` (not the same + length) or if it is not a 1D array (see + :func:`MDAnalysis.lib.util.get_weights`). + + A :exc:`ValueError` is also raised if the length of `weights_groupselections` + are not compatible with `groupselections`. + + Notes + ----- + The root mean square deviation :math:`\rho(t)` of a group of :math:`N` + atoms relative to a reference structure as a function of time is + calculated as + + .. math:: + + \rho(t) = \sqrt{\frac{1}{N} \sum_{i=1}^N w_i \left(\mathbf{x}_i(t) + - \mathbf{x}_i^{\text{ref}}\right)^2} + + The weights :math:`w_i` are calculated from the input weights `weights` + :math:`w'_i` as relative to the mean of the input weights: + + .. math:: + + w_i = \frac{w'_i}{\langle w' \rangle} + + The selected coordinates from `atomgroup` are optimally superimposed + (translation and rotation) on the `reference` coordinates at each time step + as to minimize the RMSD. Douglas Theobald's fast QCP algorithm + [Theobald2005]_ is used for the rotational superposition and to calculate + the RMSD (see :mod:`MDAnalysis.lib.qcprot` for implementation details). + + The class runs various checks on the input to ensure that the two atom + groups can be compared. This includes a comparison of atom masses (i.e., + only the positions of atoms of the same mass will be considered to be + correct for comparison). If masses should not be checked, just set + `tol_mass` to a large value such as 1000. + + .. _ClustalW: http://www.clustal.org/ + .. _STAMP: http://www.compbio.dundee.ac.uk/manuals/stamp.4.2/ + + + See Also + -------- + rmsd + + + .. versionadded:: 0.7.7 + .. versionchanged:: 0.8 + `groupselections` added + .. versionchanged:: 0.16.0 + Flexible weighting scheme with new `weights` keyword. + .. deprecated:: 0.16.0 + Instead of ``mass_weighted=True`` (removal in 0.17.0) use new + ``weights='mass'``; refactored to fit with AnalysisBase API + .. versionchanged:: 0.17.0 + removed deprecated `mass_weighted` keyword; `groupselections` + are *not* rotationally superimposed any more. + .. versionchanged:: 1.0.0 + `filename` keyword was removed. + + """ + super(RMSD, self).__init__(atomgroup.universe.trajectory, + **kwargs) + self.atomgroup = atomgroup + self.reference = reference if reference is not None else self.atomgroup + + select = process_selection(select) + self.groupselections = ([process_selection(s) for s in groupselections] + if groupselections is not None else []) + self.weights = weights + self.tol_mass = tol_mass + self.ref_frame = ref_frame + self.weights_groupselections = weights_groupselections + self.ref_atoms = self.reference.select_atoms(*select['reference']) + self.mobile_atoms = self.atomgroup.select_atoms(*select['mobile']) + + if len(self.ref_atoms) != len(self.mobile_atoms): + err = ("Reference and trajectory atom selections do " + "not contain the same number of atoms: " + "N_ref={0:d}, N_traj={1:d}".format(self.ref_atoms.n_atoms, + self.mobile_atoms.n_atoms)) + logger.exception(err) + raise SelectionError(err) + logger.info("RMS calculation " + "for {0:d} atoms.".format(len(self.ref_atoms))) + mass_mismatches = (np.absolute((self.ref_atoms.masses - + self.mobile_atoms.masses)) > + self.tol_mass) + + if np.any(mass_mismatches): + # diagnostic output: + logger.error("Atoms: reference | mobile") + for ar, at in zip(self.ref_atoms, self.mobile_atoms): + if ar.name != at.name: + logger.error("{0!s:>4} {1:3d} {2!s:>3} {3!s:>3} {4:6.3f}" + "| {5!s:>4} {6:3d} {7!s:>3} {8!s:>3}" + "{9:6.3f}".format(ar.segid, ar.resid, + ar.resname, ar.name, + ar.mass, at.segid, at.resid, + at.resname, at.name, + at.mass)) + errmsg = ("Inconsistent selections, masses differ by more than" + "{0:f}; mis-matching atoms" + "are shown above.".format(self.tol_mass)) + logger.error(errmsg) + raise SelectionError(errmsg) + del mass_mismatches + + # TODO: + # - make a group comparison a class that contains the checks above + # - use this class for the *select* group and the additional + # *groupselections* groups each a dict with reference/mobile + self._groupselections_atoms = [ + { + 'reference': self.reference.universe.select_atoms(*s['reference']), + 'mobile': self.atomgroup.universe.select_atoms(*s['mobile']), + } + for s in self.groupselections] + # sanity check + for igroup, (sel, atoms) in enumerate(zip(self.groupselections, + self._groupselections_atoms)): + if len(atoms['mobile']) != len(atoms['reference']): + logger.exception('SelectionError: Group Selection') + raise SelectionError( + "Group selection {0}: {1} | {2}: Reference and trajectory " + "atom selections do not contain the same number of atoms: " + "N_ref={3}, N_traj={4}".format( + igroup, sel['reference'], sel['mobile'], + len(atoms['reference']), len(atoms['mobile']))) + + # check weights type + acceptable_dtypes = (np.dtype('float64'), np.dtype('int64')) + msg = ("weights should only be 'mass', None or 1D float array." + "For weights on groupselections, " + "use **weight_groupselections**") + + if iterable(self.weights): + element_lens = [] + for element in self.weights: + if iterable(element): + element_lens.append(len(element)) + else: + element_lens.append(1) + if np.unique(element_lens).size > 1: + # jagged data structure + raise TypeError(msg) + if np.array(element).dtype not in acceptable_dtypes: + raise TypeError(msg) + + if iterable(self.weights) or self.weights != "mass": + get_weights(self.mobile_atoms, self.weights) + + if self.weights_groupselections: + if len(self.weights_groupselections) != len(self.groupselections): + raise ValueError("Length of weights_groupselections is not equal to " + "length of groupselections ") + for weights, atoms, selection in zip(self.weights_groupselections, + self._groupselections_atoms, + self.groupselections): + try: + if iterable(weights) or weights != "mass": + get_weights(atoms['mobile'], weights) + except Exception as e: + raise type(e)(str(e) + ' happens in selection %s' % selection['mobile']) + + + def _prepare(self): + self._n_atoms = self.mobile_atoms.n_atoms + if not self.weights_groupselections: + if not iterable(self.weights): # apply 'mass' or 'None' to groupselections + self.weights_groupselections = [self.weights] * len(self.groupselections) + else: + self.weights_groupselections = [None] * len(self.groupselections) + + for igroup, (weights, atoms) in enumerate(zip(self.weights_groupselections, + self._groupselections_atoms)): + if str(weights) == 'mass': + self.weights_groupselections[igroup] = atoms['mobile'].masses + if weights is not None: + self.weights_groupselections[igroup] = np.asarray(self.weights_groupselections[igroup], + dtype=np.float64) / \ + np.mean(self.weights_groupselections[igroup]) + # add the array of weights to weights_select + self.weights_select = get_weights(self.mobile_atoms, self.weights) + self.weights_ref = get_weights(self.ref_atoms, self.weights) + if self.weights_select is not None: + self.weights_select = np.asarray(self.weights_select, dtype=np.float64) / \ + np.mean(self.weights_select) + self.weights_ref = np.asarray(self.weights_ref, dtype=np.float64) / \ + np.mean(self.weights_ref) + + current_frame = self.reference.universe.trajectory.ts.frame + + try: + # Move to the ref_frame + # (coordinates MUST be stored in case the ref traj is advanced + # elsewhere or if ref == mobile universe) + self.reference.universe.trajectory[self.ref_frame] + self._ref_com = self.ref_atoms.center(self.weights_ref) + # makes a copy + self._ref_coordinates = self.ref_atoms.positions - self._ref_com + if self._groupselections_atoms: + self._groupselections_ref_coords64 = [(self.reference. + select_atoms(*s['reference']). + positions.astype(np.float64)) for s in + self.groupselections] + finally: + # Move back to the original frame + self.reference.universe.trajectory[current_frame] + + self._ref_coordinates64 = self._ref_coordinates.astype(np.float64) + + if self._groupselections_atoms: + # Only carry out a rotation if we want to calculate secondary + # RMSDs. + # R: rotation matrix that aligns r-r_com, x~-x~com + # (x~: selected coordinates, x: all coordinates) + # Final transformed traj coordinates: x' = (x-x~_com)*R + ref_com + self._rot = np.zeros(9, dtype=np.float64) # allocate space + self._R = self._rot.reshape(3, 3) + else: + self._rot = None + + self.results.rmsd = np.zeros((self.n_frames, + 3 + len(self._groupselections_atoms))) + + self._mobile_coordinates64 = self.mobile_atoms.positions.copy().astype(np.float64) + + def _single_frame(self): + mobile_com = self.mobile_atoms.center(self.weights_select).astype(np.float64) + self._mobile_coordinates64[:] = self.mobile_atoms.positions + self._mobile_coordinates64 -= mobile_com + + self.results.rmsd[self._frame_index, :2] = self._ts.frame, self._trajectory.time + + if self._groupselections_atoms: + # superimpose structures: MDAnalysis qcprot needs Nx3 coordinate + # array with float64 datatype (float32 leads to errors up to 1e-3 in + # RMSD). Note that R is defined in such a way that it acts **to the + # left** so that we can easily use broadcasting and save one + # expensive numpy transposition. + + self.results.rmsd[self._frame_index, 2] = qcp.CalcRMSDRotationalMatrix( + self._ref_coordinates64, self._mobile_coordinates64, + self._n_atoms, self._rot, self.weights_select) + + self._R[:, :] = self._rot.reshape(3, 3) + # Transform each atom in the trajectory (use inplace ops to + # avoid copying arrays) (Marginally (~3%) faster than + # "ts.positions[:] = (ts.positions - x_com) * R + ref_com".) + self._ts.positions[:] -= mobile_com + + # R acts to the left & is broadcasted N times. + self._ts.positions[:] = np.dot(self._ts.positions, self._R) + self._ts.positions += self._ref_com + + # 2) calculate secondary RMSDs (without any further + # superposition) + for igroup, (refpos, atoms) in enumerate( + zip(self._groupselections_ref_coords64, + self._groupselections_atoms), 3): + self.results.rmsd[self._frame_index, igroup] = rmsd( + refpos, atoms['mobile'].positions, + weights=self.weights_groupselections[igroup-3], + center=False, superposition=False) + else: + # only calculate RMSD by setting the Rmatrix to None (no need + # to carry out the rotation as we already get the optimum RMSD) + self.results.rmsd[self._frame_index, 2] = qcp.CalcRMSDRotationalMatrix( + self._ref_coordinates64, self._mobile_coordinates64, + self._n_atoms, None, self.weights_select) + + @property + def rmsd(self): + wmsg = ("The `rmsd` attribute was deprecated in MDAnalysis 2.0.0 and " + "will be removed in MDAnalysis 3.0.0. Please use " + "`results.rmsd` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rmsd
+ + +
[docs]class RMSF(AnalysisBase): + r"""Calculate RMSF of given atoms across a trajectory. + + Note + ---- + No RMSD-superposition is performed; it is assumed that the user is + providing a trajectory where the protein of interest has been structurally + aligned to a reference structure (see the Examples section below). The + protein also has be whole because periodic boundaries are not taken into + account. + + + Run the analysis with :meth:`RMSF.run`, which stores the results + in the array :attr:`RMSF.results.rmsf`. + + """ + def __init__(self, atomgroup, **kwargs): + r"""Parameters + ---------- + atomgroup : AtomGroup + Atoms for which RMSF is calculated + verbose : bool (optional) + Show detailed progress of the calculation if set to ``True``; the + default is ``False``. + + Raises + ------ + ValueError + raised if negative values are calculated, which indicates that a + numerical overflow or underflow occured + + + Notes + ----- + The root mean square fluctuation of an atom :math:`i` is computed as the + time average + + .. math:: + + \rho_i = \sqrt{\left\langle (\mathbf{x}_i - \langle\mathbf{x}_i\rangle)^2 \right\rangle} + + No mass weighting is performed. + + This method implements an algorithm for computing sums of squares while + avoiding overflows and underflows :cite:p:`Welford1962`. + + + Examples + -------- + + In this example we calculate the residue RMSF fluctuations by analyzing + the :math:`\text{C}_\alpha` atoms. First we need to fit the trajectory + to the average structure as a reference. That requires calculating the + average structure first. Because we need to analyze and manipulate the + same trajectory multiple times, we are going to load it into memory + using the :mod:`~MDAnalysis.coordinates.MemoryReader`. (If your + trajectory does not fit into memory, you will need to :ref:`write out + intermediate trajectories <writing-trajectories>` to disk or + :ref:`generate an in-memory universe + <creating-in-memory-trajectory-label>` that only contains, say, the + protein):: + + import MDAnalysis as mda + from MDAnalysis.analysis import align + + from MDAnalysis.tests.datafiles import TPR, XTC + + u = mda.Universe(TPR, XTC, in_memory=True) + protein = u.select_atoms("protein") + + # 1) the current trajectory contains a protein split across + # periodic boundaries, so we first make the protein whole and + # center it in the box using on-the-fly transformations + import MDAnalysis.transformations as trans + + not_protein = u.select_atoms('not protein') + transforms = [trans.unwrap(protein), + trans.center_in_box(protein, wrap=True), + trans.wrap(not_protein)] + u.trajectory.add_transformations(*transforms) + + # 2) fit to the initial frame to get a better average structure + # (the trajectory is changed in memory) + prealigner = align.AlignTraj(u, u, select="protein and name CA", + in_memory=True).run() + + # 3) reference = average structure + ref_coordinates = u.trajectory.timeseries(asel=protein).mean(axis=1) + # make a reference structure (need to reshape into a 1-frame + # "trajectory") + reference = mda.Merge(protein).load_new(ref_coordinates[:, None, :], + order="afc") + + We created a new universe ``reference`` that contains a single frame + with the averaged coordinates of the protein. Now we need to fit the + whole trajectory to the reference by minimizing the RMSD. We use + :class:`MDAnalysis.analysis.align.AlignTraj`:: + + aligner = align.AlignTraj(u, reference, + select="protein and name CA", + in_memory=True).run() + + The trajectory is now fitted to the reference (the RMSD is stored as + `aligner.results.rmsd` for further inspection). Now we can calculate + the RMSF:: + + from MDAnalysis.analysis.rms import RMSF + + calphas = protein.select_atoms("name CA") + rmsfer = RMSF(calphas, verbose=True).run() + + and plot:: + + import matplotlib.pyplot as plt + + plt.plot(calphas.resnums, rmsfer.results.rmsf) + + + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + Welford1962 + + + .. versionadded:: 0.11.0 + .. versionchanged:: 0.16.0 + refactored to fit with AnalysisBase API + .. deprecated:: 0.16.0 + the keyword argument `quiet` is deprecated in favor of `verbose`. + .. versionchanged:: 0.17.0 + removed unused keyword `weights` + .. versionchanged:: 1.0.0 + Support for the ``start``, ``stop``, and ``step`` keywords has been + removed. These should instead be passed to :meth:`RMSF.run`. + + """ + super(RMSF, self).__init__(atomgroup.universe.trajectory, **kwargs) + self.atomgroup = atomgroup + + def _prepare(self): + self.sumsquares = np.zeros((self.atomgroup.n_atoms, 3)) + self.mean = self.sumsquares.copy() + + def _single_frame(self): + k = self._frame_index + self.sumsquares += (k / (k+1.0)) * (self.atomgroup.positions - self.mean) ** 2 + self.mean = (k * self.mean + self.atomgroup.positions) / (k + 1) + + def _conclude(self): + k = self._frame_index + self.results.rmsf = np.sqrt(self.sumsquares.sum(axis=1) / (k + 1)) + + if not (self.results.rmsf >= 0).all(): + raise ValueError("Some RMSF values negative; overflow " + + "or underflow occurred") + + @property + def rmsf(self): + wmsg = ("The `rmsf` attribute was deprecated in MDAnalysis 2.0.0 and " + "will be removed in MDAnalysis 3.0.0. Please use " + "`results.rmsd` instead.") + warnings.warn(wmsg, DeprecationWarning) + return self.results.rmsf
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.html b/2.7.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.html new file mode 100644 index 0000000000..274248eac7 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.html @@ -0,0 +1,1212 @@ + + + + + + MDAnalysis.analysis.waterdynamics — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.analysis.waterdynamics

+# -*- 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-2017 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
+#
+
+"""Water dynamics analysis --- :mod:`MDAnalysis.analysis.waterdynamics`
+=======================================================================
+
+:Author: Alejandro Bernardin
+:Year: 2014-2015
+:Copyright: GNU Public License v3
+
+.. versionadded:: 0.11.0
+
+This module provides functions to analyze water dynamics trajectories and water
+interactions with other molecules.  The functions in this module are: water
+orientational relaxation (WOR) :cite:p:`Yeh1999`, hydrogen bond lifetimes (HBL)
+:cite:p:`Rapaport1983`, angular distribution (AD) :cite:p:`Grigera1995`, mean
+square displacement (MSD) :cite:p:`Brodka1994` and survival probability (SP)
+:cite:p:`Liu2004`.
+
+For more information about this type of analysis please refer to
+:cite:p:`ArayaSecchi2014` (water in a protein cavity) and
+:cite:p:`Milischuk2011` (water in a nanopore).
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Rapaport1983
+    Yeh1999
+    Grigera1995
+    Liu2004
+    Brodka1994
+    Milischuk2011
+
+
+Example use of the analysis classes
+-----------------------------------
+
+HydrogenBondLifetimes
+~~~~~~~~~~~~~~~~~~~~~
+
+To analyse hydrogen bond lifetime, use
+:meth:`MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.lifetime`.
+
+See Also
+--------
+:mod:`MDAnalysis.analysis.hydrogenbonds.hbond_analysis`
+
+
+WaterOrientationalRelaxation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Analyzing water orientational relaxation (WOR)
+:class:`WaterOrientationalRelaxation`. In this case we are analyzing "how fast"
+water molecules are rotating/changing direction. If WOR is very stable we can
+assume that water molecules are rotating/changing direction very slow, on the
+other hand, if WOR decay very fast, we can assume that water molecules are
+rotating/changing direction very fast::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.waterdynamics import WaterOrientationalRelaxation as WOR
+
+  u = MDAnalysis.Universe(pdb, trajectory)
+  select = "byres name OH2 and sphzone 6.0 protein and resid 42"
+  WOR_analysis = WOR(universe, select, 0, 1000, 20)
+  WOR_analysis.run()
+  time = 0
+  #now we print the data ready to plot. The first two columns are WOR_OH vs t plot,
+  #the second two columns are WOR_HH vs t graph and the third two columns are WOR_dip vs t graph
+  for WOR_OH, WOR_HH, WOR_dip in WOR_analysis.timeseries:
+        print("{time} {WOR_OH} {time} {WOR_HH} {time} {WOR_dip}".format(time=time, WOR_OH=WOR_OH, WOR_HH=WOR_HH,WOR_dip=WOR_dip))
+        time += 1
+
+  #now, if we want, we can plot our data
+  plt.figure(1,figsize=(18, 6))
+
+  #WOR OH
+  plt.subplot(131)
+  plt.xlabel('time')
+  plt.ylabel('WOR')
+  plt.title('WOR OH')
+  plt.plot(range(0,time),[column[0] for column in WOR_analysis.timeseries])
+
+  #WOR HH
+  plt.subplot(132)
+  plt.xlabel('time')
+  plt.ylabel('WOR')
+  plt.title('WOR HH')
+  plt.plot(range(0,time),[column[1] for column in WOR_analysis.timeseries])
+
+  #WOR dip
+  plt.subplot(133)
+  plt.xlabel('time')
+  plt.ylabel('WOR')
+  plt.title('WOR dip')
+  plt.plot(range(0,time),[column[2] for column in WOR_analysis.timeseries])
+
+  plt.show()
+
+where t0 = 0, tf = 1000 and dtmax = 20. In this way we create 20 windows
+timesteps (20 values in the x axis), the first window is created with 1000
+timestep average (1000/1), the second window is created with 500 timestep
+average(1000/2), the third window is created with 333 timestep average (1000/3)
+and so on.
+
+AngularDistribution
+~~~~~~~~~~~~~~~~~~~
+
+Analyzing angular distribution (AD) :class:`AngularDistribution` for OH vector,
+HH vector and dipole vector. It returns a line histogram with vector
+orientation preference. A straight line in the output plot means no
+preferential orientation in water molecules. In this case we are analyzing if
+water molecules have some orientational preference, in this way we can see if
+water molecules are under an electric field or if they are interacting with
+something (residue, protein, etc)::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.waterdynamics import AngularDistribution as AD
+
+  u = MDAnalysis.Universe(pdb, trajectory)
+  selection = "byres name OH2 and sphzone 6.0 (protein and (resid 42 or resid 26) )"
+  bins = 30
+  AD_analysis = AD(universe,selection,bins)
+  AD_analysis.run()
+  #now we print data ready to graph. The first two columns are P(cos(theta)) vs cos(theta) for OH vector ,
+  #the seconds two columns are P(cos(theta)) vs cos(theta) for HH vector and thirds two columns
+  #are P(cos(theta)) vs cos(theta) for dipole vector
+  for bin in range(bins):
+        print("{AD_analysisOH} {AD_analysisHH} {AD_analysisDip}".format(AD_analysis.graph0=AD_analysis.graph[0][bin], AD_analysis.graph1=AD_analysis.graph[1][bin],AD_analysis.graph2=AD_analysis.graph[2][bin]))
+
+  #and if we want to graph our results
+  plt.figure(1,figsize=(18, 6))
+
+  #AD OH
+  plt.subplot(131)
+  plt.xlabel('cos theta')
+  plt.ylabel('P(cos theta)')
+  plt.title('PDF cos theta for OH')
+  plt.plot([float(column.split()[0]) for column in AD_analysis.graph[0][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[0][:-1]])
+
+  #AD HH
+  plt.subplot(132)
+  plt.xlabel('cos theta')
+  plt.ylabel('P(cos theta)')
+  plt.title('PDF cos theta for HH')
+  plt.plot([float(column.split()[0]) for column in AD_analysis.graph[1][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[1][:-1]])
+
+  #AD dip
+  plt.subplot(133)
+  plt.xlabel('cos theta')
+  plt.ylabel('P(cos theta)')
+  plt.title('PDF cos theta for dipole')
+  plt.plot([float(column.split()[0]) for column in AD_analysis.graph[2][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[2][:-1]])
+
+  plt.show()
+
+
+where `P(cos(theta))` is the angular distribution or angular probabilities.
+
+
+MeanSquareDisplacement
+~~~~~~~~~~~~~~~~~~~~~~
+
+Analyzing mean square displacement (MSD) :class:`MeanSquareDisplacement` for
+water molecules. In this case we are analyzing the average distance that water
+molecules travels inside protein in XYZ direction (cylindric zone of radius
+11[nm], Zmax 4.0[nm] and Zmin -8.0[nm]). A strong rise mean a fast movement of
+water molecules, a weak rise mean slow movement of particles::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.waterdynamics import MeanSquareDisplacement as MSD
+
+  u = MDAnalysis.Universe(pdb, trajectory)
+  select = "byres name OH2 and cyzone 11.0 4.0 -8.0 protein"
+  MSD_analysis = MSD(universe, select, 0, 1000, 20)
+  MSD_analysis.run()
+  #now we print data ready to graph. The graph
+  #represents MSD vs t
+  time = 0
+  for msd in MSD_analysis.timeseries:
+        print("{time} {msd}".format(time=time, msd=msd))
+        time += 1
+
+  #Plot
+  plt.xlabel('time')
+  plt.ylabel('MSD')
+  plt.title('MSD')
+  plt.plot(range(0,time),MSD_analysis.timeseries)
+  plt.show()
+
+
+.. _SP-examples:
+
+SurvivalProbability
+~~~~~~~~~~~~~~~~~~~
+
+Analyzing survival probability (SP) :class:`SurvivalProbability` of molecules.
+In this case we are analyzing how long water molecules remain in a
+sphere of radius 12.3 centered in the geometrical center of resid 42 and 26.
+A slow decay of SP means a long permanence time of water molecules in
+the zone, on the other hand, a fast decay means a short permanence time::
+
+  import MDAnalysis
+  from MDAnalysis.analysis.waterdynamics import SurvivalProbability as SP
+  import matplotlib.pyplot as plt
+
+  universe = MDAnalysis.Universe(pdb, trajectory)
+  select = "byres name OH2 and sphzone 12.3 (resid 42 or resid 26) "
+  sp = SP(universe, select, verbose=True)
+  sp.run(start=0, stop=101, tau_max=20)
+  tau_timeseries = sp.tau_timeseries
+  sp_timeseries = sp.sp_timeseries
+
+  # print in console
+  for tau, sp in zip(tau_timeseries, sp_timeseries):
+        print("{time} {sp}".format(time=tau, sp=sp))
+
+  # plot
+  plt.xlabel('Time')
+  plt.ylabel('SP')
+  plt.title('Survival Probability')
+  plt.plot(tau_timeseries, sp_timeseries)
+  plt.show()
+
+One should note that the `stop` keyword as used in the above example has an
+`exclusive` behaviour, i.e. here the final frame used will be 100 not 101.
+This behaviour is aligned with :class:`AnalysisBase` but currently differs from
+other :mod:`MDAnalysis.analysis.waterdynamics` classes, which all exhibit
+`inclusive` behaviour for their final frame selections.
+
+Another example applies to the situation where you work with many different "residues".
+Here we calculate the SP of a potassium ion around each lipid in a membrane and
+average the results. In this example, if the SP analysis were run without treating each lipid
+separately, potassium ions may hop from one lipid to another and still be counted as remaining
+in the specified region. That is, the survival probability of the potassium ion around the
+entire membrane will be calculated.
+
+Note, for this example, it is advisable to use `Universe(in_memory=True)` to ensure that the
+simulation is not being reloaded into memory for each lipid::
+
+  import MDAnalysis as mda
+  from MDAnalysis.analysis.waterdynamics import SurvivalProbability as SP
+  import numpy as np
+
+  u = mda.Universe("md.gro", "md100ns.xtc", in_memory=True)
+  lipids = u.select_atoms('resname LIPIDS')
+  joined_sp_timeseries = [[] for _ in range(20)]
+  for lipid in lipids.residues:
+      print("Lipid ID: %d" % lipid.resid)
+
+      select = "resname POTASSIUM and around 3.5 (resid %d and name O13 O14) " % lipid.resid
+      sp = SP(u, select, verbose=True)
+      sp.run(tau_max=20)
+
+      # Raw SP points for each tau:
+      for sps, new_sps in zip(joined_sp_timeseries, sp.sp_timeseries_data):
+          sps.extend(new_sps)
+
+  # average all SP datapoints
+  sp_data = [np.mean(sp) for sp in joined_sp_timeseries]
+
+  for tau, sp in zip(range(1, tau_max + 1), sp_data):
+      print("{time} {sp}".format(time=tau, sp=sp))
+
+.. _Output:
+
+Output
+------
+
+WaterOrientationalRelaxation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Water orientational relaxation (WOR) data is returned per window timestep,
+which is stored in :attr:`WaterOrientationalRelaxation.timeseries`::
+
+    results = [
+        [ # time t0
+            <WOR_OH>, <WOR_HH>, <WOR_dip>
+        ],
+        [ # time t1
+            <WOR_OH>, <WOR_HH>, <WOR_dip>
+        ],
+        ...
+     ]
+
+AngularDistribution
+~~~~~~~~~~~~~~~~~~~
+
+Angular distribution (AD) data is returned per vector, which is stored in
+:attr:`AngularDistribution.graph`. In fact, AngularDistribution returns a
+histogram::
+
+    results = [
+        [ # OH vector values
+          # the values are order in this way: <x_axis  y_axis>
+            <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+        ],
+        [ # HH vector values
+            <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+        ],
+        [ # dip vector values
+           <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+        ],
+     ]
+
+MeanSquareDisplacement
+~~~~~~~~~~~~~~~~~~~~~~
+
+Mean Square Displacement (MSD) data is returned in a list, which each element
+represents a MSD value in its respective window timestep. Data is stored in
+:attr:`MeanSquareDisplacement.timeseries`::
+
+    results = [
+         #MSD values orders by window timestep
+            <MSD_t0>, <MSD_t1>, ...
+     ]
+
+SurvivalProbability
+~~~~~~~~~~~~~~~~~~~
+
+Survival Probability (SP) computes two lists: a list of taus (:attr:`SurvivalProbability.tau_timeseries`) and a list of
+the corresponding survival probabilities (:attr:`SurvivalProbability.sp_timeseries`).
+
+    results = [ tau1, tau2, ..., tau_n ], [ sp_tau1, sp_tau2, ..., sp_tau_n]
+
+Additionally, a list :attr:`SurvivalProbability.sp_timeseries_data`, is provided which contains
+a list of all SPs calculated for each tau. This can be used to compute the distribution or time dependence of SP, etc.
+
+Classes
+--------
+
+.. autoclass:: WaterOrientationalRelaxation
+   :members:
+   :inherited-members:
+
+.. autoclass:: AngularDistribution
+   :members:
+   :inherited-members:
+
+.. autoclass:: MeanSquareDisplacement
+   :members:
+   :inherited-members:
+
+.. autoclass:: SurvivalProbability
+   :members:
+   :inherited-members:
+
+"""
+from MDAnalysis.lib.correlations import autocorrelation, correct_intermittency
+import MDAnalysis.analysis.hbonds
+from itertools import zip_longest
+import logging
+import warnings
+import numpy as np
+
+
+logger = logging.getLogger('MDAnalysis.analysis.waterdynamics')
+from MDAnalysis.lib.log import ProgressBar
+
+
+
[docs]class WaterOrientationalRelaxation(object): + r"""Water orientation relaxation analysis + + Function to evaluate the Water Orientational Relaxation proposed by Yu-ling + Yeh and Chung-Yuan Mou :cite:p:`Yeh1999`. WaterOrientationalRelaxation + indicates "how fast" water molecules are rotating or changing direction. + This is a time correlation function given by: + + .. math:: + C_{\hat u}(\tau)=\langle \mathit{P}_2[\mathbf{\hat{u}}(t_0)\cdot\mathbf{\hat{u}}(t_0+\tau)]\rangle + + where :math:`P_2=(3x^2-1)/2` is the second-order Legendre polynomial and :math:`\hat{u}` is + a unit vector along HH, OH or dipole vector. + + + Parameters + ---------- + universe : Universe + Universe object + selection : str + Selection string for water [‘byres name OH2’]. + t0 : int + frame where analysis begins + tf : int + frame where analysis ends + dtmax : int + Maximum dt size, `dtmax` < `tf` or it will crash. + + + .. versionadded:: 0.11.0 + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + """ + + def __init__(self, universe, select, t0, tf, dtmax, nproc=1): + self.universe = universe + self.selection = select + self.t0 = t0 + self.tf = tf + self.dtmax = dtmax + self.nproc = nproc + self.timeseries = None + + def _repeatedIndex(self, selection, dt, totalFrames): + """ + Indicates the comparation between all the t+dt. + The results is a list of list with all the repeated index per frame + (or time). + Ex: dt=1, so compare frames (1,2),(2,3),(3,4)... + Ex: dt=2, so compare frames (1,3),(3,5),(5,7)... + Ex: dt=3, so compare frames (1,4),(4,7),(7,10)... + """ + rep = [] + for i in range(int(round((totalFrames - 1) / float(dt)))): + if (dt * i + dt < totalFrames): + rep.append(self._sameMolecTandDT( + selection, dt * i, (dt * i) + dt)) + return rep + + def _getOneDeltaPoint(self, universe, repInd, i, t0, dt): + """ + Gives one point to calculate the mean and gets one point of the plot + C_vect vs t. + Ex: t0=1 and tau=1 so calculate the t0-tau=1-2 intervale. + Ex: t0=5 and tau=3 so calcultate the t0-tau=5-8 intervale. + i = come from getMeanOnePoint (named j) (int) + """ + valOH = 0 + valHH = 0 + valdip = 0 + n = 0 + for j in range(len(repInd[i]) // 3): + begj = 3 * j + universe.trajectory[t0] + Ot0 = repInd[i][begj] + H1t0 = repInd[i][begj + 1] + H2t0 = repInd[i][begj + 2] + OHVector0 = H1t0.position - Ot0.position + HHVector0 = H1t0.position - H2t0.position + dipVector0 = ((H1t0.position + H2t0.position) * 0.5) - Ot0.position + + universe.trajectory[t0 + dt] + Otp = repInd[i][begj] + H1tp = repInd[i][begj + 1] + H2tp = repInd[i][begj + 2] + + OHVectorp = H1tp.position - Otp.position + HHVectorp = H1tp.position - H2tp.position + dipVectorp = ((H1tp.position + H2tp.position) * 0.5) - Otp.position + + normOHVector0 = np.linalg.norm(OHVector0) + normOHVectorp = np.linalg.norm(OHVectorp) + normHHVector0 = np.linalg.norm(HHVector0) + normHHVectorp = np.linalg.norm(HHVectorp) + normdipVector0 = np.linalg.norm(dipVector0) + normdipVectorp = np.linalg.norm(dipVectorp) + + unitOHVector0 = [OHVector0[0] / normOHVector0, + OHVector0[1] / normOHVector0, + OHVector0[2] / normOHVector0] + unitOHVectorp = [OHVectorp[0] / normOHVectorp, + OHVectorp[1] / normOHVectorp, + OHVectorp[2] / normOHVectorp] + unitHHVector0 = [HHVector0[0] / normHHVector0, + HHVector0[1] / normHHVector0, + HHVector0[2] / normHHVector0] + unitHHVectorp = [HHVectorp[0] / normHHVectorp, + HHVectorp[1] / normHHVectorp, + HHVectorp[2] / normHHVectorp] + unitdipVector0 = [dipVector0[0] / normdipVector0, + dipVector0[1] / normdipVector0, + dipVector0[2] / normdipVector0] + unitdipVectorp = [dipVectorp[0] / normdipVectorp, + dipVectorp[1] / normdipVectorp, + dipVectorp[2] / normdipVectorp] + + valOH += self.lg2(np.dot(unitOHVector0, unitOHVectorp)) + valHH += self.lg2(np.dot(unitHHVector0, unitHHVectorp)) + valdip += self.lg2(np.dot(unitdipVector0, unitdipVectorp)) + n += 1 + return (valOH/n, valHH/n, valdip/n) if n > 0 else (0, 0, 0) + + + def _getMeanOnePoint(self, universe, selection1, selection_str, dt, + totalFrames): + """ + This function gets one point of the plot C_vec vs t. It uses the + _getOneDeltaPoint() function to calculate the average. + + """ + repInd = self._repeatedIndex(selection1, dt, totalFrames) + sumsdt = 0 + n = 0.0 + sumDeltaOH = 0.0 + sumDeltaHH = 0.0 + sumDeltadip = 0.0 + + for j in range(totalFrames // dt - 1): + a = self._getOneDeltaPoint(universe, repInd, j, sumsdt, dt) + sumDeltaOH += a[0] + sumDeltaHH += a[1] + sumDeltadip += a[2] + sumsdt += dt + n += 1 + + # if no water molecules remain in selection, there is nothing to get + # the mean, so n = 0. + return (sumDeltaOH / n, sumDeltaHH / n, sumDeltadip / n) if n > 0 else (0, 0, 0) + + def _sameMolecTandDT(self, selection, t0d, tf): + """ + Compare the molecules in the t0d selection and the t0d+dt selection and + select only the particles that are repeated in both frame. This is to + consider only the molecules that remains in the selection after the dt + time has elapsed. + The result is a list with the indices of the atoms. + """ + a = set(selection[t0d]) + b = set(selection[tf]) + sort = sorted(list(a.intersection(b))) + return sort + + def _selection_serial(self, universe, selection_str): + selection = [] + for ts in ProgressBar(universe.trajectory, verbose=True, + total=universe.trajectory.n_frames): + selection.append(universe.select_atoms(selection_str)) + return selection + +
[docs] @staticmethod + def lg2(x): + """Second Legendre polynomial""" + return (3*x*x - 1)/2
+ +
[docs] def run(self, **kwargs): + """Analyze trajectory and produce timeseries""" + + # All the selection to an array, this way is faster than selecting + # later. + if self.nproc == 1: + selection_out = self._selection_serial( + self.universe, self.selection) + else: + # selection_out = self._selection_parallel(self.universe, + # self.selection, self.nproc) + # parallel selection to be implemented + selection_out = self._selection_serial( + self.universe, self.selection) + self.timeseries = [] + for dt in list(range(1, self.dtmax + 1)): + output = self._getMeanOnePoint( + self.universe, selection_out, self.selection, dt, self.tf) + self.timeseries.append(output)
+ + +
[docs]class AngularDistribution(object): + r"""Angular distribution function analysis + + The angular distribution function (AD) is defined as the distribution + probability of the cosine of the :math:`\theta` angle formed by the OH + vector, HH vector or dipolar vector of water molecules and a vector + :math:`\hat n` parallel to chosen axis (z is the default value). The cosine + is define as :math:`\cos \theta = \hat u \cdot \hat n`, where :math:`\hat + u` is OH, HH or dipole vector. It creates a histogram and returns a list + of lists, see Output_. The AD is also know as Angular Probability (AP). + + + Parameters + ---------- + universe : Universe + Universe object + select : str + Selection string to evaluate its angular distribution ['byres name OH2'] + bins : int (optional) + Number of bins to create the histogram by means of :func:`numpy.histogram` + axis : {'x', 'y', 'z'} (optional) + Axis to create angle with the vector (HH, OH or dipole) and calculate + cosine theta ['z']. + + + .. versionadded:: 0.11.0 + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + """ + + def __init__(self, universe, select, bins=40, nproc=1, axis="z"): + self.universe = universe + self.selection_str = select + self.bins = bins + self.nproc = nproc + self.axis = axis + self.graph = None + + def _getCosTheta(self, universe, selection, axis): + valOH = [] + valHH = [] + valdip = [] + + i = 0 + while i <= (len(selection) - 1): + universe.trajectory[i] + line = selection[i].positions + + Ot0 = line[::3] + H1t0 = line[1::3] + H2t0 = line[2::3] + + OHVector0 = H1t0 - Ot0 + HHVector0 = H1t0 - H2t0 + dipVector0 = (H1t0 + H2t0) * 0.5 - Ot0 + + unitOHVector0 = OHVector0 / \ + np.linalg.norm(OHVector0, axis=1)[:, None] + unitHHVector0 = HHVector0 / \ + np.linalg.norm(HHVector0, axis=1)[:, None] + unitdipVector0 = dipVector0 / \ + np.linalg.norm(dipVector0, axis=1)[:, None] + + j = 0 + while j < len(line) / 3: + if axis == "z": + valOH.append(unitOHVector0[j][2]) + valHH.append(unitHHVector0[j][2]) + valdip.append(unitdipVector0[j][2]) + + elif axis == "x": + valOH.append(unitOHVector0[j][0]) + valHH.append(unitHHVector0[j][0]) + valdip.append(unitdipVector0[j][0]) + + elif axis == "y": + valOH.append(unitOHVector0[j][1]) + valHH.append(unitHHVector0[j][1]) + valdip.append(unitdipVector0[j][1]) + + j += 1 + i += 1 + return (valOH, valHH, valdip) + + def _getHistogram(self, universe, selection, bins, axis): + """ + This function gets a normalized histogram of the cos(theta) values. It + return a list of list. + """ + a = self._getCosTheta(universe, selection, axis) + cosThetaOH = a[0] + cosThetaHH = a[1] + cosThetadip = a[2] + lencosThetaOH = len(cosThetaOH) + lencosThetaHH = len(cosThetaHH) + lencosThetadip = len(cosThetadip) + histInterval = bins + histcosThetaOH = np.histogram(cosThetaOH, histInterval, density=True) + histcosThetaHH = np.histogram(cosThetaHH, histInterval, density=True) + histcosThetadip = np.histogram(cosThetadip, histInterval, density=True) + + return (histcosThetaOH, histcosThetaHH, histcosThetadip) + + def _hist2column(self, aList): + """ + This function transform from the histogram format + to a column format. + """ + a = [] + for x in zip_longest(*aList, fillvalue="."): + a.append(" ".join(str(i) for i in x)) + return a + +
[docs] def run(self, **kwargs): + """Function to evaluate the angular distribution of cos(theta)""" + + if self.nproc == 1: + selection = self._selection_serial( + self.universe, self.selection_str) + else: + # not implemented yet + # selection = self._selection_parallel(self.universe, + # self.selection_str,self.nproc) + selection = self._selection_serial( + self.universe, self.selection_str) + + self.graph = [] + output = self._getHistogram( + self.universe, selection, self.bins, self.axis) + # this is to format the exit of the file + # maybe this output could be improved + listOH = [list(output[0][1]), list(output[0][0])] + listHH = [list(output[1][1]), list(output[1][0])] + listdip = [list(output[2][1]), list(output[2][0])] + + self.graph.append(self._hist2column(listOH)) + self.graph.append(self._hist2column(listHH)) + self.graph.append(self._hist2column(listdip))
+ + def _selection_serial(self, universe, selection_str): + selection = [] + for ts in ProgressBar(universe.trajectory, verbose=True, + total=universe.trajectory.n_frames): + selection.append(universe.select_atoms(selection_str)) + return selection
+ + +
[docs]class MeanSquareDisplacement(object): + r"""Mean square displacement analysis + + Function to evaluate the Mean Square Displacement (MSD_). The MSD gives the + average distance that particles travels. The MSD is given by: + + .. math:: + \langle\Delta r(t)^2\rangle = 2nDt + + where :math:`r(t)` is the position of particle in time :math:`t`, + :math:`\Delta r(t)` is the displacement after time lag :math:`t`, + :math:`n` is the dimensionality, in this case :math:`n=3`, + :math:`D` is the diffusion coefficient and :math:`t` is the time. + + .. _MSD: http://en.wikipedia.org/wiki/Mean_squared_displacement + + + Parameters + ---------- + universe : Universe + Universe object + select : str + Selection string for water [‘byres name OH2’]. + t0 : int + frame where analysis begins + tf : int + frame where analysis ends + dtmax : int + Maximum dt size, `dtmax` < `tf` or it will crash. + + + .. versionadded:: 0.11.0 + + .. versionchanged:: 1.0.0 + Changed `selection` keyword to `select` + """ + + def __init__(self, universe, select, t0, tf, dtmax, nproc=1): + self.universe = universe + self.selection = select + self.t0 = t0 + self.tf = tf + self.dtmax = dtmax + self.nproc = nproc + self.timeseries = None + + def _repeatedIndex(self, selection, dt, totalFrames): + """ + Indicate the comparation between all the t+dt. + The results is a list of list with all the repeated index per frame + (or time). + + - Ex: dt=1, so compare frames (1,2),(2,3),(3,4)... + - Ex: dt=2, so compare frames (1,3),(3,5),(5,7)... + - Ex: dt=3, so compare frames (1,4),(4,7),(7,10)... + """ + rep = [] + for i in range(int(round((totalFrames - 1) / float(dt)))): + if (dt * i + dt < totalFrames): + rep.append(self._sameMolecTandDT( + selection, dt * i, (dt * i) + dt)) + return rep + + def _getOneDeltaPoint(self, universe, repInd, i, t0, dt): + """ + Gives one point to calculate the mean and gets one point of the plot + C_vect vs t. + + - Ex: t0=1 and dt=1 so calculate the t0-dt=1-2 interval. + - Ex: t0=5 and dt=3 so calcultate the t0-dt=5-8 interval + + i = come from getMeanOnePoint (named j) (int) + """ + valO = 0 + n = 0 + for j in range(len(repInd[i]) // 3): + begj = 3 * j + universe.trajectory[t0] + # Plus zero is to avoid 0to be equal to 0tp + Ot0 = repInd[i][begj].position + 0 + + universe.trajectory[t0 + dt] + # Plus zero is to avoid 0to be equal to 0tp + Otp = repInd[i][begj].position + 0 + + # position oxygen + OVector = Ot0 - Otp + # here it is the difference with + # waterdynamics.WaterOrientationalRelaxation + valO += np.dot(OVector, OVector) + n += 1 + + # if no water molecules remain in selection, there is nothing to get + # the mean, so n = 0. + return valO/n if n > 0 else 0 + + def _getMeanOnePoint(self, universe, selection1, selection_str, dt, + totalFrames): + """ + This function gets one point of the plot C_vec vs t. It's uses the + _getOneDeltaPoint() function to calculate the average. + + """ + repInd = self._repeatedIndex(selection1, dt, totalFrames) + sumsdt = 0 + n = 0.0 + sumDeltaO = 0.0 + valOList = [] + + for j in range(totalFrames // dt - 1): + a = self._getOneDeltaPoint(universe, repInd, j, sumsdt, dt) + sumDeltaO += a + valOList.append(a) + sumsdt += dt + n += 1 + + # if no water molecules remain in selection, there is nothing to get + # the mean, so n = 0. + return sumDeltaO/n if n > 0 else 0 + + def _sameMolecTandDT(self, selection, t0d, tf): + """ + Compare the molecules in the t0d selection and the t0d+dt selection and + select only the particles that are repeated in both frame. This is to + consider only the molecules that remains in the selection after the dt + time has elapsed. The result is a list with the indexs of the atoms. + """ + a = set(selection[t0d]) + b = set(selection[tf]) + sort = sorted(list(a.intersection(b))) + return sort + + def _selection_serial(self, universe, selection_str): + selection = [] + for ts in ProgressBar(universe.trajectory, verbose=True, + total=universe.trajectory.n_frames): + selection.append(universe.select_atoms(selection_str)) + return selection + +
[docs] def run(self, **kwargs): + """Analyze trajectory and produce timeseries""" + + # All the selection to an array, this way is faster than selecting + # later. + if self.nproc == 1: + selection_out = self._selection_serial( + self.universe, self.selection) + else: + # parallel not yet implemented + # selection = selection_parallel(universe, selection_str, nproc) + selection_out = self._selection_serial( + self.universe, self.selection) + self.timeseries = [] + for dt in list(range(1, self.dtmax + 1)): + output = self._getMeanOnePoint( + self.universe, selection_out, self.selection, dt, self.tf) + self.timeseries.append(output)
+ + +
[docs]class SurvivalProbability(object): + r""" + Survival Probability (SP) gives the probability for a group of particles to remain in a certain region. + The SP is given by: + + .. math:: + P(\tau) = \frac1T \sum_{t=1}^T \frac{N(t,t+\tau)}{N(t)} + + where :math:`T` is the maximum time of simulation, :math:`\tau` is the + timestep, :math:`N(t)` the number of particles at time :math:`t`, and + :math:`N(t, t+\tau)` is the number of particles at every frame from :math:`t` to `\tau`. + + + Parameters + ---------- + universe : Universe + Universe object + select : str + Selection string; any selection is allowed. With this selection you + define the region/zone where to analyze, e.g.: "resname SOL and around 5 (resid 10)". See `SP-examples`_. + verbose : Boolean, optional + When True, prints progress and comments to the console. + + + Notes + ----- + Currently :class:`SurvivalProbability` is the only on in + :mod:`MDAnalysis.analysis.waterdynamics` to support an `exclusive` + behaviour (i.e. similar to the current behaviour of :class:`AnalysisBase` + to the `stop` keyword passed to :meth:`SurvivalProbability.run`. Unlike + other :mod:`MDAnalysis.analysis.waterdynamics` final frame definitions + which are `inclusive`. + + + .. versionadded:: 0.11.0 + .. versionchanged:: 1.0.0 + Using the MDAnalysis.lib.correlations.py to carry out the intermittency + and autocorrelation calculations. + Changed `selection` keyword to `select`. + Removed support for the deprecated `t0`, `tf`, and `dtmax` keywords. + These should instead be passed to :meth:`SurvivalProbability.run` as + the `start`, `stop`, and `tau_max` keywords respectively. + The `stop` keyword as passed to :meth:`SurvivalProbability.run` has now + changed behaviour and will act in an `exclusive` manner (instead of it's + previous `inclusive` behaviour), + """ + + def __init__(self, universe, select, verbose=False): + self.universe = universe + self.selection = select + self.verbose = verbose + +
[docs] def run(self, tau_max=20, start=None, stop=None, step=None, residues=False, + intermittency=0, verbose=False): + """ + Computes and returns the Survival Probability (SP) timeseries + + Parameters + ---------- + start : int, optional + Zero-based index of the first frame to be analysed, Default: None + (first frame). + stop : int, optional + Zero-based index of the last frame to be analysed (exclusive), + Default: None (last frame). + step : int, optional + Jump every `step`-th frame. This is compatible but independant of + the taus used, and it is good to consider using the `step` equal + to `tau_max` to remove the overlap. Note that `step` and `tau_max` + work consistently with intermittency. Default: None + (use every frame). + tau_max : int, optional + Survival probability is calculated for the range + 1 <= `tau` <= `tau_max`. + residues : Boolean, optional + If true, the analysis will be carried out on the residues + (.resids) rather than on atom (.ids). A single atom is sufficient + to classify the residue as within the distance. + intermittency : int, optional + The maximum number of consecutive frames for which an atom can + leave but be counted as present if it returns at the next frame. + An intermittency of `0` is equivalent to a continuous survival + probability, which does not allow for the leaving and returning of + atoms. For example, for `intermittency=2`, any given atom may leave + a region of interest for up to two consecutive frames yet be + treated as being present at all frames. The default is continuous + (0). + verbose : Boolean, optional + Print the progress to the console. + + Returns + ------- + tau_timeseries : list + tau from 1 to `tau_max`. Saved in the field tau_timeseries. + sp_timeseries : list + survival probability for each value of `tau`. Saved in the field + sp_timeseries. + sp_timeseries_data: list + raw datapoints from which the average is taken (sp_timeseries). + Time dependancy and distribution can be extracted. + + + .. versionchanged:: 1.0.0 + To math other analysis methods, the `stop` keyword is now exclusive + rather than inclusive. + """ + + start, stop, step = self.universe.trajectory.check_slice_indices( + start, + stop, + step + ) + + if tau_max > (stop - start): + raise ValueError("Too few frames selected for given tau_max.") + + # preload the frames (atom IDs) to a list of sets + self._selected_ids = [] + + # fixme - to parallise: the section should be rewritten so that this loop only creates a list of indices, + # on which the parallel _single_frame can be applied. + + # skip frames that will not be used in order to improve performance + # because AtomGroup.select_atoms is the most expensive part of this calculation + # Example: step 5 and tau 2: LLLSS LLLSS, ... where L = Load, and S = Skip + # Intermittency means that we have to load the extra frames to know if the atom is actually missing. + # Say step=5 and tau=1, intermittency=0: LLSSS LLSSS + # Say step=5 and tau=1, intermittency=1: LLLSL LLLSL + frame_loaded_counter = 0 + # only for the first window (frames before t are not used) + frames_per_window = tau_max + 1 + intermittency + # This number will apply after the first windows was loaded + frames_per_window_subsequent = (tau_max + 1) + (2 * intermittency) + num_frames_to_skip = max(step - frames_per_window_subsequent, 0) + + frame_no = start + while frame_no < stop: # we have already added 1 to stop, therefore < + if num_frames_to_skip != 0 and frame_loaded_counter == frames_per_window: + logger.info("Skipping the next %d frames:", num_frames_to_skip) + frame_no += num_frames_to_skip + frame_loaded_counter = 0 + # Correct the number of frames to be loaded after the first window (which starts at t=0, and + # intermittency does not apply to the frames before) + frames_per_window = frames_per_window_subsequent + continue + + # update the frame number + self.universe.trajectory[frame_no] + + logger.info("Loading frame: %d", self.universe.trajectory.frame) + atoms = self.universe.select_atoms(self.selection) + + # SP of residues or of atoms + ids = atoms.residues.resids if residues else atoms.ids + self._selected_ids.append(set(ids)) + + frame_no += 1 + frame_loaded_counter += 1 + + # adjust for the frames that were not loaded (step>tau_max + 1), + # and for extra frames that were loaded (intermittency) + window_jump = step - num_frames_to_skip + + self._intermittent_selected_ids = correct_intermittency(self._selected_ids, intermittency=intermittency) + tau_timeseries, sp_timeseries, sp_timeseries_data = autocorrelation(self._intermittent_selected_ids, + tau_max, window_jump) + + # warn the user if the NaN are found + if all(np.isnan(sp_timeseries[1:])): + logger.warning('NaN Error: Most likely data was not found. Check your atom selections. ') + + # user can investigate the distribution and sample size + self.sp_timeseries_data = sp_timeseries_data + + self.tau_timeseries = tau_timeseries + self.sp_timeseries = sp_timeseries + return self
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/auxiliary/EDR.html b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/EDR.html new file mode 100644 index 0000000000..baeb9b17fa --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/EDR.html @@ -0,0 +1,603 @@ + + + + + + MDAnalysis.auxiliary.EDR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.auxiliary.EDR

+# -*- 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-2017 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
+#
+
+"""
+EDR auxiliary reader --- :mod:`MDAnalysis.auxiliary.EDR`
+========================================================
+.. versionadded:: 2.4.0
+
+Background
+----------
+
+`EDR files`_ are binary files following the XDR_ protocol. They are written by
+GROMACS during simulations and contain time-series non-trajectory data on the
+system, such as energies, temperature, or pressure.
+
+pyedr_ is a Python package that reads EDR binary files and returns them
+human-readable form as a dictionary of NumPy arrays. It is used by the EDR
+auxiliary reader to parse EDR files. As such, a dictionary with string keys and
+numpy array values is loaded into the :class:`EDRReader`. It is basically a
+Python-based version of the C++ code in GROMACS_.
+
+
+The classes in this module are based on the `pyedr`_ package. Pyedr is an
+optional dependency and must be installed to use this Reader. Use of the reader
+without pyedr installed will raise an `ImportError`. The variable `HAS_PYEDR`
+indicates whether this module has pyedr availble.
+
+The EDR auxiliary reader takes the output from pyedr and makes this data
+available within MDAnalysis. The usual workflow starts with creating an
+EDRReader and passing it the file to read as such::
+
+    import MDAnalysis as mda
+    aux = mda.auxiliary.EDR.EDRReader(some_edr_file)
+
+The newly created `aux` object contains all the data found in the EDR file. It
+is stored in the :attr:`.data_dict` dictionary, which maps the names GROMACS
+gave each data entry to a NumPy array that holds the relevant data. These
+GROMACS-given names are stored in and available through the :attr:`.terms`
+attribute. In addition to the numeric data, the new `EDRReader` also stores the
+units of each entry in the :attr:`.data_dict` dictionary in its
+:attr:`.unit_dict` dictionary.
+
+.. warning::
+    Units are converted to `MDAnalysis base units`_ automatically unless
+    otherwise specified. However, not all unit types have a defined base unit
+    in MDAnalysis. (cf. :data:`MDAnalysis.units.MDANALYSIS_BASE_UNITS`).
+    Pressure units, for example, are not currently defined, and
+    will not be converted. This might cause inconsistencies between units!
+    Conversion can be switched off by passing `convert_units=False` when the
+    EDRReader is created::
+
+        aux = mda.auxiliary.EDR.EDRReader(some_edr_file, convert_units=False)
+
+
+Standalone Usage of the EDRReader
+---------------------------------
+
+The :class:`.EDRReader` can be used to access the data stored in EDR files on
+its own, without association of data to trajectory frames.
+This is useful, for example, for plotting. The data for a single term, a list
+of terms, or for all terms can be returned in dictionary form. "Time" is always
+returned in this dictionary to make plotting easier::
+
+
+    temp = aux.get_data("Temperature")
+    plt.plot(temp["Time"], temp["Temperature"])
+
+    some_terms = aux.get_data(["Potential", "Kinetic En.", "Box-X"])
+    plt.plot(some_terms["Time"], some_terms["Potential"])
+
+    all_terms = aux.get_data()
+    plt.plot(all_terms["Time"], all_terms["Pressure"])
+
+Adding EDR data to trajectories
+-------------------------------
+
+Like other AuxReaders, the :class:`.EDRReader` can attach its data to a
+trajectory by associating it to the appropriate time steps.
+In general, to add EDR data to a trajectory, one needs to provide two
+arguments.
+
+.. note::
+    The following will change with the release of MDAnalysis 3.0. From then on,
+    the order of these two arguments will be reversed.
+
+The first argument is the `aux_spec` dictionary. With it, users specify which
+entries from the EDR file they want to add, and they give it a more convenient
+name to be used in MDAnalysis (because GROMACS creates names like
+"#Surf*SurfTen" or "'Constr. rmsd'" which may be inconvenient to use.)
+This dictionary might look like this::
+
+    aux_spec = {"epot": "Potential",
+                "surf_tension": "#Surf*SurfTen"}
+
+When provided as shown below, this would direct the :class:`.EDRReader` to take
+the data it finds under the "Potential" key in its :attr:`.data_dict`
+dictionary and attach it to the trajectory time steps under
+`u.trajectory.ts.aux.epot` (and the same for the surface tension).
+
+
+The second argument needed is the source of the EDR data itself. Here, either
+the path to the EDR file or a previously created :class:`.EDRReader` object
+can be provided.
+
+
+Examples::
+
+    import MDAnalysis as mda
+    from MDAnalysisTests.datafiles import AUX_EDR, AUX_EDR_TPR, AUX_EDR_XTC
+    import matplotlib.pyplot as plt
+
+A :class:`Universe` and an :class:`.EDRReader` object are created and the data
+available in the EDR file is printed::
+
+    In [1]: u = mda.Universe(AUX_EDR_TPR, AUX_EDR_XTC)
+    In [2]: aux = mda.auxiliary.EDR.EDRReader(AUX_EDR)
+    In [3]: aux.terms
+    Out[3]: ['Time', 'Bond', 'Angle', ...]
+
+Data is associated with the trajectory, using an `aux_spec` dictionary to
+specify which data to add under which name. Any number of terms can be added
+using this method. The data is then accessible in the `ts.aux` namespace via
+both attribute and dictionary syntax::
+
+    In [4]: u.trajectory.add_auxiliary({"epot": "Potential",
+                                        "angle": "Angle"}, aux)
+    In [5]: u.trajectory.ts.aux.epot
+    Out[5]: -525164.0625
+    In [6]: u.trajectory.ts.aux.Angle
+    Out[6]: 3764.52734375
+    In [7]: u.trajectory.ts.aux["epot"]
+    Out[7]: -525164.0625
+
+
+.. note::
+    Some GROMACS-provided :attr:`terms` have spaces. Unless an attribute name
+    without a space is provided, these terms will not be accessible via the
+    attribute syntax. Only the dictionary syntax will work in that case.
+
+
+Further, it is possible to add all data from the EDR file to the trajectory. To
+do this, the `aux_spec` dictionary is omitted, and the data source (the second
+argument as explained above) is provided explicitly as `auxdata`. When adding
+data this way, the terms in :attr:`.terms` become the names used in `ts.aux`::
+
+    In [7]: u.trajectory.add_auxiliary(auxdata=aux)
+    In [8]: u.trajectory.ts.aux["#Surf*SurfTen"]
+    Out[8]: -1857.519287109375
+
+
+.. _EDR files: https://manual.gromacs.org/current/reference-manual/file-formats.html#edr
+.. _XDR: https://datatracker.ietf.org/doc/html/rfc1014
+.. _pyedr: https://github.com/mdanalysis/panedr
+.. _GROMACS: https://github.com/gromacs/gromacs/blob/main/src/gromacs/fileio/enxio.cpp
+.. _MDAnalysis base units: https://docs.mdanalysis.org/2.3.0/documentation_pages/units.html
+
+
+Classes
+-------
+
+.. autoclass:: EDRReader
+   :members:
+
+
+The actual data for each step is stored by instances of EDRStep.
+
+.. autoclass:: EDRStep
+   :members:
+
+
+"""
+from pathlib import Path
+import warnings
+from typing import Optional, Union, Dict, List
+
+import numpy as np
+
+from . import base
+from .. import units
+
+try:
+    import pyedr
+except ImportError:
+    # Indicates whether pyedr is found
+    HAS_PYEDR = False
+else:
+    # Indicates whether pyedr is found
+    HAS_PYEDR = True
+
+
+
[docs]class EDRStep(base.AuxStep): + """:class:`AuxStep` class for the .edr file format. + + Extends the base AuxStep class to allow selection of time and + data-of-interest fields (by dictionary key) from the full set of data read + each step. + + Parameters + ---------- + time_selector : str, optional + Name of the dictionary key that links to the time values (assumed to + be in ps). Default value is "Time" + data_selector : str | list of str | None, optional + List of dictionary keys linking to data of interest in the EDR file to + be stored in ``data``. Default value is ``None``. + **kwargs + Other AuxStep options. + + See Also + -------- + :class:`MDAnalysis.auxiliary.base.AuxStep` + """ + + def __init__(self, time_selector: str = "Time", + data_selector: Optional[str] = None, **kwargs): + super(EDRStep, self).__init__(time_selector=time_selector, + data_selector=data_selector, + **kwargs) + + def _select_time(self, key: str) -> np.float64: + """'Time' is one of the entries in the dict returned by pyedr. + The base AuxStep Class uses the time_selector 'Time' to return the + time value of each step.""" + return self._select_data(key) + + def _select_data(self, key: Union[str, None]) -> np.float64: + if key is None: + return + try: + return self._data[key] + except KeyError: + raise KeyError(f"'{key}' is not a key in the data_dict dictionary." + " Check the EDRReader.terms attribute")
+ + +
[docs]class EDRReader(base.AuxReader): + """ Auxiliary reader to read data from an .edr file. + + `EDR files`_ + are created by GROMACS during a simulation. They are binary files which + contain time-series energy data and other data related to the simulation. + + Default reader for .edr files. All data from the file will be read and + stored on initialisation. + + Parameters + ---------- + filename : str + Location of the file containing the auxiliary data. + convert_units : bool, optional + If True (default), units from the EDR file are automatically converted + to MDAnalysis base units. If False, units are taken from the file + as-is. Where no base unit is defined in MDAnalysis, no conversion takes + place. Unit types in :data:`MDAnalysis.units.MDANALYSIS_BASE_UNITS` + will be converted automatically by default. + **kwargs + Other AuxReader options. + + Attributes + ---------- + _auxdata : pathlib.PosixPath + path at which the auxiliary data file is located + data_dict : dict + dictionary that contains the auxiliary data, mapping the names GROMACS + gave the entries in the EDR file to a NumPy array containing this data + unit_dict : dict + dictionary that contains the units of the auxiliary data, mapping the + :attr:`data_selector` of the Reader (i.e. the name of the dataset in + the EDR file) to its unit. + _n_steps : int + Number of steps for which auxdata is available + terms : list + Names of the auxiliary data entries available in `data_dict`. These are + the names GROMACS set in the EDR file. + + See Also + -------- + :class:`MDAnalysis.auxiliary.base.AuxReader` + :meth:`MDAnalysis.coordinates.base.ReaderBase.add_auxiliary` + + Note + ---- + The file is assumed to be of a size such that reading and storing the full + contents is practical. A warning will be issued when memory usage exceeds + 1 GB. This warning limit can be changed via the ``memory_limit`` kwarg. + """ + + format = "EDR" + _Auxstep = EDRStep + + def __init__(self, filename: str, convert_units: bool = True, **kwargs): + if not HAS_PYEDR: + raise ImportError("EDRReader: To read EDR files please install " + "pyedr.") + self._auxdata = Path(filename).resolve() + self.data_dict = pyedr.edr_to_dict(filename) + self.unit_dict = pyedr.get_unit_dictionary(filename) + self.convert_units = convert_units + if self.convert_units: + self._convert_units() + self._n_steps = len(self.data_dict["Time"]) + # attribute to communicate found energy terms to user + self.terms = list(self.data_dict.keys()) + super(EDRReader, self).__init__(**kwargs) + + def _convert_units(self): + """Called during :func:`__init__` to convert the units found in the EDR + file to MDAnalysis base units""" + unknown_units = [] + for term, unit in self.unit_dict.items(): + try: + unit_type = units.unit_types[unit] + except KeyError: + if unit not in unknown_units: + unknown_units.append(unit) + continue # skip conversion if unit not defined yet + + target_unit = units.MDANALYSIS_BASE_UNITS[unit_type] + data = self.data_dict[term] + self.data_dict[term] = units.convert(data, unit, target_unit) + self.unit_dict[term] = units.MDANALYSIS_BASE_UNITS[unit_type] + if unknown_units: + warnings.warn("Could not find unit type for the following " + f"units: {unknown_units}") + + def _memory_usage(self): + size = 0 + for array in self.data_dict.values(): + size += array.nbytes + return size + + def _read_next_step(self) -> EDRStep: + """Read next auxiliary step and update ``auxstep``. + + Returns + ------- + AuxStep object + Updated with the data for the new step. + + Raises + ------ + StopIteration + When end of auxiliary data set is reached. + """ + auxstep = self.auxstep + new_step = self.step + 1 + if new_step < self.n_steps: + auxstep._data = {term: self.data_dict[term][self.step + 1] + for term in self.terms} + auxstep.step = new_step + return auxstep + else: + self.rewind() + if self.n_steps > 1: + raise StopIteration + + def _go_to_step(self, i: int) -> EDRStep: + """ Move to and read i-th auxiliary step. + + Parameters + ---------- + i: int + Step number (0-indexed) to move to + + Returns + ------- + :class:`EDRStep` + + Raises + ------ + ValueError + If step index not in valid range. + """ + if i >= self.n_steps or i < 0: + raise ValueError("Step index {0} is not valid for auxiliary " + "(num. steps {1})".format(i, self.n_steps)) + self.auxstep.step = i - 1 + self.next() + return self.auxstep + +
[docs] def read_all_times(self) -> np.ndarray: + """ Get list of time at each step. + + Returns + ------- + NumPy array of float + Time at each step. + """ + return self.data_dict[self.time_selector]
+ +
[docs] def get_data(self, data_selector: Union[str, List[str], None] = None + ) -> Dict[str, np.ndarray]: + """ Returns the auxiliary data contained in the :class:`EDRReader`. + Returns either all data or data specified as `data_selector` in form + of a str or a list of any of :attr:`EDRReader.terms`. `Time` is + always returned to allow easy plotting. + + Parameters + ---------- + data_selector: str, List[str], None + Keys to be extracted from the auxiliary reader's data dictionary. + If ``None``, returns all data found in :attr:`.data_dict`. + Returns + ------- + data_dict : dict + Dictionary mapping `data_selector` keys to NumPy arrays of the + auxiliary data. + + Raises + ------ + KeyError + if an invalid data_selector key is passed. + """ + if data_selector is None: + return self.data_dict + + def _get_data_term(term, datadict): + try: + return datadict[term] + except KeyError: + raise KeyError(f"data selector {term} is invalid. Check the " + "EDRReader's `terms` attribute.") + + data_dict = {"Time": self.data_dict["Time"]} + + if isinstance(data_selector, list): + for term in data_selector: + data_dict[term] = _get_data_term(term, self.data_dict) + else: + term = data_selector + data_dict[term] = _get_data_term(term, self.data_dict) + + return data_dict
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/auxiliary/XVG.html b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/XVG.html new file mode 100644 index 0000000000..ce6ad8bec7 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/XVG.html @@ -0,0 +1,522 @@ + + + + + + MDAnalysis.auxiliary.XVG — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.auxiliary.XVG

+# -*- 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-2017 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
+#
+
+"""
+XVG auxiliary reader --- :mod:`MDAnalysis.auxiliary.XVG`
+========================================================
+
+xvg files are produced by Gromacs during simulation or analysis, formatted
+for plotting data with Grace.
+
+Data is column-formatted; time/data selection is enabled by providing column
+indices.
+
+Note
+----
+By default, the time of each step is assumed to be stored in the first column,
+in units of ps.
+
+
+.. autoclass:: XVGStep
+   :members:
+
+
+XVG Readers
+-----------
+The default :class:`XVGReader` reads and stores the full contents of the .xvg
+file on initialisation, while a second reader (:class:`XVGFileReader`) that
+reads steps one at a time as required is also provided for when a lower memory
+footprint is desired.
+
+Note
+----
+Data is assumed to be time-ordered.
+
+Multiple datasets, separated in the .xvg file by '&', are currently not
+supported (the readers will stop at the first line starting '&').
+
+
+.. autoclass:: XVGReader
+   :members:
+
+.. autoclass:: XVGFileReader
+   :members:
+
+
+.. autofunction:: uncomment
+
+"""
+import numbers
+import os
+import numpy as np
+from . import base
+from ..lib.util import anyopen
+
+
+
[docs]def uncomment(lines): + """ Remove comments from lines in an .xvg file + + Parameters + ---------- + lines : list of str + Lines as directly read from .xvg file + + Yields + ------ + str + The next non-comment line, with any trailing comments removed + """ + for line in lines: + stripped_line = line.strip() + # ignore blank lines + if not stripped_line: + continue + # '@' must be at the beginning of a line to be a grace instruction + if stripped_line[0] == '@': + continue + # '#' can be anywhere in the line, everything after is a comment + comment_position = stripped_line.find('#') + if comment_position > 0 and stripped_line[:comment_position]: + yield stripped_line[:comment_position] + elif comment_position < 0 and stripped_line: + yield stripped_line
+ # if comment_position == 0, then the line is empty + + +
[docs]class XVGStep(base.AuxStep): + """ AuxStep class for .xvg file format. + + Extends the base AuxStep class to allow selection of time and + data-of-interest fields (by column index) from the full set of data read + each step. + + Parameters + ---------- + time_selector : int | None, optional + Index of column in .xvg file storing time, assumed to be in ps. Default + value is 0 (i.e. first column). + data_selector : list of int | None, optional + List of indices of columns in .xvg file containing data of interest to + be stored in ``data``. Default value is ``None``. + **kwargs + Other AuxStep options. + + See Also + -------- + :class:`~MDAnalysis.auxiliary.base.AuxStep` + """ + + def __init__(self, time_selector=0, data_selector=None, **kwargs): + super(XVGStep, self).__init__(time_selector=time_selector, + data_selector=data_selector, + **kwargs) + + def _select_time(self, key): + if key is None: + # here so that None is a valid value; just return + return + if isinstance(key, numbers.Integral): + return self._select_data(key) + else: + raise ValueError('Time selector must be single index') + + def _select_data(self, key): + if key is None: + # here so that None is a valid value; just return + return + if isinstance(key, numbers.Integral): + try: + return self._data[key] + except IndexError: + errmsg = (f'{key} not a valid index for data with ' + f'{len(self._data)} columns') + raise ValueError(errmsg) from None + else: + return np.array([self._select_data(i) for i in key])
+ + +
[docs]class XVGReader(base.AuxReader): + """ Auxiliary reader to read data from an .xvg file. + + Default reader for .xvg files. All data from the file will be read and + stored on initialisation. + + Parameters + ---------- + filename : str + Location of the file containing the auxiliary data. + **kwargs + Other AuxReader options. + + See Also + -------- + :class:`~MDAnalysis.auxiliary.base.AuxReader` + + Note + ---- + The file is assumed to be of a size such that reading and storing the full + contents is practical. + """ + + format = "XVG" + _Auxstep = XVGStep + + def __init__(self, filename, **kwargs): + self._auxdata = os.path.abspath(filename) + with anyopen(filename) as xvg_file: + lines = xvg_file.readlines() + auxdata_values = [] + # remove comments before storing + for i, line in enumerate(uncomment(lines)): + if line.lstrip()[0] == '&': + # multiple data sets not supported; stop at end of first set + break + auxdata_values.append([float(val) for val in line.split()]) + # check the number of columns is consistent + if len(auxdata_values[i]) != len(auxdata_values[0]): + raise ValueError('Step {0} has {1} columns instead of ' + '{2}'.format(i, auxdata_values[i], + auxdata_values[0])) + self._auxdata_values = np.array(auxdata_values) + self._n_steps = len(self._auxdata_values) + super(XVGReader, self).__init__(**kwargs) + + def _memory_usage(self): + return(self._auxdata_values.nbytes) + + def _read_next_step(self): + """ Read next auxiliary step and update ``auxstep``. + + Returns + ------- + AuxStep object + Updated with the data for the new step. + + Raises + ------ + StopIteration + When end of auxiliary data set is reached. + """ + auxstep = self.auxstep + new_step = self.step + 1 + if new_step < self.n_steps: + auxstep._data = self._auxdata_values[new_step] + auxstep.step = new_step + return auxstep + else: + self.rewind() + raise StopIteration + + def _go_to_step(self, i): + """ Move to and read i-th auxiliary step. + + Parameters + ---------- + i: int + Step number (0-indexed) to move to + + Returns + ------- + :class:`XVGStep` + + Raises + ------ + ValueError + If step index not in valid range. + """ + if i >= self.n_steps or i < 0: + raise ValueError("Step index {0} is not valid for auxiliary " + "(num. steps {1})".format(i, self.n_steps)) + self.auxstep.step = i-1 + self.next() + return self.auxstep + +
[docs] def read_all_times(self): + """ Get NumPy array of time at each step. + + Returns + ------- + NumPy array of float + Time at each step. + """ + return self._auxdata_values[:, self.time_selector]
+ + +
[docs]class XVGFileReader(base.AuxFileReader): + """ Auxiliary reader to read (one step at a time) from an .xvg file. + + An alternative XVG reader which reads each step from the .xvg file as + needed (rather than reading and storing all from the start), for a lower + memory footprint. + + Parameters + ---------- + filename : str + Location of the file containing the auxiliary data. + **kwargs + Other AuxReader options. + + See Also + -------- + :class:`~MDAnalysis.auxiliary.base.AuxFileReader` + + + Note + ---- + The default reader for .xvg files is :class:`XVGReader`. + """ + + format = 'XVG-F' + _Auxstep = XVGStep + + def __init__(self, filename, **kwargs): + super(XVGFileReader, self).__init__(filename, **kwargs) + + def _read_next_step(self): + """ Read next recorded step in xvg file and update ``auxstep``. + + Returns + ------- + AuxStep object + Updated with the data for the new step. + + Raises + ------ + StopIteration + When end of file or end of first data set is reached. + """ + line = next(self.auxfile) + while True: + if not line or (line.strip() and line.strip()[0] == '&'): + # at end of file or end of first set of data (multiple sets + # currently not supported) + self.rewind() + raise StopIteration + # uncomment the line + for uncommented in uncomment([line]): + # line has data in it; add to auxstep + return + auxstep = self.auxstep + auxstep.step = self.step + 1 + auxstep._data = [float(i) for i in uncommented.split()] + # see if we've set n_cols yet... + try: + auxstep._n_cols + except AttributeError: + # haven't set n_cols yet; set now + auxstep._n_cols = len(auxstep._data) + if len(auxstep._data) != auxstep._n_cols: + raise ValueError(f'Step {self.step} has ' + f'{len(auxstep._data)} columns instead ' + f'of {auxstep._n_cols}') + return auxstep + # line is comment only - move to next + line = next(self.auxfile) + + def _count_n_steps(self): + """ Iterate through all steps to count total number. + + Returns + ------- + int + Total number of steps + """ + if not self.constant_dt: + # check if we've already iterated through to build _times list + try: + return len(self._times) + except AttributeError: + # might as well build _times now, since we'll need to iterate + # through anyway + self._times = self.read_all_times() + return len(self.read_all_times()) + else: + # don't need _times; iterate here instead + self._restart() + count = 0 + for step in self: + count = count + 1 + return count + +
[docs] def read_all_times(self): + """ Iterate through all steps to build times list. + + Returns + ------- + NumPy array of float + Time of each step + """ + self._restart() + times = [] + for step in self: + times.append(self.time) + return np.array(times)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/auxiliary/base.html b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/base.html new file mode 100644 index 0000000000..575fac024d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/base.html @@ -0,0 +1,1224 @@ + + + + + + MDAnalysis.auxiliary.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.auxiliary.base

+# -*- 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-2017 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
+#
+
+
+"""
+Auxiliary Readers --- :mod:`MDAnalysis.auxiliary.base`
+======================================================
+
+Base classes for deriving all auxiliary data readers. See the API in :mod:`MDAnalysis.auxiliary.__init__`.
+
+.. autoclass:: AuxStep
+   :members:
+
+.. autoclass:: AuxReader
+   :members:
+
+.. autoclass:: AuxFileReader
+   :members:
+
+"""
+
+import os
+import numbers
+import math
+import warnings
+from typing import Union, Optional, Dict
+from collections import defaultdict
+import pickle
+
+import numpy as np
+
+from ..lib.util import asiterable, anyopen
+from .. import units
+
+from . import _AUXREADERS
+from .core import auxreader
+
+
+class _AuxReaderMeta(type):
+    # auto register on class creation
+    def __init__(cls, name, bases, classdict):
+        type.__init__(type, name, bases, classdict)
+        try:
+            fmt = asiterable(classdict['format'])
+        except KeyError:
+            pass
+        else:
+            for f in fmt:
+                _AUXREADERS[f] = cls
+
+
+
[docs]class AuxStep(object): + """Base class for auxiliary timesteps. + + Stores the auxiliary data for the current auxiliary step. On creation, + ``step`` is set to -1. + + .. versionchanged:: 2.4.0 + Added memory_limit parameter to control raising memory usage warnings. + + Parameters + ---------- + dt : float, optional + Change in time between auxiliary steps (in ps). If not specified, will + attempt to determine from auxiliary data; otherwise defaults to 1 ps. + Ignored if ``constant_dt`` is False. + initial_time : float, optional + Time of first auxiliary step (in ps). If not specified, will attempt to + determine from auxiliary data; otherwise defaults to 0 ps. Ignored if + ``constant_dt`` is False. + time_selector: optional + Key to select 'time' value from the full set of data read for each + step, if time selection is enabled; type will vary depending on the + auxiliary data format (see individual AuxReader documentation). If + ``None`` (default value), time is instead calculated as: ``time = step + * dt + initial_time`` + data_selector: optional + Key(s) to select auxiliary data values of interest from the full set of + data read for each step, if data selection is enabled by the reader; + type will vary depending on the auxiliary data format (see individual + AuxReader documentation). + If ``None`` (default value), the full set of data is returned. + constant_dt : bool, optional + (Default: True) Set to False if ``dt`` is not constant + throughout the auxiliary data set, in which case a valid + ``time_selector`` must be provided. + memory_limit : float, optional + Sets the threshold of memory usage by auxiliary data (in GB) at which + to issue a warning. Default: 1 GB. + + Attributes + ---------- + step : int + Number of the current auxiliary step (0-based). + """ + + def __init__(self, dt=1, initial_time=0, time_selector=None, + data_selector=None, constant_dt=True, memory_limit=None): + self.step = -1 + self._initial_time = initial_time + self._dt = dt + self._constant_dt = constant_dt + # check for valid values when assigning _time/data_selector will fail + # here as we don't have and _data yet, so set _time/data_selector_ directly; + # if invalid, will catch later + self._time_selector_ = time_selector + self._data_selector_ = data_selector + + @property + def time(self): + """ Time in ps of current auxiliary step (as float). + + Read from the set of auxiliary data read each step if time selection + is enabled and a valid ``time_selector`` is specified; otherwise + calculated as ``step * dt + initial_time``. + """ + if self._time_selector is not None: + return self._select_time(self._time_selector) + elif self._constant_dt: + # default to calculting time... + return self.step * self._dt + self._initial_time + else: + raise ValueError("If dt is not constant, must have a valid " + "time selector") + + + @property + def data(self): + """ Auxiliary values of interest for the current step (as ndarray). + + Read from the full set of data read for each step if data selection is + enabled and a valid ``data_selector`` is specified; otherwise + defaults to the full set of data. + """ + if self._data_selector is not None: + return self._select_data(self._data_selector) + # default to full set of data... + return self._data + + @property + def _time_selector(self): + """ 'Key' to select time from the full set of data read in each step. + + Will be passed to ``_select_time()``, defined separately for each + auxiliary format, when returning the time of the current step. + Format will depend on the auxiliary format. e.g. for the XVGReader, + this is an index and ``_select_time()`` returns the value in that column + of the current step data. + + Defaults to 'None' if time selection is not enabled. + """ + try: + self._select_time + except AttributeError: + warnings.warn("{} does not support time selection. Reverting to " + "default".format(self.__class__.__name__)) + return None + return self._time_selector_ + + @_time_selector.setter + def _time_selector(self, new): + # check we have a select_time method + try: + select = self._select_time + except AttributeError: + warnings.warn("{} does not support time selection".format( + self.__class__.__name__)) + else: + # check *new* is valid before setting; _select_time should raise + # an error if not + select(new) + self._time_selector_ = new + + @property + def _data_selector(self): + """ 'Key' to select values of interest from full set of auxiliary data. + These are the values that will be stored in ``data`` (and + ``frame_data`` and ``frame_rep``). + + Will be passed to ``_select_data()``, defined separately for each + auxiliary format, when returning the data of interest for the current + step (``data``). Format will depend on the auxiliary format; e.g. + for the XVGReader, this is a list of indices and `_select_data()` returns + the value(s) in those columns of the current step data. + + Defaults to 'None' if data selection is not enabled. + """ + try: + self._select_data + except AttributeError: + warnings.warn("{} does not support data selection. Reverting to " + "default".format(self.__class__.__name__)) + return None + return self._data_selector_ + + @_data_selector.setter + def _data_selector(self, new): + # check we have a select_data method + try: + select = self._select_data + except AttributeError: + warnings.warn( + "{} does not support data selection".format(self.__class__.__name__) + ) + else: + # check *new* is valid before setting; _select_data should raise an + # error if not + select(new) + self._data_selector_ = new + + def _empty_data(self): + """ Create an 'empty' ``data``-like placeholder. + + Returns an ndarray in the format of ``data`` with all values set to + np.nan; to use at the 'representative value' when no auxiliary steps + are assigned to a trajectory timestep/within the cutoff. + + Default behaviour here works when ``data`` is a ndarray of floats. May + need to overwrite in individual format's AuxSteps. + + .. versionchanged:: 2.4.0 + dtype changed to np.float64 from np.float_ + """ + return np.full_like(self.data, np.nan, dtype=np.float64)
+ + +
[docs]class AuxReader(metaclass=_AuxReaderMeta): + """Base class for auxiliary readers. + + Allows iteration over a set of data from a trajectory, additional + ('auxiliary') to the regular positions/velocities/etc. This auxiliary + data may be stored in e.g. an array or a separate file. + + See the :ref:`Auxiliary API` for more on use. + + .. versionchanged:: 2.4.0 + Behaviour of ``cutoff`` changed, default parameter which specifies + not cutoff is set is now None, not -1. + + .. versionchanged:: 2.4.0 + :class:`AuxReader` instances now have a :meth:`copy` method which + creates a deep copy of the instance. + + Parameters + ---------- + auxname : str, optional + Name for auxiliary data. When added to a trajectory, the representative + auxiliary value(s) for the timestep may be accessed as ``ts.aux.auxname`` + or ``ts.aux['auxname']``. + represent_ts_as : str + Method to use to calculate representative value of auxiliary data for a + trajectory timestep. See :func:`calc_representative` for valid options. + cutoff : float, optional + Auxiliary steps further from the trajectory timestep than *cutoff* + (in ps) will be ignored when calculating representative values. If None + (default), all auxiliary steps assigned to that timestep will be used. + **kwargs + Options to be passed to :class:`~AuxStep` + + + Attributes + ---------- + auxstep : + :class:`~AuxStep` object containing data for current step. + frame_data : dict + Dictionary containing ``data`` from each auxiliary step assigned to the + current trajectory timestep, indexed by the difference in time between + the step and trajectory timestep (i.e. ``auxstep.time - ts.time``; in ps) + frame_rep : ndarray + Representative value(s) of auxiliary data for current trajectory timestep. + + + Note + ---- + Auxiliary data are assumed to be time ordered and contain no duplicates. + """ + + _Auxstep = AuxStep + # update when add new options + represent_options = ['closest', 'average'] + + # list of attributes required to recreate the auxiliary + required_attrs = ['represent_ts_as', 'cutoff', 'dt', 'initial_time', + 'time_selector', 'data_selector', 'constant_dt', 'auxname', + 'format', '_auxdata'] + + def __init__(self, represent_ts_as='closest', auxname=None, cutoff=None, + **kwargs): + # allow auxname to be optional for when using reader separate from + # trajectory. + self.auxname = auxname + self.represent_ts_as = represent_ts_as + # no cutoff was previously passed as -1. This check is to maintain this + # behaviour: negative number is appropriately turned to None + self.cutoff = cutoff if cutoff is not None and cutoff >= 0 else None + self.frame_data = None + self.frame_rep = None + + self.auxstep = self._Auxstep(**kwargs) + self._read_next_step() + + # if dt is constant and auxiliary data includes time, calculate + # initial time and dt + if self.time_selector is not None and self.constant_dt: + self.auxstep._initial_time = self.time + self._read_next_step() + self.auxstep._dt = self.time - self.initial_time + self.rewind() + +
[docs] def copy(self): + """Returns a deep copy of the AuxReader""" + orig_dict = pickle.dumps(self) + new_reader = pickle.loads(orig_dict) + return new_reader
+ + def __len__(self): + """ Number of steps in auxiliary data. """ + return self.n_steps + +
[docs] def next(self): + """ Move to next step of auxiliary data. """ + return self._read_next_step()
+ + def __next__(self): + """ Move to next step of auxiliary data. """ + return self.next() + + def __iter__(self): + """ Iterate over all auxiliary steps. """ + self._restart() + return self + + def _restart(self): + """ Reset back to start; calling next() should read first step. """ + # Overwrite as appropriate + self.auxstep.step = -1 + +
[docs] def rewind(self): + """ Return to and read first step. """ + # Overwrite as appropriate + # could also use _go_to_step(0) + self._restart() + return self._read_next_step()
+ + def _read_next_step(self): + """ Move to next step and update auxstep. + + Should return the AuxStep instance corresponding to the next step. + """ + # Define in each auxiliary reader + raise NotImplementedError( + "BUG: Override _read_next_step() in auxiliary reader!") + +
[docs] def update_ts(self, ts): + """ Read auxiliary steps corresponding to and update the trajectory + timestep *ts*. + + Calls :meth:`read_ts`, then updates *ts* with the representative value. + ``auxname`` must be set; the representative value will be accessible in + *ts* as ``ts.aux.auxname`` or ``ts.aux['auxname']``. + + Parameters + ---------- + ts : :class:`~MDAnalysis.coordinates.timestep.Timestep` object + The trajectory timestep for which corresponding auxiliary data is + to be read and updated. + + Returns + ------- + :class:`~MDAnalysis.coordinates.timestep.Timestep` + *ts* with the representative auxiliary + value in ``ts.aux`` be updated appropriately. + + Raises + ------ + ValueError + If ``auxname`` is not set. + + See Also + -------- + :meth:`read_ts` + """ + if not self.auxname: + raise ValueError("Auxiliary name not set, cannot set representative " + "value in timestep. Name auxiliary or use read_ts " + "instead") + self.read_ts(ts) + setattr(ts.aux, self.auxname, self.frame_rep) + return ts
+ +
[docs] def read_ts(self, ts): + """ Read auxiliary steps corresponding to the trajectory timestep *ts*. + + Read the auxiliary steps 'assigned' to *ts* (the steps that are within + ``ts.dt/2`` of of the trajectory timestep/frame - ie. closer to *ts* + than either the preceding or following frame). Then calculate a + 'representative value' for the timestep from the data in each of these + auxiliary steps. + + To update *ts* with the representative value, use ``update_ts`` instead. + + Parameters + ---------- + ts : :class:`~MDAnalysis.coordinates.timestep.Timestep` object + The trajectory timestep for which corresponding auxiliary data is + to be read. + + See Also + -------- + :meth:`update_ts` + + Note + ---- + The auxiliary reader will end up positioned at the last step assigned + to the trajectory frame or, if the frame includes no auxiliary steps, + (as when auxiliary data are less frequent), the most recent auxiliary + step before the frame. + """ + # Make sure our auxiliary step starts at the right point (just before + # the frame being read): the current step should be assigned to a + # previous frame, and the next step to either the frame being read or a + # following frame. Move to right position if not. + frame_for_step = self.step_to_frame(self.step, ts) + frame_for_next_step = self.step_to_frame(self.step+1, ts) + if frame_for_step is not None: + if frame_for_next_step is None: + # self.step is the last auxiliary step in memory. + if frame_for_step >= ts.frame: + self.move_to_ts(ts) + elif not (frame_for_step < ts.frame <= frame_for_next_step): + self.move_to_ts(ts) + + self._reset_frame_data() # clear previous frame data + # read through all the steps 'assigned' to ts.frame + add to frame_data + while self.step_to_frame(self.step+1, ts) == ts.frame: + self._read_next_step() + self._add_step_to_frame_data(ts.time) + self.frame_rep = self.calc_representative()
+ +
[docs] def attach_auxiliary(self, + coord_parent, + aux_spec: Optional[Union[str, Dict[str, str]]] = None, + format: Optional[str] = None, + **kwargs) -> None: + """Attaches the data specified in `aux_spec` to the `coord_parent` + + This method is called from within + :meth:`MDAnalysis.coordinates.base.ReaderBase.add_auxiliary()`. + `add_auxiliary` should be agnostic to the type of AuxReader, so the + method call leads here instead. First, some checks are done on + the arguments to make sure the input is treated properly. Then, + the AuxReader(s) with appropriate :attr:`data_selector` are + associated with the `coord_parent` from which `add_auxiliary` was + called. + + Parameters + ---------- + coord_parent : MDAnalysis.coordinates.base.ReaderBase + Reader object to which to attach the auxiliary data. + + aux_spec : str, Dict[str, str], None + Specifies which data to add to `coord_parent`. String types are + for :class:`MDAnalysis.auxiliary.XVG.XVGReader` only. Dictionaries + are the standard way of providing `aux_spec` information (see also: + :mod:`MDAnalysis.auxiliary.EDR`). + Passing `None` causes all data to be added. + + Returns + ------- + None + + Raises + ------ + ValueError + If trying to add data under an `aux_spec` key that is already + assigned. + + """ + if "auxname" in kwargs: + # This check is necessary for the tests in coordinates/base + # `test_reload_auxiliaries_from_description` + # because there, auxreaders are created from descriptions without + # giving explicit `aux_spec`s + aux_spec = {kwargs["auxname"]: None} + + elif aux_spec is None: + # Add all terms found in the file if aux_spec is None + aux_spec = {term: term for term in self.terms} + + elif isinstance(aux_spec, str): + # This is to keep XVGReader functioning as-is, working with strings + # for what used to be `auxname`. Often, no `auxterms` are specified + # for XVG files. The below sets the data selector to None, + # the default for XVGReader + aux_spec = {aux_spec: None} + + for auxname in aux_spec: + if auxname in coord_parent.aux_list: + raise ValueError(f"Auxiliary data with name {auxname} already " + "exists") + if " " in auxname: + warnings.warn(f"Auxiliary name '{auxname}' contains a space. " + "Only dictionary style accession, not attribute " + f"style accession of '{auxname}' will work.") + description = self.get_description() + # make sure kwargs are also used + description_kwargs = {**description, **kwargs} + # Make a copy of the auxreader for every attribute to add + # This is necessary so all attributes can be iterated over + aux = auxreader(**description_kwargs) + aux.auxname = auxname + if aux.data_selector is None: + # When calling ReaderBase.copy(), aux_spec information is lost + # but data_selector is retained + aux.data_selector = aux_spec[auxname] + coord_parent._auxs[auxname] = aux + coord_parent.ts = aux.update_ts(coord_parent.ts) + + aux_memory_usage = 0 + # Check if testing, which needs lower memory limit + memory_limit = kwargs.get("memory_limit", 1e+09) + for reader in coord_parent._auxs.values(): + aux_memory_usage += reader._memory_usage() + if aux_memory_usage > memory_limit: + conv = 1e+09 # convert to GB + warnings.warn("AuxReader: memory usage warning! " + f"Auxiliary data takes up {aux_memory_usage/conv} " + f"GB of memory (Warning limit: {memory_limit/conv} " + "GB).")
+ + def _memory_usage(self): + raise NotImplementedError("BUG: Override _memory_usage() " + "in auxiliary reader!") + +
[docs] def step_to_frame(self, step, ts, return_time_diff=False): + """ Calculate closest trajectory frame for auxiliary step *step*. + + Calculated given dt, time and frame from *ts*:: + + time_frame_0 = ts.time - ts.frame*ts.dt # time at frame 0 + + frame = floor((step_to_time(step) - time_frame_0 + ts.dt/2)/ts.dt)) + + The difference in time between the step and the calculated frame can + also optionally be returned with *return_time_diff*. + + Parameters + ---------- + step : int + Number of the auxiliary step to calculate closest trajectory frame + for. + ts : :class:`~MDAnalysis.coordinates.timestep.Timestep` object + (Any) timestep from the trajectory the calculated frame number is to + correspond to. + return_time_diff : bool, optional + (Default: False) Additionally return the time difference between + *step* and returned frame. + + Returns + ------- + frame_index : int or None + Number of the trajectory frame closest (in time) to the given + auxiliary step. If the step index is out of range for the auxiliary + data, ``None`` is returned instead. + time_diff : float (optional) + Difference in time between *step* and *frame_index*. + + Note + ---- + Assumes trajectory dt is consant. + The returned frame number may be out of range for the trajectory. + """ + if step >= self.n_steps or step < 0: + return None + time_frame_0 = ts.time - ts.frame*ts.dt # assumes ts.dt is constant + time_step = self.step_to_time(step) + frame_index = int(math.floor((time_step-time_frame_0+ts.dt/2.)/ts.dt)) + if not return_time_diff: + return frame_index + else: + time_frame = time_frame_0 + frame_index*ts.dt + time_diff = abs(time_frame - time_step) + return frame_index, time_diff
+ +
[docs] def move_to_ts(self, ts): + """ Position auxiliary reader just before trajectory timestep *ts*. + + Calling ``next()`` should read the first auxiliary step 'assigned' to + the trajectory timestep *ts* or, if no auxiliary steps are + assigned to that timestep (as in the case of less frequent auxiliary + data), the first auxiliary step after *ts*. + + Parameters + ---------- + ts : :class:`~MDAnalysis.coordinates.timestep.Timestep` object + The trajectory timestep before which the auxiliary reader is to + be positioned. + """ + # figure out what step we want to end up at + if self.constant_dt: + # if dt constant, calculate from dt/offset/etc + step = int(math.floor((ts.time-ts.dt/2-self.initial_time)/self.dt)) + # if we're out of range of the number of steps, reset back + step = max(min(step, self.n_steps-1), -1) + else: + # otherwise, go through steps till we find the right one + for i in range(self.n_steps+1): + if self.step_to_frame(i) >= ts.frame: + break + # we want the step before this + step = i-1 + if step == -1: + self._restart() + else: + self._go_to_step(step)
+ +
[docs] def next_nonempty_frame(self, ts): + """ Find the next trajectory frame for which a representative auxiliary + value can be calculated. + + That is, the next trajectory frame to which one or more auxiliary steps + are assigned and fall within the cutoff. + + Starts looking from the current step time. If the end of the auxiliary + data is reached before a trajectory frame is found, None is returned. + + Parameters + ---------- + ts : :class:`~MDAnalysis.coordinates.timestep.Timestep` object + Any timestep from the trajectory for which the next 'non-empty' + frame is to be found. + + Returns + ------- + int + Index of the next auxiliary-containing frame in the trajectory. + + Note + ---- + The returned index may be out of range for the trajectory. + """ + step = self.step + while step < self.n_steps-1: + next_frame, time_diff = self.step_to_frame(self.step+1, ts, + return_time_diff=True) + if self.cutoff is not None and time_diff > self.cutoff: + # 'representative values' will be NaN; check next step + step = step + 1 + else: + return next_frame + # we ran out of auxiliary steps... + return None
+ + def __getitem__(self, i): + """ Return the AuxStep corresponding to the *i*-th auxiliary step(s) + (0-based). Negative numbers are counted from the end. + + *i* may be an integer (in which case the corresponding AuxStep is + returned) or a list of integers or slice (in which case an iterator is + returned):: + + step_10 = aux_reader[10] + + will move to step 10 of the auxiliary and return the :class:`AuxStep`. + By using a slice/list, we can iterated over specified steps in the + auxiliary, e.g. when performing analysis :: + + for auxstep in aux_reader[100:200]: # analyse only steps 100 to 200 + run_analysis(auxstep) + + for auxstep in aux_reader[::10] # analyse every 10th step + run_analysis(auxstep) + """ + if isinstance(i, numbers.Integral): + i = self._check_index(i) + return self._go_to_step(i) + + elif isinstance(i, (list, np.ndarray)): + return self._list_iter([self._check_index(x) for x in i]) + + elif isinstance(i, slice): + # default start to first frame (ie. 0) + start = self._check_index(i.start) if i.start is not None else 0 + # default stop to after last frame (i.e. n_steps) + # n_steps is a valid stop index but will fail _check_index; + # deal with separately + stop = (i.stop if i.stop == self.n_steps + else self._check_index(i.stop) if i.stop is not None + else self.n_steps) + step = i.step or 1 + if not isinstance(step, numbers.Integral) or step < 1: + raise ValueError("Step must be positive integer") # allow -ve? + if start > stop: + raise IndexError("Stop frame is lower than start frame") + return self._slice_iter(slice(start,stop,step)) + else: + raise TypeError("Index must be integer, list of integers or slice") + + def _check_index(self, i): + if not isinstance(i, numbers.Integral): + raise TypeError("Step indices must be integers") + if i < 0: + i = i + self.n_steps + if i < 0 or i >= self.n_steps: + raise IndexError("{} is out of range of auxiliary (num. steps " + "{})".format(i, self.n_steps)) + return i + + def _list_iter(self, i): + for j in i: + yield self._go_to_step(j) + + def _slice_iter(self, i): + for j in range(i.start, i.stop, i.step): + yield self._go_to_step(j) + + def _go_to_step(self, i): + """ Move to and read i-th auxiliary step. """ + # Need to define in each auxiliary reader + raise NotImplementedError( + "BUG: Override _go_to_step() in auxiliary reader!") + + def _reset_frame_data(self): + self.frame_data = {} + + def _add_step_to_frame_data(self, ts_time): + """ Update ``frame_data`` with values for the current step. + + Parameters + ---------- + ts_time : float + the time of the timestep the current step is being 'added to'. Used + to calculate difference in time between current step and timestep. + """ + time_diff = self.time - ts_time + self.frame_data[time_diff] = self.auxstep.data + +
[docs] def calc_representative(self): + """ Calculate representative auxiliary value(s) from the data in + *frame_data*. + + Currently implemented options for calculating representative value are: + + * `closest`: default; the value(s) from the step closest to in time + to the trajectory timestep + + * `average`: average of the value(s) from steps 'assigned' to the + trajectory timestep. + + Additionally, if ``cutoff`` is specified, only steps within this time + of the trajectory timestep are considered in calculating the + representative. + + If no auxiliary steps were assigned to the timestep, or none fall + within the cutoff, representative values are set to ``np.nan``. + + Returns + ------- + ndarray + Array of auxiliary value(s) 'representative' for the timestep. + """ + if self.cutoff is None: + cutoff_data = self.frame_data + else: + cutoff_data = {key: val for key, val in self.frame_data.items() + if abs(key) <= self.cutoff} + + if len(cutoff_data) == 0: + # no steps are 'assigned' to this trajectory frame, so return + # values of ``np.nan`` + value = self.auxstep._empty_data() + elif self.represent_ts_as == 'closest': + min_diff = min([abs(i) for i in cutoff_data]) + # we don't know the original sign, and might have two equally-spaced + # steps; check the earlier time first + try: + value = cutoff_data[-min_diff] + except KeyError: + value = cutoff_data[min_diff] + elif self.represent_ts_as == 'average': + try: + value = np.mean(np.array( + [val for val in cutoff_data.values()] + ), axis=0) + except TypeError: + # for readers like EDRReader, the above does not work + # because each step contains a dictionary of numpy arrays + # as data + value = defaultdict(float) + for dataset in cutoff_data: + for term in self.terms: + value[term] += cutoff_data[dataset][term] + for term in value: + value[term] = value[term] / len(cutoff_data) + return value
+ + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + return False + + def close(self): + # Overwrite as appropriate + pass + + @property + def n_steps(self): + """ Total number of steps in the auxiliary data. """ + try: + return self._n_steps + except AttributeError: + self._n_steps = self._count_n_steps() + return self._n_steps + +
[docs] def step_to_time(self, i): + """ Return time of auxiliary step *i*. + + Calculated using ``dt`` and ``initial_time`` if ``constant_dt`` is True; + otherwise from the list of times as read from the auxiliary data for + each step. + + Parameters + ---------- + i : int + Index (0-based) of step to return time for + + Returns + ------- + time : float + Time (in ps) of step *i* + + Raises + ------ + ValueError + When *i* not in valid range + """ + if i >= self.n_steps: + raise ValueError("{0} is not a valid step index (total number of " + "steps is {1})".format(i, self.n_steps)) + if self.constant_dt: + return i*self.dt+self.initial_time + else: + try: + return self._times[i] + except AttributeError: + self._times = self.read_all_times() + return self._times[i]
+ + @property + def represent_ts_as(self): + """ Method by which 'representative' timestep values of auxiliary data + will be calculated. + """ + return self._represent_ts_as + + @represent_ts_as.setter + def represent_ts_as(self, new): + if new not in self.represent_options: + raise ValueError("{0} is not a valid option for calculating " + "representative value(s). Enabled options are: " + "{1}".format(new, self.represent_options)) + self._represent_ts_as = new + + + def __del__(self): + self.close() + +
[docs] def get_description(self): + """ Get the values of the parameters necessary for replicating the + AuxReader. + + An AuxReader can be duplicated using + :func:`~MDAnalysis.auxiliary.core.auxreader`:: + + description = original_aux.get_description() + new_aux = MDAnalysis.auxiliary.auxreader(**description) + + The resulting dictionary may also be passed directly to + :meth:`~MDAnalysis.coordinates.base.ProtoReader.add_auxiliary` to + reload an auxiliary into a trajectory:: + + trajectory.add_auxiliary(**description) + + Returns + ------- + dict + Key-word arguments and values that can be used to replicate the + AuxReader. + """ + description = {attr.strip('_'): getattr(self, attr) + for attr in self.required_attrs} + return description
+ + def __eq__(self, other): + for attr in self.required_attrs: + if getattr(self, attr) != getattr(other, attr): + return False + return True + + @property + def step(self): + """Number of the current auxiliary step (as stored in ``auxstep``; + 0-based).""" + return self.auxstep.step + + @property + def time(self): + """Time of current auxiliary step (as stored in ``auxstep``; in ps)""" + return self.auxstep.time + + @property + def dt(self): + """Change in time between auxiliary steps (as stored in ``auxstep``; + in ps)""" + return self.auxstep._dt + + @property + def initial_time(self): + """Time of first auxiliary step (as stored in ``auxstep``; in ps)""" + return self.auxstep._initial_time + + @property + def time_selector(self): + """Key to select 'time' value from the full set of data read for each step. + As stored in ``austep``. + + Type differs between auxiliary formats, depending how the data for each + step is read in and stored; e.g. data from .xvg files is read in as a + list and `time_selector` must be a valid index. If time selection is not + enabled by the reader, ``time_selector`` will default to ``None``. + + See each individual auxiliary reader. + """ + return self.auxstep._time_selector + + @time_selector.setter + def time_selector(self, new): + old = self.auxstep._time_selector + self.auxstep._time_selector = new + if old != new: + # if constant_dt is False and so we're using a _times list, this will + # now be made invalid + try: + del(self._times) + except AttributeError: + pass + + @property + def data_selector(self): + """Key(s) to select auxiliary data values of interest from the full set + of data read for each step (as stored in ``auxstep``). + + Type differs between auxiliary formats, depending how the data for each + step is read in and stored - e.g. data from .xvg files is read in as + a list and `data_selector` must be a list of valid indicies. If data + selection is not enabled by the reader, ``data_selector`` will default + to ``None``. + + See each individual auxiliary reader. + """ + return self.auxstep._data_selector + + @data_selector.setter + def data_selector(self, new): + self.auxstep._data_selector = new + + @property + def constant_dt(self): + """ True if ``dt`` is constant throughout the auxiliary (as stored in + ``auxstep``) """ + return self.auxstep._constant_dt + + @constant_dt.setter + def constant_dt(self, new): + self.auxstep._constant_dt = new
+ + +
[docs]class AuxFileReader(AuxReader): + """ Base class for auxiliary readers that read from file. + + Extends AuxReader with attributes and methods particular to reading + auxiliary data from an open file, for use when auxiliary files may be too + large to read in at once. + + Parameters + ---------- + filename : str + Location of the file containing the auxiliary data. + **kwargs + Other AuxReader options. + + See also + -------- + :class:`AuxReader` + + Attributes + ---------- + auxfile + File object for the auxiliary file. + + """ + + def __init__(self, filename, **kwargs): + self.auxfile = anyopen(filename) + self._auxdata = os.path.abspath(filename) + super(AuxFileReader, self).__init__(**kwargs) + +
[docs] def close(self): + """ Close *auxfile*. """ + if self.auxfile is None: + return + self.auxfile.close() + self.auxfile = None
+ + def _restart(self): + """ Reposition to just before first step. """ + self.auxfile.seek(0) + self.auxstep.step = -1 + + def _reopen(self): + """ Close and then reopen *auxfile*. """ + if self.auxfile is not None: + self.auxfile.close() + self.auxfile = open(self._auxdata) + self.auxstep.step = -1 + + def _go_to_step(self, i): + """ Move to and read i-th auxiliary step. + + Parameters + ---------- + i : int + Step number (0-indexed) to move to + + Raises + ------ + ValueError + If step index not in valid range. + + Note + ---- + Works by reading through all steps consecutively until correct step + is reached. Overwrite if this can be done more efficiently. + """ + ## could seek instead? + if i >= self.n_steps: + raise ValueError("Step index {0} is not valid for auxiliary " + "(num. steps {1}!".format(i, self.n_steps)) + value = self.rewind() + while self.step != i: + value = self.next() + return value
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/auxiliary/core.html b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/core.html new file mode 100644 index 0000000000..8eeb78f21b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/auxiliary/core.html @@ -0,0 +1,256 @@ + + + + + + MDAnalysis.auxiliary.core — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.auxiliary.core

+# -*- 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-2017 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
+#
+
+"""
+Common functions for auxiliary reading --- :mod:`MDAnalysis.auxiliary.core`
+===========================================================================
+
+.. autofunction:: get_auxreader_for
+.. autofunction:: auxreader
+"""
+from . import _AUXREADERS
+from ..lib import util
+
+
+
[docs]def get_auxreader_for(auxdata=None, format=None): + """Return the appropriate auxiliary reader class for *auxdata*/*format*. + + If *format* is provided, will attempt to find an AuxReader corresponding + to that format. If *auxdata* is provided, the format will first be guessed. + + Parameters + ---------- + auxdata + (Optional) The auxiliary data (e.g. filename of file containing + auxiliary data). + format + (Optional). Known format of *auxdata*. + + Returns + ------- + :class:`~MDAnalysis.auxiliary.base.AuxReader` + AuxReader class corresponding to the supplied/guessed format. + + Raises + ------ + ValueError + If an AuxReader for the format (provided or guessed from *auxdata*) + cannot be found. + + """ + if not auxdata and not format: + raise ValueError('Must provide either auxdata or format') + + if format is None: + if isinstance(auxdata, str): + ## assume it's a filename? + format = util.guess_format(auxdata) + else: + ## TBA if add non-file-format readers + pass + format = format.upper() + try: + return _AUXREADERS[format] + except KeyError: + errmsg = f"Unknown auxiliary data format for auxdata: {auxdata}" + raise ValueError(errmsg) from None + else: + try: + return _AUXREADERS[format] + except KeyError: + errmsg = f"Unknown auxiliary data format {format}" + raise ValueError(errmsg) from None
+ +
[docs]def auxreader(auxdata, format=None, **kwargs): + """ Return an auxiliary reader instance for *auxdata*. + + An appropriate reader class is first obtained using + :func:`get_auxreader_for`, and an auxiliary reader instance for *auxdata* + then created and returned. + + Parameters + ---------- + auxdata + Auxiliary data (e.g. filename of file containing auxiliary data). + format + (Optional). The format of *auxdata*, if known. + **kwargs + Additional AuxReader options. + + Returns + ------- + :class:`~MDAnalysis.auxiliary.base.AuxReader` instance + Appropriate auxiliary reader instance for *auxdata*. + """ + reader = get_auxreader_for(auxdata, format=format) + return reader(auxdata, **kwargs)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMM.html b/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMM.html new file mode 100644 index 0000000000..64a638ed5b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMM.html @@ -0,0 +1,357 @@ + + + + + + MDAnalysis.converters.OpenMM — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.converters.OpenMM

+# -*- 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-2017 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
+#
+
+"""OpenMM structure I/O --- :mod:`MDAnalysis.converters.OpenMM`
+================================================================
+
+
+Read coordinates data from a
+`OpenMM <http://docs.openmm.org/latest/api-python/generated/openmm.app.simulation.Simulation.html#openmm.app.simulation.Simulation>`_
+:class:`openmm.app.simulation.Simulation` with :class:`OpenMMReader`
+into a MDAnalysis Universe.
+
+Also converts other objects within the
+`OpenMM Application Layer <http://docs.openmm.org/latest/api-python/app.html>`_:
+
+    - `openmm.app.pdbfile.PDBFile <http://docs.openmm.org/latest/api-python/generated/openmm.app.pdbfile.PDBFile.html#openmm.app.pdbfile.PDBFile>`_
+    - `openmm.app.modeller.Modeller <http://docs.openmm.org/latest/api-python/generated/openmm.app.modeller.Modeller.html#openmm.app.modeller.Modeller>`_
+    - `openmm.app.pdbxfile.PDBxFile <http://docs.openmm.org/latest/api-python/generated/openmm.app.pdbxfile.PDBxFile.html#openmm.app.pdbxfile.PDBxFile>`_
+
+Example
+-------
+OpenMM can read various file formats into OpenMM objects.
+MDAnalysis can then convert some of these OpenMM objects into MDAnalysis Universe objects.
+
+    >>> import openmm.app as app
+    >>> import MDAnalysis as mda
+    >>> from MDAnalysis.tests.datafiles import PDBX
+    >>> pdbxfile = app.PDBxFile(PDBX)
+    >>> mda.Universe(pdbxfile)
+    <Universe with 60 atoms>
+
+
+
+Classes
+-------
+
+.. autoclass:: OpenMMSimulationReader
+   :members:
+
+.. autoclass:: OpenMMAppReader
+   :members:
+
+
+"""
+
+
+import numpy as np
+
+from ..coordinates import base
+
+
+
[docs]class OpenMMSimulationReader(base.SingleFrameReaderBase): + """Reader for OpenMM Simulation objects + + + .. versionadded:: 2.0.0 + """ + + format = "OPENMMSIMULATION" + units = {"time": "ps", "length": "nm", "velocity": "nm/ps", + "force": "kJ/(mol*nm)", "energy": "kJ/mol"} + + @staticmethod + def _format_hint(thing): + """Can this reader read *thing*? + """ + try: + from openmm.app import Simulation + except ImportError: + try: # pragma: no cover + from simtk.openmm.app import Simulation + except ImportError: + return False + else: + return isinstance(thing, Simulation) + + def _read_first_frame(self): + self.n_atoms = self.filename.topology.getNumAtoms() + + self.ts = self._mda_timestep_from_omm_context() + + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) + self.ts.triclinic_dimensions = self.convert_pos_from_native( + self.ts.triclinic_dimensions, inplace=False + ) + self.ts.dimensions[3:] = _sanitize_box_angles(self.ts.dimensions[3:]) + self.convert_velocities_from_native(self.ts._velocities) + self.convert_forces_from_native(self.ts._forces) + self.convert_time_from_native(self.ts.dt) + + def _mda_timestep_from_omm_context(self): + """ Construct Timestep object from OpenMM context """ + try: + import openmm.unit as u + except ImportError: # pragma: no cover + import simtk.unit as u + + state = self.filename.context.getState(-1, getVelocities=True, + getForces=True, getEnergy=True) + + n_atoms = self.filename.context.getSystem().getNumParticles() + + ts = self._Timestep(n_atoms, **self._ts_kwargs) + ts.frame = 0 + ts.data["time"] = state.getTime()._value + ts.data["potential_energy"] = ( + state.getPotentialEnergy().in_units_of(u.kilojoule/u.mole) + ) + ts.data["kinetic_energy"] = ( + state.getKineticEnergy().in_units_of(u.kilojoule/u.mole) + ) + ts.triclinic_dimensions = state.getPeriodicBoxVectors( + asNumpy=True)._value + ts.dimensions[3:] = _sanitize_box_angles(ts.dimensions[3:]) + ts.positions = state.getPositions(asNumpy=True)._value + ts.velocities = state.getVelocities(asNumpy=True)._value + ts.forces = state.getForces(asNumpy=True)._value + + return ts
+ + +
[docs]class OpenMMAppReader(base.SingleFrameReaderBase): + """Reader for OpenMM Application layer objects + + See also `the object definition in the OpenMM Application layer <http://docs.openmm.org/latest/api-python/generated/openmm.app.simulation.Simulation.html#openmm.app.simulation.Simulation>`_ + + .. versionadded:: 2.0.0 + """ + + format = "OPENMMAPP" + units = {"time": "ps", "length": "nm"} + + @staticmethod + def _format_hint(thing): + """Can this reader read *thing*? + """ + try: + from openmm import app + except ImportError: + try: # pragma: no cover + from simtk.openmm import app + except ImportError: + return False + else: + return isinstance(thing, (app.PDBFile, app.Modeller, + app.PDBxFile)) + + def _read_first_frame(self): + self.n_atoms = self.filename.topology.getNumAtoms() + + self.ts = self._mda_timestep_from_omm_app() + + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) + if self.ts.dimensions is not None: + self.ts.triclinic_dimensions = self.convert_pos_from_native( + self.ts.triclinic_dimensions, inplace=False + ) + self.ts.dimensions[3:] = _sanitize_box_angles(self.ts.dimensions[3:]) + + def _mda_timestep_from_omm_app(self): + """ Construct Timestep object from OpenMM Application object """ + + omm_object = self.filename + n_atoms = omm_object.topology.getNumAtoms() + + ts = self._Timestep(n_atoms, **self._ts_kwargs) + ts.frame = 0 + if omm_object.topology.getPeriodicBoxVectors() is not None: + ts.triclinic_dimensions = np.array( + omm_object.topology.getPeriodicBoxVectors()._value + ) + ts.dimensions[3:] = _sanitize_box_angles(ts.dimensions[3:]) + ts.positions = np.array(omm_object.getPositions()._value) + + return ts
+ + +def _sanitize_box_angles(angles): + """ Ensure box angles correspond to first quadrant + + See `discussion on unitcell angles <https://github.com/MDAnalysis/mdanalysis/pull/2917/files#r620558575>`_ + """ + inverted = 180 - angles + + return np.min(np.array([angles, inverted]), axis=0) +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.html b/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.html new file mode 100644 index 0000000000..880d924529 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.html @@ -0,0 +1,410 @@ + + + + + + MDAnalysis.converters.OpenMMParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.converters.OpenMMParser

+# -*- 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-2017 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
+#
+
+"""OpenMM topology parser :mod:`MDAnalysis.converters.OpenMMParser`
+===================================================================
+
+.. versionadded:: 2.0.0
+
+
+Converts an
+`OpenMM topology <http://docs.openmm.org/latest/api-python/generated/openmm.app.topology.Topology.html#openmm.app.topology.Topology>`_
+:class:`openmm.app.topology.Topology` into a :class:`MDAnalysis.core.Topology`.
+
+Also converts some objects within the
+`OpenMM Application layer <http://docs.openmm.org/latest/api-python/app.html>`_
+
+    - `openmm.app.pdbfile.PDBFile <http://docs.openmm.org/latest/api-python/generated/openmm.app.pdbfile.PDBFile.html#openmm.app.pdbfile.PDBFile>`_
+    - `openmm.app.simulation.Simulation <http://docs.openmm.org/latest/api-python/generated/openmm.app.simulation.Simulation.html#openmm.app.simulation.Simulation>`_
+    - `openmm.app.modeller.Modeller <http://docs.openmm.org/latest/api-python/generated/openmm.app.modeller.Modeller.html#openmm.app.modeller.Modeller>`_
+    - `openmm.app.pdbxfile.PDBxFile <http://docs.openmm.org/latest/api-python/generated/openmm.app.pdbxfile.PDBxFile.html#openmm.app.pdbxfile.PDBxFile>`_
+
+The :class:`OpenMMTopologyParser` generates a topology from an OpenMM Topology object.
+
+
+Classes
+-------
+
+.. autoclass:: OpenMMTopologyParser
+   :members:
+   :inherited-members:
+
+.. autoclass:: OpenMMAppTopologyParser
+   :members:
+   :inherited-members:
+
+"""
+
+import numpy as np
+import warnings
+
+from ..topology.base import TopologyReaderBase
+from ..topology.tables import SYMB2Z
+from ..topology.guessers import guess_types, guess_masses
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Bonds,
+    ChainIDs,
+    Elements,
+    Masses,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+)
+
+
+
[docs]class OpenMMTopologyParser(TopologyReaderBase): + format = "OPENMMTOPOLOGY" + + @staticmethod + def _format_hint(thing): + """Can this Parser read object *thing*? + + """ + try: + from openmm import app + except ImportError: + try: # pragma: no cover + from simtk.openmm import app + except ImportError: + return False + else: + return isinstance(thing, app.Topology) + + def _mda_topology_from_omm_topology(self, omm_topology): + """ Construct mda topology from omm topology + + Can be used for any openmm object that contains a topology object + + Parameters + ---------- + omm_topology: openmm.Topology + + Returns + ------- + top : MDAnalysis.core.topology.Topology + + Note + ---- + When none of the elements are present in the openmm topolgy, their + atomtypes are guessed using their names and their masses are + then guessed using their atomtypes. + + When partial elements are present, values from available elements + are used whereas the absent elements are assigned an empty string + with their atomtype set to 'X' and mass set to 0.0. + + For elements with invalid and unreal symbols, the symbol is used + as it is for atomtypes but an empty string is used for elements. + + .. versionchanged:: 2.2.0 + The parser now works when element attribute is missing in some or + all the atoms. + + """ + + try: + from openmm.unit import daltons + except ImportError: + try: + from simtk.unit import daltons + except ImportError: + msg = ("OpenMM is required for the OpenMMParser but " + "it's not installed. Try installing it with \n" + "conda install -c conda-forge openmm") + raise ImportError(msg) + + atom_resindex = [a.residue.index for a in omm_topology.atoms()] + residue_segindex = [r.chain.index for r in omm_topology.residues()] + atomids = [a.id for a in omm_topology.atoms()] + atomnames = [a.name for a in omm_topology.atoms()] + chainids = [a.residue.chain.id for a in omm_topology.atoms()] + resnames = [r.name for r in omm_topology.residues()] + resids = [r.index + 1 for r in omm_topology.residues()] + resnums = resids.copy() + segids = [str(c.index) for c in omm_topology.chains()] + bonds = [(b.atom1.index, b.atom2.index) for b in omm_topology.bonds()] + bond_orders = [b.order for b in omm_topology.bonds()] + bond_types = [b.type for b in omm_topology.bonds()] + + attrs = [ + Atomids(np.array(atomids, dtype=np.int32)), + Atomnames(np.array(atomnames, dtype=object)), + Bonds(bonds, types=bond_types, order=bond_orders, guessed=False), + ChainIDs(np.array(chainids, dtype=object)), + Resids(resids), + Resnums(resnums), + Resnames(resnames), + Segids(segids), + ] + + validated_elements = [] + masses = [] + atomtypes = [] + for a in omm_topology.atoms(): + elem = a.element + if elem is not None: + if elem.symbol.capitalize() in SYMB2Z: + validated_elements.append(elem.symbol) + else: + validated_elements.append('') + atomtypes.append(elem.symbol) + masses.append(elem.mass.value_in_unit(daltons)) + else: + validated_elements.append('') + masses.append(0.0) + atomtypes.append('X') + + if not all(validated_elements): + if any(validated_elements): + warnings.warn("Element information missing for some atoms. " + "These have been given an empty element record ") + if any(i == 'X' for i in atomtypes): + warnings.warn("For absent elements, atomtype has been " + "set to 'X' and mass has been set to 0.0. " + "If needed these can be guessed using " + "MDAnalysis.topology.guessers.") + attrs.append(Elements(np.array(validated_elements, + dtype=object))) + + else: + atomtypes = guess_types(atomnames) + masses = guess_masses(atomtypes) + wmsg = ("Element information is missing for all the atoms. " + "Elements attribute will not be populated. " + "Atomtype attribute will be guessed using atom " + "name and mass will be guessed using atomtype." + "See MDAnalysis.topology.guessers.") + warnings.warn(wmsg) + else: + attrs.append(Elements(np.array(validated_elements, dtype=object))) + attrs.append(Atomtypes(np.array(atomtypes, dtype=object))) + attrs.append(Masses(np.array(masses))) + + n_atoms = len(atomids) + n_residues = len(resids) + n_segments = len(segids) + top = Topology( + n_atoms, + n_residues, + n_segments, + attrs=attrs, + atom_resindex=atom_resindex, + residue_segindex=residue_segindex, + ) + + return top + + def parse(self, **kwargs): + omm_topology = self.filename + top = self._mda_topology_from_omm_topology(omm_topology) + + return top
+ + +
[docs]class OpenMMAppTopologyParser(OpenMMTopologyParser): + format = "OPENMMAPP" + + @staticmethod + def _format_hint(thing): + """Can this Parser read object *thing*? + + """ + try: + from openmm import app + except ImportError: + try: # pragma: no cover + from simtk.openmm import app + except ImportError: + return False + else: + return isinstance( + thing, + ( + app.PDBFile, app.Modeller, + app.Simulation, app.PDBxFile + ) + ) + + def parse(self, **kwargs): + try: + omm_topology = self.filename.getTopology() + except AttributeError: + omm_topology = self.filename.topology + top = self._mda_topology_from_omm_topology(omm_topology) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEd.html b/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEd.html new file mode 100644 index 0000000000..5f72a92908 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEd.html @@ -0,0 +1,511 @@ + + + + + + MDAnalysis.converters.ParmEd — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.converters.ParmEd

+# -*- 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-2017 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
+#
+
+"""ParmEd structure I/O --- :mod:`MDAnalysis.converters.ParmEd`
+================================================================
+
+Read coordinates data from a `ParmEd <https://parmed.github.io/ParmEd/html>`_ :class:`parmed.structure.Structure`
+with :class:`ParmEdReader` into a MDAnalysis Universe. Convert it back to a
+:class:`parmed.structure.Structure` with :class:`ParmEdConverter`.
+
+Example
+-------
+
+ParmEd has some neat functions. One such is `HMassRepartition`_.
+This function changes the mass of the hydrogens in your system to your desired
+value. It then adjusts the mass of the atom to which it is bonded by the same
+amount, so that the total mass is unchanged. ::
+
+    >>> import MDAnalysis as mda
+    >>> from MDAnalysis.tests.datafiles import PRM
+    >>> u = mda.Universe(PRM)
+    >>> u.atoms.masses[:10]
+    array([14.01 ,  1.008,  1.008,  1.008, 12.01 ,  1.008, 12.01 ,  1.008,
+        1.008,  1.008])
+
+We can convert our universe to a ParmEd structure to change our hydrogen
+masses. ::
+
+    >>> import parmed.tools as pmt
+    >>> parm = u.atoms.convert_to('PARMED')
+    >>> hmass = pmt.HMassRepartition(parm, 5)  # convert to 5 daltons
+    >>> hmass.execute()
+
+We can then convert it back to an MDAnalysis Universe for further analysis. ::
+
+    >>> u2 = mda.Universe(parm)
+    >>> u2.atoms.masses[:10]
+    array([2.03399992, 5.        , 5.        , 5.        , 8.01799965,
+       5.        , 0.034     , 5.        , 5.        , 5.        ])
+
+.. _`HMassRepartition`: http://parmed.github.io/ParmEd/html/parmed.html#hmassrepartition
+
+
+
+Classes
+-------
+
+.. autoclass:: ParmEdReader
+   :members:
+
+.. autoclass:: ParmEdConverter
+   :members:
+
+
+.. versionchanged:: 2.0.0
+   The ParmEdReader and ParmEdConverter classes were moved from :mod:`~MDAnalysis.coordinates`
+   to :mod:`~MDAnalysis.converters`
+
+"""
+import functools
+import itertools
+import warnings
+
+from ..coordinates import base
+from ..topology.tables import SYMB2Z
+from ..core.universe import Universe
+from ..exceptions import NoDataError
+
+
+
[docs]class ParmEdReader(base.SingleFrameReaderBase): + """Coordinate reader for ParmEd.""" + format = 'PARMED' + + # Structure.coordinates always in Angstrom + units = {'time': None, 'length': 'Angstrom'} + + @staticmethod + def _format_hint(thing): + """Can this reader read *thing*? + + .. versionadded:: 1.0.0 + """ + try: + import parmed as pmd + except ImportError: + # if we can't import parmed, it's probably not parmed + return False + else: + return isinstance(thing, pmd.Structure) + + def _read_first_frame(self): + self.n_atoms = len(self.filename.atoms) + + self.ts = ts = self._Timestep(self.n_atoms, + **self._ts_kwargs) + + if self.filename.coordinates is not None: + ts._pos = self.filename.coordinates + + # optional field + ts.dimensions = self.filename.box + + ts.frame = 0 + return ts
+ + +MDA2PMD = { + 'tempfactor': 'bfactor', + 'gbscreen': 'screen', + 'altLoc': 'altloc', + 'nbindex': 'nb_idx', + 'solventradius': 'solvent_radius', + 'id': 'number' +} + + +def get_indices_from_subset(i, atomgroup=None, universe=None): + return atomgroup[universe.atoms[i]] + + +
[docs]class ParmEdConverter(base.ConverterBase): + """Convert MDAnalysis AtomGroup or Universe to ParmEd :class:`~parmed.structure.Structure`. + + Example + ------- + + .. code-block:: python + + import parmed as pmd + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import GRO + pgro = pmd.load_file(GRO) + mgro = mda.Universe(pgro) + parmed_subset = mgro.select_atoms('resname SOL').convert_to('PARMED') + + + """ + + lib = 'PARMED' + units = {'time': None, 'length': 'Angstrom'} + +
[docs] def convert(self, obj): + """Write selection at current trajectory frame to :class:`~parmed.structure.Structure`. + + Parameters + ----------- + obj : AtomGroup or Universe or :class:`Timestep` + """ + try: + import parmed as pmd + except ImportError: + raise ImportError('ParmEd is required for ParmEdConverter but ' + 'is not installed. Try installing it with \n' + 'pip install parmed') + try: + # make sure to use atoms (Issue 46) + ag_or_ts = obj.atoms + except AttributeError: + raise TypeError("No atoms found in obj argument") from None + + # Check for topology information + missing_topology = [] + try: + names = ag_or_ts.names + except (AttributeError, NoDataError): + names = itertools.cycle(('X',)) + missing_topology.append('names') + try: + resnames = ag_or_ts.resnames + except (AttributeError, NoDataError): + resnames = itertools.cycle(('UNK',)) + missing_topology.append('resnames') + + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "Alternatively these can be supplied as keyword arguments." + "".format(miss=', '.join(missing_topology))) + + try: + positions = ag_or_ts.positions + except (AttributeError, NoDataError): + positions = [None]*ag_or_ts.n_atoms + + try: + velocities = ag_or_ts.velocities + except (AttributeError, NoDataError): + velocities = [None]*ag_or_ts.n_atoms + + atom_kwargs = [] + for atom, name, resname, xyz, vel in zip(ag_or_ts, names, resnames, + positions, velocities): + akwargs = {'name': name} + chain_seg = {'segid': atom.segid} + for attrname in ('mass', 'charge', 'type', + 'altLoc', 'tempfactor', + 'occupancy', 'gbscreen', 'solventradius', + 'nbindex', 'rmin', 'epsilon', 'rmin14', + 'epsilon14', 'id'): + try: + akwargs[MDA2PMD.get(attrname, attrname)] = getattr(atom, attrname) + except AttributeError: + pass + try: + el = atom.element.lower().capitalize() + akwargs['atomic_number'] = SYMB2Z[el] + except (KeyError, AttributeError): + try: + tp = atom.type.lower().capitalize() + akwargs['atomic_number'] = SYMB2Z[tp] + except (KeyError, AttributeError): + pass + try: + chain_seg['chain'] = atom.chainID + except AttributeError: + pass + try: + chain_seg['inscode'] = atom.icode + except AttributeError: + pass + atom_kwargs.append((akwargs, resname, atom.resid, chain_seg, xyz, vel)) + + struct = pmd.Structure() + + for akwarg, resname, resid, kw, xyz, vel in atom_kwargs: + atom = pmd.Atom(**akwarg) + if xyz is not None: + atom.xx, atom.xy, atom.xz = xyz + + if vel is not None: + atom.vx, atom.vy, atom.vz = vel + + atom.atom_type = pmd.AtomType(akwarg['name'], None, + akwarg['mass'], + atomic_number=akwargs.get('atomic_number')) + struct.add_atom(atom, resname, resid, **kw) + + try: + struct.box = ag_or_ts.dimensions + except AttributeError: + struct.box = None + + if hasattr(ag_or_ts, 'universe'): + atomgroup = {atom: index for index, + atom in enumerate(list(ag_or_ts))} + get_atom_indices = functools.partial(get_indices_from_subset, + atomgroup=atomgroup, + universe=ag_or_ts.universe) + else: + get_atom_indices = lambda x: x + + # bonds + try: + params = ag_or_ts.intra_bonds + except AttributeError: + pass + else: + for p in params: + atoms = [struct.atoms[i] for i in map(get_atom_indices, + p.indices)] + try: + for obj in p.type: + bond = pmd.Bond(*atoms, type=obj.type, order=obj.order) + struct.bonds.append(bond) + if isinstance(obj.type, pmd.BondType): + struct.bond_types.append(bond.type) + bond.type.list = struct.bond_types + except (TypeError, AttributeError): + order = p.order if p.order is not None else 1 + btype = getattr(p.type, 'type', None) + + bond = pmd.Bond(*atoms, type=btype, order=order) + struct.bonds.append(bond) + if isinstance(bond.type, pmd.BondType): + struct.bond_types.append(bond.type) + bond.type.list = struct.bond_types + + # dihedrals + try: + params = ag_or_ts.dihedrals.atomgroup_intersection(ag_or_ts, + strict=True) + except AttributeError: + pass + else: + for p in params: + atoms = [struct.atoms[i] for i in map(get_atom_indices, + p.indices)] + try: + for obj in p.type: + imp = getattr(obj, 'improper', False) + ign = getattr(obj, 'ignore_end', False) + dih = pmd.Dihedral(*atoms, type=obj.type, + ignore_end=ign, improper=imp) + struct.dihedrals.append(dih) + if isinstance(dih.type, pmd.DihedralType): + struct.dihedral_types.append(dih.type) + dih.type.list = struct.dihedral_types + except (TypeError, AttributeError): + btype = getattr(p.type, 'type', None) + imp = getattr(p.type, 'improper', False) + ign = getattr(p.type, 'ignore_end', False) + dih = pmd.Dihedral(*atoms, type=btype, + improper=imp, ignore_end=ign) + struct.dihedrals.append(dih) + if isinstance(dih.type, pmd.DihedralType): + struct.dihedral_types.append(dih.type) + dih.type.list = struct.dihedral_types + + for param, pmdtype, trackedlist, typelist, clstype in ( + ('ureybradleys', pmd.UreyBradley, struct.urey_bradleys, struct.urey_bradley_types, pmd.BondType), + ('angles', pmd.Angle, struct.angles, struct.angle_types, pmd.AngleType), + ('impropers', pmd.Improper, struct.impropers, struct.improper_types, pmd.ImproperType), + ('cmaps', pmd.Cmap, struct.cmaps, struct.cmap_types, pmd.CmapType) + ): + try: + params = getattr(ag_or_ts, param) + values = params.atomgroup_intersection(ag_or_ts, strict=True) + except AttributeError: + pass + else: + for v in values: + atoms = [struct.atoms[i] for i in map(get_atom_indices, + v.indices)] + + try: + for parmed_obj in v.type: + p = pmdtype(*atoms, type=parmed_obj.type) + trackedlist.append(p) + if isinstance(p.type, clstype): + typelist.append(p.type) + p.type.list = typelist + except (TypeError, AttributeError): + vtype = getattr(v.type, 'type', None) + + p = pmdtype(*atoms, type=vtype) + trackedlist.append(p) + if isinstance(p.type, clstype): + typelist.append(p.type) + p.type.list = typelist + return struct
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.html b/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.html new file mode 100644 index 0000000000..3be820ccb4 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.html @@ -0,0 +1,503 @@ + + + + + + MDAnalysis.converters.ParmEdParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.converters.ParmEdParser

+# -*- 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-2017 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
+#
+
+"""
+ParmEd topology parser --- :mod:`MDAnalysis.converters.ParmEdParser`
+====================================================================
+
+Converts a `ParmEd <https://parmed.github.io/ParmEd/html>`_
+:class:`parmed.structure.Structure` into a :class:`MDAnalysis.core.Topology`.
+
+
+Example
+-------
+
+If you want to use an MDAnalysis-written ParmEd structure for simulation
+in ParmEd, you need to first read your files with ParmEd to include the
+necessary topology parameters. ::
+
+    >>> import parmed as pmd
+    >>> import MDAnalysis as mda
+    >>> from MDAnalysis.tests.datafiles import PRM7_ala2, RST7_ala2
+    >>> prm = pmd.load_file(PRM7_ala2, RST7_ala2)
+    >>> prm
+    <AmberParm 3026 atoms; 1003 residues; 3025 bonds; PBC (orthogonal); parametrized>
+
+We can then convert this to an MDAnalysis structure, select only the
+protein atoms, and then convert it back to ParmEd. ::
+
+    >>> u = mda.Universe(prm)
+    >>> u
+    <Universe with 3026 atoms>
+    >>> prot = u.select_atoms('protein')
+    >>> prm_prot = prot.convert_to('PARMED')
+    >>> prm_prot
+    <Structure 23 atoms; 2 residues; 22 bonds; PBC (orthogonal); parametrized>
+
+From here you can create an OpenMM simulation system and minimize the
+energy. ::
+
+    >>> import openmm as mm
+    >>> import openmm.app as app
+    >>> from parmed import unit as u
+    >>> system = prm_prot.createSystem(nonbondedMethod=app.NoCutoff,
+    ...                                constraints=app.HBonds,
+    ...                                implicitSolvent=app.GBn2)
+    >>> integrator = mm.LangevinIntegrator(
+    ...                         300*u.kelvin,       # Temperature of heat bath
+    ...                         1.0/u.picoseconds,  # Friction coefficient
+    ...                         2.0*u.femtoseconds, # Time step
+    ... )
+    >>> sim = app.Simulation(prm_prot.topology, system, integrator)
+    >>> sim.context.setPositions(prm_prot.positions)
+    >>> sim.minimizeEnergy(maxIterations=500)
+
+Now you can continue on and run a simulation, if you wish.
+
+Classes
+-------
+
+.. autoclass:: ParmEdParser
+   :members:
+   :inherited-members:
+
+.. versionchanged:: 2.0.0
+   The ParmEdParser class was moved from :mod:`~MDAnalysis.topology` to
+   :mod:`~MDAnalysis.converters`
+
+"""
+import logging
+import numpy as np
+
+from ..topology.base import TopologyReaderBase, change_squash
+from ..topology.tables import Z2SYMB
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    AltLocs,
+    ChainIDs,
+    Atomtypes,
+    Occupancies,
+    Tempfactors,
+    Elements,
+    Masses,
+    Charges,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+    GBScreens,
+    SolventRadii,
+    NonbondedIndices,
+    RMins,
+    Epsilons,
+    RMin14s,
+    Epsilon14s,
+    Bonds,
+    UreyBradleys,
+    Angles,
+    Dihedrals,
+    Impropers,
+    CMaps
+)
+from ..core.topology import Topology
+
+logger = logging.getLogger("MDAnalysis.converters.ParmEdParser")
+
+
+def squash_identical(values):
+    if len(values) == 1:
+        return values[0]
+    else:
+        return tuple(values)
+
+
+
[docs]class ParmEdParser(TopologyReaderBase): + """ + For ParmEd structures + """ + format = 'PARMED' + + @staticmethod + def _format_hint(thing): + """Can this Parser read object *thing*? + + .. versionadded:: 1.0.0 + """ + try: + import parmed as pmd + except ImportError: # if no parmed, probably not parmed + return False + else: + return isinstance(thing, pmd.Structure) + +
[docs] def parse(self, **kwargs): + """Parse PARMED into Topology + + Returns + ------- + MDAnalysis *Topology* object + + + .. versionchanged:: 2.0.0 + Elements are no longer guessed, if the elements present in the + parmed object are not recoginsed (usually given an atomic mass of 0) + then they will be assigned an empty string. + """ + structure = self.filename + + #### === ATOMS === #### + names = [] + masses = [] + charges = [] + types = [] + atomic_numbers = [] + serials = [] + + resnames = [] + resids = [] + chainids = [] + segids = [] + + altLocs = [] + bfactors = [] + occupancies = [] + + screens = [] + solvent_radii = [] + nonbonded_indices = [] + + rmins = [] + epsilons = [] + rmin14s = [] + epsilon14s = [] + + for atom in structure.atoms: + names.append(atom.name) + masses.append(atom.mass) + charges.append(atom.charge) + types.append(atom.type) + atomic_numbers.append(atom.atomic_number) + serials.append(atom.number) + + resnames.append(atom.residue.name) + resids.append(atom.residue.number) + chainids.append(atom.residue.chain) + segids.append(atom.residue.segid) + + altLocs.append(atom.altloc) + bfactors.append(atom.bfactor) + occupancies.append(atom.occupancy) + + screens.append(atom.screen) + solvent_radii.append(atom.solvent_radius) + nonbonded_indices.append(atom.nb_idx) + + rmins.append(atom.rmin) + epsilons.append(atom.epsilon) + rmin14s.append(atom.rmin_14) + epsilon14s.append(atom.epsilon_14) + + attrs = [] + + n_atoms = len(names) + + elements = [] + + for z, name in zip(atomic_numbers, names): + try: + elements.append(Z2SYMB[z]) + except KeyError: + elements.append('') + + # Make Atom TopologyAttrs + for vals, Attr, dtype in ( + (names, Atomnames, object), + (masses, Masses, np.float32), + (charges, Charges, np.float32), + (types, Atomtypes, object), + (elements, Elements, object), + (serials, Atomids, np.int32), + (chainids, ChainIDs, object), + + (altLocs, AltLocs, object), + (bfactors, Tempfactors, np.float32), + (occupancies, Occupancies, np.float32), + + (screens, GBScreens, np.float32), + (solvent_radii, SolventRadii, np.float32), + (nonbonded_indices, NonbondedIndices, np.int32), + + (rmins, RMins, np.float32), + (epsilons, Epsilons, np.float32), + (rmin14s, RMin14s, np.float32), + (epsilon14s, Epsilon14s, np.float32), + ): + attrs.append(Attr(np.array(vals, dtype=dtype))) + + resids = np.array(resids, dtype=np.int32) + resnames = np.array(resnames, dtype=object) + chainids = np.array(chainids, dtype=object) + segids = np.array(segids, dtype=object) + + residx, (resids, resnames, chainids, segids) = change_squash( + (resids, resnames, chainids, segids), + (resids, resnames, chainids, segids)) + + n_residues = len(resids) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(Resnames(resnames)) + + segidx, (segids,) = change_squash((segids,), (segids,)) + n_segments = len(segids) + attrs.append(Segids(segids)) + + #### === OTHERS === #### + bond_values = {} + bond_types = [] + bond_orders = [] + + ub_values = {} + ub_types = [] + + angle_values = {} + angle_types = [] + + dihedral_values = {} + dihedral_types = [] + + improper_values = {} + improper_types = [] + + cmap_values = {} + cmap_types = [] + + for bond in structure.bonds: + idx = (bond.atom1.idx, bond.atom2.idx) + if idx not in bond_values: + bond_values[idx] = ([bond], [bond.order]) + else: + bond_values[idx][0].append(bond) + bond_values[idx][1].append(bond.order) + + try: + bond_values, values = zip(*list(bond_values.items())) + except ValueError: + bond_values, bond_types, bond_orders = [], [], [] + else: + bond_types, bond_orders = zip(*values) + + bond_types = list(map(squash_identical, bond_types)) + bond_orders = list(map(squash_identical, bond_orders)) + + attrs.append(Bonds(bond_values, types=bond_types, guessed=False, + order=bond_orders)) + + for pmdlist, na, values, types in ( + (structure.urey_bradleys, 2, ub_values, ub_types), + (structure.angles, 3, angle_values, angle_types), + (structure.dihedrals, 4, dihedral_values, dihedral_types), + (structure.impropers, 4, improper_values, improper_types), + (structure.cmaps, 5, cmap_values, cmap_types), + ): + + for p in pmdlist: + atoms = ['atom{}'.format(i) for i in range(1, na+1)] + idx = tuple(getattr(p, a).idx for a in atoms) + if idx not in values: + values[idx] = [p] + else: + values[idx].append(p) + + for dct, Attr in ( + (ub_values, UreyBradleys), + (angle_values, Angles), + (dihedral_values, Dihedrals), + (improper_values, Impropers), + (cmap_values, CMaps), + ): + try: + vals, types = zip(*list(dct.items())) + except ValueError: + vals, types = [], [] + + types = list(map(squash_identical, types)) + attrs.append(Attr(vals, types=types, guessed=False, order=None)) + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/RDKit.html b/2.7.0-dev0/_modules/MDAnalysis/converters/RDKit.html new file mode 100644 index 0000000000..4f57adfe3b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/RDKit.html @@ -0,0 +1,1128 @@ + + + + + + MDAnalysis.converters.RDKit — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.converters.RDKit

+# -*- 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-2017 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
+#
+
+"""RDKit molecule I/O --- :mod:`MDAnalysis.converters.RDKit`
+================================================================
+
+Read coordinates data from an `RDKit <https://www.rdkit.org/docs/>`__ :class:`rdkit.Chem.rdchem.Mol` with
+:class:`RDKitReader` into an MDAnalysis Universe. Convert it back to a
+:class:`rdkit.Chem.rdchem.Mol` with :class:`RDKitConverter`.
+
+
+Example
+-------
+
+To read an RDKit molecule and then convert the AtomGroup back to an RDKit
+molecule::
+
+    >>> from rdkit import Chem
+    >>> import MDAnalysis as mda
+    >>> mol = Chem.MolFromMol2File("docking_poses.mol2", removeHs=False)
+    >>> u = mda.Universe(mol)
+    >>> u
+    <Universe with 42 atoms>
+    >>> u.trajectory
+    <RDKitReader with 10 frames of 42 atoms>
+    >>> u.atoms.convert_to("RDKIT")
+    <rdkit.Chem.rdchem.Mol object at 0x7fcebb958148>
+
+
+.. warning::
+    The RDKit converter is currently *experimental* and may not work as
+    expected for all molecules. Currently the converter accurately
+    infers the structures of approximately 99% of the `ChEMBL27`_ dataset.
+    Work is currently ongoing on further improving this and updates to the
+    converter are expected in future releases of MDAnalysis.
+    Please see `Issue #3339`_ and the `RDKitConverter benchmark`_ for more
+    details.
+
+
+
+Classes
+-------
+
+.. autoclass:: RDKitReader
+   :members:
+
+.. autoclass:: RDKitConverter
+   :members:
+
+.. autofunction:: _infer_bo_and_charges
+
+.. autofunction:: _standardize_patterns
+
+.. autofunction:: _rebuild_conjugated_bonds
+
+
+.. Links
+
+.. _`ChEMBL27`: https://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/chembl_27/
+.. _`Issue #3339`: https://github.com/MDAnalysis/mdanalysis/issues/3339
+.. _`RDKitConverter benchmark`: https://github.com/MDAnalysis/RDKitConverter-benchmark
+"""
+
+import copy
+import warnings
+from functools import lru_cache
+from io import StringIO
+
+import numpy as np
+
+from ..coordinates import base, memory
+from ..coordinates.PDB import PDBWriter
+from ..core.topologyattrs import _TOPOLOGY_ATTRS
+from ..exceptions import NoDataError
+
+try:
+    from rdkit import Chem
+    from rdkit.Chem import AllChem
+except ImportError:
+    pass
+else:
+    RDBONDORDER = {
+        1: Chem.BondType.SINGLE,
+        1.5: Chem.BondType.AROMATIC,
+        "ar": Chem.BondType.AROMATIC,
+        2: Chem.BondType.DOUBLE,
+        3: Chem.BondType.TRIPLE,
+    }
+    # add string version of the key for each bond
+    RDBONDORDER.update({str(key): value for key, value in RDBONDORDER.items()})
+    RDATTRIBUTES = {
+        "altLocs": "AltLoc",
+        "chainIDs": "ChainId",
+        "icodes": "InsertionCode",
+        "names": "Name",
+        "occupancies": "Occupancy",
+        "resnames": "ResidueName",
+        "resids": "ResidueNumber",
+        "segindices": "SegmentNumber",
+        "tempfactors": "TempFactor",
+    }
+    PERIODIC_TABLE = Chem.GetPeriodicTable()
+
+
+# charges that should be assigned to monatomic cations
+# structure --> atomic number : formal charge
+# anion charges are directly handled by the code using the typical valence
+# of the atom
+MONATOMIC_CATION_CHARGES = {
+    3: 1, 11: 1, 19: 1, 37: 1, 47: 1, 55: 1,
+    12: 2, 20: 2, 29: 2, 30: 2, 38: 2, 56: 2,
+    26: 2,  # Fe could also be +3
+    13: 3,
+}
+# reactions uses by _standardize_patterns to fix challenging cases
+# must have single reactant and product, and cannot add any atom
+STANDARDIZATION_REACTIONS = [
+    "[C-;X2;H0:1]=[O:2]>>[C+0:1]=[O:2]",  # Cterm
+    "[N-;X2;H1;$(N-[*^3]):1]>>[N+0:1]",  # Nterm
+    "[#6-:1]-[#6:2]=[O:3]>>[#6+0:1]=[#6:2]-[O-:3]",  # keto-enolate
+    "[C-;v3:1]-[#7+0;v3;H2:2]>>[#6+0:1]=[#7+:2]",  # ARG
+    "[#6+0;H0:1]=[#6+0:2]-[#7;X3:3]-[#6-;X3:4]"
+    ">>[#6:1]=[#6:2]-[#7+:3]=[#6+0:4]",  # HIP
+    "[S;D4;!v6:1]-[*-:2]>>[S;v6:1]=[*+0:2]",  # sulfone
+    "[#7+0;X3:1]-[*-:2]>>[#7+:1]=[*+0:2]",  # charged-N
+]
+_deduce_PDB_atom_name = PDBWriter(StringIO())._deduce_PDB_atom_name
+
+
+
[docs]class RDKitReader(memory.MemoryReader): + """Coordinate reader for RDKit. + + .. versionadded:: 2.0.0 + """ + format = 'RDKIT' + + # Structure.coordinates always in Angstrom + units = {'time': None, 'length': 'Angstrom'} + + @staticmethod + def _format_hint(thing): + """Can this reader read *thing*?""" + try: + from rdkit import Chem + except ImportError: + # if we can't import rdkit, it's probably not rdkit + return False + else: + return isinstance(thing, Chem.Mol) + + def __init__(self, filename, **kwargs): + """Read coordinates from an RDKit molecule. + Each conformer in the original RDKit molecule will be read as a frame + in the resulting universe. + + Parameters + ---------- + filename : rdkit.Chem.rdchem.Mol + RDKit molecule + """ + n_atoms = filename.GetNumAtoms() + coordinates = np.array([ + conf.GetPositions() for conf in filename.GetConformers()], + dtype=np.float32) + if coordinates.size == 0: + warnings.warn("No coordinates found in the RDKit molecule") + coordinates = np.empty((1, n_atoms, 3), dtype=np.float32) + coordinates[:] = np.nan + super(RDKitReader, self).__init__(coordinates, order='fac', **kwargs)
+ + +
[docs]class RDKitConverter(base.ConverterBase): + """Convert MDAnalysis :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` to RDKit + :class:`~rdkit.Chem.rdchem.Mol` + + MDanalysis attributes are stored in each RDKit + :class:`~rdkit.Chem.rdchem.Atom` of the resulting molecule in two different + ways: + + * in an :class:`~rdkit.Chem.rdchem.AtomPDBResidueInfo` object available + through the :meth:`~rdkit.Chem.rdchem.Atom.GetMonomerInfo` method if it's + an attribute that is typically found in a PDB file, + * directly as an atom property available through the + :meth:`~rdkit.Chem.rdchem.Atom.GetProp` methods for the others. + + Supported attributes: + + +-----------------------+-------------------------------------------+ + | MDAnalysis attribute | RDKit | + +=======================+===========================================+ + | altLocs | atom.GetMonomerInfo().GetAltLoc() | + +-----------------------+-------------------------------------------+ + | chainIDs | atom.GetMonomerInfo().GetChainId() | + +-----------------------+-------------------------------------------+ + | icodes | atom.GetMonomerInfo().GetInsertionCode() | + +-----------------------+-------------------------------------------+ + | names | atom.GetMonomerInfo().GetName() | + | | atom.GetProp("_MDAnalysis_name") | + +-----------------------+-------------------------------------------+ + | occupancies | atom.GetMonomerInfo().GetOccupancy() | + +-----------------------+-------------------------------------------+ + | resnames | atom.GetMonomerInfo().GetResidueName() | + +-----------------------+-------------------------------------------+ + | resids | atom.GetMonomerInfo().GetResidueNumber() | + +-----------------------+-------------------------------------------+ + | segindices | atom.GetMonomerInfo().GetSegmentNumber() | + +-----------------------+-------------------------------------------+ + | tempfactors | atom.GetMonomerInfo().GetTempFactor() | + +-----------------------+-------------------------------------------+ + | charges | atom.GetDoubleProp("_MDAnalysis_charge") | + +-----------------------+-------------------------------------------+ + | indices | atom.GetIntProp("_MDAnalysis_index") | + +-----------------------+-------------------------------------------+ + | segids | atom.GetProp("_MDAnalysis_segid") | + +-----------------------+-------------------------------------------+ + | types | atom.GetProp("_MDAnalysis_type") | + +-----------------------+-------------------------------------------+ + + Example + ------- + + To access MDAnalysis properties:: + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PDB_full + >>> u = mda.Universe(PDB_full) + >>> mol = u.select_atoms('resname DMS').convert_to('RDKIT') + >>> mol.GetAtomWithIdx(0).GetMonomerInfo().GetResidueName() + 'DMS' + + To create a molecule for each frame of a trajectory:: + + from MDAnalysisTests.datafiles import PSF, DCD + from rdkit.Chem.Descriptors3D import Asphericity + + u = mda.Universe(PSF, DCD) + elements = mda.topology.guessers.guess_types(u.atoms.names) + u.add_TopologyAttr('elements', elements) + ag = u.select_atoms("resid 1-10") + + for ts in u.trajectory: + mol = ag.convert_to("RDKIT") + x = Asphericity(mol) + + + Notes + ----- + + The converter requires the :class:`~MDAnalysis.core.topologyattrs.Elements` + attribute to be present in the topology, else it will fail. + + It also requires the `bonds` attribute, although they will be automatically + guessed if not present. + + Hydrogens should be explicit in the topology file. If this is not the case, + use the parameter ``NoImplicit=False`` when using the converter to allow + implicit hydrogens and disable inferring bond orders and charges. + + Since one of the main use case of the converter is converting trajectories + and not just a topology, creating a new molecule from scratch for every + frame would be too slow so the converter uses a caching system. The cache + only stores the 2 most recent AtomGroups that were converted, and is + sensitive to the arguments that were passed to the converter. The number of + objects cached can be changed with the function + :func:`set_converter_cache_size`. However, ``ag.convert_to("RDKIT")`` + followed by ``ag.convert_to("RDKIT", NoImplicit=False)`` will not use the + cache since the arguments given are different. You can pass a + ``cache=False`` argument to the converter to bypass the caching system. + + The ``_MDAnalysis_index`` property of the resulting molecule corresponds + to the index of the specific :class:`~MDAnalysis.core.groups.AtomGroup` + that was converted, which may not always match the ``index`` property. + + To get a better understanding of how the converter works under the hood, + please refer to the following RDKit UGM presentation: + + * `Video (4:55 to 8:05) <https://youtu.be/5b5wYmK4URU>`__ + * `Slides <https://github.com/rdkit/UGM_2020/blob/master/Presentations/C%C3%A9dricBouysset_From_RDKit_to_the_Universe.pdf>`__ + + There are some molecules containing specific patterns that the converter + cannot currently tackle correctly. See + `Issue #3339 <https://github.com/MDAnalysis/mdanalysis/issues/3339>`__ for + more info. + + .. versionadded:: 2.0.0 + + .. versionchanged:: 2.2.0 + Improved the accuracy of the converter. Atoms in the resulting molecule + now follow the same order as in the AtomGroup. The output of + ``atom.GetMonomerInfo().GetName()`` now follows the guidelines for PDB + files while the original name is still available through + ``atom.GetProp("_MDAnalysis_name")`` + + """ + + lib = 'RDKIT' + units = {'time': None, 'length': 'Angstrom'} + +
[docs] def convert(self, obj, cache=True, NoImplicit=True, max_iter=200, + force=False): + """Write selection at current trajectory frame to + :class:`~rdkit.Chem.rdchem.Mol`. + + Parameters + ----------- + obj : :class:`~MDAnalysis.core.groups.AtomGroup` or :class:`~MDAnalysis.core.universe.Universe` + cache : bool + Use a cached copy of the molecule's topology when available. To be + used, the cached molecule and the new one have to be made from the + same AtomGroup selection and with the same arguments passed + to the converter + NoImplicit : bool + Prevent adding hydrogens to the molecule + max_iter : int + Maximum number of iterations to standardize conjugated systems. + See :func:`_rebuild_conjugated_bonds` + force : bool + Force the conversion when no hydrogens were detected but + ``NoImplicit=True``. Useful for inorganic molecules mostly. + """ + + try: + from rdkit import Chem + except ImportError: + raise ImportError("RDKit is required for the RDKitConverter but " + "it's not installed. Try installing it with \n" + "conda install -c conda-forge rdkit") + try: + # make sure to use atoms (Issue 46) + ag = obj.atoms + except AttributeError: + raise TypeError("No `atoms` attribute in object of type {}, " + "please use a valid AtomGroup or Universe".format( + type(obj))) from None + + # parameters passed to atomgroup_to_mol + kwargs = dict(NoImplicit=NoImplicit, max_iter=max_iter, force=force) + if cache: + mol = atomgroup_to_mol(ag, **kwargs) + mol = copy.deepcopy(mol) + else: + mol = atomgroup_to_mol.__wrapped__(ag, **kwargs) + + # add a conformer for the current Timestep + if hasattr(ag, "positions"): + if np.isnan(ag.positions).any(): + warnings.warn("NaN detected in coordinates, the output " + "molecule will not have 3D coordinates assigned") + else: + # assign coordinates + conf = Chem.Conformer(mol.GetNumAtoms()) + for atom in mol.GetAtoms(): + idx = atom.GetIdx() + xyz = ag.positions[idx].astype(float) + conf.SetAtomPosition(idx, xyz) + mol.AddConformer(conf) + # assign R/S to atoms and Z/E to bonds + Chem.AssignStereochemistryFrom3D(mol) + Chem.SetDoubleBondNeighborDirections(mol) + + return mol
+ + +@lru_cache(maxsize=2) +def atomgroup_to_mol(ag, NoImplicit=True, max_iter=200, force=False): + """Converts an AtomGroup to an RDKit molecule without coordinates. + + Parameters + ----------- + ag : MDAnalysis.core.groups.AtomGroup + The AtomGroup to convert + NoImplicit : bool + Prevent adding hydrogens to the molecule and allow bond orders and + formal charges to be guessed from the valence of each atom. + max_iter : int + Maximum number of iterations to standardize conjugated systems. + See :func:`_rebuild_conjugated_bonds` + force : bool + Force the conversion when no hydrogens were detected but + ``NoImplicit=True``. Mostly useful for inorganic molecules. + """ + try: + elements = ag.elements + except NoDataError: + raise AttributeError( + "The `elements` attribute is required for the RDKitConverter " + "but is not present in this AtomGroup. Please refer to the " + "documentation to guess elements from other attributes or " + "type `help(MDAnalysis.topology.guessers)`") from None + + if "H" not in ag.elements: + if force: + warnings.warn( + "No hydrogen atom found in the topology. " + "Forcing to continue the conversion." + ) + elif NoImplicit: + raise AttributeError( + "No hydrogen atom could be found in the topology, but the " + "converter requires all hydrogens to be explicit. You can use " + "the parameter ``NoImplicit=False`` when using the converter " + "to allow implicit hydrogens and disable inferring bond " + "orders and charges. You can also use ``force=True`` to " + "ignore this error.") + + # attributes accepted in PDBResidueInfo object + pdb_attrs = {} + for attr in RDATTRIBUTES.keys(): + if hasattr(ag, attr): + pdb_attrs[attr] = getattr(ag, attr) + resnames = pdb_attrs.get("resnames", None) + if resnames is None: + def get_resname(idx): + return "" + else: + def get_resname(idx): + return resnames[idx] + + other_attrs = {} + for attr in ["charges", "segids", "types", "names"]: + if hasattr(ag, attr): + other_attrs[attr] = getattr(ag, attr) + + mol = Chem.RWMol() + # map index in universe to index in mol + atom_mapper = {} + + for i, (atom, element) in enumerate(zip(ag, elements)): + # create atom + rdatom = Chem.Atom(element.capitalize()) + # enable/disable adding implicit H to the molecule + rdatom.SetNoImplicit(NoImplicit) + # add PDB-like properties + mi = Chem.AtomPDBResidueInfo() + for attr, values in pdb_attrs.items(): + _add_mda_attr_to_rdkit(attr, values[i], mi, get_resname(i)) + rdatom.SetMonomerInfo(mi) + # other properties + for attr in other_attrs.keys(): + value = other_attrs[attr][i] + attr = "_MDAnalysis_%s" % _TOPOLOGY_ATTRS[attr].singular + _set_atom_property(rdatom, attr, value) + _set_atom_property(rdatom, "_MDAnalysis_index", i) + # add atom + index = mol.AddAtom(rdatom) + atom_mapper[atom.ix] = index + + try: + ag.bonds + except NoDataError: + warnings.warn( + "No `bonds` attribute in this AtomGroup. Guessing bonds based " + "on atoms coordinates") + ag.guess_bonds() + + for bond in ag.bonds: + try: + bond_indices = [atom_mapper[i] for i in bond.indices] + except KeyError: + continue + bond_type = RDBONDORDER.get(bond.order, Chem.BondType.SINGLE) + mol.AddBond(*bond_indices, bond_type) + + mol.UpdatePropertyCache(strict=False) + + if NoImplicit: + # infer bond orders and formal charges from the connectivity + _infer_bo_and_charges(mol) + mol = _standardize_patterns(mol, max_iter) + # reorder atoms to match MDAnalysis, since the reactions from + # _standardize_patterns will mess up the original order + order = np.argsort([atom.GetIntProp("_MDAnalysis_index") + for atom in mol.GetAtoms()]) + mol = Chem.RenumberAtoms(mol, order.astype(int).tolist()) + + # sanitize if possible + err = Chem.SanitizeMol(mol, catchErrors=True) + if err: + warnings.warn("Could not sanitize molecule: " + f"failed during step {err!r}") + + return mol + + +def set_converter_cache_size(maxsize): + """Set the maximum cache size of the RDKit converter + + Parameters + ---------- + maxsize : int or None + If int, the cache will only keep the ``maxsize`` most recent + conversions in memory. Using ``maxsize=None`` will remove all limits + to the cache size, i.e. everything is cached. + """ + global atomgroup_to_mol # pylint: disable=global-statement + atomgroup_to_mol = lru_cache(maxsize=maxsize)(atomgroup_to_mol.__wrapped__) + + +def _add_mda_attr_to_rdkit(attr, value, mi, resname=""): + """Converts an MDAnalysis atom attribute into the RDKit equivalent and + stores it into an RDKit :class:`~rdkit.Chem.rdchem.AtomPDBResidueInfo`. + + Parameters + ---------- + attr : str + Name of the atom attribute in MDAnalysis in the singular form + value : object, np.int or np.float + Attribute value as found in the AtomGroup + mi : rdkit.Chem.rdchem.AtomPDBResidueInfo + MonomerInfo object that will store the relevant atom attributes + resname : str + Residue name of the atom, if available + """ + if isinstance(value, np.generic): + # convert numpy types to python standard types + value = value.item() + if attr == "names": + # RDKit needs the name to be properly formatted for a PDB file + value = _deduce_PDB_atom_name(value, resname) + + # set attribute value in RDKit MonomerInfo + rdattr = RDATTRIBUTES[attr] + getattr(mi, "Set%s" % rdattr)(value) + + +def _set_str_prop(atom, attr, value): + atom.SetProp(attr, value) + + +def _set_float_prop(atom, attr, value): + atom.SetDoubleProp(attr, value) + + +def _set_np_float_prop(atom, attr, value): + atom.SetDoubleProp(attr, float(value)) + + +def _set_int_prop(atom, attr, value): + atom.SetIntProp(attr, value) + + +def _set_np_int_prop(atom, attr, value): + atom.SetIntProp(attr, int(value)) + + +def _ignore_prop(atom, attr, value): + pass + + +_atom_property_dispatcher = { + str: _set_str_prop, + float: _set_float_prop, + np.float32: _set_np_float_prop, + np.float64: _set_np_float_prop, + int: _set_int_prop, + np.int8: _set_np_int_prop, + np.int16: _set_np_int_prop, + np.int32: _set_np_int_prop, + np.int64: _set_np_int_prop, + np.uint8: _set_np_int_prop, + np.uint16: _set_np_int_prop, + np.uint32: _set_np_int_prop, + np.uint64: _set_np_int_prop, +} + + +def _set_atom_property(atom, attr, value): + """Saves any attribute and value into an RDKit atom property""" + _atom_property_dispatcher.get(type(value), _ignore_prop)(atom, attr, value) + + +def _atom_sorter(atom): + """Sorts atoms in the molecule in a way that makes it easy for the bond + order and charge infering code to get the correct state on the first + try. Currently sorts by number of unpaired electrons, then by number of + heavy atom neighbors (i.e. atoms at the edge first).""" + num_heavy_neighbors = len([ + neighbor for neighbor in atom.GetNeighbors() + if neighbor.GetAtomicNum() > 1] + ) + return (-_get_nb_unpaired_electrons(atom)[0], num_heavy_neighbors) + + +
[docs]def _infer_bo_and_charges(mol): + """Infer bond orders and formal charges from a molecule. + + Since most MD topology files don't explicitly retain information on bond + orders or charges, it has to be guessed from the topology. This is done by + looping over each atom and comparing its expected valence to the current + valence to get the Number of Unpaired Electrons (NUE). + If an atom has a negative NUE, it needs a positive formal charge (-NUE). + If two neighbouring atoms have UEs, the bond between them most + likely has to be increased by the value of the smallest NUE. + If after this process, an atom still has UEs, it needs a negative formal + charge of -NUE. + + Parameters + ---------- + mol : rdkit.Chem.rdchem.RWMol + The molecule is modified inplace and must have all hydrogens added + + Notes + ----- + This algorithm is order dependant. For example, for a carboxylate group + R-C(-O)-O the first oxygen read will receive a double bond and the other + one will be charged. It will also affect more complex conjugated systems. + """ + # heavy atoms sorted by number of heavy atom neighbors (lower first) then + # NUE (higher first) + atoms = sorted([atom for atom in mol.GetAtoms() + if atom.GetAtomicNum() > 1], + key=_atom_sorter) + + for atom in atoms: + # monatomic ions + if atom.GetDegree() == 0: + atom.SetFormalCharge(MONATOMIC_CATION_CHARGES.get( + atom.GetAtomicNum(), + -_get_nb_unpaired_electrons(atom)[0])) + mol.UpdatePropertyCache(strict=False) + continue + # get NUE for each possible valence + nue = _get_nb_unpaired_electrons(atom) + # if there's only one possible valence state and the corresponding + # NUE is negative, it means we can only add a positive charge to + # the atom + if (len(nue) == 1) and (nue[0] < 0): + atom.SetFormalCharge(-nue[0]) + mol.UpdatePropertyCache(strict=False) + # go to next atom if above case or atom has no unpaired electron + if (len(nue) == 1) and (nue[0] <= 0): + continue + else: + neighbors = sorted(atom.GetNeighbors(), reverse=True, + key=lambda a: _get_nb_unpaired_electrons(a)[0]) + # check if one of the neighbors has a common NUE + for na in neighbors: + # get NUE for the neighbor + na_nue = _get_nb_unpaired_electrons(na) + # smallest common NUE + common_nue = min( + min([i for i in nue if i >= 0], default=0), + min([i for i in na_nue if i >= 0], default=0) + ) + # a common NUE of 0 means we don't need to do anything + if common_nue != 0: + # increase bond order + bond = mol.GetBondBetweenAtoms( + atom.GetIdx(), na.GetIdx()) + order = common_nue + 1 + bond.SetBondType(RDBONDORDER[order]) + mol.UpdatePropertyCache(strict=False) + # go to next atom if one of the valences is complete + nue = _get_nb_unpaired_electrons(atom) + if any([n == 0 for n in nue]): + break + + # if atom valence is still not filled + nue = _get_nb_unpaired_electrons(atom) + if not any([n == 0 for n in nue]): + # transform nue to charge + atom.SetFormalCharge(-nue[0]) + atom.SetNumRadicalElectrons(0) + mol.UpdatePropertyCache(strict=False)
+ + +def _get_nb_unpaired_electrons(atom): + """Calculate the number of unpaired electrons (NUE) of an atom + + Parameters + ---------- + atom: rdkit.Chem.rdchem.Atom + The atom for which the NUE will be computed + + Returns + ------- + nue : list + The NUE for each possible valence of the atom + """ + expected_vs = PERIODIC_TABLE.GetValenceList(atom.GetAtomicNum()) + current_v = atom.GetTotalValence() - atom.GetFormalCharge() + return [v - current_v for v in expected_vs] + + +
[docs]def _standardize_patterns(mol, max_iter=200): + """Standardizes functional groups + + Uses :func:`_rebuild_conjugated_bonds` to standardize conjugated systems, + and SMARTS reactions for other functional groups. + Due to the way reactions work, we first have to split the molecule by + fragments. Then, for each fragment, we apply the standardization reactions. + Finally, the fragments are recombined. + + Parameters + ---------- + mol : rdkit.Chem.rdchem.RWMol + The molecule to standardize + max_iter : int + Maximum number of iterations to standardize conjugated systems + + Returns + ------- + mol : rdkit.Chem.rdchem.Mol + The standardized molecule + + Notes + ----- + The following functional groups are transformed in this order: + + +---------------+------------------------------------------------------------------------------+ + | Name | Reaction | + +===============+==============================================================================+ + | conjugated | ``[*-:1]-[*:2]=[*:3]-[*-:4]>>[*+0:1]=[*:2]-[*:3]=[*+0:4]`` | + +---------------+------------------------------------------------------------------------------+ + | conjugated N+ | ``[N;X3;v3:1]-[*:2]=[*:3]-[*-:4]>>[N+:1]=[*:2]-[*:3]=[*+0:4]`` | + +---------------+------------------------------------------------------------------------------+ + | conjugated O- | ``[O:1]=[#6+0,#7+:2]-[*:3]=[*:4]-[*-:5]>>[O-:1]-[*:2]=[*:3]-[*:4]=[*+0:5]`` | + +---------------+------------------------------------------------------------------------------+ + | conjug. S=O | ``[O-:1]-[S;D4;v4:2]-[*:3]=[*:4]-[*-:5]>>[O+0:1]=[*:2]=[*:3]-[*:4]=[*+0:5]`` | + +---------------+------------------------------------------------------------------------------+ + | Cterm | ``[C-;X2;H0:1]=[O:2]>>[C+0:1]=[O:2]`` | + +---------------+------------------------------------------------------------------------------+ + | Nterm | ``[N-;X2;H1;$(N-[*^3]):1]>>[N+0:1]`` | + +---------------+------------------------------------------------------------------------------+ + | keto-enolate | ``[#6-:1]-[#6:2]=[O:3]>>[#6+0:1]=[#6:2]-[O-:3]`` | + +---------------+------------------------------------------------------------------------------+ + | arginine | ``[C-;v3:1]-[#7+0;v3;H2:2]>>[#6+0:1]=[#7+:2]`` | + +---------------+------------------------------------------------------------------------------+ + | histidine | ``[#6+0;H0:1]=[#6+0:2]-[#7;X3:3]-[#6-;X3:4]>>[#6:1]=[#6:2]-[#7+:3]=[#6+0:4]``| + +---------------+------------------------------------------------------------------------------+ + | sulfone | ``[S;D4;!v6:1]-[*-:2]>>[S;v6:1]=[*+0:2]`` | + +---------------+------------------------------------------------------------------------------+ + | charged N | ``[#7+0;X3:1]-[*-:2]>>[#7+:1]=[*+0:2]`` | + +---------------+------------------------------------------------------------------------------+ + + """ + + # standardize conjugated systems + _rebuild_conjugated_bonds(mol, max_iter) + + # list of sanitized reactions + reactions = [] + for rxn in STANDARDIZATION_REACTIONS: + reaction = AllChem.ReactionFromSmarts(rxn) + reactions.append(reaction) + + # fragment mol (reactions must have single reactant and product) + fragments = list(Chem.GetMolFrags(mol, asMols=True)) + for reactant in fragments: + _apply_reactions(reactions, reactant) + + # recombine fragments + newmol = fragments.pop(0) + for fragment in fragments: + newmol = Chem.CombineMols(newmol, fragment) + + return newmol
+ + +def _apply_reactions(reactions, reactant): + """Applies a series of unimolecular reactions to a molecule. The reactions + must not add any atom to the product. The molecule is modified inplace. + + Parameters + ---------- + reactions : List[rdkit.Chem.rdChemReactions.ChemicalReaction] + Reactions from SMARTS. Each reaction is applied until no more + transformations can be made. + reactant : rdkit.Chem.rdchem.Mol + The molecule to transform inplace + + """ + reactant.UpdatePropertyCache(strict=False) + Chem.Kekulize(reactant) + for reaction in reactions: + while reaction.RunReactantInPlace(reactant): + reactant.UpdatePropertyCache(strict=False) + reactant.UpdatePropertyCache(strict=False) + Chem.Kekulize(reactant) + + +
[docs]def _rebuild_conjugated_bonds(mol, max_iter=200): + """Rebuild conjugated bonds without negatively charged atoms at the + beginning and end of the conjugated system + + Depending on the order in which atoms are read during the conversion, the + :func:`_infer_bo_and_charges` function might write conjugated systems with + a double bond less and both edges of the system as anions instead of the + usual alternating single and double bonds. This function corrects this + behaviour by using an iterative procedure. + The problematic molecules always follow the same pattern: + ``anion[-*=*]n-anion`` instead of ``*=[*-*=]n*``, where ``n`` is the number + of successive single and double bonds. The goal of the iterative procedure + is to make ``n`` as small as possible by consecutively transforming + ``anion-*=*`` into ``*=*-anion`` until it reaches the smallest pattern with + ``n=1``. This last pattern is then transformed from ``anion-*=*-anion`` to + ``*=*-*=*``. + Since ``anion-*=*`` is the same as ``*=*-anion`` in terms of SMARTS, we can + control that we don't transform the same triplet of atoms back and forth by + adding their indices to a list. + This function also handles conjugated systems with triple bonds. + The molecule needs to be kekulized first to also cover systems + with aromatic rings. + + Parameters + ---------- + mol : rdkit.Chem.rdchem.RWMol + The molecule to transform, modified inplace + max_iter : int + Maximum number of iterations performed by the function + + Notes + ----- + The molecule is modified inplace + """ + mol.UpdatePropertyCache(strict=False) + Chem.Kekulize(mol) + # pattern used to find problematic conjugated bonds + # there's usually an even number of matches for this + pattern = Chem.MolFromSmarts("[*-{1-2}]-,=[*+0]=,#[*+0]") + # pattern used to finish fixing a series of conjugated bonds + base_end_pattern = Chem.MolFromSmarts( + "[*-{1-2}]-,=[*+0]=,#[*+0]-,=[*-{1-2}]") + # used when there's an odd number of matches for `pattern` + odd_end_pattern = Chem.MolFromSmarts( + "[*-]-[*+0]=[*+0]-[*-,$([#7;X3;v3]),$([#6+0,#7+1]=O)," + "$([S;D4;v4]-[O-])]") + # number of unique matches with the pattern + n_matches = len(set([match[0] + for match in mol.GetSubstructMatches(pattern)])) + # nothing to standardize + if n_matches == 0: + return + # single match (unusual) + elif n_matches == 1: + # as a last resort, the only way to standardize is to find a nitrogen + # that can accept a double bond and a positive charge + # or a carbonyl that will become an enolate + end_pattern = odd_end_pattern + # at least 2 matches + else: + # give priority to base end pattern and then deal with the odd one if + # necessary + end_pattern = base_end_pattern + backtrack = [] + backtrack_cycles = 0 + for _ in range(max_iter): + # check for ending pattern + end_match = mol.GetSubstructMatch(end_pattern) + if end_match: + # index of each atom + anion1, a1, a2, anion2 = end_match + term_atom = mol.GetAtomWithIdx(anion2) + # edge-case 1: C-[O-] or [N+]-[O-] + # [*-]-*=*-[C,N+]=O --> *=*-*=[C,N+]-[O-] + # transform the =O to -[O-] + if ( + term_atom.GetAtomicNum() == 6 + and term_atom.GetFormalCharge() == 0 + ) or ( + term_atom.GetAtomicNum() == 7 + and term_atom.GetFormalCharge() == 1 + ): + for neighbor in term_atom.GetNeighbors(): + bond = mol.GetBondBetweenAtoms(anion2, neighbor.GetIdx()) + if (neighbor.GetAtomicNum() == 8 and + bond.GetBondTypeAsDouble() == 2): + bond.SetBondType(Chem.BondType.SINGLE) + neighbor.SetFormalCharge(-1) + break + # edge-case 2: S=O + # [*-]-*=*-[Sv4]-[O-] --> *=*-*=[Sv6]=O + # transform -[O-] to =O + elif (term_atom.GetAtomicNum() == 16 and + term_atom.GetFormalCharge() == 0): + for neighbor in term_atom.GetNeighbors(): + bond = mol.GetBondBetweenAtoms(anion2, neighbor.GetIdx()) + if (neighbor.GetAtomicNum() == 8 and + neighbor.GetFormalCharge() == -1 and + bond.GetBondTypeAsDouble() == 1): + bond.SetBondType(Chem.BondType.DOUBLE) + neighbor.SetFormalCharge(0) + break + # not an edge case: + # increment the charge + else: + term_atom.SetFormalCharge(term_atom.GetFormalCharge() + 1) + # common to all cases: + # [*-]-*=*-[R] --> *=*-*=[R] + # increment the charge and switch single and double bonds + a = mol.GetAtomWithIdx(anion1) + a.SetFormalCharge(a.GetFormalCharge() + 1) + b = mol.GetBondBetweenAtoms(anion1, a1) + b.SetBondType(RDBONDORDER[b.GetBondTypeAsDouble() + 1]) + b = mol.GetBondBetweenAtoms(a1, a2) + b.SetBondType(RDBONDORDER[b.GetBondTypeAsDouble() - 1]) + b = mol.GetBondBetweenAtoms(a2, anion2) + b.SetBondType(RDBONDORDER[b.GetBondTypeAsDouble() + 1]) + mol.UpdatePropertyCache(strict=False) + continue + + # switch the position of the charge and the double bond + matches = mol.GetSubstructMatches(pattern) + if matches: + # check if we haven't already transformed this triplet + for match in matches: + # store order-independent atom indices + g = set(match) + # already transformed --> try the next one + if g in backtrack: + continue + # add to backtracking and start the switch + else: + anion, a1, a2 = match + backtrack.append(g) + break + # already performed all changes + else: + if backtrack_cycles == 1: + # might be stuck because there were 2 "odd" end patterns + # misqualified as a single base one + end_pattern = odd_end_pattern + elif backtrack_cycles > 1: + # likely stuck changing the same bonds over and over so + # let's stop here + mol.UpdatePropertyCache(strict=False) + return + match = matches[0] + anion, a1, a2 = match + backtrack = [set(match)] + backtrack_cycles += 1 + + # switch charges + a = mol.GetAtomWithIdx(anion) + a.SetFormalCharge(a.GetFormalCharge() + 1) + a = mol.GetAtomWithIdx(a2) + a.SetFormalCharge(a.GetFormalCharge() - 1) + # switch bond orders + b = mol.GetBondBetweenAtoms(anion, a1) + b.SetBondType(RDBONDORDER[b.GetBondTypeAsDouble() + 1]) + b = mol.GetBondBetweenAtoms(a1, a2) + b.SetBondType(RDBONDORDER[b.GetBondTypeAsDouble() - 1]) + mol.UpdatePropertyCache(strict=False) + # update number of matches for the end pattern + n_matches = len(set([match[0] for match in matches])) + if n_matches == 1: + end_pattern = odd_end_pattern + # start new iteration + continue + + # no more changes to apply + mol.UpdatePropertyCache(strict=False) + return + + # reached max_iter + warnings.warn("The standardization could not be completed within a " + "reasonable number of iterations")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/converters/RDKitParser.html b/2.7.0-dev0/_modules/MDAnalysis/converters/RDKitParser.html new file mode 100644 index 0000000000..38b589f6bd --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/converters/RDKitParser.html @@ -0,0 +1,514 @@ + + + + + + MDAnalysis.converters.RDKitParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.converters.RDKitParser

+# -*- 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-2017 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
+#
+
+"""
+RDKit topology parser --- :mod:`MDAnalysis.converters.RDKitParser`
+==================================================================
+
+Converts an `RDKit <https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.Mol>`_ :class:`rdkit.Chem.rdchem.Mol` into a :class:`MDAnalysis.core.Topology`.
+
+
+See Also
+--------
+:mod:`MDAnalysis.converters.RDKit`
+
+
+Classes
+-------
+
+.. autoclass:: RDKitParser
+   :members:
+   :inherited-members:
+
+"""
+
+import logging
+import warnings
+import numpy as np
+
+from ..topology.base import TopologyReaderBase, change_squash
+from ..topology import guessers
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Elements,
+    Masses,
+    Charges,
+    Aromaticities,
+    Bonds,
+    Resids,
+    Resnums,
+    Resnames,
+    RSChirality,
+    Segids,
+    AltLocs,
+    ChainIDs,
+    ICodes,
+    Occupancies,
+    Tempfactors,
+)
+from ..core.topology import Topology
+
+logger = logging.getLogger("MDAnalysis.converters.RDKitParser")
+
+
+def _rdkit_atom_to_RS(atom):
+    """Fetches RDKit chiral tags"""
+    try:
+        return atom.GetProp("_CIPCode")
+    except KeyError:
+        return ""
+
+
+
[docs]class RDKitParser(TopologyReaderBase): + """ + For RDKit structures + + Creates the following Attributes: + - Atomids + - Atomnames + - Aromaticities + - Elements + - Masses + - Bonds + - Resids + - Resnums + - RSChirality + - Segids + + Guesses the following: + - Atomtypes + + Depending on RDKit's input, the following Attributes might be present: + - Charges + - Resnames + - AltLocs + - ChainIDs + - ICodes + - Occupancies + - Tempfactors + + Attributes table: + + +---------------------------------------------+-------------------------+ + | RDKit attribute | MDAnalysis equivalent | + +=============================================+=========================+ + | atom.GetMonomerInfo().GetAltLoc() | altLocs | + +---------------------------------------------+-------------------------+ + | atom.GetIsAromatic() | aromaticities | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetChainId() | chainIDs | + +---------------------------------------------+-------------------------+ + | atom.GetDoubleProp('_GasteigerCharge') | charges | + | atom.GetDoubleProp('_TriposPartialCharge') | | + +---------------------------------------------+-------------------------+ + | atom.GetSymbol() | elements | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetInsertionCode() | icodes | + +---------------------------------------------+-------------------------+ + | atom.GetIdx() | indices | + +---------------------------------------------+-------------------------+ + | atom.GetMass() | masses | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetName() | names | + | atom.GetProp('_TriposAtomName') | | + +---------------------------------------------+-------------------------+ + | atom.GetProp('_CIPCode') | chiralities | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetOccupancy() | occupancies | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetResidueName() | resnames | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetResidueNumber() | resnums | + +---------------------------------------------+-------------------------+ + | atom.GetMonomerInfo().GetTempFactor() | tempfactors | + +---------------------------------------------+-------------------------+ + | atom.GetProp('_TriposAtomType') | types | + +---------------------------------------------+-------------------------+ + + Raises + ------ + ValueError + If only part of the atoms have MonomerInfo available + + + .. versionadded:: 2.0.0 + .. versionchanged:: 2.1.0 + Added R/S chirality support + """ + format = 'RDKIT' + + @staticmethod + def _format_hint(thing): + """Can this Parser read object *thing*?""" + try: + from rdkit import Chem + except ImportError: # if no rdkit, probably not rdkit + return False + else: + return isinstance(thing, Chem.Mol) + +
[docs] def parse(self, **kwargs): + """Parse RDKit into Topology + + Returns + ------- + MDAnalysis Topology object + """ + + mol = self.filename + + # Atoms + names = [] + chiralities = [] + resnums = [] + resnames = [] + elements = [] + masses = [] + charges = [] + aromatics = [] + ids = [] + atomtypes = [] + segids = [] + altlocs = [] + chainids = [] + icodes = [] + occupancies = [] + tempfactors = [] + + try: + atom = mol.GetAtomWithIdx(0) + except RuntimeError: + top = Topology(n_atoms=0, n_res=0, n_seg=0, + attrs=None, + atom_resindex=None, + residue_segindex=None) + return top + + # check if multiple charges present + if atom.HasProp('_GasteigerCharge') and ( + atom.HasProp('_TriposPartialCharge') + ): + warnings.warn( + 'Both _GasteigerCharge and _TriposPartialCharge properties ' + 'are present. Using Gasteiger charges by default.') + + for atom in mol.GetAtoms(): + ids.append(atom.GetIdx()) + elements.append(atom.GetSymbol()) + masses.append(atom.GetMass()) + aromatics.append(atom.GetIsAromatic()) + chiralities.append(_rdkit_atom_to_RS(atom)) + mi = atom.GetMonomerInfo() + if mi: # atom name and residue info are present + names.append(mi.GetName().strip()) + resnums.append(mi.GetResidueNumber()) + resnames.append(mi.GetResidueName()) + segids.append(mi.GetSegmentNumber()) + altlocs.append(mi.GetAltLoc().strip()) + chainids.append(mi.GetChainId().strip()) + icodes.append(mi.GetInsertionCode().strip()) + occupancies.append(mi.GetOccupancy()) + tempfactors.append(mi.GetTempFactor()) + else: + # atom name (MOL2 only) + try: + names.append(atom.GetProp('_TriposAtomName')) + except KeyError: + pass + # atom type (MOL2 only) + try: + atomtypes.append(atom.GetProp('_TriposAtomType')) + except KeyError: + pass + # gasteiger charge (computed): + # if the user took the time to compute them, make it a priority + # over charges read from a MOL2 file + try: + charges.append(atom.GetDoubleProp('_GasteigerCharge')) + except KeyError: + # partial charge (MOL2 only) + try: + charges.append(atom.GetDoubleProp('_TriposPartialCharge')) + except KeyError: + pass + + # make Topology attributes + attrs = [] + n_atoms = len(ids) + + if resnums and (len(resnums) != n_atoms): + raise ValueError( + "ResidueInfo is only partially available in the molecule. " + "If you have added hydrogens to the input RDKit molecule with " + "`Chem.AddHs(mol)`, consider using " + "`Chem.AddHs(mol, addResidueInfo=True)` instead" + ) + + # * Attributes always present * + + # Atom attributes + for vals, Attr, dtype in ( + (ids, Atomids, np.int32), + (elements, Elements, object), + (masses, Masses, np.float32), + (aromatics, Aromaticities, bool), + (chiralities, RSChirality, 'U1'), + ): + attrs.append(Attr(np.array(vals, dtype=dtype))) + + # Bonds + bonds = [] + bond_types = [] + bond_orders = [] + for bond in mol.GetBonds(): + bonds.append((bond.GetBeginAtomIdx(), bond.GetEndAtomIdx())) + bond_orders.append(bond.GetBondTypeAsDouble()) + bond_types.append(str(bond.GetBondType())) + attrs.append(Bonds(bonds, types=bond_types, order=bond_orders)) + + # * Optional attributes * + + # Atom name + if names: + attrs.append(Atomnames(np.array(names, dtype=object))) + else: + for atom in mol.GetAtoms(): + name = "%s%d" % (atom.GetSymbol(), atom.GetIdx()) + names.append(name) + attrs.append(Atomnames(np.array(names, dtype=object))) + + # Atom type + if atomtypes: + attrs.append(Atomtypes(np.array(atomtypes, dtype=object))) + else: + atomtypes = guessers.guess_types(names) + attrs.append(Atomtypes(atomtypes, guessed=True)) + + # Partial charges + if charges: + attrs.append(Charges(np.array(charges, dtype=np.float32))) + else: + pass # no guesser yet + + # PDB only + for vals, Attr, dtype in ( + (altlocs, AltLocs, object), + (chainids, ChainIDs, object), + (occupancies, Occupancies, np.float32), + (tempfactors, Tempfactors, np.float32), + ): + if vals: + attrs.append(Attr(np.array(vals, dtype=dtype))) + + # Residue + if any(resnums) and not any(val is None for val in resnums): + resnums = np.array(resnums, dtype=np.int32) + resnames = np.array(resnames, dtype=object) + segids = np.array(segids, dtype=object) + icodes = np.array(icodes, dtype=object) + residx, (resnums, resnames, icodes, segids) = change_squash( + (resnums, resnames, icodes, segids), + (resnums, resnames, icodes, segids)) + n_residues = len(resnums) + for vals, Attr, dtype in ( + (resnums, Resids, np.int32), + (resnums.copy(), Resnums, np.int32), + (resnames, Resnames, object), + (icodes, ICodes, object), + ): + attrs.append(Attr(np.array(vals, dtype=dtype))) + else: + attrs.append(Resids(np.array([1]))) + attrs.append(Resnums(np.array([1]))) + residx = None + n_residues = 1 + + # Segment + if any(segids) and not any(val is None for val in segids): + segidx, (segids,) = change_squash((segids,), (segids,)) + n_segments = len(segids) + attrs.append(Segids(segids)) + else: + n_segments = 1 + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + segidx = None + + # create topology + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/CRD.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/CRD.html new file mode 100644 index 0000000000..5472433def --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/CRD.html @@ -0,0 +1,433 @@ + + + + + + MDAnalysis.coordinates.CRD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.CRD

+# -*- 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-2017 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
+#
+
+
+"""CRD structure files in MDAnalysis --- :mod:`MDAnalysis.coordinates.CRD`
+===========================================================================
+
+Read and write coordinates in CHARMM CARD coordinate format (suffix
+"crd"). The CHARMM "extended format" is handled automatically.
+
+"""
+import itertools
+import numpy as np
+import warnings
+
+from ..exceptions import NoDataError
+from ..lib import util
+from . import base
+
+
+
[docs]class CRDReader(base.SingleFrameReaderBase): + """CRD reader that implements the standard and extended CRD coordinate formats + + .. versionchanged:: 0.11.0 + Now returns a ValueError instead of FormatError. + Frames now 0-based instead of 1-based. + """ + format = 'CRD' + units = {'time': None, 'length': 'Angstrom'} + + def _read_first_frame(self): + # EXT: + # (i10,2x,a) natoms,'EXT' + # (2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10) + # iatom,ires,resn,typr,x,y,z,segid,rid,wmain + # standard: + # (i5) natoms + # (2I5,1X,A4,1X,A4,3F10.5,1X,A4,1X,A4,F10.5) + # iatom,ires,resn,typr,x,y,z,segid,orig_resid,wmain + coords_list = [] + with util.openany(self.filename) as crdfile: + extended = False + natoms = 0 + for linenum, line in enumerate(crdfile): + if line.strip().startswith('*') or line.strip() == "": + continue # ignore TITLE and empty lines + fields = line.split() + if len(fields) <= 2: + # should be the natoms line + natoms = int(fields[0]) + extended = (fields[-1] == 'EXT') + continue + # process coordinates + try: + if extended: + coords_list.append(np.array(line[45:100].split()[0:3], dtype=float)) + else: + coords_list.append(np.array(line[20:50].split()[0:3], dtype=float)) + except Exception: + errmsg = (f"Check CRD format at line {linenum}: " + f"{line.rstrip()}") + raise ValueError(errmsg) from None + + self.n_atoms = len(coords_list) + + self.ts = self._Timestep.from_coordinates(np.array(coords_list), + **self._ts_kwargs) + self.ts.frame = 0 # 0-based frame number + # if self.convert_units: + # self.convert_pos_from_native(self.ts._pos) # in-place ! + + # sanity check + if self.n_atoms != natoms: + raise ValueError("Found %d coordinates in %r but the header claims that there " + "should be %d coordinates." % (self.n_atoms, self.filename, natoms)) + +
[docs] def Writer(self, filename, **kwargs): + """Returns a CRDWriter for *filename*. + + Parameters + ---------- + filename: str + filename of the output CRD file + + Returns + ------- + :class:`CRDWriter` + + """ + return CRDWriter(filename, **kwargs)
+ + +
[docs]class CRDWriter(base.WriterBase): + """CRD writer that implements the CHARMM CRD coordinate format. + + It automatically writes the CHARMM EXT extended format if there + are more than 99,999 atoms. + + Requires the following attributes to be present: + - resids + - resnames + - names + - chainIDs + - tempfactors + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + .. versionchanged:: 2.2.0 + CRD extended format can now be explicitly requested with the + `extended` keyword + .. versionchanged:: 2.6.0 + Files are now written in `wt` mode, and keep extensions, allowing + for files to be written under compressed formats + """ + format = 'CRD' + units = {'time': None, 'length': 'Angstrom'} + + fmt = { + #crdtype = 'extended' + #fortran_format = '(2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10)' + "ATOM_EXT": ("{serial:10d}{totRes:10d} {resname:<8.8s} {name:<8.8s}" + "{pos[0]:20.10f}{pos[1]:20.10f}{pos[2]:20.10f} " + "{chainID:<8.8s} {resSeq:<8d}{tempfactor:20.10f}\n"), + "NUMATOMS_EXT": "{0:10d} EXT\n", + #crdtype = 'standard' + #fortran_format = '(2I5,1X,A4,1X,A4,3F10.5,1X,A4,1X,A4,F10.5)' + "ATOM": ("{serial:5d}{totRes:5d} {resname:<4.4s} {name:<4.4s}" + "{pos[0]:10.5f}{pos[1]:10.5f}{pos[2]:10.5f} " + "{chainID:<4.4s} {resSeq:<4d}{tempfactor:10.5f}\n"), + "TITLE": "* FRAME {frame} FROM {where}\n", + "NUMATOMS": "{0:5d}\n", + } + + def __init__(self, filename, **kwargs): + """ + Parameters + ---------- + filename : str or :class:`~MDAnalysis.lib.util.NamedStream` + name of the output file or a stream + + extended : bool (optional) + By default, noextended CRD format is used [``False``]. + However, extended CRD format can be forced by + specifying `extended` ``=True``. Note that the extended format + is *always* used if the number of atoms exceeds 99,999, regardless + of the setting of `extended`. + + .. versionadded:: 2.2.0 + """ + + self.filename = util.filename(filename, ext='crd', keep=True) + self.crd = None + + # account for explicit crd format, if requested + self.extended = kwargs.pop("extended", False) + +
[docs] def write(self, selection, frame=None): + """Write selection at current trajectory frame to file. + + Parameters + ---------- + selection : AtomGroup + group of atoms to be written + frame : int (optional) + Move the trajectory to frame `frame`; by default, write + the current frame. + + """ + try: + u = selection.universe + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if frame is not None: + u.trajectory[frame] # advance to frame + else: + try: + frame = u.trajectory.ts.frame + except AttributeError: + frame = 0 # should catch cases when we are analyzing a single PDB (?) + + + atoms = selection.atoms # make sure to use atoms (Issue 46) + coor = atoms.positions # can write from selection == Universe (Issue 49) + + n_atoms = len(atoms) + # Detect which format string we're using to output (EXT or not) + # *len refers to how to truncate various things, + # depending on output format! + if self.extended or n_atoms > 99999: + at_fmt = self.fmt['ATOM_EXT'] + serial_len = 10 + resid_len = 8 + totres_len = 10 + else: + at_fmt = self.fmt['ATOM'] + serial_len = 5 + resid_len = 4 + totres_len = 5 + + # Check for attributes, use defaults for missing ones + attrs = {} + missing_topology = [] + for attr, default in ( + ('resnames', itertools.cycle(('UNK',))), + # Resids *must* be an array because we index it later + ('resids', np.ones(n_atoms, dtype=int)), + ('names', itertools.cycle(('X',))), + ('tempfactors', itertools.cycle((0.0,))), + ): + try: + attrs[attr] = getattr(atoms, attr) + except (NoDataError, AttributeError): + attrs[attr] = default + missing_topology.append(attr) + # ChainIDs - Try ChainIDs first, fall back to Segids + try: + attrs['chainIDs'] = atoms.chainIDs + except (NoDataError, AttributeError): + # try looking for segids instead + try: + attrs['chainIDs'] = atoms.segids + except (NoDataError, AttributeError): + attrs['chainIDs'] = itertools.cycle(('',)) + missing_topology.append(attr) + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "".format(miss=', '.join(missing_topology))) + + with util.openany(self.filename, 'wt') as crd: + # Write Title + crd.write(self.fmt['TITLE'].format( + frame=frame, where=u.trajectory.filename)) + crd.write("*\n") + + # Write NUMATOMS + if self.extended or n_atoms > 99999: + crd.write(self.fmt['NUMATOMS_EXT'].format(n_atoms)) + else: + crd.write(self.fmt['NUMATOMS'].format(n_atoms)) + + # Write all atoms + + current_resid = 1 + resids = attrs['resids'] + for i, pos, resname, name, chainID, resid, tempfactor in zip( + range(n_atoms), coor, attrs['resnames'], attrs['names'], + attrs['chainIDs'], attrs['resids'], attrs['tempfactors']): + if not i == 0 and resids[i] != resids[i-1]: + current_resid += 1 + + # Truncate numbers + serial = util.ltruncate_int(i + 1, serial_len) + resid = util.ltruncate_int(resid, resid_len) + current_resid = util.ltruncate_int(current_resid, totres_len) + + crd.write(at_fmt.format( + serial=serial, totRes=current_resid, resname=resname, + name=name, pos=pos, chainID=chainID, + resSeq=resid, tempfactor=tempfactor))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/DCD.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DCD.html new file mode 100644 index 0000000000..cd97c73dd7 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DCD.html @@ -0,0 +1,617 @@ + + + + + + MDAnalysis.coordinates.DCD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.DCD

+# -*- 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-2017 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
+#
+"""DCD trajectory I/O  --- :mod:`MDAnalysis.coordinates.DCD`
+============================================================
+
+Classes to read and write DCD binary trajectories, the format used by
+CHARMM, NAMD, and also LAMMPS. Trajectories can be read regardless of
+system-endianness as this is auto-detected.
+
+Generally, DCD trajectories produced by any code can be read (with the
+:class:`DCDReader`) although there can be issues with the unitcell (simulation
+box) representation (see :attr:`DCDReader.dimensions`). DCDs can also be
+written but the :class:`DCDWriter` follows recent NAMD/VMD convention for the
+unitcell but still writes AKMA time. Reading and writing these trajectories
+within MDAnalysis will work seamlessly but if you process those trajectories
+with other tools you might need to watch out that time and unitcell dimensions
+are correctly interpreted.
+
+
+See Also
+--------
+:mod:`MDAnalysis.coordinates.LAMMPS`
+  module provides a more flexible DCD reader/writer.
+
+
+.. _Issue 187:
+   https://github.com/MDAnalysis/mdanalysis/issues/187
+
+
+Classes
+-------
+
+.. autoclass:: DCDReader
+   :inherited-members:
+.. autoclass:: DCDWriter
+   :inherited-members:
+
+"""
+import os
+import errno
+import numpy as np
+import struct
+import types
+import warnings
+
+from .. import units as mdaunits  # use mdaunits instead of units to avoid a clash
+from . import base, core
+from ..lib.formats.libdcd import DCDFile
+from ..lib.mdamath import triclinic_box
+from ..lib.util import store_init_arguments
+
+
+
[docs]class DCDReader(base.ReaderBase): + """Reader for the DCD format. + + DCD is used by NAMD, CHARMM and LAMMPS as the default trajectory format. + The DCD file format is not well defined. In particular, NAMD and CHARMM use + it differently. Currently, MDAnalysis tries to guess the correct **format + for the unitcell representation** but it can be wrong. **Check the unitcell + dimensions**, especially for triclinic unitcells (see `Issue 187`_). DCD + trajectories produced by CHARMM and NAMD( >2.5) record time in AKMA units. + If other units have been recorded (e.g., ps) then employ the configurable + :class:MDAnalysis.coordinates.LAMMPS.DCDReader and set the time unit as a + optional argument. You can find a list of units used in the DCD formats on + the MDAnalysis `wiki`_. + + + MDAnalysis always uses ``(*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. + + The ordering of the angles in the unitcell is the same as in recent + versions of VMD's DCDplugin_ (2013), namely the `X-PLOR DCD format`_: The + original unitcell is read as ``[A, gamma, B, beta, alpha, C]`` from the DCD + file. If any of these values are < 0 or if any of the angles are > 180 + degrees then it is assumed it is a new-style CHARMM unitcell (at least + since c36b2) in which box vectors were recorded. + + .. deprecated:: 2.4.0 + DCDReader currently makes independent timesteps + by copying the :class:`Timestep` associated with the reader. + Other readers update the :class:`Timestep` inplace meaning all + references to the :class:`Timestep` contain the same data. The unique + independent :class:`Timestep` behaviour of the DCDReader is deprecated + will be changed in 3.0 to be the same as other readers + + .. warning:: + The DCD format is not well defined. Check your unit cell + dimensions carefully, especially when using triclinic boxes. + Different software packages implement different conventions and + MDAnalysis is currently implementing the newer NAMD/VMD convention + and tries to guess the new CHARMM one. Old CHARMM trajectories might + give wrong unitcell values. For more details see `Issue 187`_. + + .. _`X-PLOR DCD format`: http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/dcdplugin.html + .. _Issue 187: https://github.com/MDAnalysis/mdanalysis/issues/187 + .. _DCDplugin: http://www.ks.uiuc.edu/Research/vmd/plugins/doxygen/dcdplugin_8c-source.html#l00947 + .. _wiki: https://github.com/MDAnalysis/mdanalysis/wiki/FileFormats#dcd + """ + format = 'DCD' + flavor = 'CHARMM' + units = {'time': 'AKMA', 'length': 'Angstrom'} + + @store_init_arguments + def __init__(self, filename, convert_units=True, dt=None, **kwargs): + """ + Parameters + ---------- + filename : str + trajectory filename + convert_units : bool (optional) + convert units to MDAnalysis units + dt : float (optional) + overwrite time delta stored in DCD + **kwargs : dict + General reader arguments. + + + .. versionchanged:: 0.17.0 + Changed to use libdcd.pyx library and removed the correl function + """ + super(DCDReader, self).__init__( + filename, convert_units=convert_units, **kwargs) + self._file = DCDFile(self.filename) + self.n_atoms = self._file.header['natoms'] + + delta = mdaunits.convert(self._file.header['delta'], + self.units['time'], 'ps') + if dt is None: + dt = delta * self._file.header['nsavc'] + self.skip_timestep = self._file.header['nsavc'] + + self._ts_kwargs['dt'] = dt + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + frame = self._file.read() + # reset trajectory + if self._file.n_frames > 1: + self._file.seek(1) + else: + self._file.seek(0) + self._frame = 0 + self.ts = self._frame_to_ts(frame, self.ts) + # these should only be initialized once + self.ts.dt = dt + warnings.warn("DCDReader currently makes independent timesteps" + " by copying self.ts while other readers update" + " self.ts inplace. This behavior will be changed in" + " 3.0 to be the same as other readers. Read more at" + " https://github.com/MDAnalysis/mdanalysis/issues/3889" + " to learn if this change in behavior might affect you.", + category=DeprecationWarning) + +
[docs] @staticmethod + def parse_n_atoms(filename, **kwargs): + with DCDFile(filename) as f: + n_atoms = f.header['natoms'] + return n_atoms
+ +
[docs] def close(self): + """close reader""" + self._file.close()
+ + @property + def n_frames(self): + """number of frames in trajectory""" + return len(self._file) + + def _reopen(self): + """reopen trajectory""" + self.ts.frame = 0 + self._frame = -1 + self._file.close() + self._file.open('r') + + def _read_frame(self, i): + """read frame i""" + self._frame = i - 1 + self._file.seek(i) + return self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + """copy next frame into timestep""" + if self._frame == self.n_frames - 1: + raise IOError('trying to go over trajectory limit') + if ts is None: + #TODO remove copying the ts in 3.0 + ts = self.ts.copy() + frame = self._file.read() + self._frame += 1 + self._frame_to_ts(frame, ts) + self.ts = ts + return ts + +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Return writer for trajectory format""" + if n_atoms is None: + n_atoms = self.n_atoms + return DCDWriter( + filename, + n_atoms=n_atoms, + dt=self.ts.dt, + convert_units=self.convert_units, + **kwargs)
+ + def _frame_to_ts(self, frame, ts): + """convert a dcd-frame to a :class:`TimeStep`""" + ts.frame = self._frame + ts.time = (ts.frame + self._file.header['istart']/self._file.header['nsavc']) * self.ts.dt + ts.data['step'] = self._file.tell() + + # The original unitcell is read as ``[A, gamma, B, beta, alpha, C]`` + _ts_order = [0, 2, 5, 4, 3, 1] + uc = np.take(frame.unitcell, _ts_order) + + pi_2 = np.pi / 2 + if (-1.0 <= uc[3] <= 1.0) and (-1.0 <= uc[4] <= 1.0) and ( + -1.0 <= uc[5] <= 1.0): + # This file was generated by Charmm, or by NAMD > 2.5, with the + # angle cosines of the periodic cell angles written to the DCD + # file. This formulation improves rounding behavior for orthogonal + # cells so that the angles end up at precisely 90 degrees, unlike + # acos(). (changed in MDAnalysis 0.9.0 to have NAMD ordering of the + # angles; see Issue 187) */ + uc[3] = 90.0 - np.arcsin(uc[3]) * 90.0 / pi_2 + uc[4] = 90.0 - np.arcsin(uc[4]) * 90.0 / pi_2 + uc[5] = 90.0 - np.arcsin(uc[5]) * 90.0 / pi_2 + # heuristic sanity check: uc = A,B,C,alpha,beta,gamma + elif np.any(uc < 0.) or np.any(uc[3:] > 180.): + # might be new CHARMM: box matrix vectors + H = frame.unitcell.copy() + e1, e2, e3 = H[[0, 1, 3]], H[[1, 2, 4]], H[[3, 4, 5]] + uc = triclinic_box(e1, e2, e3) + else: + # This file was likely generated by NAMD 2.5 and the periodic cell + # angles are specified in degrees rather than angle cosines. + pass + + ts.dimensions = uc + ts.positions = frame.xyz + + if self.convert_units: + if ts.dimensions is not None: + self.convert_pos_from_native(ts.dimensions[:3]) + self.convert_pos_from_native(ts.positions) + + return ts + + @property + def dimensions(self): + """unitcell dimensions (*A*, *B*, *C*, *alpha*, *beta*, *gamma*) + """ + return self.ts.dimensions + + @property + def dt(self): + """timestep between frames""" + return self.ts.dt + +
[docs] def timeseries(self, + asel=None, + start=None, + stop=None, + step=None, + order='afc'): + """Return a subset of coordinate data for an AtomGroup + + Parameters + ---------- + asel : :class:`~MDAnalysis.core.groups.AtomGroup` + The :class:`~MDAnalysis.core.groups.AtomGroup` to read the + coordinates from. Defaults to None, in which case the full set of + coordinate data is returned. + start : int (optional) + Begin reading the trajectory at frame index `start` (where 0 is the + index of the first frame in the trajectory); the default ``None`` + starts at the beginning. + stop : int (optional) + End reading the trajectory at frame index `stop`-1, i.e, `stop` is + excluded. The trajectory is read to the end with the default + ``None``. + step : int (optional) + Step size for reading; the default ``None`` is equivalent to 1 and + means to read every frame. + order : str (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates) + + + .. versionchanged:: 1.0.0 + `skip` and `format` keywords have been removed. + .. versionchanged:: 2.4.0 + ValueError now raised instead of NoDataError for empty input + AtomGroup + """ + + start, stop, step = self.check_slice_indices(start, stop, step) + + if asel is not None: + if len(asel) == 0: + raise ValueError( + "Timeseries requires at least one atom to analyze") + atom_numbers = list(asel.indices) + else: + atom_numbers = list(range(self.n_atoms)) + + frames = self._file.readframes( + start, stop, step, order=order, indices=atom_numbers) + return frames.xyz
+ + +
[docs]class DCDWriter(base.WriterBase): + """DCD Writer class + + The writer follows recent NAMD/VMD convention for the unitcell (box lengths + in Å and angle-cosines, ``[A, cos(gamma), B, cos(beta), cos(alpha), C]``) + and writes positions in Å and time in AKMA time units. + + + .. note:: + When writing out timesteps without ``dimensions`` (i.e. set ``None``) + the :class:`DCDWriter` will write out a zeroed unitcell (i.e. + ``[0, 0, 0, 0, 0, 0]``). As this behaviour is poorly defined, it may + not match the expectations of other software. + + """ + format = 'DCD' + multiframe = True + flavor = 'NAMD' + units = {'time': 'AKMA', 'length': 'Angstrom'} + + def __init__(self, + filename, + n_atoms, + convert_units=True, + step=1, + dt=1, + remarks='', + nsavc=1, + istart=0, + **kwargs): + """Parameters + ---------- + filename : str + filename of trajectory + n_atoms : int + number of atoms to be written + convert_units : bool (optional) + convert from MDAnalysis units to format specific units + step : int (optional) + number of steps between frames to be written + dt : float (optional) + time between two frames. If ``None`` guess from first written + :class:`TimeStep` + remarks : str (optional) + remarks to be stored in DCD. Shouldn't be more then 240 characters + nsavc : int (optional) + DCD files can also store the number of integrator time steps that + correspond to the interval between two frames as nsavc (i.e., every + how many MD steps is a frame saved to the DCD). By default, this + number is just set to one and this should be sufficient for almost + all cases but if required, `nsavc` can be changed. + istart : int (optional) + starting frame number in integrator timesteps. CHARMM defaults to + `nsavc`, i.e., start at frame number 1 = `istart` / `nsavc`. The value + ``None`` will set `istart` to `nsavc` (the CHARMM default). + The MDAnalysis default is 0 so that the frame number and time of the first + frame is 0. + **kwargs : dict + General writer arguments + + """ + self.filename = filename + self._convert_units = convert_units + if n_atoms is None: + raise ValueError("n_atoms argument is required") + self.n_atoms = n_atoms + self._file = DCDFile(self.filename, 'w') + self.step = step + self.dt = dt + dt = mdaunits.convert(dt, 'ps', self.units['time']) + delta = float(dt) / nsavc + istart = istart if istart is not None else nsavc + self._file.write_header( + remarks=remarks, + natoms=self.n_atoms, + nsavc=nsavc, + delta=delta, + is_periodic=1, + istart=istart) + + def _write_next_frame(self, ag): + """Write information associated with ``obj`` at current frame into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + See Also + -------- + :meth:`DCDWriter.write` takes a more general input + + + .. versionchanged:: 1.0.0 + Added ability to pass AtomGroup or Universe. + Renamed from `write_next_timestep` to `_write_next_frame`. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + try: + ts = ag.ts + except AttributeError: + try: + # Universe? + ts = ag.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + xyz = ts.positions.copy() + try: + dimensions = ts.dimensions.copy() + except AttributeError: + wmsg = ('No dimensions set for current frame, zeroed unitcell ' + 'will be written') + warnings.warn(wmsg) + dimensions = np.zeros(6) + + if self._convert_units: + xyz = self.convert_pos_to_native(xyz, inplace=True) + dimensions = self.convert_dimensions_to_unitcell(ts, inplace=True) + + # we only support writing charmm format unit cell info + # The DCD unitcell is written as ``[A, gamma, B, beta, alpha, C]`` + _ts_order = [0, 5, 1, 4, 3, 2] + box = np.take(dimensions, _ts_order) + + self._file.write(xyz=xyz, box=box) + +
[docs] def close(self): + """close trajectory""" + self._file.close()
+ + def __del__(self): + self.close()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.html new file mode 100644 index 0000000000..7537b64452 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.html @@ -0,0 +1,410 @@ + + + + + + MDAnalysis.coordinates.DLPoly — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.DLPoly

+# -*- 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-2017 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
+#
+
+"""DL_Poly format reader :mod:`MDAnalysis.coordinates.DLPoly`
+=============================================================
+
+Read DL Poly_ format coordinate files
+
+.. _Poly: http://www.stfc.ac.uk/SCD/research/app/ccg/software/DL_POLY/44516.aspx
+"""
+import numpy as np
+
+from . import base
+from . import core
+from ..lib import util
+from ..lib.util import cached, store_init_arguments
+
+_DLPOLY_UNITS = {'length': 'Angstrom', 'velocity': 'Angstrom/ps', 'time': 'ps'}
+
+
+
[docs]class ConfigReader(base.SingleFrameReaderBase): + """DLPoly Config file Reader + + + .. versionadded:: 0.11.0 + .. versionchanged:: 2.0.0 + coordinates, velocities, and forces are no longer stored in 'F' memory + layout, instead now using the numpy default of 'C'. + """ + format = 'CONFIG' + units = _DLPOLY_UNITS + + def _read_first_frame(self): + unitcell = np.zeros((3, 3), dtype=np.float32) + + with open(self.filename, 'r') as inf: + self.title = inf.readline().strip() + levcfg, imcon, megatm = np.int64(inf.readline().split()[:3]) + if not imcon == 0: + unitcell[0][:] = inf.readline().split() + unitcell[1][:] = inf.readline().split() + unitcell[2][:] = inf.readline().split() + + ids = [] + coords = [] + if levcfg > 0: + has_vels = True + velocities = [] + else: + has_vels = False + if levcfg == 2: + has_forces = True + forces = [] + else: + has_forces = False + + line = inf.readline().strip() + # Read records infinitely + while line: + try: + idx = int(line[8:]) + except ValueError: # dl_poly classic doesn't have this + pass + else: + ids.append(idx) + + xyz = np.float32(inf.readline().split()) + coords.append(xyz) + if has_vels: + vxyz = np.float32(inf.readline().split()) + velocities.append(vxyz) + if has_forces: + fxyz = np.float32(inf.readline().split()) + forces.append(fxyz) + + line = inf.readline().strip() + + coords = np.array(coords, dtype=np.float32) + if has_vels: + velocities = np.array(velocities, dtype=np.float32) + if has_forces: + forces = np.array(forces, dtype=np.float32) + self.n_atoms = len(coords) + + if ids: + # If we have indices then sort based on them + ids = np.array(ids) + order = np.argsort(ids) + + coords = coords[order] + if has_vels: + velocities = velocities[order] + if has_forces: + forces = forces[order] + + ts = self.ts = self._Timestep(self.n_atoms, + velocities=has_vels, + forces=has_forces, + **self._ts_kwargs) + ts._pos = coords + if has_vels: + ts._velocities = velocities + if has_forces: + ts._forces = forces + if not imcon == 0: + ts.dimensions = core.triclinic_box(*unitcell) + + ts.frame = 0
+ + +
[docs]class HistoryReader(base.ReaderBase): + """Reads DLPoly format HISTORY files + + .. versionadded:: 0.11.0 + """ + format = 'HISTORY' + units = _DLPOLY_UNITS + + @store_init_arguments + def __init__(self, filename, **kwargs): + super(HistoryReader, self).__init__(filename, **kwargs) + self._cache = {} + + # "private" file handle + self._file = util.anyopen(self.filename, 'r') + self.title = self._file.readline().strip() + header = np.int64(self._file.readline().split()[:3]) + self._levcfg, self._imcon, self.n_atoms = header + self._has_vels = True if self._levcfg > 0 else False + self._has_forces = True if self._levcfg == 2 else False + + rwnd = self._file.tell() + self._file.readline() + if (len(self._file.readline().split())) == 3: + self._has_cell = True + else: + self._has_cell = False + self._file.seek(rwnd) + + self.ts = self._Timestep(self.n_atoms, + velocities=self._has_vels, + forces=self._has_forces, + **self._ts_kwargs) + self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + + line = self._file.readline() # timestep line + if not line.startswith('timestep'): + raise IOError + + if self._has_cell: + unitcell = np.zeros((3, 3)) + unitcell[0] = self._file.readline().split() + unitcell[1] = self._file.readline().split() + unitcell[2] = self._file.readline().split() + ts.dimensions = core.triclinic_box(*unitcell) + + # If ids are given, put them in here + # and later sort by them + ids = [] + + for i in range(self.n_atoms): + line = self._file.readline().strip() # atom info line + try: + idx = int(line.split()[1]) + except IndexError: + pass + else: + ids.append(idx) + + # Read in this order for now, then later reorder in place + ts._pos[i] = self._file.readline().split() + if self._has_vels: + ts._velocities[i] = self._file.readline().split() + if self._has_forces: + ts._forces[i] = self._file.readline().split() + i += 1 + + if ids: + ids = np.array(ids) + # if ids aren't strictly sequential + if not np.all(ids == (np.arange(self.n_atoms) + 1)): + order = np.argsort(ids) + ts._pos[:] = ts._pos[order] + if self._has_vels: + ts._velocities[:] = ts._velocities[order] + if self._has_forces: + ts._forces[:] = ts._forces[order] + + ts.frame += 1 + return ts + + def _read_frame(self, frame): + """frame is 0 based, error checking is done in base.getitem""" + self._file.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in read_next_frame + return self._read_next_timestep() + + @property + @cached('n_frames') + def n_frames(self): + # Second line is traj_key, imcom, n_atoms, n_frames, n_records + offsets = [] + + with open(self.filename, 'r') as f: + f.readline() + f.readline() + position = f.tell() + line = f.readline() + while line.startswith('timestep'): + offsets.append(position) + if self._has_cell: + f.readline() + f.readline() + f.readline() + for _ in range(self.n_atoms): + f.readline() + f.readline() + if self._has_vels: + f.readline() + if self._has_forces: + f.readline() + position = f.tell() + line = f.readline() + + self._offsets = offsets + return len(self._offsets) + + def _reopen(self): + self.close() + self._file = open(self.filename, 'r') + self._file.readline() # header is 2 lines + self._file.readline() + self.ts.frame = -1 + +
[docs] def close(self): + self._file.close()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/DMS.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DMS.html new file mode 100644 index 0000000000..48b8037b7e --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/DMS.html @@ -0,0 +1,263 @@ + + + + + + MDAnalysis.coordinates.DMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.DMS

+# -*- 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-2017 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
+#
+
+"""
+DESRES file format --- :mod:`MDAnalysis.coordinates.DMS`
+========================================================
+
+Classes to read DESRES_ Molecular Structure file format (DMS_)
+coordinate files (as used by the Desmond_ MD package).
+
+.. _DESRES: http://www.deshawresearch.com
+.. _Desmond: http://www.deshawresearch.com/resources_desmond.html
+.. _DMS: http://www.deshawresearch.com/Desmond_Users_Guide-0.7.pdf
+"""
+import numpy as np
+import sqlite3
+
+from . import base
+from .core import triclinic_box
+
+
+
[docs]class DMSReader(base.SingleFrameReaderBase): + """ + Reads both coordinates and velocities. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + """ + format = 'DMS' + units = {'time': None, 'length': 'A', 'velocity': 'A/ps'} + + def get_coordinates(self, cur): + cur.execute('SELECT * FROM particle') + particles = cur.fetchall() + return [(p['x'], p['y'], p['z']) for p in particles] + + def get_particle_by_columns(self, cur, columns=None): + if columns is None: + columns = ['x', 'y', 'z'] + cur.execute('SELECT * FROM particle') + particles = cur.fetchall() + return [tuple([p[c] for c in columns]) for p in particles] + + def get_global_cell(self, cur): + cur.execute('SELECT * FROM global_cell') + rows = cur.fetchall() + assert len(rows) == 3 + x = [row["x"] for row in rows] + y = [row["y"] for row in rows] + z = [row["z"] for row in rows] + return {'x': x, 'y': y, 'z': z} + + def _read_first_frame(self): + coords_list = None + velocities_list = None + + def dict_factory(cursor, row): + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + + with sqlite3.connect(self.filename) as con: + # This will return dictionaries instead of tuples, when calling cur.fetch() or fetchall() + con.row_factory = dict_factory + cur = con.cursor() + coords_list = self.get_coordinates(cur) + velocities_list = self.get_particle_by_columns(cur, columns=['vx', 'vy', 'vz']) + unitcell = self.get_global_cell(cur) + + if not coords_list: + raise IOError("Found no coordinates") + self.n_atoms = len(coords_list) + + velocities = np.array(velocities_list, dtype=np.float32) + if not velocities.any(): + velocities = None + + self.ts = self._Timestep.from_coordinates( + np.array(coords_list, dtype=np.float32), + velocities=velocities, + **self._ts_kwargs) + self.ts.frame = 0 # 0-based frame number + + self.ts.dimensions = triclinic_box(unitcell['x'], unitcell['y'], unitcell['z']) + + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) # in-place ! + if self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) # in-place ! + if self.ts.has_velocities: + # converts nm/ps to A/ps units + self.convert_velocities_from_native(self.ts._velocities)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.html new file mode 100644 index 0000000000..09f44aa21a --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.html @@ -0,0 +1,464 @@ + + + + + + MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.FHIAIMS

+# -*- 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-2017 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
+#
+
+"""
+FHI-AIMS file format --- :mod:`MDAnalysis.coordinates.FHIAIMS`
+==============================================================
+
+Classes to read and write `FHI-AIMS`_ coordinate files.
+
+The cell vectors are specified by the (optional) lines with the
+``lattice_vector`` tag::
+
+    lattice_vector x  y  z
+
+where x, y, and z are expressed in ångström (Å).
+
+.. Note::
+
+   In the original `FHI-AIMS format`_, up to three lines with
+   ``lattice_vector`` are allowed (order matters) where the absent line implies
+   no periodicity in that direction.  In MDAnalysis, only the case of no
+   ``lattice_vector`` or three ``lattice_vector`` lines are allowed.
+
+Atomic positions and names are specified either by the ``atom`` or by the
+``atom_frac`` tags::
+
+    atom           x  y  z  name
+    atom_frac      nx ny nz name
+
+where x, y, and z are expressed in ångström, and nx, ny and nz are real numbers
+in [0, 1] and are used to compute the atomic positions in units of the basic
+cell.
+
+Atomic velocities can be added on the line right after the corresponding
+``atom`` in units of Å/ps using the ``velocity`` tag::
+
+    velocity      vx vy vz
+
+
+The field name is a string identifying the atomic species.  See also the
+specifications in the official `FHI-AIMS format`_.
+
+Classes
+-------
+
+.. autoclass:: FHIAIMSReader
+   :members:
+   :inherited-members:
+
+.. autoclass:: FHIAIMSWriter
+   :members:
+   :inherited-members:
+
+Developer notes: ``FHIAIMSWriter`` format strings
+-------------------------------------------------
+
+The :class:`FHIAIMSWriter` class has a :attr:`FHIAIMSWriter.fmt`
+attribute, which is a dictionary of different strings for writing
+lines in ``.in`` files.  These are as follows:
+
+``xyz``
+  An atom line without velocities.  Requires that the `name` and
+  `pos` keys be supplied.  E.g.::
+
+     fmt['xyz'].format(pos=(0.0, 1.0, 2.0), name='O')
+
+``vel``
+  An line that specifies velocities::
+
+     fmt['xyz'].format(vel=(0.1, 0.2, 0.3))
+
+``box_triclinic``
+  The (optional) initial lines of the file which gives box dimensions.
+  Requires the `box` keyword, as a length 9 vector.  This is a flattened
+  version of the (3, 3) triclinic vector representation of the unit
+  cell.
+
+
+.. Links
+
+.. _FHI-AIMS: https://aimsclub.fhi-berlin.mpg.de/
+.. _FHI-AIMS format: https://doi.org/10.6084/m9.figshare.12413477.v1
+
+"""
+import re
+
+import itertools
+import warnings
+
+import numpy as np
+
+from . import base
+from .core import triclinic_box, triclinic_vectors
+from ..exceptions import NoDataError
+from ..lib import util
+from ..lib import mdamath
+
+
+
[docs]class FHIAIMSReader(base.SingleFrameReaderBase): + """Reader for the FHIAIMS geometry format. + + Single frame reader for the `FHI-AIMS`_ input file format. Reads + geometry (3D and molecules only), positions (absolut or fractional), + velocities if given, all according to the `FHI-AIMS format`_ + specifications + + """ + format = ['IN', 'FHIAIMS'] + units = {'time': 'ps', 'length': 'Angstrom', 'velocity': 'Angstrom/ps'} + + def _read_first_frame(self): + with util.openany(self.filename, 'rt') as fhiaimsfile: + relative, positions, velocities, lattice_vectors = [], [], [], [] + skip_tags = ["#", "initial_moment"] + oldline = '' + for line in fhiaimsfile: + line = line.strip() + if line.startswith("atom"): + positions.append(line.split()[1:-1]) + relative.append('atom_frac' in line) + oldline = line + continue + if line.startswith("velocity"): + if not 'atom' in oldline: + raise ValueError( + 'Non-conforming line (velocity must follow atom): ({0})in FHI-AIMS input file {0}'.format(line, self.filename)) + velocities.append(line.split()[1:]) + oldline = line + continue + if line.startswith("lattice"): + lattice_vectors.append(line.split()[1:]) + oldline = line + continue + if any([line.startswith(tag) for tag in skip_tags]): + oldline = line + continue + raise ValueError( + 'Non-conforming line: ({0})in FHI-AIMS input file {0}'.format(line, self.filename)) + + # positions and velocities are lists of lists of strings; they will be + # cast to np.arrays(..., dtype=float32) during assignment to ts.positions/ts.velocities + lattice_vectors = np.asarray(lattice_vectors, dtype=np.float32) + + if len(velocities) not in (0, len(positions)): + raise ValueError( + 'Found incorrect number of velocity tags ({0}) in the FHI-AIMS file, should be {1}.'.format( + len(velocities), len(positions))) + if len(lattice_vectors) not in (0, 3): + raise ValueError( + 'Found partial periodicity in FHI-AIMS file. This cannot be handled by MDAnalysis.') + if len(lattice_vectors) == 0 and any(relative): + raise ValueError( + 'Found relative coordinates in FHI-AIMS file without lattice info.') + + # create Timestep + + self.n_atoms = n_atoms = len(positions) + self.ts = ts = self._Timestep(n_atoms, **self._ts_kwargs) + ts.positions = positions + + if len(lattice_vectors) > 0: + ts.dimensions = triclinic_box(*lattice_vectors) + ts.positions[relative] = np.matmul(ts.positions[relative], lattice_vectors) + + if len(velocities) > 0: + ts.velocities = velocities + + self.ts.frame = 0 # 0-based frame number + +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Returns a FHIAIMSWriter for *filename*. + + Parameters + ---------- + filename: str + filename of the output FHI-AIMS file + + Returns + ------- + :class:`FHIAIMSWriter` + + """ + if n_atoms is None: + n_atoms = self.n_atoms + return FHIAIMSWriter(filename, n_atoms=n_atoms, **kwargs)
+ + +
[docs]class FHIAIMSWriter(base.WriterBase): + """FHI-AIMS Writer. + + Single frame writer for the `FHI-AIMS`_ format. Writes geometry (3D and + molecules only), positions (absolut only), velocities if given, all + according to the `FHI-AIMS format`_ specifications. + + If no atom names are given, it will set each atom name to "X". + + """ + + format = ['IN', 'FHIAIMS'] + units = {'time': None, 'length': 'Angstrom', 'velocity': 'Angstrom/ps'} + + #: format strings for the FHI-AIMS file (all include newline) + fmt = { + # coordinates output format, see https://doi.org/10.6084/m9.figshare.12413477.v1 + 'xyz': "atom {pos[0]:12.8f} {pos[1]:12.8f} {pos[2]:12.8f} {name:<3s}\n", + 'vel': "velocity {vel[0]:12.8f} {vel[1]:12.8f} {vel[2]:12.8f}\n", + # unitcell + 'box_triclinic': "lattice_vector {box[0]:12.8f} {box[1]:12.8f} {box[2]:12.8f}\nlattice_vector {box[3]:12.8f} {box[4]:12.8f} {box[5]:12.8f}\nlattice_vector {box[6]:12.8f} {box[7]:12.8f} {box[8]:12.8f}\n" + } + + def __init__(self, filename, convert_units=True, n_atoms=None, **kwargs): + """Set up the FHI-AIMS Writer + + Parameters + ----------- + filename : str + output filename + n_atoms : int (optional) + number of atoms + + """ + self.filename = util.filename(filename, ext='.in', keep=True) + self.n_atoms = n_atoms + + def _write_next_frame(self, obj): + """Write selection at current trajectory frame to file. + + Parameters + ----------- + obj : AtomGroup or Universe + + + .. versionchanged:: 2.0.0 + Support for deprecated Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + # write() method that complies with the Trajectory API + try: + # make sure to use atoms (Issue 46) + ag = obj.atoms + # can write from selection == Universe (Issue 49) + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + # Check for topology information + missing_topology = [] + try: + names = ag.names + except (AttributeError, NoDataError): + names = itertools.cycle(('X',)) + missing_topology.append('names') + + try: + atom_indices = ag.ids + except (AttributeError, NoDataError): + atom_indices = range(1, ag.n_atoms+1) + missing_topology.append('ids') + + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "".format(miss=', '.join(missing_topology))) + + positions = ag.positions + try: + velocities = ag.velocities + has_velocities = True + except (AttributeError, NoDataError): + has_velocities = False + + with util.openany(self.filename, 'wt') as output_fhiaims: + # Lattice + try: # for AtomGroup/Universe + tri_dims = obj.universe.trajectory.ts.triclinic_dimensions + except AttributeError: # for Timestep + tri_dims = obj.triclinic_dimensions + # full output + if tri_dims is not None: + output_fhiaims.write( + self.fmt['box_triclinic'].format(box=tri_dims.flatten())) + + # Atom descriptions and coords + # Dont use enumerate here, + # all attributes could be infinite cycles! + for atom_index, name in zip( + range(ag.n_atoms), names): + output_fhiaims.write(self.fmt['xyz'].format( + pos=positions[atom_index], + name=name)) + if has_velocities: + output_fhiaims.write(self.fmt['vel'].format( + vel=velocities[atom_index]))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/GMS.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GMS.html new file mode 100644 index 0000000000..163b67680b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GMS.html @@ -0,0 +1,417 @@ + + + + + + MDAnalysis.coordinates.GMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.GMS

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- https://www.mdanalysis.org
+# Copyright (c) 2006-2017 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
+#
+#
+
+"""GAMESS trajectory reader --- :mod:`MDAnalysis.coordinates.GMS`
+=================================================================
+
+Resources: the GMS output format is a common output format for different
+GAMESS distributions: US-GAMESS, Firefly (PC-GAMESS) and GAMESS-UK.
+
+Current version was approbated with US-GAMESS & Firefly only.
+
+There appears to be no rigid format definition so it is likely users
+will need to tweak the :class:`GMSReader`.
+
+.. autoclass:: GMSReader
+   :members:
+
+"""
+import os
+import errno
+import re
+
+from . import base
+import MDAnalysis.lib.util as util
+from MDAnalysis.lib.util import store_init_arguments
+
+
+
[docs]class GMSReader(base.ReaderBase): + """Reads from an GAMESS output file + + :Data: + ts + Timestep object containing coordinates of current frame + + :Methods: + ``len(out)`` + return number of frames in out + ``for ts in out:`` + iterate through trajectory + + Note + ---- + :class:`GMSReader` can read both uncompressed (``foo.out``) and + compressed (``foo.out.bz2`` or ``foo.out.gz``) files; + decompression is handled on the fly + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based. + Added `dt` and `time_offset` keywords (passed to :class:`Timestep`). + + """ + + format = "GMS" + + # these are assumed! + units = {'time': 'ps', 'length': 'Angstrom'} + + @store_init_arguments + def __init__(self, outfilename, **kwargs): + super(GMSReader, self).__init__(outfilename, **kwargs) + + # the filename has been parsed to be either b(g)zipped or not + self.outfile = util.anyopen(self.filename) + + # note that, like for xtc and trr files, _n_atoms and _n_frames are used quasi-private variables + # to prevent the properties being recalculated + # this is because there is no indexing so the way it measures the number of frames is to read the whole file! + self._n_atoms = None + self._n_frames = None + self._runtyp = None + + self.ts = self._Timestep(0) # need for properties initial calculations + + # update runtyp property + self.runtyp + if not self.runtyp in ['optimize', 'surface']: + raise AttributeError('Wrong RUNTYP= '+self.runtyp) + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + # update n_frames property + self.n_frames + + # Read in the first timestep + self._read_next_timestep() + + @property + def runtyp(self): + """RUNTYP property of the GAMESS run""" + if self._runtyp is not None: # return cached value + return self._runtyp + try: + self._runtyp = self._determine_runtyp() + except IOError: + return 0 + else: + return self._runtyp + + def _determine_runtyp(self): + with util.openany(self.filename) as out: + for line in out: + m = re.match(r'^.*RUNTYP=([A-Z]+)\s+.*', line) + if m is not None: + res = m.group(1).lower() + break + + return res + + @property + def n_atoms(self): + """number of atoms in a frame""" + if self._n_atoms is not None: # return cached value + return self._n_atoms + try: + self._n_atoms = self._read_out_natoms() + except IOError: + return 0 + else: + return self._n_atoms + + def _read_out_natoms(self): + with util.openany(self.filename) as out: + for line in out: + m = re.match(r'\s*TOTAL NUMBER OF ATOMS\s*=\s*([0-9]+)\s*',line) + if m is not None: + res = int(m.group(1)) + break + + return res + + @property + def n_frames(self): + if self._n_frames is not None: # return cached value + return self._n_frames + try: + self._n_frames = self._read_out_n_frames() + except IOError: + return 0 + else: + return self._n_frames + + def _read_out_n_frames(self): + if self.runtyp == 'optimize': + trigger = re.compile(b'^.NSERCH=.*') + elif self.runtyp == 'surface': + trigger = re.compile(b'^.COORD 1=.*') + + self._offsets = offsets = [] + with util.openany(self.filename, 'rb') as out: + line = True + while not line == b'': # while not EOF + line = out.readline() + if re.match(trigger, line): + offsets.append(out.tell() - len(line)) + + return len(offsets) + + def _read_frame(self, frame): + self.outfile.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in _read_next + return self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + # check that the timestep object exists + if ts is None: + ts = self.ts + # check that the outfile object exists; if not reopen the trajectory + if self.outfile is None: + self.open_trajectory() + x = [] + y = [] + z = [] + + flag = 0 + counter = 0 + + for line in self.outfile: + if self.runtyp == 'optimize': + if (flag == 0) and (re.match(r'^.NSERCH=.*', line) is not None): + flag = 1 + continue + if (flag == 1) and (re.match(r'^ COORDINATES OF ALL ATOMS ARE ',\ + line) is not None): + flag = 2 + continue + if (flag == 2) and (re.match(r'^\s*-+\s*', line) is not None): + flag = 3 + continue + if flag == 3 and counter < self.n_atoms: + words = line.split() + x.append(float(words[2])) + y.append(float(words[3])) + z.append(float(words[4])) + counter += 1 + + elif self.runtyp == 'surface': + if (flag == 0) and (re.match(\ + r'^.COORD 1=\s*([-]?[0-9]+\.[0-9]+).*', line) is not None): + flag = 1 + continue + if (flag == 1) and (re.match(\ + r'^\s*HAS ENERGY VALUE\s*([-]?[0-9]+\.[0-9]+)\s*', line) is not None): + flag = 3 + continue + if flag == 3 and counter < self.n_atoms: + words = line.split() + x.append(float(words[1])) + y.append(float(words[2])) + z.append(float(words[3])) + counter += 1 + + # stop when the cursor has reached the end of that block + if counter == self._n_atoms: + ts._x[:] = x # more efficient to do it this way to avoid re-creating the numpy arrays + ts._y[:] = y + ts._z[:] = z + #print ts.frame + ts.frame += 1 + return ts + + raise EOFError + + def _reopen(self): + self.close() + self.open_trajectory() + + def open_trajectory(self): + if self.outfile is not None: + raise IOError(errno.EALREADY, 'GMS file already opened', self.filename) + if not os.path.exists(self.filename): + # must check; otherwise might segmentation fault + raise IOError(errno.ENOENT, 'GMS file not found', self.filename) + + self.outfile = util.anyopen(self.filename) + + # reset ts + ts = self.ts + ts.frame = -1 + return self.outfile + +
[docs] def close(self): + """Close out trajectory file if it was open.""" + if self.outfile is None: + return + self.outfile.close() + self.outfile = None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/GRO.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GRO.html new file mode 100644 index 0000000000..27134d53d5 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GRO.html @@ -0,0 +1,645 @@ + + + + + + MDAnalysis.coordinates.GRO — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.GRO

+# -*- 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-2017 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
+#
+
+"""
+GRO file format --- :mod:`MDAnalysis.coordinates.GRO`
+======================================================
+
+Classes to read and write Gromacs_ GRO_ coordinate files; see the notes on the
+`GRO format`_ which includes a conversion routine for the box.
+
+
+Writing GRO files
+-----------------
+
+By default any written GRO files will renumber the atom ids to move sequentially
+from 1.  This can be disabled, and instead the original atom ids kept, by
+using the `reindex=False` keyword argument.  This is useful when writing a
+subsection of a larger Universe while wanting to preserve the original
+identities of atoms.
+
+For example::
+
+   >>> u = mda.Universe()`
+
+   >>> u.atoms.write('out.gro', reindex=False)
+
+   # OR
+   >>> with mda.Writer('out.gro', reindex=False) as w:
+   ...     w.write(u.atoms)
+
+
+Classes
+-------
+
+.. autoclass:: GROReader
+   :members:
+
+.. autoclass:: GROWriter
+   :members:
+
+
+Developer notes: ``GROWriter`` format strings
+---------------------------------------------
+
+The :class:`GROWriter` class has a :attr:`GROWriter.fmt` attribute, which is a dictionary of different
+strings for writing lines in ``.gro`` files.  These are as follows:
+
+``n_atoms``
+  For the first line of the gro file, supply the number of atoms in the system.
+  E.g.::
+
+      fmt['n_atoms'].format(42)
+
+``xyz``
+  An atom line without velocities.  Requires that the 'resid', 'resname',
+  'name', 'index' and 'pos' keys be supplied.
+  E.g.::
+
+     fmt['xyz'].format(resid=1, resname='SOL', name='OW2', index=2, pos=(0.0, 1.0, 2.0))
+
+``xyz_v``
+  As above, but with velocities.  Needs an additional keyword 'vel'.
+
+``box_orthorhombic``
+  The final line of the gro file which gives box dimensions.  Requires
+  the box keyword to be given, which should be the three cartesian dimensions.
+  E.g.::
+
+     fmt['box_orthorhombic'].format(box=(10.0, 10.0, 10.0))
+
+``box_triclinic``
+  As above, but for a non orthorhombic box. Requires the box keyword, but this
+  time as a length 9 vector.  This is a flattened version of the (3,3) triclinic
+  vector representation of the unit cell.  The rearrangement into the odd
+  gromacs order is done automatically.
+
+
+.. _Gromacs: http://www.gromacs.org
+.. _GRO: http://manual.gromacs.org/current/online/gro.html
+.. _GRO format: http://chembytes.wikidot.com/g-grofile
+
+"""
+import re
+
+import itertools
+import warnings
+
+import numpy as np
+
+from . import base
+from .core import triclinic_box, triclinic_vectors
+from ..exceptions import NoDataError
+from ..lib import util
+from .timestep import Timestep
+
+"""unitcell dimensions (A, B, C, alpha, beta, gamma)
+
+GRO::
+
+  8.00170   8.00170   5.65806   0.00000   0.00000   0.00000   0.00000   4.00085   4.00085
+
+PDB::
+
+  CRYST1   80.017   80.017   80.017  60.00  60.00  90.00 P 1           1
+
+XTC: c.trajectory.ts._unitcell::
+
+  array([[ 80.00515747,   0.        ,   0.        ],
+         [  0.        ,  80.00515747,   0.        ],
+         [ 40.00257874,  40.00257874,  56.57218552]], dtype=float32)
+"""
+# unit cell line (from http://manual.gromacs.org/current/online/gro.html)
+# v1(x) v2(y) v3(z) v1(y) v1(z) v2(x) v2(z) v3(x) v3(y)
+# 0     1     2      3     4     5     6    7     8
+# This information now stored as _ts_order_x/y/z to keep DRY
+_TS_ORDER_X = [0, 3, 4]
+_TS_ORDER_Y = [5, 1, 6]
+_TS_ORDER_Z = [7, 8, 2]
+
+def _gmx_to_dimensions(box):
+    # convert gromacs ordered box to [lx, ly, lz, alpha, beta, gamma] form
+    x = box[_TS_ORDER_X]
+    y = box[_TS_ORDER_Y]
+    z = box[_TS_ORDER_Z]  # this ordering is correct! (checked it, OB)
+    return triclinic_box(x, y, z)
+
+
+
[docs]class GROReader(base.SingleFrameReaderBase): + """Reader for the Gromacs GRO structure format. + + .. note:: + This Reader will only read the first frame present in a file. + + + .. note:: + GRO files with zeroed 3 entry unit cells (i.e. ``0.0 0.0 0.0``) + are read as missing unit cell information. In these cases ``dimensions`` + will be set to ``None``. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + .. versionchanged:: 2.0.0 + Reader now only parses boxes defined with 3 or 9 fields. + Reader now reads a 3 entry zero unit cell (i.e. ``[0, 0, 0]``) as a + being without dimension information (i.e. will the timestep dimension + to ``None``). + """ + format = 'GRO' + units = {'time': None, 'length': 'nm', 'velocity': 'nm/ps'} + _Timestep = Timestep + + def _read_first_frame(self): + with util.openany(self.filename, 'rt') as grofile: + # Read first two lines to get number of atoms + grofile.readline() + self.n_atoms = n_atoms = int(grofile.readline()) + self.ts = ts = self._Timestep(n_atoms, **self._ts_kwargs) + # Always try, and maybe add them later + velocities = np.zeros((n_atoms, 3), dtype=np.float32) + missed_vel = False + + # and the third line to get the spacing between coords (cs) + # (dependent upon the GRO file precision) + first_atomline = grofile.readline() + cs = first_atomline[25:].find('.') + 1 + ts._pos[0] = [first_atomline[20 + cs * i:20 + cs * (i + 1)] + for i in range(3)] + try: + velocities[0] = [first_atomline[20 + cs * i:20 + cs * (i + 1)] + for i in range(3, 6)] + except ValueError: + # Remember that we got this error + missed_vel = True + + # TODO: Handle missing unitcell? + for pos, line in enumerate(grofile, start=1): + # 2 header lines, 1 box line at end + if pos == n_atoms: + try: + unitcell = np.float32(line.split()) + except ValueError: + # Try to parse floats with 5 digits if no spaces between values... + unitcell = np.float32(re.findall(r"(\d+\.\d{5})", line)) + break + + ts._pos[pos] = [line[20 + cs * i:20 + cs * (i + 1)] for i in range(3)] + try: + velocities[pos] = [line[20 + cs * i:20 + cs * (i + 1)] for i in range(3, 6)] + except ValueError: + # Remember that we got this error + missed_vel = True + + if np.any(velocities): + ts.velocities = velocities + if missed_vel: + warnings.warn("Not all velocities were present. " + "Unset velocities set to zero.") + + self.ts.frame = 0 # 0-based frame number + + if len(unitcell) == 3: + # special case: a b c --> (a 0 0) (b 0 0) (c 0 0) + # see docstring above for format (!) + # Treat empty 3 entry boxes as not having a unit cell + if np.allclose(unitcell, [0., 0., 0.]): + wmsg = ("Empty box [0., 0., 0.] found - treating as missing " + "unit cell. Dimensions set to `None`.") + warnings.warn(wmsg) + self.ts.dimensions = None + else: + self.ts.dimensions = np.r_[unitcell, [90., 90., 90.]] + elif len(unitcell) == 9: + self.ts.dimensions = _gmx_to_dimensions(unitcell) + else: # raise an error for wrong format + errmsg = "GRO unitcell has neither 3 nor 9 entries." + raise ValueError(errmsg) + + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) # in-place ! + if self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) # in-place! + if self.ts.has_velocities: + # converts nm/ps to A/ps units + self.convert_velocities_from_native(self.ts._velocities) + +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Returns a CRDWriter for *filename*. + + Parameters + ---------- + filename: str + filename of the output GRO file + + Returns + ------- + :class:`GROWriter` + + """ + if n_atoms is None: + n_atoms = self.n_atoms + return GROWriter(filename, n_atoms=n_atoms, **kwargs)
+ + +
[docs]class GROWriter(base.WriterBase): + """GRO Writer that conforms to the Trajectory API. + + Will attempt to write the following information from the topology: + - atom name (defaults to 'X') + - resnames (defaults to 'UNK') + - resids (defaults to '1') + + + .. note:: + The precision is hard coded to three decimal places. + + + .. note:: + When dimensions are missing (i.e. set to `None`), a zero width + unit cell box will be written (i.e. [0.0, 0.0, 0.0]). + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + .. versionchanged:: 0.13.0 + Now strictly writes positions with 3dp precision. + and velocities with 4dp. + Removed the `convert_dimensions_to_unitcell` method, + use `Timestep.triclinic_dimensions` instead. + Now now writes velocities where possible. + .. versionchanged:: 0.18.0 + Added `reindex` keyword argument to allow original atom + ids to be kept. + .. versionchanged:: 2.0.0 + Raises a warning when writing timestep with missing dimension + information (i.e. set to ``None``). + """ + + format = 'GRO' + units = {'time': None, 'length': 'nm', 'velocity': 'nm/ps'} + gro_coor_limits = {'min': -999.9995, 'max': 9999.9995} + + #: format strings for the GRO file (all include newline); precision + #: of 3 decimal places is hard-coded here. + fmt = { + 'n_atoms': "{0:5d}\n", # number of atoms + # coordinates output format, see http://chembytes.wikidot.com/g-grofile + 'xyz': "{resid:>5d}{resname:<5.5s}{name:>5.5s}{index:>5d}{pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}\n", + # unitcell + 'box_orthorhombic': "{box[0]:10.5f} {box[1]:9.5f} {box[2]:9.5f}\n", + 'box_triclinic': "{box[0]:10.5f} {box[4]:9.5f} {box[8]:9.5f} {box[1]:9.5f} {box[2]:9.5f} {box[3]:9.5f} {box[5]:9.5f} {box[6]:9.5f} {box[7]:9.5f}\n" + } + fmt['xyz_v'] = fmt['xyz'][:-1] + "{vel[0]:8.4f}{vel[1]:8.4f}{vel[2]:8.4f}\n" + + def __init__(self, filename, convert_units=True, n_atoms=None, **kwargs): + """Set up a GROWriter with a precision of 3 decimal places. + + Parameters + ----------- + filename : str + output filename + n_atoms : int (optional) + number of atoms + convert_units : bool (optional) + units are converted to the MDAnalysis base format; [``True``] + reindex : bool (optional) + By default, all the atoms were reindexed to have a atom id starting + from 1. [``True``] However, this behaviour can be turned off by + specifying `reindex` ``=False``. + + Note + ---- + To use the reindex keyword, user can follow the two examples given + below.:: + + u = mda.Universe() + + Usage 1:: + + u.atoms.write('out.gro', reindex=False) + + Usage 2:: + + with mda.Writer('out.gro', reindex=False) as w: + w.write(u.atoms) + + """ + self.filename = util.filename(filename, ext='gro', keep=True) + self.n_atoms = n_atoms + self.reindex = kwargs.pop('reindex', True) + + self.convert_units = convert_units # convert length and time to base units + +
[docs] def write(self, obj): + """Write selection at current trajectory frame to file. + + Parameters + ----------- + obj : AtomGroup or Universe + + Note + ---- + The GRO format only allows 5 digits for *resid* and *atom + number*. If these numbers become larger than 99,999 then this + routine will chop off the leading digits. + + + .. versionchanged:: 0.7.6 + *resName* and *atomName* are truncated to a maximum of 5 characters + .. versionchanged:: 0.16.0 + `frame` kwarg has been removed + .. versionchanged:: 2.0.0 + Deprecated support for calling with Timestep has nwo been removed. + Use AtomGroup or Universe as an input instead. + """ + # write() method that complies with the Trajectory API + + try: + + # make sure to use atoms (Issue 46) + ag = obj.atoms + # can write from selection == Universe (Issue 49) + + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + try: + velocities = ag.velocities + except NoDataError: + has_velocities = False + else: + has_velocities = True + + # Check for topology information + missing_topology = [] + try: + names = ag.names + except (AttributeError, NoDataError): + names = itertools.cycle(('X',)) + missing_topology.append('names') + try: + resnames = ag.resnames + except (AttributeError, NoDataError): + resnames = itertools.cycle(('UNK',)) + missing_topology.append('resnames') + try: + resids = ag.resids + except (AttributeError, NoDataError): + resids = itertools.cycle((1,)) + missing_topology.append('resids') + + if not self.reindex: + try: + atom_indices = ag.ids + except (AttributeError, NoDataError): + atom_indices = range(1, ag.n_atoms+1) + missing_topology.append('ids') + else: + atom_indices = range(1, ag.n_atoms + 1) + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "Alternatively these can be supplied as keyword arguments." + "".format(miss=', '.join(missing_topology))) + + positions = ag.positions + + if self.convert_units: + # Convert back to nm from Angstroms, + # Not inplace because AtomGroup is not a copy + positions = self.convert_pos_to_native(positions, inplace=False) + if has_velocities: + velocities = self.convert_velocities_to_native(velocities, inplace=False) + # check if any coordinates are illegal + # (checks the coordinates in native nm!) + if not self.has_valid_coordinates(self.gro_coor_limits, positions): + raise ValueError("GRO files must have coordinate values between " + "{0:.3f} and {1:.3f} nm: No file was written." + "".format(self.gro_coor_limits["min"], + self.gro_coor_limits["max"])) + + with util.openany(self.filename, 'wt') as output_gro: + # Header + output_gro.write('Written by MDAnalysis\n') + output_gro.write(self.fmt['n_atoms'].format(ag.n_atoms)) + + # Atom descriptions and coords + # Dont use enumerate here, + # all attributes could be infinite cycles! + for atom_index, resid, resname, name in zip( + range(ag.n_atoms), resids, resnames, names): + truncated_atom_index = util.ltruncate_int(atom_indices[atom_index], 5) + truncated_resid = util.ltruncate_int(resid, 5) + if has_velocities: + output_gro.write(self.fmt['xyz_v'].format( + resid=truncated_resid, + resname=resname, + index=truncated_atom_index, + name=name, + pos=positions[atom_index], + vel=velocities[atom_index], + )) + else: + output_gro.write(self.fmt['xyz'].format( + resid=truncated_resid, + resname=resname, + index=truncated_atom_index, + name=name, + pos=positions[atom_index] + )) + + # Footer: box dimensions + if (ag.dimensions is None or + np.allclose(ag.dimensions[3:], [90., 90., 90.])): + if ag.dimensions is None: + wmsg = ("missing dimension - setting unit cell to zeroed " + "box [0., 0., 0.]") + warnings.warn(wmsg) + box = np.zeros(3) + else: + box = self.convert_pos_to_native( + ag.dimensions[:3], inplace=False) + # orthorhombic cell, only lengths along axes needed in gro + output_gro.write(self.fmt['box_orthorhombic'].format( + box=box) + ) + else: + try: # for AtomGroup/Universe + tri_dims = obj.universe.coord.triclinic_dimensions + except AttributeError: # for Timestep + tri_dims = obj.triclinic_dimensions + # full output + box = self.convert_pos_to_native(tri_dims.flatten(), inplace=False) + output_gro.write(self.fmt['box_triclinic'].format(box=box))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/GSD.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GSD.html new file mode 100644 index 0000000000..ec38eef6e8 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/GSD.html @@ -0,0 +1,439 @@ + + + + + + MDAnalysis.coordinates.GSD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.GSD

+# -*- 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-2017 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
+#
+"""GSD trajectory reader  --- :mod:`MDAnalysis.coordinates.GSD`
+============================================================
+
+Class to read the GSD trajectory, output of `HOOMD-blue`_. The GSD format
+specifies both the topology and the trajectory of the particles in the
+simulation. The topology is read by the
+:class:`~MDAnalysis.topology.GSDParser.GSDParser` class.
+
+The GSD format was developed having in mind the possibility of changing number
+of particles, particle types, particle identities and changing topology.
+Currently this class has limited functionality, due to the fact that the number
+of particles and the topology are kept fixed in most MD simulations. The user
+will get an error only if at any time step the number of particles is detected
+to be different to the one that was set at the first time step. No check on
+changes in particle identity or topology is currently implemented.
+
+.. _`HOOMD-blue`: http://codeblue.umich.edu/hoomd-blue/index.html
+
+Classes
+-------
+
+.. autoclass:: GSDReader
+   :inherited-members:
+
+.. autoclass:: GSDPicklable
+   :members:
+
+.. autofunction:: gsd_pickle_open
+
+"""
+import numpy as np
+try:
+    import gsd
+    import gsd.fl
+except ImportError:
+    HAS_GSD = False
+    import types
+
+    class MockHOOMDTrajectory:
+        pass
+
+    gsd = types.ModuleType("gsd")
+    gsd.hoomd = types.ModuleType("hoomd")
+    gsd.hoomd.HOOMDTrajectory = MockHOOMDTrajectory
+else:
+    HAS_GSD = True
+
+from . import base
+from MDAnalysis.lib.util import store_init_arguments
+
+
+
[docs]class GSDReader(base.ReaderBase): + """Reader for the GSD format. + + """ + format = 'GSD' + units = {'time': None, 'length': None} + + @store_init_arguments + def __init__(self, filename, **kwargs): + """ + Parameters + ---------- + filename : str + trajectory filename + **kwargs : dict + General reader arguments. + + + .. versionadded:: 0.17.0 + .. versionchanged:: 2.0.0 + Now use a picklable :class:`gsd.hoomd.HOOMDTrajectory`-- + :class:`GSDPicklable` + .. versionchanged:: 2.6.0 + Support for GSD versions below 3.0.1 have been dropped. This + includes support for schema 1.3. + """ + if not HAS_GSD: + errmsg = "GSDReader: To read GSD files, please install gsd" + raise ImportError(errmsg) + + super(GSDReader, self).__init__(filename, **kwargs) + self.filename = filename + self.open_trajectory() + self.n_atoms = self._file[0].particles.N + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + self._read_next_timestep() + +
[docs] def open_trajectory(self): + """opens the trajectory file using gsd.hoomd module""" + self._frame = -1 + self._file = gsd_pickle_open(self.filename, mode='r')
+ +
[docs] def close(self): + """close reader""" + self._file.file.close()
+ + @property + def n_frames(self): + """number of frames in trajectory""" + return len(self._file) + + def _reopen(self): + """reopen trajectory""" + self.close() + self.open_trajectory() + + def _read_frame(self, frame): + try: + myframe = self._file[frame] + except IndexError: + raise IOError from None + + # set frame number + self._frame = frame + + # sets the Timestep object + self.ts.frame = frame + self.ts.data['step'] = myframe.configuration.step + + # set frame box dimensions + self.ts.dimensions = myframe.configuration.box + self.ts.dimensions[3:] = np.rad2deg(np.arccos(self.ts.dimensions[3:])) + + # set particle positions + frame_positions = myframe.particles.position + n_atoms_now = frame_positions.shape[0] + if n_atoms_now != self.n_atoms: + raise ValueError("Frame %d has %d atoms but the initial frame has %d" + " atoms. MDAnalysis in unable to deal with variable" + " topology!"%(frame, n_atoms_now, self.n_atoms)) + else: + self.ts.positions = frame_positions + return self.ts + + def _read_next_timestep(self): + """read next frame in trajectory""" + return self._read_frame(self._frame + 1)
+ + +
[docs]class GSDPicklable(gsd.hoomd.HOOMDTrajectory): + """Hoomd GSD file object (read-only) that can be pickled. + + This class provides a file-like object (as by :func:`gsd.hoomd.open`, + namely :class:`gsd.hoodm.HOOMDTrajectory`) that, unlike file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename and mode of :class:`gsd.fl.GSDFile` in + the file are saved. On unpickling, the file is opened by filename. + This means that for a successful unpickle, the original file still has to + be accessible with its filename. + + Note + ---- + Open hoomd GSD files with `gsd_pickle_open`. + After pickling, the current frame is reset. `universe.trajectory[i]` has + to be used to return to its original frame. + + Parameters + ---------- + file: :class:`gsd.fl.GSDFile` + File to access. + + Example + ------- + :: + + gsdfileobj = gsd.fl.open(name=filename, + mode='r', + application='gsd.hoomd '+ gsd.version.version, + schema='hoomd', + schema_version=[1, 3]) + file = GSDPicklable(gsdfileobj) + file_pickled = pickle.loads(pickle.dumps(file)) + + See Also + --------- + :func:`MDAnalysis.lib.picklable_file_io.FileIOPicklable` + :func:`MDAnalysis.lib.picklable_file_io.BufferIOPicklable` + :func:`MDAnalysis.lib.picklable_file_io.TextIOPicklable` + :func:`MDAnalysis.lib.picklable_file_io.GzipPicklable` + :func:`MDAnalysis.lib.picklable_file_io.BZ2Picklable` + + + .. versionadded:: 2.0.0 + """ + def __getstate__(self): + return self.file.name, self.file.mode + + def __setstate__(self, args): + gsd_version = gsd.version.version + schema_version = [1, 4] + gsdfileobj = gsd.fl.open(name=args[0], + mode=args[1], + application='gsd.hoomd ' + gsd_version, + schema='hoomd', + schema_version=schema_version) + self.__init__(gsdfileobj)
+ + +
[docs]def gsd_pickle_open(name: str, mode: str='r'): + """Open hoomd schema GSD file with pickle function implemented. + + This function returns a GSDPicklable object. It can be used as a + context manager, and replace the built-in :func:`gsd.hoomd.open` function + in read mode that only returns an unpicklable file object. + + Schema version will depend on the version of gsd module. + + Note + ---- + Can be only used with read mode. + + Parameters + ---------- + name : str + a filename given a text or byte string. + mode: str, optional + 'r': open for reading. + + Returns + ------- + stream-like object: GSDPicklable + + Raises + ------ + ValueError + if `mode` is not one of the allowed read modes + + Examples + ------- + open as context manager:: + + with gsd_pickle_open('filename') as f: + line = f.readline() + + open as function:: + + f = gsd_pickle_open('filename') + line = f.readline() + f.close() + + See Also + -------- + :func:`MDAnalysis.lib.util.anyopen` + :func:`MDAnalysis.lib.picklable_file_io.pickle_open` + :func:`MDAnalysis.lib.picklable_file_io.bz2_pickle_open` + :func:`MDAnalysis.lib.picklable_file_io.gzip_pickle_open` + :func:`gsd.hoomd.open` + + + .. versionadded:: 2.0.0 + .. versionchanged:: 2.6.0 + Only GSD versions 3.0.1+ are supported. 'rb' mode support + has been replaced with 'r' mode. + """ + gsd_version = gsd.version.version + schema_version = [1, 4] + if mode != 'r': + raise ValueError("Only read mode 'r' " + "files can be pickled.") + gsdfileobj = gsd.fl.open(name=name, + mode=mode, + application='gsd.hoomd ' + gsd_version, + schema='hoomd', + schema_version=schema_version) + return GSDPicklable(gsdfileobj)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/H5MD.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/H5MD.html new file mode 100644 index 0000000000..3ca113d3a2 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/H5MD.html @@ -0,0 +1,1691 @@ + + + + + + MDAnalysis.coordinates.H5MD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.H5MD

+# -*- 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-2017 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
+#
+"""
+H5MD trajectories --- :mod:`MDAnalysis.coordinates.H5MD`
+========================================================
+
+The `H5MD`_ trajectory file format is based upon the general, high performance
+`HDF5`_ file format.
+HDF5 files are self documenting and can be accessed with the `h5py`_ library.
+HDF5 can make use of parallel file system features through the MPI-IO
+interface of the HDF5 library to improve parallel reads and writes.
+
+The HDF5 library and `h5py`_ must be installed; otherwise, H5MD files
+cannot be read by MDAnalysis. If `h5py`_ is not installed, a
+:exc:`RuntimeError` is raised.
+
+Units
+-----
+
+H5MD files are very flexible and can store data in a wide range of physical
+units. The :class:`H5MDReader` will attempt to match the units in order to
+convert all data to the standard MDAnalysis units (see
+:mod:`MDAnalysis.units`).
+
+Units are read from the attributes of the position, velocity, force, and time
+datasets provided by the H5MD file. The unit string is translated from `H5MD
+notation`_ to `MDAnalysis notation`_. If MDAnalysis does not recognize the unit
+(likely because that unit string is not defined in :mod:`MDAnalysis.units`)
+provided, a :exc:`RuntimeError` is raised.  If no units are provided,
+MDAnalysis stores a value of ``None`` for each unit.  If the H5MD file does not
+contain units and ``convert_units=True``, MDAnalysis will raise a
+:exc:`ValueError`. To load a universe from an H5MD file with no units defined,
+set ``convert_units=False``.
+
+:class:`H5MDWriter` detects the native units of the parent trajectory and
+writes the trajectory with those units, unless one of `timeunit`,
+`lengthunit`, `velocityunit`, `forceunit` arugments are supplied. In
+this case, the writer will write the corresponding dataset with the selected
+unit only if it is recognized by `MDAnalysis units`_.
+
+
+Example: Loading an H5MD simulation
+-----------------------------------
+
+To load an H5MD simulation from an H5MD trajectory data file (using the
+:class:`~MDAnalysis.coordinates.H5MD.H5MDReader`), pass the topology
+and trajectory files to :class:`~MDAnalysis.core.universe.Universe`::
+
+    import MDAnalysis as mda
+    u = mda.Universe("topology.tpr", "trajectory.h5md")
+
+It is also possible to pass an open :class:`h5py.File` file stream
+into the reader::
+
+    import MDAnalysis as mda
+    with h5py.File("trajectory.h5md", 'r') as f:
+         u = mda.Universe("topology.tpr", f)
+
+
+.. Note:: Directly using a `h5py.File` does not work yet.
+   See issue `#2884 <https://github.com/MDAnalysis/mdanalysis/issues/2884>`_.
+
+
+Example: Writing an H5MD file
+-----------------------------
+
+To write to an H5MD file from a trajectory loaded with MDAnalysis, do:
+
+.. code-block:: python
+
+    import MDAnalysis as mda
+    u = mda.Universe("topology.tpr", "trajectory.h5md")
+    with mda.Writer("output.h5md", n_atoms=u.trajectory.n_atoms) as W:
+        for ts in u.trajectory:
+            W.write(u)
+
+To write an H5MD file with contiguous datasets, you must specify the
+number of frames to be written and set ``chunks=False``:
+
+.. code-block:: python
+
+    with mda.Writer("output_contigous.h5md", n_atoms=u.trajectory.n_atoms,
+                    n_frames=3, chunks=False) as W:
+        for ts in u.trajectory[:3]:
+            W.write(u)
+
+The writer also supports writing directly from an :class:`~MDAnalysis.core.groups.AtomGroup`::
+
+    ag = u.select_atoms("protein and name CA")
+    ag.write("alpha_carbons.h5md", frames='all')
+
+
+Example: Opening an H5MD file in parallel
+-----------------------------------------
+
+The parallel features of HDF5 can be accessed through h5py
+(see `parallel h5py docs`_ for more detail) by using the `mpi4py`_ Python
+package with a Parallel build of HDF5. To load a an H5MD simulation with
+parallel HDF5, pass `driver` and `comm` arguments to
+:class:`~MDAnalysis.core.universe.Universe`::
+
+    import MDAnalysis as mda
+    from mpi4py import MPI
+    u = mda.Universe("topology.tpr", "trajectory.h5md",
+                     driver="mpio", comm=MPI.COMM_WORLD)
+
+
+.. Note::
+   :mod:`h5py` must be built with parallel features enabled on top of a parallel
+   HDF5 build, and HDF5 and :mod:`mpi4py` must be built with a working MPI
+   implementation. See instructions below.
+
+Building parallel h5py and HDF5 on Linux
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Building a working parallel HDF5/h5py/mpi4py environment can be
+challenging and is often specific to your local computing resources,
+e.g., the supercomputer that you're running on typically already has
+its preferred MPI installation. As a starting point we provide
+instructions that worked in a specific, fairly generic environment.
+
+These instructions successfully built parallel HDF5/h5py
+with *OpenMPI 4.0.4*, *HDF5 1.10.6*, *h5py 2.9.0*, and *mpi4py 3.0.3*
+on *Ubuntu 16.0.6*. You may have to play around with different combinations of
+versions of h5py/HDF5 to get a working parallel build.
+
+    1. `Build MPI from sources`_
+    2. `Build HDF5 from sources`_ with parallel settings enabled:
+
+       .. code-block:: bash
+
+          ./configure --enable-parallel --enable-shared
+          make
+          make install
+
+    3. `Install mpi4py`_, making sure to point `mpicc` to where you've
+       installed your MPI implemenation:
+
+       .. code-block:: bash
+
+          env MPICC=/path/to/mpicc pip install mpi4py
+
+    4. `Build h5py from sources`_, making sure to enable mpi and to point
+       to your parallel build of HDF5:
+
+       .. code-block:: bash
+
+          export HDF5_PATH=path-to-parallel-hdf5
+          python setup.py clean --all
+          python setup.py configure -r --hdf5-version=X.Y.Z --mpi --hdf5=$HDF5_PATH
+          export gcc=gcc
+          CC=mpicc HDF5_DIR=$HDF5_PATH python setup.py build
+          python setup.py install
+
+If you have questions or want to share how you managed to build
+parallel hdf5/h5py/mpi4py please let everyone know on the
+`MDAnalysis forums`_.
+
+.. _`H5MD`: https://nongnu.org/h5md/index.html
+.. _`HDF5`: https://www.hdfgroup.org/solutions/hdf5/
+.. _`H5PY`: http://docs.h5py.org/
+.. _`parallel h5py docs`: https://docs.h5py.org/en/stable/mpi.html
+.. _`mpi4py`: https://mpi4py.readthedocs.io/en/stable/index.html
+.. _`Build MPI from sources`: https://mpi4py.readthedocs.io/en/stable/appendix.html#building-mpi-from-sources
+.. _`Build HDF5 from sources`: https://support.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/INSTALL_parallel
+.. _`Install mpi4py`: https://mpi4py.readthedocs.io/en/stable/install.html#requirements
+.. _`Build h5py from sources`: https://docs.h5py.org/en/stable/mpi.html#building-against-parallel-hdf5
+.. _`H5MD notation`: https://nongnu.org/h5md/modules/units.html
+.. _`MDAnalysis notation`: https://userguide.mdanalysis.org/units.html
+.. _`MDAnalysis units`: https://userguide.mdanalysis.org/units.html
+.. _`MDAnalysis forums`: https://www.mdanalysis.org/#participating
+
+
+Classes
+-------
+
+.. autoclass:: H5MDReader
+   :members:
+   :inherited-members:
+
+   .. automethod:: H5MDReader._reopen
+
+.. autoclass:: H5MDWriter
+   :members:
+   :inherited-members:
+
+.. autoclass:: H5PYPicklable
+   :members:
+
+"""
+
+import numpy as np
+import MDAnalysis as mda
+from . import base, core
+from ..exceptions import NoDataError
+from ..due import due, Doi
+from MDAnalysis.lib.util import store_init_arguments
+try:
+    import h5py
+except ImportError:
+    HAS_H5PY = False
+
+    # Allow building documentation even if h5py is not installed
+    import types
+
+    class MockH5pyFile:
+        pass
+    h5py = types.ModuleType("h5py")
+    h5py.File = MockH5pyFile
+
+else:
+    HAS_H5PY = True
+
+
+
[docs]class H5MDReader(base.ReaderBase): + r"""Reader for the H5MD format. + + See `h5md documentation <https://nongnu.org/h5md/h5md.html>`_ + for a detailed overview of the H5MD file format. + + The reader attempts to convert units in the trajectory file to + the standard MDAnalysis units (:mod:`MDAnalysis.units`) if + `convert_units` is set to ``True``. + + Additional data in the *observables* group of the H5MD file are + loaded into the :attr:`Timestep.data + <MDAnalysis.coordinates.timestep.Timestep.data>` dictionary. + + Only 3D-periodic boxes or no periodicity are supported; for no + periodicity, :attr:`Timestep.dimensions + <MDAnalysis.coordinates.timestep.Timestep.dimensions>` will return ``None``. + + Although H5MD can store varying numbers of particles per time step + as produced by, e.g., GCMC simulations, MDAnalysis can currently + only process a fixed number of particles per step. If the number + of particles changes a :exc:`ValueError` is raised. + + The :class:`H5MDReader` reads .h5md files with the following + HDF5 hierarchy: + + .. code-block:: text + + Notation: + (name) is an HDF5 group that the reader recognizes + {name} is an HDF5 group with arbitrary name + [variable] is an HDF5 dataset + <dtype> is dataset datatype + +-- is an attribute of a group or dataset + + H5MD root + \-- (h5md) + +-- version <int> + \-- author + +-- name <str>, author's name + +-- email <str>, optional email address + \-- creator + +-- name <str>, file that created .h5md file + +-- version + \-- (particles) + \-- {group1} + \-- (box) + +-- dimension : <int>, number of spatial dimensions + +-- boundary : <str>, boundary conditions of unit cell + \-- (edges) + \-- [step] <int>, gives frame + \-- [value] <float>, gives box dimensions + +-- unit <str> + \-- (position) + \-- [step] <int>, gives frame + \-- [time] <float>, gives time + +-- unit <str> + \-- [value] <float>, gives numpy arrary of positions + with shape (n_atoms, 3) + +-- unit <str> + \-- (velocity) + \-- [step] <int>, gives frame + \-- [time] <float>, gives time + +-- unit <str> + \-- [value] <float>, gives numpy arrary of velocities + with shape (n_atoms, 3) + +-- unit <str> + \-- (force) + \-- [step] <int>, gives frame + \-- [time] <float>, gives time + +-- unit <str> + \-- [value] <float>, gives numpy arrary of forces + with shape (n_atoms, 3) + +-- unit <str> + \-- (observables) + \-- (lambda) + \-- [step] <int>, gives frame + \-- [time] <float>, gives time + \-- [value] <float> + \-- (step) + \-- [step] <int>, gives frame + \-- [time] <float>, gives time + \-- [value] <int>, gives integration step + + + .. note:: + The reader does not currently read mass or charge data. + + .. note:: + If the `driver` and `comm` arguments were used to open the + hdf5 file (specifically, ``driver="mpio"``) then the :meth:`_reopen` + method does *not* close and open the file like most readers because + the information about the MPI communicator would be lost; instead + it rewinds the trajectory back to the first timestep. + + + .. versionadded:: 2.0.0 + .. versionchanged:: 2.1.0 + Adds :meth:`parse_n_atoms` method to obtain the number of atoms directly + from the trajectory by evaluating the shape of the ``position``, + ``velocity``, or ``force`` groups. + .. versionchanged:: 2.5.0 + Add correct handling of simple cuboid boxes + + """ + + format = 'H5MD' + # units is defined as instance-level variable and set from the + # H5MD file in __init__() below + + # This dictionary is used to translate H5MD units to MDAnalysis units. + # (https://nongnu.org/h5md/modules/units.html) + _unit_translation = { + 'time': { + 'ps': 'ps', + 'fs': 'fs', + 'ns': 'ns', + 'second': 's', + 'sec': 's', + 's': 's', + 'AKMA': 'AKMA', + }, + 'length': { + 'Angstrom': 'Angstrom', + 'angstrom': 'Angstrom', + 'A': 'Angstrom', + 'nm': 'nm', + 'pm': 'pm', + 'fm': 'fm', + }, + 'velocity': { + 'Angstrom ps-1': 'Angstrom/ps', + 'A ps-1': 'Angstrom/ps', + 'Angstrom fs-1': 'Angstrom/fs', + 'A fs-1': 'Angstrom/fs', + 'Angstrom AKMA-1': 'Angstrom/AKMA', + 'A AKMA-1': 'Angstrom/AKMA', + 'nm ps-1': 'nm/ps', + 'nm ns-1': 'nm/ns', + 'pm ps-1': 'pm/ps', + 'm s-1': 'm/s' + }, + 'force': { + 'kJ mol-1 Angstrom-1': 'kJ/(mol*Angstrom)', + 'kJ mol-1 nm-1': 'kJ/(mol*nm)', + 'Newton': 'Newton', + 'N': 'N', + 'J m-1': 'J/m', + 'kcal mol-1 Angstrom-1': 'kcal/(mol*Angstrom)', + 'kcal mol-1 A-1': 'kcal/(mol*Angstrom)' + } + } + + @due.dcite(Doi("10.25080/majora-1b6fd038-005"), + description="MDAnalysis trajectory reader/writer of the H5MD" + "format", path=__name__) + @due.dcite(Doi("10.1016/j.cpc.2014.01.018"), + description="Specifications of the H5MD standard", + path=__name__, version='1.1') + @store_init_arguments + def __init__(self, filename, + convert_units=True, + driver=None, + comm=None, + **kwargs): + """ + Parameters + ---------- + filename : str or :class:`h5py.File` + trajectory filename or open h5py file + convert_units : bool (optional) + convert units to MDAnalysis units + driver : str (optional) + H5PY file driver used to open H5MD file + comm : :class:`MPI.Comm` (optional) + MPI communicator used to open H5MD file + Must be passed with `'mpio'` file driver + **kwargs : dict + General reader arguments. + + Raises + ------ + RuntimeError + when `H5PY`_ is not installed + RuntimeError + when a unit is not recognized by MDAnalysis + ValueError + when ``n_atoms`` changes values between timesteps + ValueError + when ``convert_units=True`` but the H5MD file contains no units + ValueError + when dimension of unitcell is not 3 + ValueError + when an MPI communicator object is passed to the reader + but ``driver != 'mpio'`` + NoDataError + when the H5MD file has no 'position', 'velocity', or + 'force' group + + """ + if not HAS_H5PY: + raise RuntimeError("Please install h5py") + super(H5MDReader, self).__init__(filename, **kwargs) + self.filename = filename + self.convert_units = convert_units + + # if comm is provided, driver must be 'mpio' and file will be + # opened with parallel h5py/hdf5 enabled + self._driver = driver + self._comm = comm + if (self._comm is not None) and (self._driver != 'mpio'): + raise ValueError("If MPI communicator object is used to open" + " h5md file, ``driver='mpio'`` must be passed.") + + self.open_trajectory() + if self._particle_group['box'].attrs['dimension'] != 3: + raise ValueError("MDAnalysis only supports 3-dimensional" + " simulation boxes") + + # _has dictionary used for checking whether h5md file has + # 'position', 'velocity', or 'force' groups in the file + self._has = {name: name in self._particle_group for + name in ('position', 'velocity', 'force')} + + # Gets some info about what settings the datasets were created with + # from first available group + for name, value in self._has.items(): + if value: + dset = self._particle_group[f'{name}/value'] + self.n_atoms = dset.shape[1] + self.compression = dset.compression + self.compression_opts = dset.compression_opts + break + else: + raise NoDataError("Provide at least a position, velocity" + " or force group in the h5md file.") + + self.ts = self._Timestep(self.n_atoms, + positions=self.has_positions, + velocities=self.has_velocities, + forces=self.has_forces, + **self._ts_kwargs) + + self.units = {'time': None, + 'length': None, + 'velocity': None, + 'force': None} + self._set_translated_units() # fills units dictionary + self._read_next_timestep() + + def _set_translated_units(self): + """converts units from H5MD to MDAnalysis notation + and fills units dictionary""" + + # need this dictionary to associate 'position': 'length' + _group_unit_dict = {'time': 'time', + 'position': 'length', + 'velocity': 'velocity', + 'force': 'force' + } + + for group, unit in _group_unit_dict.items(): + self._translate_h5md_units(group, unit) + self._check_units(group, unit) + + def _translate_h5md_units(self, group, unit): + """stores the translated unit string into the units dictionary""" + + errmsg = "{} unit '{}' is not recognized by H5MDReader. Please raise" + " an issue in https://github.com/MDAnalysis/mdanalysis/issues" + + # doing time unit separately because time has to fish for + # first available parent group - either position, velocity, or force + if unit == 'time': + for name, value in self._has.items(): + if value: + if 'unit' in self._particle_group[name]['time'].attrs: + try: + self.units['time'] = self._unit_translation[ + 'time'][self._particle_group[name][ + 'time'].attrs['unit']] + break + except KeyError: + raise RuntimeError(errmsg.format( + unit, self._particle_group[ + name]['time'].attrs['unit']) + ) from None + + else: + if self._has[group]: + if 'unit' in self._particle_group[group]['value'].attrs: + try: + self.units[unit] = self._unit_translation[unit][ + self._particle_group[group]['value'].attrs['unit']] + except KeyError: + raise RuntimeError(errmsg.format( + unit, self._particle_group[group][ + 'value'].attrs['unit']) + ) from None + + # if position group is not provided, can still get 'length' unit + # from unitcell box + if (not self._has['position']) and ('edges' in self._particle_group['box']): + if 'unit' in self._particle_group['box/edges/value'].attrs: + try: + self.units['length'] = self._unit_translation[ + 'length'][self._particle_group[ + 'box/edges/value' + ].attrs['unit']] + except KeyError: + raise RuntimeError(errmsg.format(unit, + self._particle_group[ + 'box/edges/value'].attrs[ + 'unit'])) from None + + def _check_units(self, group, unit): + """Raises error if no units are provided from H5MD file + and convert_units=True""" + + if not self.convert_units: + return + + errmsg = "H5MD file must have readable units if ``convert_units`` is" + " set to ``True``. MDAnalysis sets ``convert_units=True`` by default." + " Set ``convert_units=False`` to load Universe without units." + + if unit == 'time': + if self.units['time'] is None: + raise ValueError(errmsg) + + else: + if self._has[group]: + if self.units[unit] is None: + raise ValueError(errmsg) + + @staticmethod + def _format_hint(thing): + """Can this Reader read *thing*""" + # nb, filename strings can still get passed through if + # format='H5MD' is used + return HAS_H5PY and isinstance(thing, h5py.File) + +
[docs] @staticmethod + def parse_n_atoms(filename): + with h5py.File(filename, 'r') as f: + for group in f['particles/trajectory']: + if group in ('position', 'velocity', 'force'): + n_atoms = f[f'particles/trajectory/{group}/value'].shape[1] + return n_atoms + + raise NoDataError("Could not construct minimal topology from the " + "H5MD trajectory file, as it did not contain a " + "'position', 'velocity', or 'force' group. " + "You must include a topology file.")
+ +
[docs] def open_trajectory(self): + """opens the trajectory file using h5py library""" + self._frame = -1 + if isinstance(self.filename, h5py.File): + self._file = self.filename + self._driver = self._file.driver + else: + if self._comm is not None: + # can only pass comm argument to h5py.File if driver='mpio' + assert self._driver == 'mpio' + self._file = H5PYPicklable(name=self.filename, # pragma: no cover + mode='r', + driver=self._driver, + comm=self._comm) + else: + self._file = H5PYPicklable(name=self.filename, + mode='r', + driver=self._driver) + + # pulls first key out of 'particles' + # allows for arbitrary name of group1 in 'particles' + self._particle_group = self._file['particles'][ + list(self._file['particles'])[0]]
+ + @property + def n_frames(self): + """number of frames in trajectory""" + for name, value in self._has.items(): + if value: + return self._particle_group[name]['value'].shape[0] + + def _read_frame(self, frame): + """reads data from h5md file and copies to current timestep""" + try: + for name, value in self._has.items(): + if value: + _ = self._particle_group[name]['step'][frame] + break + else: + raise NoDataError("Provide at least a position, velocity" + " or force group in the h5md file.") + except (ValueError, IndexError): + raise IOError from None + + self._frame = frame + ts = self.ts + particle_group = self._particle_group + ts.frame = frame + + # fills data dictionary from 'observables' group + # Note: dt is not read into data as it is not decided whether + # Timestep should have a dt attribute (see Issue #2825) + self._copy_to_data() + + # Sets frame box dimensions + # Note: H5MD files must contain 'box' group in each 'particles' group + if "edges" in particle_group["box"]: + edges = particle_group["box/edges/value"][frame, :] + # A D-dimensional vector or a D × D matrix, depending on the + # geometry of the box, of Float or Integer type. If edges is a + # vector, it specifies the space diagonal of a cuboid-shaped box. + # If edges is a matrix, the box is of triclinic shape with the edge + # vectors given by the rows of the matrix. + if edges.shape == (3,): + ts.dimensions = [*edges, 90, 90, 90] + else: + ts.dimensions = core.triclinic_box(*edges) + else: + ts.dimensions = None + + # set the timestep positions, velocities, and forces with + # current frame dataset + if self._has['position']: + self._read_dataset_into_ts('position', ts.positions) + if self._has['velocity']: + self._read_dataset_into_ts('velocity', ts.velocities) + if self._has['force']: + self._read_dataset_into_ts('force', ts.forces) + + if self.convert_units: + self._convert_units() + + return ts + + def _copy_to_data(self): + """assigns values to keys in data dictionary""" + + if 'observables' in self._file: + for key in self._file['observables'].keys(): + self.ts.data[key] = self._file['observables'][key][ + 'value'][self._frame] + + # pulls 'time' and 'step' out of first available parent group + for name, value in self._has.items(): + if value: + if 'time' in self._particle_group[name]: + self.ts.time = self._particle_group[name][ + 'time'][self._frame] + break + for name, value in self._has.items(): + if value: + if 'step' in self._particle_group[name]: + self.ts.data['step'] = self._particle_group[name][ + 'step'][self._frame] + break + + def _read_dataset_into_ts(self, dataset, attribute): + """reads position, velocity, or force dataset array at current frame + into corresponding ts attribute""" + + n_atoms_now = self._particle_group[f'{dataset}/value'][ + self._frame].shape[0] + if n_atoms_now != self.n_atoms: + raise ValueError(f"Frame {self._frame} of the {dataset} dataset" + f" has {n_atoms_now} atoms but the initial frame" + " of either the postion, velocity, or force" + f" dataset had {self.n_atoms} atoms." + " MDAnalysis is unable to deal" + " with variable topology!") + + self._particle_group[f'{dataset}/value'].read_direct( + attribute, source_sel=np.s_[self._frame, :]) + + def _convert_units(self): + """converts time, position, velocity, and force values if they + are not given in MDAnalysis standard units + + See https://userguide.mdanalysis.org/1.0.0/units.html + """ + + self.ts.time = self.convert_time_from_native(self.ts.time) + + if 'edges' in self._particle_group['box'] and self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) + + if self._has['position']: + self.convert_pos_from_native(self.ts.positions) + + if self._has['velocity']: + self.convert_velocities_from_native(self.ts.velocities) + + if self._has['force']: + self.convert_forces_from_native(self.ts.forces) + + def _read_next_timestep(self): + """read next frame in trajectory""" + return self._read_frame(self._frame + 1) + +
[docs] def close(self): + """close reader""" + self._file.close()
+ +
[docs] def _reopen(self): + """reopen trajectory + + Note + ---- + + If the `driver` and `comm` arguments were used to open the + hdf5 file (specifically, ``driver="mpio"``) then this method + does *not* close and open the file like most readers because + the information about the MPI communicator would be lost; instead + it rewinds the trajectory back to the first timstep. + + """ + if self._driver == "mpio": # pragma: no cover + self._read_frame(-1) + return + + self.close() + self.open_trajectory()
+ +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Return writer for trajectory format + + Note + ---- + The chunk shape of the input file will not be copied to the output + file, as :class:`H5MDWriter` uses a chunk shape of ``(1, n_atoms, 3)`` + by default. To use a custom chunk shape, you must specify the + `chunks` argument. If you would like to copy an existing chunk + format from a dataset (positions, velocities, or forces), do + the following:: + + chunks = u.trajectory._particle_group['position/value'].chunks + + Note that the writer will set the same layout for all particle groups. + + See Also + -------- + :class:`H5MDWriter` Output class for the H5MD format + + + .. versionadded:: 2.0.0 + + """ + if n_atoms is None: + n_atoms = self.n_atoms + kwargs.setdefault('driver', self._driver) + kwargs.setdefault('compression', self.compression) + kwargs.setdefault('compression_opts', self.compression_opts) + kwargs.setdefault('positions', self.has_positions) + kwargs.setdefault('velocities', self.has_velocities) + kwargs.setdefault('forces', self.has_forces) + return H5MDWriter(filename, n_atoms, **kwargs)
+ + @property + def has_positions(self): + """``True`` if 'position' group is in trajectory.""" + return self._has['position'] + + @has_positions.setter + def has_positions(self, value: bool): + self._has['position'] = value + + @property + def has_velocities(self): + """``True`` if 'velocity' group is in trajectory.""" + return self._has['velocity'] + + @has_velocities.setter + def has_velocities(self, value: bool): + self._has['velocity'] = value + + @property + def has_forces(self): + """``True`` if 'force' group is in trajectory.""" + return self._has['force'] + + @has_forces.setter + def has_forces(self, value: bool): + self._has['force'] = value + + def __getstate__(self): + state = self.__dict__.copy() + del state['_particle_group'] + return state + + def __setstate__(self, state): + self.__dict__ = state + self._particle_group = self._file['particles'][ + list(self._file['particles'])[0]] + self[self.ts.frame]
+ + +
[docs]class H5MDWriter(base.WriterBase): + """Writer for `H5MD`_ format (version 1.1). + + H5MD trajectories are automatically recognised by the + file extension ".h5md". + + All data from the input :class:`~MDAnalysis.coordinates.timestep.Timestep` is + written by default. For detailed information on how :class:`H5MDWriter` + handles units, compression, and chunking, see the Notes section below. + + Note + ---- + Parellel writing with the use of a MPI communicator and the ``'mpio'`` + HDF5 driver is currently not supported. + + Note + ---- + :exc:`NoDataError` is raised if no positions, velocities, or forces are + found in the input trajectory. While the H5MD standard allows for this + case, :class:`H5MDReader` cannot currently read files without at least + one of these three groups. + + Note + ---- + Writing H5MD files with fancy trajectory slicing where the Timestep + does not increase monotonically such as ``u.trajectory[[2,1,0]]`` + or ``u.trajectory[[0,1,2,0,1,2]]`` raises a :exc:`ValueError` as this + violates the rules of the step dataset in the H5MD standard. + + Parameters + ---------- + filename : str or :class:`h5py.File` + trajectory filename or open h5py file + n_atoms : int + number of atoms in trajectory + n_frames : int (optional) + number of frames to be written in trajectory + driver : str (optional) + H5PY file driver used to open H5MD file. See `H5PY drivers`_ for + list of available drivers. + convert_units : bool (optional) + Convert units from MDAnalysis to desired units + chunks : tuple (optional) + Custom chunk layout to be applied to the position, + velocity, and force datasets. By default, these datasets + are chunked in ``(1, n_atoms, 3)`` blocks + compression : str or int (optional) + HDF5 dataset compression setting to be applied + to position, velocity, and force datasets. Allowed + settings are 'gzip', 'szip', 'lzf'. If an integer + in range(10), this indicates gzip compression level. + Otherwise, an integer indicates the number of a + dynamically loaded compression filter. + compression_opts : int or tup (optional) + Compression settings. This is an integer for gzip, 2-tuple for + szip, etc. If specifying a dynamically loaded compression filter + number, this must be a tuple of values. For gzip, 1 indicates + the lowest level of compression and 9 indicates maximum compression. + positions : bool (optional) + Write positions into the trajectory [``True``] + velocities : bool (optional) + Write velocities into the trajectory [``True``] + forces : bool (optional) + Write forces into the trajectory [``True``] + timeunit : str (optional) + Option to convert values in the 'time' dataset to a custom unit, + must be recognizable by MDAnalysis + lengthunit : str (optional) + Option to convert values in the 'position/value' dataset to a + custom unit, must be recognizable by MDAnalysis + velocityunit : str (optional) + Option to convert values in the 'velocity/value' dataset to a + custom unit, must be recognizable by MDAnalysis + forceunit : str (optional) + Option to convert values in the 'force/value' dataset to a + custom unit, must be recognizable by MDAnalysis + author : str (optional) + Name of the author of the file + author_email : str (optional) + Email of the author of the file + creator : str (optional) + Software that wrote the file [``MDAnalysis``] + creator_version : str (optional) + Version of software that wrote the file + [:attr:`MDAnalysis.__version__`] + + Raises + ------ + RuntimeError + when `H5PY`_ is not installed + ValueError + when `n_atoms` is 0 + ValueError + when ``chunks=False`` but the user did not specify `n_frames` + ValueError + when `positions`, `velocities`, and `forces` are all + set to ``False`` + TypeError + when the input object is not a :class:`Universe` or + :class:`AtomGroup` + IOError + when `n_atoms` of the :class:`Universe` or :class:`AtomGroup` + being written does not match `n_atoms` passed as an argument + to the writer + ValueError + when any of the optional `timeunit`, `lengthunit`, + `velocityunit`, or `forceunit` keyword arguments are + not recognized by MDAnalysis + + Notes + ----- + + By default, the writer will write all available data (positions, + velocities, and forces) if detected in the input + :class:`~MDAnalysis.coordinates.timestep.Timestep`. In addition, the settings + for `compression` and `compression_opts` will be read from + the first available group of positions, velocities, or forces and used as + the default value. To write a file without any one of these datsets, + set `positions`, `velocities`, or `forces` to ``False``. + + .. rubric:: Units + + The H5MD format is very flexible with regards to units, as there is no + standard defined unit for the format. For this reason, :class:`H5MDWriter` + does not enforce any units. The units of the written trajectory can be set + explicitly with the keyword arguments `lengthunit`, `velocityunit`, + and `forceunit`. If units are not explicitly specified, they are set to + the native units of the trajectory that is the source of the coordinates. + For example, if one converts a DCD trajectory, then positions are written + in ångstrom and time in AKMA units. A GROMACS XTC will be written in nm and + ps. The units are stored in the metadata of the H5MD file so when + MDAnalysis loads the H5MD trajectory, the units will be automatically + set correctly. + + .. rubric:: Compression + + HDF5 natively supports various compression modes. To write the trajectory + with compressed datasets, set ``compression='gzip'``, ``compression='lzf'`` + , etc. See `H5PY compression options`_ for all supported modes of + compression. An additional argument, `compression_opts`, can be used to + fine tune the level of compression. For example, for GZIP compression, + `compression_opts` can be set to 1 for minimum compression and 9 for + maximum compression. + + .. rubric:: HDF5 Chunking + + HDF5 datasets can be *chunked*, meaning the dataset can be split into equal + sized pieces and stored in different, noncontiguous places on disk. + If HDF5 tries to read an element from a chunked dataset, the *entire* + dataset must be read, therefore an ill-thought-out chunking scheme can + drastically effect file I/O performance. In the case of all MDAnalysis + writers, in general, the number of frames being written is not known + apriori by the writer, therefore the HDF5 must be extendable. However, the + allocation of diskspace is defined when the dataset is created, therefore + extendable HDF5 datasets *must* be chunked so as to allow dynamic storage + on disk of any incoming data to the writer. In such cases where chunking + isn't explicity defined by the user, H5PY automatically selects a chunk + shape via an algorithm that attempts to make mostly square chunks between + 1 KiB - 1 MiB, however this can lead to suboptimal I/O performance. + :class:`H5MDWriter` uses a default chunk shape of ``(1, n_atoms, 3)``so + as to mimic the typical access pattern of a trajectory by MDAnalysis. In + our tests ([Jakupovic2021]_), this chunk shape led to a speedup on the + order of 10x versus H5PY's auto-chunked shape. Users can set a custom + chunk shape with the `chunks` argument. Additionaly, the datasets in a + file can be written with a contiguous layout by setting ``chunks=False``, + however this must be accompanied by setting `n_frames` equal to the + number of frames being written, as HDF5 must know how much space to + allocate on disk when creating the dataset. + + .. _`H5PY compression options`: https://docs.h5py.org/en/stable/high/dataset.html#filter-pipeline + .. _`H5PY drivers`: https://docs.h5py.org/en/stable/high/file.html#file-drivers + + + .. versionadded:: 2.0.0 + + """ + + format = 'H5MD' + multiframe = True + #: These variables are not written from :attr:`Timestep.data` + #: dictionary to the observables group in the H5MD file + data_blacklist = ['step', 'time', 'dt'] + + #: currently written version of the file format + H5MD_VERSION = (1, 1) + + # This dictionary is used to translate MDAnalysis units to H5MD units. + # (https://nongnu.org/h5md/modules/units.html) + _unit_translation_dict = { + 'time': { + 'ps': 'ps', + 'fs': 'fs', + 'ns': 'ns', + 'second': 's', + 'sec': 's', + 's': 's', + 'AKMA': 'AKMA'}, + 'length': { + 'Angstrom': 'Angstrom', + 'angstrom': 'Angstrom', + 'A': 'Angstrom', + 'nm': 'nm', + 'pm': 'pm', + 'fm': 'fm'}, + 'velocity': { + 'Angstrom/ps': 'Angstrom ps-1', + 'A/ps': 'Angstrom ps-1', + 'Angstrom/fs': 'Angstrom fs-1', + 'A/fs': 'Angstrom fs-1', + 'Angstrom/AKMA': 'Angstrom AKMA-1', + 'A/AKMA': 'Angstrom AKMA-1', + 'nm/ps': 'nm ps-1', + 'nm/ns': 'nm ns-1', + 'pm/ps': 'pm ps-1', + 'm/s': 'm s-1'}, + 'force': { + 'kJ/(mol*Angstrom)': 'kJ mol-1 Angstrom-1', + 'kJ/(mol*nm)': 'kJ mol-1 nm-1', + 'Newton': 'Newton', + 'N': 'N', + 'J/m': 'J m-1', + 'kcal/(mol*Angstrom)': 'kcal mol-1 Angstrom-1', + 'kcal/(mol*A)': 'kcal mol-1 Angstrom-1'}} + + @due.dcite(Doi("10.25080/majora-1b6fd038-005"), + description="MDAnalysis trajectory reader/writer of the H5MD" + "format", path=__name__) + @due.dcite(Doi("10.1016/j.cpc.2014.01.018"), + description="Specifications of the H5MD standard", + path=__name__, version='1.1') + def __init__(self, filename, n_atoms, n_frames=None, driver=None, + convert_units=True, chunks=None, compression=None, + compression_opts=None, positions=True, velocities=True, + forces=True, timeunit=None, lengthunit=None, + velocityunit=None, forceunit=None, author='N/A', + author_email=None, creator='MDAnalysis', + creator_version=mda.__version__, **kwargs): + + if not HAS_H5PY: + raise RuntimeError("H5MDWriter: Please install h5py") + self.filename = filename + if n_atoms == 0: + raise ValueError("H5MDWriter: no atoms in output trajectory") + self._driver = driver + if self._driver == 'mpio': + raise ValueError("H5MDWriter: parallel writing with MPI I/O " + "is not currently supported.") + self.n_atoms = n_atoms + self.n_frames = n_frames + self.chunks = (1, n_atoms, 3) if chunks is None else chunks + if self.chunks is False and self.n_frames is None: + raise ValueError("H5MDWriter must know how many frames will be " + "written if ``chunks=False``.") + self.contiguous = self.chunks is False and self.n_frames is not None + self.compression = compression + self.compression_opts = compression_opts + self.convert_units = convert_units + self.h5md_file = None + + # The writer defaults to writing all data from the parent Timestep if + # it exists. If these are True, the writer will check each + # Timestep.has_* value and fill the self._has dictionary accordingly + # in _initialize_hdf5_datasets() + self._write_positions = positions + self._write_velocities = velocities + self._write_forces = forces + if not any([self._write_positions, + self._write_velocities, + self._write_velocities]): + raise ValueError("At least one of positions, velocities, or " + "forces must be set to ``True``.") + + self._new_units = {'time': timeunit, + 'length': lengthunit, + 'velocity': velocityunit, + 'force': forceunit} + + # Pull out various keywords to store metadata in 'h5md' group + self.author = author + self.author_email = author_email + self.creator = creator + self.creator_version = creator_version + + def _write_next_frame(self, ag): + """Write information associated with ``ag`` at current frame + into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + """ + try: + # Atomgroup? + ts = ag.ts + except AttributeError: + try: + # Universe? + ts = ag.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if ts.n_atoms != self.n_atoms: + raise IOError("H5MDWriter: Timestep does not have" + " the correct number of atoms") + + # This should only be called once when first timestep is read. + if self.h5md_file is None: + self._determine_units(ag) + self._open_file() + self._initialize_hdf5_datasets(ts) + + return self._write_next_timestep(ts) + + def _determine_units(self, ag): + """determine which units the file will be written with + + By default, it fills the :attr:`self.units` dictionary by copying the + units dictionary of the parent file. Because H5MD files have no + standard unit restrictions, users may pass a kwarg in ``(timeunit, + lengthunit, velocityunit, forceunit)`` to the writer so long as + MDAnalysis has a conversion factor for it (:exc:`ValueError` raised if + it does not). These custom unit arguments must be in + `MDAnalysis notation`_. If custom units are supplied from the user, + :attr`self.units[unit]` is replaced with the corresponding + `unit` argument. + + """ + + self.units = ag.universe.trajectory.units.copy() + + # set user input units + for key, value in self._new_units.items(): + if value is not None: + if value not in self._unit_translation_dict[key]: + raise ValueError(f"{value} is not a unit recognized by" + " MDAnalysis. Allowed units are:" + f" {self._unit_translation_dict.keys()}" + " For more information on units, see" + " `MDAnalysis units`_.") + else: + self.units[key] = self._new_units[key] + + if self.convert_units: + # check if all units are None + if not any(self.units.values()): + raise ValueError("The trajectory has no units, but " + "`convert_units` is set to ``True`` by " + "default in MDAnalysis. To write the file " + "with no units, set ``convert_units=False``.") + + def _open_file(self): + """Opens file with `H5PY`_ library and fills in metadata from kwargs. + + :attr:`self.h5md_file` becomes file handle that links to root level. + + """ + + self.h5md_file = h5py.File(name=self.filename, + mode='w', + driver=self._driver) + + # fill in H5MD metadata from kwargs + self.h5md_file.require_group('h5md') + self.h5md_file['h5md'].attrs['version'] = np.array(self.H5MD_VERSION) + self.h5md_file['h5md'].require_group('author') + self.h5md_file['h5md/author'].attrs['name'] = self.author + if self.author_email is not None: + self.h5md_file['h5md/author'].attrs['email'] = self.author_email + self.h5md_file['h5md'].require_group('creator') + self.h5md_file['h5md/creator'].attrs['name'] = self.creator + self.h5md_file['h5md/creator'].attrs['version'] = self.creator_version + + def _initialize_hdf5_datasets(self, ts): + """initializes all datasets that will be written to by + :meth:`_write_next_timestep` + + Note + ---- + :exc:`NoDataError` is raised if no positions, velocities, or forces are + found in the input trajectory. While the H5MD standard allows for this + case, :class:`H5MDReader` cannot currently read files without at least + one of these three groups. A future change to both the reader and + writer will allow this case. + + + """ + + # for keeping track of where to write in the dataset + self._counter = 0 + + # ask the parent file if it has positions, velocities, and forces + # if prompted by the writer with the self._write_* attributes + self._has = {group: getattr(ts, f'has_{attr}') + if getattr(self, f'_write_{attr}') + else False for group, attr in zip( + ('position', 'velocity', 'force'), + ('positions', 'velocities', 'forces'))} + + # initialize trajectory group + self.h5md_file.require_group('particles').require_group('trajectory') + self._traj = self.h5md_file['particles/trajectory'] + self.data_keys = [ + key for key in ts.data.keys() if key not in self.data_blacklist] + if self.data_keys: + self._obsv = self.h5md_file.require_group('observables') + + # box group is required for every group in 'particles' + self._traj.require_group('box') + self._traj['box'].attrs['dimension'] = 3 + if ts.dimensions is not None and np.all(ts.dimensions > 0): + self._traj['box'].attrs['boundary'] = 3*['periodic'] + self._traj['box'].require_group('edges') + self._edges = self._traj.require_dataset('box/edges/value', + shape=(0, 3, 3), + maxshape=(None, 3, 3), + dtype=np.float32) + self._step = self._traj.require_dataset('box/edges/step', + shape=(0,), + maxshape=(None,), + dtype=np.int32) + self._time = self._traj.require_dataset('box/edges/time', + shape=(0,), + maxshape=(None,), + dtype=np.float32) + self._set_attr_unit(self._edges, 'length') + self._set_attr_unit(self._time, 'time') + else: + # if no box, boundary attr must be "none" according to H5MD + self._traj['box'].attrs['boundary'] = 3*['none'] + self._create_step_and_time_datasets() + + if self.has_positions: + self._create_trajectory_dataset('position') + self._pos = self._traj['position/value'] + self._set_attr_unit(self._pos, 'length') + if self.has_velocities: + self._create_trajectory_dataset('velocity') + self._vel = self._traj['velocity/value'] + self._set_attr_unit(self._vel, 'velocity') + if self.has_forces: + self._create_trajectory_dataset('force') + self._force = self._traj['force/value'] + self._set_attr_unit(self._force, 'force') + + # intialize observable datasets from ts.data dictionary that + # are NOT in self.data_blacklist + if self.data_keys: + for key in self.data_keys: + self._create_observables_dataset(key, ts.data[key]) + + def _create_step_and_time_datasets(self): + """helper function to initialize a dataset for step and time + + Hunts down first available location to create the step and time + datasets. This should only be called if the trajectory has no + dimension, otherwise the 'box/edges' group creates step and time + datasets since 'box' is the only required group in 'particles'. + + :attr:`self._step` and :attr`self._time` serve as links to the created + datasets that other datasets can also point to for their step and time. + This serves two purposes: + 1. Avoid redundant writing of multiple datasets that share the + same step and time data. + 2. In HDF5, each chunked dataset has a cache (default 1 MiB), + so only 1 read is required to access step and time data + for all datasets that share the same step and time. + + """ + + for group, value in self._has.items(): + if value: + self._step = self._traj.require_dataset(f'{group}/step', + shape=(0,), + maxshape=(None,), + dtype=np.int32) + self._time = self._traj.require_dataset(f'{group}/time', + shape=(0,), + maxshape=(None,), + dtype=np.float32) + self._set_attr_unit(self._time, 'time') + break + + def _create_trajectory_dataset(self, group): + """helper function to initialize a dataset for + position, velocity, and force""" + + if self.n_frames is None: + shape = (0, self.n_atoms, 3) + maxshape = (None, self.n_atoms, 3) + else: + shape = (self.n_frames, self.n_atoms, 3) + maxshape = None + + chunks = None if self.contiguous else self.chunks + + self._traj.require_group(group) + self._traj.require_dataset(f'{group}/value', + shape=shape, + maxshape=maxshape, + dtype=np.float32, + chunks=chunks, + compression=self.compression, + compression_opts=self.compression_opts) + if 'step' not in self._traj[group]: + self._traj[f'{group}/step'] = self._step + if 'time' not in self._traj[group]: + self._traj[f'{group}/time'] = self._time + + def _create_observables_dataset(self, group, data): + """helper function to initialize a dataset for each observable""" + + self._obsv.require_group(group) + # guarantee ints and floats have a shape () + data = np.asarray(data) + self._obsv.require_dataset(f'{group}/value', + shape=(0,) + data.shape, + maxshape=(None,) + data.shape, + dtype=data.dtype) + if 'step' not in self._obsv[group]: + self._obsv[f'{group}/step'] = self._step + if 'time' not in self._obsv[group]: + self._obsv[f'{group}/time'] = self._time + + def _set_attr_unit(self, dset, unit): + """helper function to set a 'unit' attribute for an HDF5 dataset""" + + if self.units[unit] is None: + return + + dset.attrs['unit'] = self._unit_translation_dict[unit][self.units[unit]] + + def _write_next_timestep(self, ts): + """Write coordinates and unitcell information to H5MD file. + + Do not call this method directly; instead use + :meth:`write` because some essential setup is done + there before writing the first frame. + + The first dimension of each dataset is extended by +1 and + then the data is written to the new slot. + + Note + ---- + Writing H5MD files with fancy trajectory slicing where the Timestep + does not increase monotonically such as ``u.trajectory[[2,1,0]]`` + or ``u.trajectory[[0,1,2,0,1,2]]`` raises a :exc:`ValueError` as this + violates the rules of the step dataset in the H5MD standard. + + """ + + i = self._counter + + # H5MD step refers to the integration step at which the data were + # sampled, therefore ts.data['step'] is the most appropriate value + # to use. However, step is also necessary in H5MD to allow + # temporal matching of the data, so ts.frame is used as an alternative + self._step.resize(self._step.shape[0]+1, axis=0) + try: + self._step[i] = ts.data['step'] + except(KeyError): + self._step[i] = ts.frame + if len(self._step) > 1 and self._step[i] < self._step[i-1]: + raise ValueError("The H5MD standard dictates that the step " + "dataset must increase monotonically in value.") + + # the dataset.resize() method should work with any chunk shape + self._time.resize(self._time.shape[0]+1, axis=0) + self._time[i] = ts.time + + if 'edges' in self._traj['box']: + self._edges.resize(self._edges.shape[0]+1, axis=0) + self._edges.write_direct(ts.triclinic_dimensions, + dest_sel=np.s_[i, :]) + # These datasets are not resized if n_frames was provided as an + # argument, as they were initialized with their full size. + if self.has_positions: + if self.n_frames is None: + self._pos.resize(self._pos.shape[0]+1, axis=0) + self._pos.write_direct(ts.positions, dest_sel=np.s_[i, :]) + if self.has_velocities: + if self.n_frames is None: + self._vel.resize(self._vel.shape[0]+1, axis=0) + self._vel.write_direct(ts.velocities, dest_sel=np.s_[i, :]) + if self.has_forces: + if self.n_frames is None: + self._force.resize(self._force.shape[0]+1, axis=0) + self._force.write_direct(ts.forces, dest_sel=np.s_[i, :]) + + if self.data_keys: + for key in self.data_keys: + obs = self._obsv[f'{key}/value'] + obs.resize(obs.shape[0]+1, axis=0) + obs[i] = ts.data[key] + + if self.convert_units: + self._convert_dataset_with_units(i) + + self._counter += 1 + + def _convert_dataset_with_units(self, i): + """convert values in the dataset arrays with self.units dictionary""" + + # Note: simply doing convert_pos_to_native(self._pos[-1]) does not + # actually change the values in the dataset, so assignment required + if self.units['time'] is not None: + self._time[i] = self.convert_time_to_native(self._time[i]) + if self.units['length'] is not None: + if self._has['position']: + self._pos[i] = self.convert_pos_to_native(self._pos[i]) + if 'edges' in self._traj['box']: + self._edges[i] = self.convert_pos_to_native(self._edges[i]) + if self._has['velocity']: + if self.units['velocity'] is not None: + self._vel[i] = self.convert_velocities_to_native(self._vel[i]) + if self._has['force']: + if self.units['force'] is not None: + self._force[i] = self.convert_forces_to_native(self._force[i]) + + @property + def has_positions(self): + """``True`` if writer is writing positions from Timestep.""" + return self._has['position'] + + @property + def has_velocities(self): + """``True`` if writer is writing velocities from Timestep.""" + return self._has['velocity'] + + @property + def has_forces(self): + """``True`` if writer is writing forces from Timestep.""" + return self._has['force']
+ + +
[docs]class H5PYPicklable(h5py.File): + """H5PY file object (read-only) that can be pickled. + + This class provides a file-like object (as returned by + :class:`h5py.File`) that, + unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename, mode, driver, and comm of + :class:`h5py.File` in the file are saved. On unpickling, the file + is opened by filename, mode, driver. This means that for a successful + unpickle, the original file still has to be accessible with its filename. + + Parameters + ---------- + filename : str or file-like + a filename given a text or byte string. + driver : str (optional) + H5PY file driver used to open H5MD file + + Example + ------- + :: + + f = H5PYPicklable('filename', 'r') + print(f['particles/trajectory/position/value'][0]) + f.close() + + can also be used as context manager:: + + with H5PYPicklable('filename', 'r'): + print(f['particles/trajectory/position/value'][0]) + + Note + ---- + Pickling of an `h5py.File` opened with `driver="mpio"` and an MPI + communicator is currently not supported + + See Also + --------- + :class:`MDAnalysis.lib.picklable_file_io.FileIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BufferIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.TextIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.GzipPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BZ2Picklable` + + + .. versionadded:: 2.0.0 + """ + + def __getstate__(self): + driver = self.driver + # Current issues: Need a way to retrieve MPI communicator object + # from self and pickle MPI.Comm object. Parallel driver is excluded + # from test because h5py calls for an MPI configuration when driver is + # 'mpio', so this will need to be patched in the test function. + if driver == 'mpio': # pragma: no cover + raise TypeError("Parallel pickling of `h5py.File` with" # pragma: no cover + " 'mpio' driver is currently not supported.") + + return {'name': self.filename, + 'mode': self.mode, + 'driver': driver} + + def __setstate__(self, state): + self.__init__(name=state['name'], + mode=state['mode'], + driver=state['driver']) + + def __getnewargs__(self): + """Override the h5py getnewargs to skip its error message""" + return ()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.html new file mode 100644 index 0000000000..d1b495e3c5 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.html @@ -0,0 +1,232 @@ + + + + + + MDAnalysis.coordinates.INPCRD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.INPCRD

+# -*- 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-2017 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
+#
+
+
+"""INPCRD structure files in MDAnalysis --- :mod:`MDAnalysis.coordinates.INPCRD`
+================================================================================
+
+Read coordinates in Amber_ coordinate/restart file (suffix "inpcrd").
+
+.. _Amber: http://ambermd.org/formats.html#restart
+
+
+Classes
+-------
+
+.. autoclass:: INPReader
+   :members:
+
+"""
+
+from . import base
+
+
[docs]class INPReader(base.SingleFrameReaderBase): + """Reader for Amber restart files.""" + + format = ['INPCRD', 'RESTRT'] + units = {'length': 'Angstrom'} + + def _read_first_frame(self): + # Read header + with open(self.filename, 'r') as inf: + self.title = inf.readline().strip() + line = inf.readline().split() + self.n_atoms = int(line[0]) + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + try: + time = float(line[1]) + except IndexError: + pass + else: + self.ts.time = time + self.ts.frame = 0 + + for p in range(self.n_atoms // 2): + line = inf.readline() + # each float is f12.7, 6 floats a line + for i, dest in enumerate([(2*p, 0), (2*p, 1), (2*p, 2), + (2*p + 1, 0), (2*p + 1, 1), (2*p + 1, 2)]): + self.ts._pos[dest] = float(line[i*12:(i+1)*12]) + # Read last coordinate if necessary + if self.n_atoms % 2: + line = inf.readline() + for i in range(3): + self.ts._pos[-1, i] = float(line[i*12:(i+1)*12]) + +
[docs] @staticmethod + def parse_n_atoms(filename, **kwargs): + with open(filename, 'r') as f: + f.readline() + n_atoms = int(f.readline().split()[0]) + return n_atoms
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.html new file mode 100644 index 0000000000..fb521ce43a --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.html @@ -0,0 +1,867 @@ + + + + + + MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.LAMMPS

+# -*- 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-2017 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
+#
+
+
+"""LAMMPS DCD trajectory and DATA I/O  --- :mod:`MDAnalysis.coordinates.LAMMPS`
+===============================================================================
+
+Classes to read and write LAMMPS_ DCD binary trajectories, LAMMPS DATA files
+and LAMMPS dump files.  Trajectories can be read regardless of system-endianness
+as this is auto-detected.
+
+LAMMPS can `write DCD`_ trajectories but unlike a `CHARMM trajectory`_
+(which is often called a DCD even though CHARMM itself calls them
+"trj") the time unit is not fixed to be the AKMA_ time unit (20 AKMA
+is 0.978 picoseconds or 1 AKMA = 4.888821e-14 s) but can depend on
+settings in LAMMPS. The most common case for biomolecular simulations
+appears to be that the time step is recorded in femtoseconds (command
+`units real`_ in the input file) and lengths in ångströms. Other cases
+are unit-less Lennard-Jones time units.
+
+This presents a problem for MDAnalysis because it cannot autodetect
+the unit from the file. By default we are assuming that the unit for
+length is the ångström and for the time is the femtosecond. If this is
+not true then the user *should supply the appropriate units* in the
+keywords *timeunit* and/or *lengthunit* to :class:`DCDWriter` and
+:class:`~MDAnalysis.core.universe.Universe` (which then calls
+:class:`DCDReader`).
+
+Data file formats
+-----------------
+
+By default either the `atomic` or `full` atom styles are expected,
+however this can be customised, see :ref:`atom_style_kwarg`.
+
+Dump files
+----------
+
+The DumpReader expects ascii dump files written with the default
+`LAMMPS dump format`_ of 'atom'
+
+
+Example: Loading a LAMMPS simulation
+------------------------------------
+
+To load a LAMMPS simulation from a LAMMPS data file (using the
+: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")
+
+If the trajectory uses *units nano* then use ::
+
+    >>> u = MDAnalysis.Universe("lammps.data", "lammps_nano.dcd", 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
+
+Note
+----
+Lennard-Jones units are not implemented. See :mod:`MDAnalysis.units`
+for other recognized values and the documentation for the LAMMPS
+`units command`_.
+
+See Also
+--------
+
+   For further discussion follow the reports for `Issue 84`_ and `Issue 64`_.
+
+.. _LAMMPS: http://lammps.sandia.gov/
+.. _write DCD: http://lammps.sandia.gov/doc/dump.html
+.. _CHARMM trajectory: http://www.charmm.org/documentation/c36b1/dynamc.html#%20Trajectory
+.. _AKMA: http://www.charmm.org/documentation/c36b1/usage.html#%20AKMA
+.. _units real: http://lammps.sandia.gov/doc/units.html
+.. _units command: http://lammps.sandia.gov/doc/units.html
+.. _`Issue 64`: https://github.com/MDAnalysis/mdanalysis/issues/64
+.. _`Issue 84`: https://github.com/MDAnalysis/mdanalysis/issues/84
+.. _`LAMMPS dump format`: http://lammps.sandia.gov/doc/dump.html
+
+Classes
+-------
+
+.. autoclass:: DCDReader
+   :members:
+   :inherited-members:
+.. autoclass:: DCDWriter
+   :members:
+   :inherited-members:
+.. autoclass:: DATAReader
+   :members:
+   :inherited-members:
+.. autoclass:: DATAWriter
+   :members:
+   :inherited-members:
+.. autoclass:: DumpReader
+   :members:
+   :inherited-members:
+
+"""
+import os
+import numpy as np
+
+from ..core.groups import requires
+from ..lib import util, mdamath, distances
+from ..lib.util import cached, store_init_arguments
+from . import DCD
+from .. import units
+from ..topology.LAMMPSParser import DATAParser
+from ..exceptions import NoDataError
+from . import base
+
+btype_sections = {'bond':'Bonds', 'angle':'Angles',
+                  'dihedral':'Dihedrals', 'improper':'Impropers'}
+
+
[docs]class DCDWriter(DCD.DCDWriter): + """Write a LAMMPS_ DCD trajectory. + + The units can be set from the constructor with the keyword + arguments *timeunit* and *lengthunit*. The defaults are "fs" and + "Angstrom". See :mod:`MDAnalysis.units` for other recognized + values. + """ + format = 'LAMMPS' + multiframe = True + flavor = 'LAMMPS' + + def __init__(self, *args, **kwargs): + self.units = {'time': 'fs', 'length': 'Angstrom'} # must be instance level + self.units['time'] = kwargs.pop('timeunit', self.units['time']) + self.units['length'] = kwargs.pop('lengthunit', self.units['length']) + for unit_type, unit in self.units.items(): + try: + if units.unit_types[unit] != unit_type: + raise TypeError("LAMMPS DCDWriter: wrong unit {0!r} for unit type {1!r}".format(unit, unit_type)) + except KeyError: + errmsg = f"LAMMPS DCDWriter: unknown unit {unit}" + raise ValueError(errmsg) from None + super(DCDWriter, self).__init__(*args, **kwargs)
+ + +
[docs]class DCDReader(DCD.DCDReader): + """Read a LAMMPS_ DCD trajectory. + + The units can be set from the constructor with the keyword + arguments *timeunit* and *lengthunit*. The defaults are "fs" and + "Angstrom", corresponding to LAMMPS `units style`_ "**real**". See + :mod:`MDAnalysis.units` for other recognized values. + + .. _units style: http://lammps.sandia.gov/doc/units.html + """ + format = 'LAMMPS' + flavor = 'LAMMPS' + + @store_init_arguments + def __init__(self, dcdfilename, **kwargs): + self.units = {'time': 'fs', 'length': 'Angstrom'} # must be instance level + self.units['time'] = kwargs.pop('timeunit', self.units['time']) + self.units['length'] = kwargs.pop('lengthunit', self.units['length']) + for unit_type, unit in self.units.items(): + try: + if units.unit_types[unit] != unit_type: + raise TypeError("LAMMPS DCDReader: wrong unit {0!r} for unit type {1!r}".format(unit, unit_type)) + except KeyError: + raise ValueError("LAMMPS DCDReader: unknown unit {0!r}".format(unit)) + super(DCDReader, self).__init__(dcdfilename, **kwargs)
+ + +
[docs]class DATAReader(base.SingleFrameReaderBase): + """Reads a single frame of coordinate information from a LAMMPS DATA file. + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + """ + format = 'DATA' + units = {'time': None, 'length': 'Angstrom', 'velocity': 'Angstrom/fs'} + + @store_init_arguments + def __init__(self, filename, **kwargs): + self.n_atoms = kwargs.pop('n_atoms', None) + if self.n_atoms is None: # this should be done by parsing DATA first + raise ValueError("DATAReader requires n_atoms keyword") + self.atom_style = kwargs.pop('atom_style', None) + super(DATAReader, self).__init__(filename, **kwargs) + + def _read_first_frame(self): + with DATAParser(self.filename) as p: + self.ts = p.read_DATA_timestep(self.n_atoms, self._Timestep, + self._ts_kwargs, self.atom_style) + + self.ts.frame = 0 + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) # in-place ! + try: + self.convert_velocities_from_native(self.ts._velocities) # in-place ! + except AttributeError: + pass
+ +
[docs]class DATAWriter(base.WriterBase): + """Write out the current time step as a LAMMPS DATA file. + + This writer supports the sections Atoms, Masses, Velocities, Bonds, + Angles, Dihedrals, and Impropers. This writer will write the header + and these sections (if applicable). Atoms section is written in the + "full" sub-style if charges are available or "molecular" sub-style + if they are not. Molecule id is set to 0 for all atoms. + + Note + ---- + This writer assumes "conventional" or "real" LAMMPS units where length + is measured in Angstroms and velocity is measured in Angstroms per + femtosecond. To write in different units, specify `lengthunit` + + If atom types are not already positive integers, the user must set them + to be positive integers, because the writer will not automatically + assign new types. + + To preserve numerical atom types when writing a selection, the Masses + section will have entries for each atom type up to the maximum atom type. + If the universe does not contain atoms of some type in + {1, ... max(atom_types)}, then the mass for that type will be set to 1. + + In order to write bonds, each selected bond type must be explicitly set to + an integer >= 1. + + """ + format = 'DATA' + + def __init__(self, filename, convert_units=True, **kwargs): + """Set up a DATAWriter + + Parameters + ---------- + filename : str + output filename + convert_units : bool, optional + units are converted to the MDAnalysis base format; [``True``] + """ + self.filename = util.filename(filename, ext='data', keep=True) + + self.convert_units = convert_units + + self.units = {'time': 'fs', 'length': 'Angstrom'} + self.units['length'] = kwargs.pop('lengthunit', self.units['length']) + self.units['time'] = kwargs.pop('timeunit', self.units['time']) + self.units['velocity'] = kwargs.pop('velocityunit', + self.units['length']+'/'+self.units['time']) + + def _write_atoms(self, atoms, data): + self.f.write('\n') + self.f.write('Atoms\n') + self.f.write('\n') + + try: + charges = atoms.charges + except (NoDataError, AttributeError): + has_charges = False + else: + has_charges = True + + indices = atoms.indices + 1 + types = atoms.types.astype(np.int32) + + moltags = data.get("molecule_tag", np.zeros(len(atoms), dtype=int)) + + if self.convert_units: + coordinates = self.convert_pos_to_native(atoms.positions, inplace=False) + + if has_charges: + for index, moltag, atype, charge, coords in zip(indices, moltags, + types, charges, coordinates): + x, y, z = coords + self.f.write(f"{index:d} {moltag:d} {atype:d} {charge:f}" + f" {x:f} {y:f} {z:f}\n") + else: + for index, moltag, atype, coords in zip(indices, moltags, types, + coordinates): + x, y, z = coords + self.f.write(f"{index:d} {moltag:d} {atype:d}" + f" {x:f} {y:f} {z:f}\n") + + def _write_velocities(self, atoms): + self.f.write('\n') + self.f.write('Velocities\n') + self.f.write('\n') + indices = atoms.indices + 1 + velocities = self.convert_velocities_to_native(atoms.velocities, + inplace=False) + for index, vel in zip(indices, velocities): + self.f.write('{i:d} {x:f} {y:f} {z:f}\n'.format(i=index, x=vel[0], + y=vel[1], z=vel[2])) + + def _write_masses(self, atoms): + self.f.write('\n') + self.f.write('Masses\n') + self.f.write('\n') + mass_dict = {} + max_type = max(atoms.types.astype(np.int32)) + for atype in range(1, max_type+1): + # search entire universe for mass info, not just writing selection + masses = set(atoms.universe.atoms.select_atoms( + 'type {:d}'.format(atype)).masses) + if len(masses) == 0: + mass_dict[atype] = 1.0 + else: + mass_dict[atype] = masses.pop() + if masses: + raise ValueError('LAMMPS DATAWriter: to write data file, '+ + 'atoms with same type must have same mass') + for atype, mass in mass_dict.items(): + self.f.write('{:d} {:f}\n'.format(atype, mass)) + + def _write_bonds(self, bonds): + self.f.write('\n') + self.f.write('{}\n'.format(btype_sections[bonds.btype])) + self.f.write('\n') + for bond, i in zip(bonds, range(1, len(bonds)+1)): + try: + self.f.write('{:d} {:d} '.format(i, int(bond.type))+\ + ' '.join((bond.atoms.indices + 1).astype(str))+'\n') + except TypeError: + errmsg = (f"LAMMPS DATAWriter: Trying to write bond, but bond " + f"type {bond.type} is not numerical.") + raise TypeError(errmsg) from None + + def _write_dimensions(self, dimensions): + """Convert dimensions to triclinic vectors, convert lengths to native + units and then write the dimensions section + """ + if self.convert_units: + triv = self.convert_pos_to_native(mdamath.triclinic_vectors( + dimensions),inplace=False) + self.f.write('\n') + self.f.write('{:f} {:f} xlo xhi\n'.format(0., triv[0][0])) + self.f.write('{:f} {:f} ylo yhi\n'.format(0., triv[1][1])) + self.f.write('{:f} {:f} zlo zhi\n'.format(0., triv[2][2])) + if any([triv[1][0], triv[2][0], triv[2][1]]): + self.f.write('{xy:f} {xz:f} {yz:f} xy xz yz\n'.format( + xy=triv[1][0], xz=triv[2][0], yz=triv[2][1])) + self.f.write('\n') + +
[docs] @requires('types', 'masses') + def write(self, selection, frame=None): + """Write selection at current trajectory frame to file. + + The sections for Atoms, Masses, Velocities, Bonds, Angles, + Dihedrals, and Impropers (if these are defined) are + written. The Atoms section is written in the "full" sub-style + if charges are available or "molecular" sub-style if they are + not. Molecule id in atoms section is set to to 0. + + No other sections are written to the DATA file. + As of this writing, other sections are not parsed into the topology + by the :class:`DATAReader`. + + Note + ---- + If the selection includes a partial fragment, then only the bonds, + angles, etc. whose atoms are contained within the selection will be + included. + + Parameters + ---------- + selection : AtomGroup or Universe + MDAnalysis AtomGroup (selection or Universe.atoms) or also Universe + frame : int (optional) + optionally move to frame number `frame` + + """ + u = selection.universe + if frame is not None: + u.trajectory[frame] + else: + frame = u.trajectory.ts.frame + + # make sure to use atoms (Issue 46) + atoms = selection.atoms + + # check that types can be converted to ints if they aren't ints already + try: + atoms.types.astype(np.int32) + except ValueError: + errmsg = ("LAMMPS.DATAWriter: atom types must be convertible to " + "integers") + raise ValueError(errmsg) from None + + try: + velocities = atoms.velocities + except (NoDataError, AttributeError): + has_velocities = False + else: + has_velocities = True + + features = {} + with util.openany(self.filename, 'wt') as self.f: + self.f.write('LAMMPS data file via MDAnalysis\n') + self.f.write('\n') + self.f.write('{:>12d} atoms\n'.format(len(atoms))) + + attrs = [('bond', 'bonds'), ('angle', 'angles'), + ('dihedral', 'dihedrals'), ('improper', 'impropers')] + + for btype, attr_name in attrs: + features[btype] = atoms.__getattribute__(attr_name) + self.f.write('{:>12d} {}\n'.format(len(features[btype]), + attr_name)) + features[btype] = features[btype].atomgroup_intersection( + atoms, strict=True) + + self.f.write('\n') + self.f.write('{:>12d} atom types\n'.format(max(atoms.types.astype(np.int32)))) + + for btype, attr in features.items(): + self.f.write('{:>12d} {} types\n'.format(len(attr.types()), + btype)) + + self._write_dimensions(atoms.dimensions) + + self._write_masses(atoms) + self._write_atoms(atoms, u.trajectory.ts.data) + for attr in features.values(): + if attr is None or len(attr) == 0: + continue + self._write_bonds(attr) + + if has_velocities: + self._write_velocities(atoms)
+ + +
[docs]class DumpReader(base.ReaderBase): + """Reads the default `LAMMPS dump format + <https://docs.lammps.org/dump.html>`__ + + Supports coordinates in various LAMMPS coordinate conventions and both + orthogonal and triclinic simulation box dimensions (for more details see + `documentation <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. + + Parameters + ---------- + filename : str + Filename of LAMMPS dump file + lammps_coordinate_convention : str (optional) default="auto" + Convention used in coordinates, can be one of the following according + to the `LAMMPS documentation <https://docs.lammps.org/dump.html>`__: + + - "auto" - Detect coordinate type from file column header. If auto + detection is used, the 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. + - "scaled" - Coordinates wrapped in box and scaled by box length (see + note below), i.e., xs, ys, zs + - "scaled_unwrapped" - Coordinates unwrapped and scaled by box length, + (see note below) i.e., xsu, ysu, zsu + - "unscaled" - Coordinates wrapped in box, i.e., x, y, z + - "unwrapped" - Coordinates unwrapped, i.e., xu, yu, zu + + 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. + unwrap_images : bool (optional) default=False + If `True` and the dump file contains image flags, the coordinates + will be unwrapped. See `read_data + <https://docs.lammps.org/read_data.html>`__ in the lammps + documentation for more information. + **kwargs + Other keyword arguments used in :class:`~MDAnalysis.coordinates.base.ReaderBase` + + .. versionchanged:: 2.4.0 + Now imports velocities and forces, translates the box to the origin, + and optionally unwraps trajectories with image flags upon loading. + .. versionchanged:: 2.2.0 + Triclinic simulation boxes are supported. + (Issue `#3383 <https://github.com/MDAnalysis/mdanalysis/issues/3383>`__) + .. versionchanged:: 2.0.0 + Now parses coordinates in multiple lammps conventions (x,xs,xu,xsu) + .. versionadded:: 0.19.0 + """ + format = 'LAMMPSDUMP' + _conventions = ["auto", "unscaled", "scaled", "unwrapped", + "scaled_unwrapped"] + _coordtype_column_names = { + "unscaled": ["x", "y", "z"], + "scaled": ["xs", "ys", "zs"], + "unwrapped": ["xu", "yu", "zu"], + "scaled_unwrapped": ["xsu", "ysu", "zsu"] + } + + @store_init_arguments + def __init__(self, filename, + lammps_coordinate_convention="auto", + unwrap_images=False, + **kwargs): + super(DumpReader, self).__init__(filename, **kwargs) + + root, ext = os.path.splitext(self.filename) + if lammps_coordinate_convention in self._conventions: + self.lammps_coordinate_convention = lammps_coordinate_convention + else: + option_string = "'" + "', '".join(self._conventions) + "'" + raise ValueError("lammps_coordinate_convention=" + f"'{lammps_coordinate_convention}'" + " is not a valid option. " + f"Please choose one of {option_string}") + + self._unwrap = unwrap_images + + self._cache = {} + + self._reopen() + + self._read_next_timestep() + + def _reopen(self): + self.close() + self._file = util.anyopen(self.filename) + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + self.ts.frame = -1 + + @property + @cached('n_atoms') + def n_atoms(self): + with util.anyopen(self.filename) as f: + f.readline() + f.readline() + f.readline() + n_atoms = int(f.readline()) + return n_atoms + + @property + @cached('n_frames') + def n_frames(self): + # 2(timestep) + 2(natoms info) + 4(box info) + 1(atom header) + n_atoms + lines_per_frame = self.n_atoms + 9 + offsets = [] + counter = 0 + with util.anyopen(self.filename) as f: + line = True + while line: + if not counter % lines_per_frame: + offsets.append(f.tell()) + line = f.readline() + counter += 1 + self._offsets = offsets[:-1] # last is EOF + return len(self._offsets) + +
[docs] def close(self): + if hasattr(self, '_file'): + self._file.close()
+ + def _read_frame(self, frame): + self._file.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in next + + return self._read_next_timestep() + + def _read_next_timestep(self): + f = self._file + ts = self.ts + ts.frame += 1 + if ts.frame >= len(self): + raise EOFError + + f.readline() # ITEM TIMESTEP + step_num = int(f.readline()) + ts.data['step'] = step_num + ts.data['time'] = step_num * ts.dt + + f.readline() # ITEM NUMBER OF ATOMS + n_atoms = int(f.readline()) + if n_atoms != self.n_atoms: + raise ValueError("Number of atoms in trajectory changed " + "this is not supported in MDAnalysis") + + triclinic = len(f.readline().split()) == 9 # ITEM BOX BOUNDS + if triclinic: + xlo_bound, xhi_bound, xy = map(float, f.readline().split()) + ylo_bound, yhi_bound, xz = map(float, f.readline().split()) + zlo, zhi, yz = map(float, f.readline().split()) + + # converts orthogonal bounding box to the conventional format, + # see https://docs.lammps.org/Howto_triclinic.html + xlo = xlo_bound - min(0.0, xy, xz, xy + xz) + xhi = xhi_bound - max(0.0, xy, xz, xy + xz) + ylo = ylo_bound - min(0.0, yz) + yhi = yhi_bound - max(0.0, yz) + + box = np.zeros((3, 3), dtype=np.float64) + box[0] = xhi - xlo, 0.0, 0.0 + box[1] = xy, yhi - ylo, 0.0 + box[2] = xz, yz, zhi - zlo + + xlen, ylen, zlen, alpha, beta, gamma = mdamath.triclinic_box(*box) + else: + xlo, xhi = map(float, f.readline().split()) + ylo, yhi = map(float, f.readline().split()) + zlo, zhi = map(float, f.readline().split()) + xlen = xhi - xlo + ylen = yhi - ylo + zlen = zhi - zlo + alpha = beta = gamma = 90. + ts.dimensions = xlen, ylen, zlen, alpha, beta, gamma + + indices = np.zeros(self.n_atoms, dtype=int) + + atomline = f.readline() # ITEM ATOMS etc + attrs = atomline.split()[2:] # attributes on coordinate line + attr_to_col_ix = {x: i for i, x in enumerate(attrs)} + convention_to_col_ix = {} + for cv_name, cv_col_names in self._coordtype_column_names.items(): + try: + convention_to_col_ix[cv_name] = [attr_to_col_ix[x] + for x in cv_col_names] + except KeyError: + pass + + if self._unwrap: + try: + image_cols = [attr_to_col_ix[x] for x in ["ix", "iy", "iz"]] + except: + raise ValueError("Trajectory must have image flag in order " + "to unwrap.") + + self._has_vels = all(x in attr_to_col_ix for x in ["vx", "vy", "vz"]) + if self._has_vels: + ts.has_velocities = True + vel_cols = [attr_to_col_ix[x] for x in ["vx", "vy", "vz"]] + self._has_forces = all(x in attr_to_col_ix for x in ["fx", "fy", "fz"]) + if self._has_forces: + ts.has_forces = True + force_cols = [attr_to_col_ix[x] for x in ["fx", "fy", "fz"]] + + # this should only trigger on first read of "ATOM" card, after which it + # is fixed to the guessed value. Auto proceeds unscaled -> scaled + # -> unwrapped -> scaled_unwrapped + if self.lammps_coordinate_convention == "auto": + try: + # this will automatically select in order of priority + # unscaled, scaled, unwrapped, scaled_unwrapped + self.lammps_coordinate_convention = list(convention_to_col_ix)[0] + except IndexError: + raise ValueError("No coordinate information detected") + elif not self.lammps_coordinate_convention in convention_to_col_ix: + raise ValueError(f"No coordinates following convention " + "{self.lammps_coordinate_convention} found in " + "timestep") + + coord_cols = convention_to_col_ix[self.lammps_coordinate_convention] + if self._unwrap: + coord_cols.extend(image_cols) + + ids = "id" in attr_to_col_ix + for i in range(self.n_atoms): + fields = f.readline().split() + if ids: + indices[i] = fields[attr_to_col_ix["id"]] + coords = np.array([fields[dim] for dim in coord_cols], + dtype=np.float32) + + if self._unwrap: + images = coords[3:] + coords = coords[:3] + coords += images * ts.dimensions[:3] + else: + coords = coords[:3] + ts.positions[i] = coords + + if self._has_vels: + ts.velocities[i] = [fields[dim] for dim in vel_cols] + if self._has_forces: + ts.forces[i] = [fields[dim] for dim in force_cols] + + 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] + if (self.lammps_coordinate_convention.startswith("scaled")): + # if coordinates are given in scaled format, undo that + ts.positions = distances.transform_StoR(ts.positions, + ts.dimensions) + # Transform to origin after transformation of scaled variables + ts.positions -= np.array([xlo, ylo, zlo])[None,:] + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/MMTF.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/MMTF.html new file mode 100644 index 0000000000..184ec04d0f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/MMTF.html @@ -0,0 +1,267 @@ + + + + + + MDAnalysis.coordinates.MMTF — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.MMTF

+# -*- 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-2017 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
+#
+
+"""MMTF trajectory reader --- :mod:`MDAnalysis.coordinates.MMTF`
+================================================================
+
+Reads coordinates data from the Macromolecular Transmission Format format
+(MMTF_). This should generally be a quicker alternative to PDB.
+
+.. versionadded:: 0.16.0
+.. versionchanged:: 0.20.0
+   Unit cell is now properly treated as optional
+
+Classes
+-------
+
+.. autoclass:: MMTFReader
+   :members:
+.. autofunction:: fetch_mmtf
+
+.. _MMTF: https://mmtf.rcsb.org/
+
+"""
+import mmtf
+
+from . import base
+from ..core.universe import Universe
+from ..due import due, Doi
+
+
+def _parse_mmtf(fn):
+    if fn.endswith('gz'):
+        return mmtf.parse_gzip(fn)
+    else:
+        return mmtf.parse(fn)
+
+
+
[docs]class MMTFReader(base.SingleFrameReaderBase): + """Coordinate reader for the Macromolecular Transmission Format format (MMTF_).""" + format = 'MMTF' + + @staticmethod + def _format_hint(thing): + """Can this Reader read *thing*? + + .. versionadded:: 1.0.0 + """ + return isinstance(thing, mmtf.MMTFDecoder) + + @due.dcite( + Doi('10.1371/journal.pcbi.1005575'), + description="MMTF Reader", + path='MDAnalysis.coordinates.MMTF', + ) + def _read_first_frame(self): + # TOOD: Check units? + if isinstance(self.filename, mmtf.MMTFDecoder): + top = self.filename + else: + top = _parse_mmtf(self.filename) + self.n_atoms = top.num_atoms + + self.ts = ts = self._Timestep(self.n_atoms, + **self._ts_kwargs) + ts._pos[:, 0] = top.x_coord_list + ts._pos[:, 1] = top.y_coord_list + ts._pos[:, 2] = top.z_coord_list + if not top.unit_cell is None: + # optional field + ts.dimensions = top.unit_cell + + return ts
+ + +
[docs]def fetch_mmtf(pdb_id): + """Create a Universe from the RCSB Protein Data Bank using mmtf format + + Parameters + ---------- + pdb_id : string + PDB code of the desired data, eg '4UCP' + + + Returns + ------- + Universe + MDAnalysis Universe of the corresponding PDB system + + + See Also + -------- + mmtf.fetch : Function for fetching raw mmtf data + + + .. versionadded:: 0.16.0 + """ + return Universe(mmtf.fetch(pdb_id))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/MOL2.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/MOL2.html new file mode 100644 index 0000000000..dbb0d239d1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/MOL2.html @@ -0,0 +1,555 @@ + + + + + + MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.MOL2

+# -*- 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-2017 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
+#
+
+"""MOL2 file format --- :mod:`MDAnalysis.coordinates.MOL2`
+========================================================
+
+Classes to work with Tripos_ molecule structure format (MOL2_) coordinate and
+topology files. Used, for instance, by the DOCK_ docking code.
+
+
+Example for working with mol2 files
+-----------------------------------
+
+To open a mol2, remove all hydrogens and save as a new file, use the following::
+
+  u = Universe("Molecule.mol2")
+  gr = u.select_atoms("not name H*")
+  print(len(u.atoms), len(gr))
+  gr.write("Molecule_noh.mol2")
+
+.. _MOL2: http://www.tripos.com/data/support/mol2.pdf
+.. _Tripos: http://www.tripos.com/
+.. _DOCK: http://dock.compbio.ucsf.edu/
+
+
+See Also
+--------
+rdkit: rdkit_ is an open source cheminformatics toolkit with more mol2
+       functionality
+
+.. _rdkit: http://www.rdkit.org/docs/GettingStartedInPython.html
+
+
+Classes
+-------
+
+.. autoclass:: MOL2Reader
+   :members:
+
+.. autoclass:: MOL2Writer
+   :members:
+
+
+Notes
+-----
+
+* The MDAnalysis :class:`MOL2Reader` and :class:`MOL2Writer` only handle the
+  MOLECULE, SUBSTRUCTURE, ATOM, and BOND record types. Other records are not
+  currently read or preserved on writing.
+* As the CRYSIN record type is not parsed / written, MOL2 systems always have
+  dimensions set to ``None`` and dimensionless MOL2 files are written.
+
+
+MOL2 format notes
+-----------------
+
+* MOL2 Format Specification:  (http://www.tripos.com/data/support/mol2.pdf)
+* Example file (http://www.tripos.com/mol2/mol2_format3.html)::
+
+    #    Name: benzene
+    #    Creating user name: tom
+    #    Creation time: Wed Dec 28 00:18:30 1988
+
+    #    Modifying user name: tom
+    #    Modification time: Wed Dec 28 00:18:30 1988
+
+    @<TRIPOS>MOLECULE
+    benzene
+    12 12 1  0   0
+    SMALL
+    NO_CHARGES
+
+
+    @<TRIPOS>ATOM
+    1   C1  1.207   2.091   0.000   C.ar    1   BENZENE 0.000
+    2   C2  2.414   1.394   0.000   C.ar    1   BENZENE 0.000
+    3   C3  2.414   0.000   0.000   C.ar    1   BENZENE 0.000
+    4   C4  1.207   -0.697  0.000   C.ar    1   BENZENE 0.000
+    5   C5  0.000   0.000   0.000   C.ar    1   BENZENE 0.000
+    6   C6  0.000   1.394   0.000   C.ar    1   BENZENE 0.000
+    7   H1  1.207   3.175   0.000   H   1   BENZENE 0.000
+    8   H2  3.353   1.936   0.000   H   1   BENZENE 0.000
+    9   H3  3.353   -0.542  0.000   H   1   BENZENE 0.000
+    10  H4  1.207   -1.781  0.000   H   1   BENZENE 0.000
+    11  H5  -0.939  -0.542  0.000   H   1   BENZENE 0.000
+    12  H6  -0.939  1.936   0.000   H   1   BENZENE 0.000
+    @<TRIPOS>BOND
+    1   1   2   ar
+    2   1   6   ar
+    3   2   3   ar
+    4   3   4   ar
+    5   4   5   ar
+    6   5   6   ar
+    7   1   7   1
+    8   2   8   1
+    9   3   9   1
+    10  4   10  1
+    11  5   11  1
+    12  6   12  1
+   @<TRIPOS>SUBSTRUCTURE
+    1   BENZENE 1   PERM    0   ****    ****    0   ROOT
+
+"""
+import numpy as np
+
+from . import base
+from ..lib import util
+from MDAnalysis.lib.util import store_init_arguments
+
+
+
[docs]class MOL2Reader(base.ReaderBase): + """Reader for MOL2 structure format. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based. + MOL2 now reuses the same Timestep object for every frame, + previously created a new instance of Timestep each frame. + .. versionchanged:: 0.20.0 + Allows for comments at top of file. + Ignores status bit strings + .. versionchanged:: 2.0.0 + Bonds attribute is not added if no bonds are present in MOL2 file + .. versionchanged:: 2.2.0 + Read MOL2 files with optional columns omitted. + """ + format = 'MOL2' + units = {'time': None, 'length': 'Angstrom'} + + @store_init_arguments + def __init__(self, filename, **kwargs): + """Read coordinates from `filename`. + + + Parameters + ---------- + filename : str or NamedStream + name of the mol2 file or stream + """ + super(MOL2Reader, self).__init__(filename, **kwargs) + + self.n_atoms = None + + blocks = [] + + with util.openany(filename) as f: + for i, line in enumerate(f): + # found new molecules + if "@<TRIPOS>MOLECULE" in line: + blocks.append({"start_line": i, "lines": []}) + if len(blocks): + blocks[-1]["lines"].append(line) + self.n_frames = len(blocks) + self.frames = blocks + + sections, coords = self.parse_block(blocks[0]) + self.n_atoms = len(coords) + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + + self.ts = self._read_frame(0) + + def parse_block(self, block): + sections = {} + cursor = None + for line in block["lines"]: + if "@<TRIPOS>" in line: + cursor = line.split("@<TRIPOS>")[1].strip().lower() + sections[cursor] = [] + continue + elif line.startswith("#") or line == "\n": + continue + sections[cursor].append(line) + + atom_lines = sections["atom"] + if not len(atom_lines): + raise Exception("The mol2 (starting at line {0}) block has no atoms" + "".format(block["start_line"])) + elif self.n_atoms is None: + # First time round, remember the number of atoms + self.n_atoms = len(atom_lines) + elif len(atom_lines) != self.n_atoms: + raise ValueError( + "MOL2Reader assumes that the number of atoms remains unchanged" + " between frames; the current " + "frame has {0}, the next frame has {1} atoms" + "".format(self.n_atoms, len(atom_lines))) + + coords = np.zeros((self.n_atoms, 3), dtype=np.float32) + for i, a in enumerate(atom_lines): + aid, name, x, y, z, atom_type = a.split()[:6] + + #x, y, z = float(x), float(y), float(z) + coords[i, :] = x, y, z + + return sections, coords + + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + else: + # TODO: cleanup _read_frame() to use a "free" Timestep + raise NotImplementedError("MOL2Reader cannot assign to a timestep") + frame = self.frame + 1 + return self._read_frame(frame) + + def _read_frame(self, frame): + try: + block = self.frames[frame] + except IndexError: + errmsg = (f"Invalid frame {frame} for trajectory with length " + f"{len(self)}") + raise IOError(errmsg) from None + + sections, coords = self.parse_block(block) + + for sect in ['molecule', 'substructure']: + try: + self.ts.data[sect] = sections[sect] + except KeyError: + pass + + self.ts.positions = np.array(coords, dtype=np.float32) + + if self.convert_units: + # in-place ! + self.convert_pos_from_native(self.ts._pos) + self.ts.frame = frame + + return self.ts + + def _reopen(self): + # Make frame think it's before start, so calling next + # reads first frame + self.ts.frame = -1
+ + +
[docs]class MOL2Writer(base.WriterBase): + """mol2 format writer + + Write a file in the Tripos_ molecule structure format (MOL2_). + + Note + ---- + :class:`MOL2Writer` can only be used to write out previously loaded MOL2 files. + If you're trying to convert, for example, a PDB file to MOL you should + use other tools, like rdkit_. + + Here is an example how to use rdkit_ to convert a PDB to MOL:: + + from rdkit import Chem + mol = Chem.MolFromPDBFile("molecule.pdb", removeHs=False) + Chem.MolToMolFile(mol, "molecule.mol" ) + + MOL2 writer is currently not available for rdkit master. It requires SYBYL + atomtype generation. + See page 7 for list of SYBYL atomtypes + (http://tripos.com/tripos_resources/fileroot/pdfs/mol2_format2.pdf). + + + .. _rdkit: http://www.rdkit.org/docs/GettingStartedInPython.html + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + + """ + format = 'MOL2' + multiframe = True + units = {'time': None, 'length': 'Angstrom'} + + def __init__(self, filename, n_atoms=None, convert_units=True): + """Create a new MOL2Writer + + Parameters + ---------- + filename: str + name of output file + convert_units: bool (optional) + units are converted to the MDAnalysis base format; [``True``] + """ + self.filename = filename + self.convert_units = convert_units # convert length and time to base units + + self.frames_written = 0 + + self.file = util.anyopen(self.filename, 'w') # open file on init + +
[docs] def close(self): + self.file.close()
+ +
[docs] def encode_block(self, obj): + """ + Parameters + ---------- + obj : AtomGroup or Universe + """ + # Issue 2717 + try: + obj = obj.atoms + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + traj = obj.universe.trajectory + ts = traj.ts + + try: + molecule = ts.data['molecule'] + except KeyError: + errmsg = "MOL2Writer cannot currently write non MOL2 data" + raise NotImplementedError(errmsg) from None + + # Need to remap atom indices to 1 based in this selection + mapping = {a: i for i, a in enumerate(obj.atoms, start=1)} + + # only write bonds if the Bonds attribute exists (Issue #3057) + if hasattr(obj, "bonds"): + # Grab only bonds between atoms in the obj + # ie none that extend out of it + bondgroup = obj.intra_bonds + bonds = sorted((b[0], b[1], b.order) for b in bondgroup) + bond_lines = ["@<TRIPOS>BOND"] + bls = ["{0:>5} {1:>5} {2:>5} {3:>2}".format(bid, + mapping[atom1], + mapping[atom2], + order) + for bid, (atom1, atom2, order) in enumerate(bonds, start=1)] + bond_lines.extend(bls) + bond_lines.append("\n") + bond_lines = "\n".join(bond_lines) + else: + bondgroup = [] + bond_lines = "" + + atom_lines = ["@<TRIPOS>ATOM"] + atom_lines.extend("{0:>4} {1:>4} {2:>13.4f} {3:>9.4f} {4:>9.4f}" + " {5:>4} {6} {7} {8:>7.4f}" + "".format(mapping[a], + a.name, + a.position[0], + a.position[1], + a.position[2], + a.type, + a.resid, + a.resname, + a.charge) + for a in obj.atoms) + atom_lines.append("\n") + atom_lines = "\n".join(atom_lines) + + try: + substructure = ["@<TRIPOS>SUBSTRUCTURE\n"] + ts.data['substructure'] + except KeyError: + substructure = "" + + check_sums = molecule[1].split() + check_sums[0], check_sums[1] = str(len(obj.atoms)), str(len(bondgroup)) + + # prevent behavior change between repeated calls + # see gh-2678 + molecule_0_store = molecule[0] + molecule_1_store = molecule[1] + + molecule[1] = "{0}\n".format(" ".join(check_sums)) + molecule.insert(0, "@<TRIPOS>MOLECULE\n") + + return_val = ("".join(molecule) + atom_lines + + bond_lines + "".join(substructure)) + + molecule[0] = molecule_0_store + molecule[1] = molecule_1_store + return return_val
+ + def _write_next_frame(self, obj): + """Write a new frame to the MOL2 file. + + Parameters + ---------- + obj : AtomGroup or Universe + + + .. versionchanged:: 1.0.0 + Renamed from `write_next_timestep` to `_write_next_frame`. + """ + block = self.encode_block(obj) + self.file.writelines(block)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.html new file mode 100644 index 0000000000..b2e69d16d6 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.html @@ -0,0 +1,299 @@ + + + + + + MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.NAMDBIN

+# -*- 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-2017 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
+#
+
+
+"""NAMDBIN files format --- :mod:`MDAnalysis.coordinates.NAMDBIN`
+================================================================================
+
+Read/Write coordinates in `NAMD double-precision binary format`_ (suffix "coor" or "namdbin").
+
+.. _`NAMD double-precision binary format` : https://www.ks.uiuc.edu/Research/namd/2.10/ug/node11.html#SECTION00061500000000000000
+
+
+Classes
+-------
+
+.. autoclass:: NAMDBINReader
+   :members:
+
+.. autoclass:: NAMDBINWriter
+   :members:
+
+"""
+from struct import pack
+import numpy as np
+
+from . import base
+from ..lib import util
+
+
+
[docs]class NAMDBINReader(base.SingleFrameReaderBase): + """Reader for NAMD binary coordinate files. + + + .. versionadded:: 1.0.0 + """ + + format = ['COOR', 'NAMDBIN'] + units = {'length': 'Angstrom'} + + def _read_first_frame(self): + # Read header + with open(self.filename, 'rb') as namdbin: + self.n_atoms = np.fromfile(namdbin, dtype=np.int32, count=1)[0] + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + self.ts.frame = 0 + coord_double = np.fromfile(namdbin, + dtype=np.float64, + count=self.n_atoms * 3) + self.ts._pos[:] = np.array( + coord_double, float).reshape(self.n_atoms, 3) + +
[docs] @staticmethod + def parse_n_atoms(filename, **kwargs): + with open(filename, 'rb') as namdbin: + n_atoms = np.fromfile(namdbin, dtype=np.int32, count=1)[0] + return n_atoms
+ +
[docs] def Writer(self, filename, **kwargs): + """Returns a NAMDBINWriter for *filename*. + + Parameters + ---------- + filename: str + filename of the output NAMDBIN file + + Returns + ------- + :class:`NAMDBINWriter` + + """ + return NAMDBINWriter(filename, **kwargs)
+ + +
[docs]class NAMDBINWriter(base.WriterBase): + """Writer for NAMD binary coordinate files. + + + Note + ---- + * Does not handle writing to bz2 or gz compressed file types. + + + .. versionadded:: 1.0.0 + """ + format = ['COOR', 'NAMDBIN'] + units = {'time': None, 'length': 'Angstrom'} + + def __init__(self, filename, n_atoms=None, **kwargs): + """ + Parameters + ---------- + filename : str or :class:`~MDAnalysis.lib.util.NamedStream` + name of the output file or a stream + n_atoms : int + number of atoms for the output coordinate + """ + self.filename = util.filename(filename) + + def _write_next_frame(self, obj): + """Write information associated with ``obj`` at current frame into + trajectory + + + Parameters + ---------- + obj : :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` + write coordinate information associated with `obj` + + + .. versionchanged:: 1.0.0 + Renamed from `write` to `_write_next_frame`. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + if hasattr(obj, 'atoms'): # AtomGroup or Universe + atoms = obj.atoms + n_atoms = len(atoms) + coor = atoms.positions.reshape(n_atoms*3) + else: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + with util.openany(self.filename, 'wb') as namdbin: + # Write NUMATOMS + namdbin.write(pack('i', n_atoms)) + # Write Coordinate + namdbin.write(pack('{:d}d'.format(len(coor)), *coor))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDB.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDB.html new file mode 100644 index 0000000000..474dca88b5 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDB.html @@ -0,0 +1,1534 @@ + + + + + + MDAnalysis.coordinates.PDB — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.PDB

+# -*- 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-2017 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
+#
+
+
+"""PDB structure files in MDAnalysis --- :mod:`MDAnalysis.coordinates.PDB`
+========================================================================
+
+MDAnalysis reads coordinates from PDB files and additional optional
+data such as B-factors. It is also possible to substitute a PDB file
+instead of PSF file in order to define the list of atoms (but no
+connectivity information will be available in this case).
+
+PDB files contain both coordinate and atom information. It is also possible to
+write trajectories as multi-frame (or multi-model) PDB files. This is not very
+space efficient but is sometimes the lowest common denominator for exchanging
+trajectories. Single frame and multi-frame PDB files are automatically
+recognized; the only difference is thath the single-frame PDB is represented as
+a trajectory with only one frame.
+
+In order to write a selection to a PDB file one typically uses the
+:meth:`MDAnalysis.core.groups.AtomGroup.write` method of the selection::
+
+  calphas = universe.select_atoms("name CA")
+  calphas.write("calpha_only.pdb")
+
+This uses the coordinates from the current timestep of the trajectory.
+
+In order to write a PDB trajectory one needs to first obtain a multi-frame
+writer (keyword *multiframe* = ``True``) and then iterate through the
+trajectory, while writing each frame::
+
+  calphas = universe.select_atoms("name CA")
+  with MDAnalysis.Writer("calpha_traj.pdb", multiframe=True) as W:
+      for ts in u.trajectory:
+          W.write(calphas)
+
+It is important to *always close the trajectory* when done because only at this
+step is the final END_ record written, which is required by the `PDB 3.3
+standard`_. Using the writer as a context manager ensures that this always
+happens.
+
+
+Capabilities
+------------
+
+A pure-Python implementation for PDB files commonly encountered in MD
+simulations comes under the names :class:`PDBReader` and :class:`PDBWriter`. It
+only implements a subset of the `PDB 3.3 standard`_ and also allows some
+typical enhancements such as 4-letter resids (introduced by CHARMM/NAMD).
+
+The :class:`PDBReader` can read multi-frame PDB files and represents
+them as a trajectory. The :class:`PDBWriter` can write single and
+multi-frame PDB files as specified by the *multiframe* keyword. By default, it
+writes single frames. On the other hand, the :class:`MultiPDBWriter` is set up
+to write a PDB trajectory by default (equivalent to using *multiframe* =
+``True``).
+
+
+Examples for working with PDB files
+-----------------------------------
+
+A **single frame PDB** can be written with the
+:meth:`~MDAnalysis.core.groups.AtomGroup.write` method of any
+:class:`~MDAnalysis.core.groups.AtomGroup`::
+
+   protein = u.select_atoms("protein")
+   protein.write("protein.pdb")
+
+Alternatively, get the single frame writer and supply the
+:class:`~MDAnalysis.core.groups.AtomGroup`::
+
+  protein = u.select_atoms("protein")
+  with MDAnalysis.Writer("protein.pdb") as pdb:
+      pdb.write(protein)
+
+In order to write a **multi-frame PDB trajectory** from a universe *u* one can
+do the following::
+
+  with MDAnalysis.Writer("all.pdb", multiframe=True) as pdb:
+      for ts in u.trajectory:
+          pdb.write(u)
+
+Similarly, writing only a protein::
+
+  protein = u.select_atoms("protein")
+  with MDAnalysis.Writer("protein.pdb", multiframe=True) as pdb:
+      for ts in u.trajectory:
+          pdb.write(protein)
+
+
+
+Classes
+-------
+
+.. versionchanged:: 0.16.0
+   PDB readers and writers based on :class:`Bio.PDB.PDBParser` were retired and
+   removed.
+
+
+.. autoclass:: PDBReader
+   :members:
+
+.. autoclass:: PDBWriter
+   :members:
+
+   .. automethod:: _check_pdb_coordinates
+   .. automethod:: _write_pdb_bonds
+   .. automethod:: _update_frame
+   .. automethod:: _write_timestep
+
+.. autoclass:: MultiPDBWriter
+   :members:
+
+.. autoclass:: ExtendedPDBReader
+   :members:
+   :inherited-members:
+
+
+.. _`PDB 3.3 standard`:
+    http://www.wwpdb.org/documentation/file-format-content/format33/v3.3.html
+
+"""
+from io import StringIO, BytesIO
+import os
+import errno
+import itertools
+import textwrap
+import warnings
+import logging
+import collections
+import numpy as np
+
+from ..lib import util
+from ..lib.util import store_init_arguments
+from . import base
+from .timestep import Timestep
+from ..topology.core import guess_atom_element
+from ..exceptions import NoDataError
+
+
+logger = logging.getLogger("MDAnalysis.coordinates.PBD")
+
+# Pairs of residue name / atom name in use to deduce PDB formatted atom names
+Pair = collections.namedtuple('Atom', 'resname name')
+
+
+
[docs]class PDBReader(base.ReaderBase): + """PDBReader that reads a `PDB-formatted`_ file, no frills. + + The following *PDB records* are parsed (see `PDB coordinate section`_ for + details): + + - *CRYST1* for unitcell A,B,C, alpha,beta,gamma + - *ATOM* or *HETATM* for serial,name,resName,chainID,resSeq,x,y,z,occupancy,tempFactor + - *HEADER* (:attr:`header`), *TITLE* (:attr:`title`), *COMPND* + (:attr:`compound`), *REMARK* (:attr:`remarks`) + - all other lines are ignored + + Reads multi-`MODEL`_ PDB files as trajectories. The `Timestep.data` dictionary + holds the occupancy and tempfactor (bfactor) values for each atom for a given frame. + These attributes are commonly appropriated to store other time varying properties + and so they are exposed here. Note this does not update the `AtomGroup` attributes, + as the topology does not change with trajectory iteration. + + .. _PDB-formatted: + http://www.wwpdb.org/documentation/file-format-content/format33/v3.3.html + .. _PDB coordinate section: + http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html + .. _MODEL: + http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#MODEL + + ============= ============ =========== ============================================= + COLUMNS DATA TYPE FIELD DEFINITION + ============= ============ =========== ============================================= + 1 - 6 Record name "CRYST1" + 7 - 15 Real(9.3) a a (Angstroms). + 16 - 24 Real(9.3) b b (Angstroms). + 25 - 33 Real(9.3) c c (Angstroms). + 34 - 40 Real(7.2) alpha alpha (degrees). + 41 - 47 Real(7.2) beta beta (degrees). + 48 - 54 Real(7.2) gamma gamma (degrees). + + 1 - 6 Record name "ATOM " + 7 - 11 Integer serial Atom serial number. + 13 - 16 Atom name Atom name. + 17 Character altLoc Alternate location indicator. + 18 - 21 Residue name resName Residue name. + 22 Character chainID Chain identifier. + 23 - 26 Integer resSeq Residue sequence number. + 27 AChar iCode Code for insertion of residues. + 31 - 38 Real(8.3) x Orthogonal coordinates for X in Angstroms. + 39 - 46 Real(8.3) y Orthogonal coordinates for Y in Angstroms. + 47 - 54 Real(8.3) z Orthogonal coordinates for Z in Angstroms. + 55 - 60 Real(6.2) occupancy Occupancy. + 61 - 66 Real(6.2) tempFactor Temperature factor. + 67 - 76 String segID (unofficial CHARMM extension ?) + 77 - 78 LString(2) element Element symbol, right-justified. + 79 - 80 LString(2) charge Charge on the atom. + ============= ============ =========== ============================================= + + Notes + ----- + If a system does not have unit cell parameters (such as in electron + microscopy structures), the PDB file format requires the CRYST1_ field to + be provided with unitary values (cubic box with sides of 1 Å) and an + appropriate REMARK. If unitary values are found within the CRYST1_ field, + :code:`PDBReader` will not set unit cell dimensions (which will take the + default value :code:`np.zeros(6)`, see Issue #2698) + and it will warn the user. + + .. _CRYST1: http://www.wwpdb.org/documentation/file-format-content/format33/sect8.html#CRYST1 + + + See Also + -------- + :class:`PDBWriter` + :class:`PDBReader` + + .. versionchanged:: 0.11.0 + * Frames now 0-based instead of 1-based + * New :attr:`title` (list with all TITLE lines). + .. versionchanged:: 0.19.1 + Can now read PDB files with DOS line endings + .. versionchanged:: 0.20.0 + Strip trajectory header of trailing spaces and newlines + .. versionchanged:: 1.0.0 + Raise user warning for CRYST1_ record with unitary valuse + (cubic box with sides of 1 Å) and do not set cell dimensions. + .. versionchanged:: 2.5.0 + Tempfactors (aka bfactors) are now read into the ts.data dictionary each + frame. Occupancies are also read into this dictionary. + """ + format = ['PDB', 'ENT'] + units = {'time': None, 'length': 'Angstrom'} + + @store_init_arguments + def __init__(self, filename, **kwargs): + """Read coordinates from *filename*. + + *filename* can be a gzipped or bzip2ed compressed PDB file. + + If the pdb file contains multiple MODEL records then it is + read as a trajectory where the MODEL numbers correspond to + frame numbers. + """ + super(PDBReader, self).__init__(filename, **kwargs) + + try: + self.n_atoms = kwargs['n_atoms'] + except KeyError: + # hackish, but should work and keeps things DRY + # regular MDA usage via Universe doesn't follow this route + from MDAnalysis.topology import PDBParser + + with PDBParser.PDBParser(self.filename) as p: + top = p.parse() + self.n_atoms = top.n_atoms + + self.model_offset = kwargs.pop("model_offset", 0) + # dummy/default variables as these are read + header = "" + title = [] + compound = [] + remarks = [] + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + + # Record positions in file of CRYST and MODEL headers + # then build frame offsets to start at the minimum of these + # This allows CRYST to come either before or after MODEL + # This assumes that **either** + # - pdbfile has a single CRYST (NVT) + # - pdbfile has a CRYST for every MODEL (NPT) + models = [] + crysts = [] + + # hack for streamIO + if isinstance(filename, util.NamedStream) and isinstance(filename.stream, StringIO): + filename.stream = BytesIO(filename.stream.getvalue().encode()) + + pdbfile = self._pdbfile = util.anyopen(filename, 'rb') + + line = "magical" + while line: + # need to use readline so tell gives end of line + # (rather than end of current chunk) + line = pdbfile.readline() + + if line[:5] == b'MODEL': + models.append(pdbfile.tell()) + elif line[:5] == b'CRYST': + # remove size of line to get **start** of CRYST line + crysts.append(pdbfile.tell() - len(line)) + elif line[:6] == b'HEADER': + # classification = line[10:50] + # date = line[50:59] + # idCode = line[62:66] + header = line[10:66].strip().decode() + elif line[:5] == b'TITLE': + title.append(line[8:80].strip().decode()) + elif line[:6] == b'COMPND': + compound.append(line[7:80].strip().decode()) + elif line[:6] == b'REMARK': + remarks.append(line[6:].strip().decode()) + + end = pdbfile.tell() # where the file ends + + self.header = header + self.title = title + self.compound = compound + self.remarks = remarks + + if not models: + # No model entries + # so read from start of file to read first frame + models.append(0) + if len(crysts) == len(models): + offsets = [min(a, b) for a, b in zip(models, crysts)] + else: + offsets = models + # Position of the start of each frame + self._start_offsets = offsets + # Position of the end of each frame + self._stop_offsets = offsets[1:] + [end] + self.n_frames = len(offsets) + + self._read_frame(0) + +
[docs] def Writer(self, filename, **kwargs): + """Returns a PDBWriter for *filename*. + + Parameters + ---------- + filename : str + filename of the output PDB file + + Returns + ------- + :class:`PDBWriter` + + """ + kwargs.setdefault('multiframe', self.n_frames > 1) + return PDBWriter(filename, **kwargs)
+ + def _reopen(self): + # Pretend the current TS is -1 (in 0 based) so "next" is the + # 0th frame + self.close() + self._pdbfile = util.anyopen(self.filename, 'rb') + self.ts.frame = -1 + + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + else: + # TODO: cleanup _read_frame() to use a "free" Timestep + raise NotImplementedError("PDBReader cannot assign to a timestep") + # frame is 1-based. Normally would add 1 to frame before calling + # self._read_frame to retrieve the subsequent ts. But self._read_frame + # assumes it is being passed a 0-based frame, and adjusts. + frame = self.frame + 1 + return self._read_frame(frame) + + def _read_frame(self, frame): + """ + Read frame from PDB file. + + Notes + ----- + When the CRYST1_ record has unitary values (cubic box with sides of + 1 Å), cell dimensions are considered fictitious. An user warning is + raised and cell dimensions are set to + :code:`np.zeros(6)` (see Issue #2698) + + + .. versionchanged:: 1.0.0 + Raise user warning for CRYST1_ record with unitary valuse + (cubic box with sides of 1 Å) and do not set cell dimensions. + .. versionchanged:: 2.5.0 + When seen, `ts.data` is populated with tempfactor information at + each frame read. If any atom has a non-parsable (i.e. non float) + value in the tempfactor field, the entry is left as `1.0`. + """ + try: + start = self._start_offsets[frame] + stop = self._stop_offsets[frame] + except IndexError: # out of range of known frames + raise IOError from None + + pos = 0 + occupancy = np.zeros(self.n_atoms) + tempfactor = np.ones(self.n_atoms) + saw_tempfactor = False + + # Seek to start and read until start of next frame + self._pdbfile.seek(start) + chunk = self._pdbfile.read(stop - start).decode() + + tmp_buf = [] + for line in chunk.splitlines(): + if line[:6] in ('ATOM ', 'HETATM'): + # we only care about coordinates + tmp_buf.append([line[30:38], line[38:46], line[46:54]]) + try: + # does an implicit str -> float conversion + occupancy[pos] = line[54:60] + except ValueError: + # Be tolerant for ill-formated or empty occupancies + pass + try: + tempfactor[pos] = line[60:66] + except ValueError: + pass + else: + saw_tempfactor = True + pos += 1 + elif line[:6] == 'CRYST1': + # does an implicit str -> float conversion + try: + cell_dims = np.array([line[6:15], line[15:24], + line[24:33], line[33:40], + line[40:47], line[47:54]], + dtype=np.float32) + except ValueError: + warnings.warn("Failed to read CRYST1 record, " + "possibly invalid PDB file, got:\n{}" + "".format(line)) + self.ts.dimensions = None + else: + if np.allclose(cell_dims, np.array([1.0, 1.0, 1.0, 90.0, 90.0, 90.0])): + warnings.warn("1 A^3 CRYST1 record," + " this is usually a placeholder." + " Unit cell dimensions will be set to None.") + self.ts.dimensions = None + else: + self.ts.dimensions = cell_dims + + # check if atom number changed + if pos != self.n_atoms: + raise ValueError("Inconsistency in file '{}': The number of atoms " + "({}) in trajectory frame {} differs from the " + "number of atoms ({}) in the corresponding " + "topology.\nTrajectories with varying numbers of " + "atoms are currently not supported." + "".format(self.filename, pos, frame, self.n_atoms)) + + # doing the conversion from list to array at the end is faster + self.ts.positions = tmp_buf + + if self.convert_units: + # both happen inplace + self.convert_pos_from_native(self.ts._pos) + if not self.ts.dimensions is None: + self.convert_pos_from_native(self.ts.dimensions[:3]) + self.ts.frame = frame + self.ts.data['occupancy'] = occupancy + if saw_tempfactor: + self.ts.data['tempfactor'] = tempfactor + + return self.ts + +
[docs] def close(self): + self._pdbfile.close()
+ + +
[docs]class PDBWriter(base.WriterBase): + """PDB writer that implements a subset of the `PDB 3.3 standard`_ . + + PDB format as used by NAMD/CHARMM: 4-letter resnames and segID are allowed, + altLoc is written. + + The :class:`PDBWriter` can be used to either dump a coordinate + set to a PDB file (operating as a "single frame writer", selected with the + constructor keyword *multiframe* = ``False``, the default) or by writing a + PDB "movie" (multi frame mode, *multiframe* = ``True``), consisting of + multiple models (using the MODEL_ and ENDMDL_ records). + + .. _`PDB 3.3 standard`: + http://www.wwpdb.org/documentation/file-format-content/format33/v3.3.html + .. _ATOM: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM + .. _COMPND: http://www.wwpdb.org/documentation/file-format-content/format33/sect2.html#COMPND + .. _CONECT: http://www.wwpdb.org/documentation/file-format-content/format33/sect10.html#CONECT + .. _END: http://www.wwpdb.org/documentation/file-format-content/format33/sect11.html#END + .. _ENDMDL: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ENDMDL + .. _HEADER: http://www.wwpdb.org/documentation/file-format-content/format33/sect2.html#HEADER + .. _HETATM: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#HETATM + .. _MODEL: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#MODEL + .. _NUMMDL: http://www.wwpdb.org/documentation/file-format-content/format33/sect2.html#NUMMDL + .. _REMARKS: http://www.wwpdb.org/documentation/file-format-content/format33/remarks.html + .. _TITLE: http://www.wwpdb.org/documentation/file-format-content/format33/sect2.html#TITLE + + Note + ---- + Writing bonds currently only works when writing a whole :class:`Universe` + and if bond information is available in the topology. (For selections + smaller than the whole :class:`Universe`, the atom numbering in the CONECT_ + records would not match the numbering of the atoms in the new PDB file and + therefore a :exc:`NotImplementedError` is raised.) + + The maximum frame number that can be stored in a PDB file is 9999 and it + will wrap around (see :meth:`MODEL` for further details). + + The CRYST1_ record specifies the unit cell. This record is set to + unitary values (cubic box with sides of 1 Å) if unit cell dimensions + are not set (:code:`None` or :code:`np.zeros(6)`, + see Issue #2698). + + When the :attr:`record_types` attribute is present (e.g. Universe object + was created by loading a PDB file), ATOM_ and HETATM_ record type + keywords are written out accordingly. Otherwise, the ATOM_ record type + is the default output. + + The CONECT_ record is written out, if required, when the output stream + is closed. + + See Also + -------- + This class is identical to :class:`MultiPDBWriter` with the one + exception that it defaults to writing single-frame PDB files as if + `multiframe` = ``False`` was selected. + + + .. versionchanged:: 0.7.5 + Initial support for multi-frame PDB files. + + .. versionchanged:: 0.7.6 + The *multiframe* keyword was added to select the writing mode. The + writing of bond information (CONECT_ records) is now disabled by default + but can be enabled with the *bonds* keyword. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + + .. versionchanged:: 0.14.0 + PDB doesn't save charge information + + .. versionchanged:: 0.20.0 + Strip trajectory header of trailing spaces and newlines + + .. versionchanged:: 1.0.0 + ChainID now comes from the last character of segid, as stated in the documentation. + An indexing issue meant it previously used the first charater (Issue #2224) + + .. versionchanged:: 2.0.0 + Add the `redindex` argument. Setting this keyword to ``True`` + (the default) preserves the behavior in earlier versions of MDAnalysis. + The PDB writer checks for a valid chainID entry instead of using the + last character of segid. Should a chainID not be present, or not + conform to the PDB standard, the default value of 'X' is used. + + .. versionchanged:: 2.3.0 + Do not write unusable conect records when ag index + is larger than 100000. + """ + fmt = { + 'ATOM': ( + "ATOM {serial:5d} {name:<4s}{altLoc:<1s}{resName:<4s}" + "{chainID:1s}{resSeq:4d}{iCode:1s}" + " {pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}{occupancy:6.2f}" + "{tempFactor:6.2f} {segID:<4s}{element:>2s}{charge:2s}\n"), + 'HETATM': ( + "HETATM{serial:5d} {name:<4s}{altLoc:<1s}{resName:<4s}" + "{chainID:1s}{resSeq:4d}{iCode:1s}" + " {pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}{occupancy:6.2f}" + "{tempFactor:6.2f} {segID:<4s}{element:>2s}{charge:2s}\n"), + 'REMARK': "REMARK {0}\n", + 'COMPND': "COMPND {0}\n", + 'HEADER': "HEADER {0}\n", + 'TITLE': "TITLE {0}\n", + 'MODEL': "MODEL {0:>4d}\n", + 'NUMMDL': "NUMMDL {0:5d}\n", + 'ENDMDL': "ENDMDL\n", + 'END': "END\n", + 'CRYST1': ("CRYST1{box[0]:9.3f}{box[1]:9.3f}{box[2]:9.3f}" + "{ang[0]:7.2f}{ang[1]:7.2f}{ang[2]:7.2f} " + "{spacegroup:<11s}{zvalue:4d}\n"), + 'CONECT': "CONECT{0}\n" + } + format = ['PDB', 'ENT'] + units = {'time': None, 'length': 'Angstrom'} + pdb_coor_limits = {"min": -999.9995, "max": 9999.9995} + #: wrap comments into REMARK records that are not longer than + # :attr:`remark_max_length` characters. + remark_max_length = 66 + multiframe = False + + # These attributes are used to deduce how to format the atom name. + ions = ('FE', 'AS', 'ZN', 'MG', 'MN', 'CO', 'BR', + 'CU', 'TA', 'MO', 'AL', 'BE', 'SE', 'PT', + 'EU', 'NI', 'IR', 'RH', 'AU', 'GD', 'RU') + # Mercurial can be confused for hydrogen gamma. Yet, mercurial is + # rather rare in the PDB. Here are all the residues that contain + # mercurial. + special_hg = ('CMH', 'EMC', 'MBO', 'MMC', 'HGB', 'BE7', 'PMB') + # Chloride can be confused for a carbon. Here are the residues that + # contain chloride. + special_cl = ('0QE', 'CPT', 'DCE', 'EAA', 'IMN', 'OCZ', 'OMY', 'OMZ', + 'UN9', '1N1', '2T8', '393', '3MY', 'BMU', 'CLM', 'CP6', + 'DB8', 'DIF', 'EFZ', 'LUR', 'RDC', 'UCL', 'XMM', 'HLT', + 'IRE', 'LCP', 'PCI', 'VGH') + # In these pairs, the atom name is aligned on the first column + # (column 13). + include_pairs = (Pair('OEC', 'CA1'), + Pair('PLL', 'PD'), + Pair('OEX', 'CA1')) + # In these pairs, the atom name is aligned on the second column + # (column 14), but other rules would align them on the first column. + exclude_pairs = (Pair('C14', 'C14'), Pair('C15', 'C15'), + Pair('F9F', 'F9F'), Pair('OAN', 'OAN'), + Pair('BLM', 'NI'), Pair('BZG', 'CO'), + Pair('BZG', 'NI'), Pair('VNL', 'CO1'), + Pair('VNL', 'CO2'), Pair('PF5', 'FE1'), + Pair('PF5', 'FE2'), Pair('UNL', 'UNL')) + + def __init__(self, filename, bonds="conect", n_atoms=None, start=0, step=1, + remarks="Created by PDBWriter", + convert_units=True, multiframe=None, reindex=True): + """Create a new PDBWriter + + Parameters + ---------- + filename: str + name of output file + start: int (optional) + starting timestep (the first frame will have MODEL number `start` + 1 + because the PDB standard prescribes MODEL numbers starting at 1) + step: int (optional) + skip between subsequent timesteps + remarks: str (optional) + comments to annotate pdb file (added to the *TITLE* record); note that + any remarks from the trajectory that serves as input are + written to REMARK records with lines longer than :attr:`remark_max_length` (66 + characters) being wrapped. + convert_units: bool (optional) + units are converted to the MDAnalysis base format; [``True``] + bonds : {"conect", "all", None} (optional) + If set to "conect", then only write those bonds that were already + defined in an input PDB file as PDB CONECT_ record. If set to "all", + write all bonds (including guessed ones) to the file. ``None`` does + not write any bonds. The default is "conect". + multiframe: bool (optional) + ``False``: write a single frame to the file; ``True``: create a + multi frame PDB file in which frames are written as MODEL_ ... ENDMDL_ + records. If ``None``, then the class default is chosen. [``None``] + reindex: bool (optional) + If ``True`` (default), the atom serial is set to be consecutive + numbers starting at 1. Else, use the atom id. + + """ + # n_atoms = None : dummy keyword argument + # (not used, but Writer() always provides n_atoms as the second argument) + + # TODO: - remarks should be a list of lines and written to REMARK + # - additional title keyword could contain line for TITLE + + self.filename = filename + # convert length and time to base units + self.convert_units = convert_units + self._multiframe = self.multiframe if multiframe is None else multiframe + self.bonds = bonds + self._reindex = reindex + + if start < 0: + raise ValueError("'Start' must be a positive value") + + self.start = self.frames_written = start + self.step = step + self.remarks = remarks + + self.pdbfile = util.anyopen(self.filename, 'wt') # open file on init + self.has_END = False + self.first_frame_done = False + +
[docs] def close(self): + """ + Close PDB file and write CONECT and END record + + + .. versionchanged:: 2.0.0 + CONECT_ record written just before END_ record + """ + if hasattr(self, 'pdbfile') and self.pdbfile is not None: + if not self.has_END: + self._write_pdb_bonds() + self.END() + else: + logger.warning("END record has already been written" + " before the final closing of the file") + self.pdbfile.close() + self.pdbfile = None
+ + def _write_pdb_title(self): + if self._multiframe: + self.TITLE("MDANALYSIS FRAMES FROM {0:d}, STEP {1:d}: {2!s}" + "".format(self.start, self.step, self.remarks)) + else: + self.TITLE("MDANALYSIS FRAME {0:d}: {1!s}" + "".format(self.start, self.remarks)) + + def _write_pdb_header(self): + """ + Write PDB header. + + The HEADER_ record is set to :code: `trajectory.header`. + The TITLE_ record explicitly mentions MDAnalysis and contains + information about trajectory frame(s). + The COMPND_ record is set to :code:`trajectory.compound`. + The REMARKS_ records are set to :code:`u.trajectory.remarks` + The CRYST1_ record specifies the unit cell. This record is set to + unitary values (cubic box with sides of 1 Å) if unit cell dimensions + are not set. + + .. versionchanged: 1.0.0 + Fix writing of PDB file without unit cell dimensions (Issue #2679). + If cell dimensions are not found, unitary values (cubic box with + sides of 1 Å) are used (PDB standard for CRYST1_). + """ + + if self.first_frame_done is True: + return + + self.first_frame_done = True + u = self.obj.universe + self.HEADER(u.trajectory) + + self._write_pdb_title() + + self.COMPND(u.trajectory) + try: + # currently inconsistent: DCDReader gives a string, + # PDB*Reader a list, so always get a list + # split long single lines into chunks of 66 chars + remarks = [] + for line in util.asiterable(u.trajectory.remarks): + remarks.extend(textwrap.wrap(line, self.remark_max_length)) + self.REMARK(*remarks) + except AttributeError: + pass + + if u.trajectory.ts.dimensions is None: + # Unitary unit cell by default. See PDB standard: + # http://www.wwpdb.org/documentation/file-format-content/format33/sect8.html#CRYST1 + self.CRYST1(np.array([1.0, 1.0, 1.0, 90.0, 90.0, 90.0])) + + # Add CRYST1 REMARK (285) + # The SCALE record is not included + # (We are only implementing a subset of the PDB standard) + self.REMARK("285 UNITARY VALUES FOR THE UNIT CELL AUTOMATICALLY SET") + self.REMARK("285 BY MDANALYSIS PDBWRITER BECAUSE UNIT CELL INFORMATION") + self.REMARK("285 WAS MISSING.") + self.REMARK("285 PROTEIN DATA BANK CONVENTIONS REQUIRE THAT") + self.REMARK("285 CRYST1 RECORD IS INCLUDED, BUT THE VALUES ON") + self.REMARK("285 THIS RECORD ARE MEANINGLESS.") + + warnings.warn("Unit cell dimensions not found. " + "CRYST1 record set to unitary values.") + else: + self.CRYST1(self.convert_dimensions_to_unitcell(u.trajectory.ts)) + +
[docs] def _check_pdb_coordinates(self): + """Check if the coordinate values fall within the range allowed for PDB files. + + Deletes the output file if this is the first frame or if frames have + already been written (in multi-frame mode) adds a REMARK instead of the + coordinates and closes the file. + + Raises + ------ + ValueError + if the coordinates fail the check. + + .. versionchanged: 1.0.0 + Check if :attr:`filename` is `StringIO` when attempting to remove + a PDB file with invalid coordinates (Issue #2512) + """ + atoms = self.obj.atoms # make sure to use atoms (Issue 46) + # can write from selection == Universe (Issue 49) + coor = atoms.positions + + # check if any coordinates are illegal (coordinates are already in + # Angstroem per package default) + if self.has_valid_coordinates(self.pdb_coor_limits, coor): + return True + # note the precarious close() here: we know that the file is open and + # we now prepare to remove what we have already written (header and + # such) or add a REMARK (which allows the user to look at the + # previously written frames) + if self.frames_written > 1: + self.REMARK("Incomplete multi-frame trajectory.", + "Coordinates for the current frame cannot be " + "represented in the PDB format.") + self.close() + else: + self.close() + try: + os.remove(self.filename) + except OSError as err: + if err.errno == errno.ENOENT: + pass + else: + raise + except TypeError: + if isinstance(self.filename, StringIO): + pass + else: + raise + + raise ValueError("PDB files must have coordinate values between " + "{0:.3f} and {1:.3f} Angstroem: file writing was " + "aborted.".format(self.pdb_coor_limits["min"], + self.pdb_coor_limits["max"]))
+ +
[docs] def _write_pdb_bonds(self): + """Writes out all the bond records""" + if self.bonds is None: + return + + if (not hasattr(self, "obj") or + not self.obj or + not hasattr(self.obj.universe, 'bonds')): + return + + bondset = set(itertools.chain(*(a.bonds for a in self.obj.atoms))) + if self._reindex: + index_attribute = 'index' + mapping = { + index: i + for i, index in enumerate(self.obj.atoms.indices, start=1) + } + atoms = np.sort(self.obj.atoms.indices) + else: + index_attribute = 'id' + mapping = {id_: id_ for id_ in self.obj.atoms.ids} + atoms = np.sort(self.obj.atoms.ids) + if self.bonds == "conect": + # Write out only the bonds that were defined in CONECT records + bonds = ( + ( + getattr(bond[0], index_attribute), + getattr(bond[1], index_attribute), + ) + for bond in bondset if not bond.is_guessed + ) + elif self.bonds == "all": + bonds = ( + ( + getattr(bond[0], index_attribute), + getattr(bond[1], index_attribute), + ) + for bond in bondset + ) + else: + raise ValueError("bonds has to be either None, 'conect' or 'all'") + + con = collections.defaultdict(list) + for a1, a2 in bonds: + if not (a1 in mapping and a2 in mapping): + continue + if mapping[a1] >= 100000 or mapping[a2] >= 100000: + warnings.warn("Atom with index >=100000 cannot write " + "bonds to PDB CONECT records.") + return + con[a2].append(a1) + con[a1].append(a2) + + conect = ([mapping[a]] + sorted([mapping[at] for at in con[a]]) + for a in atoms if a in con) + + for c in conect: + self.CONECT(c)
+ +
[docs] def _update_frame(self, obj): + """Method to initialize important attributes in writer from a AtomGroup or Universe *obj*. + + Attributes initialized/updated: + + * :attr:`PDBWriter.obj` (the entity that provides topology information *and* + coordinates, either a :class:`~MDAnalysis.core.groups.AtomGroup` or a whole + :class:`~MDAnalysis.core.universe.Universe`) + * :attr:`PDBWriter.trajectory` (the underlying trajectory + :class:`~MDAnalysis.coordinates.base.Reader`) + * :attr:`PDBWriter.timestep` (the underlying trajectory + :class:`~MDAnalysis.coordinates.timestep.Timestep`) + + Before calling :meth:`_write_next_frame` this method **must** be + called at least once to enable extracting topology information from the + current frame. + """ + if isinstance(obj, Timestep): + raise TypeError("PDBWriter cannot write Timestep objects " + "directly, since they lack topology information (" + "atom names and types) required in PDB files") + if len(obj.atoms) == 0: + raise IndexError("Cannot write empty AtomGroup") + + # remember obj for some of other methods --- NOTE: this is an evil/lazy + # hack... + self.obj = obj + self.ts = obj.universe.trajectory.ts
+ +
[docs] def write(self, obj): + """Write object *obj* at current trajectory frame to file. + + *obj* can be a selection (i.e. a + :class:`~MDAnalysis.core.groups.AtomGroup`) or a whole + :class:`~MDAnalysis.core.universe.Universe`. + + The last letter of the :attr:`~MDAnalysis.core.groups.Atom.segid` is + used as the PDB chainID (but see :meth:`~PDBWriter.ATOM` for + details). + + Parameters + ---------- + obj + The :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` to write. + """ + + self._update_frame(obj) + self._write_pdb_header() + # Issue 105: with write() ONLY write a single frame; use + # write_all_timesteps() to dump everything in one go, or do the + # traditional loop over frames + self._write_next_frame(self.ts, multiframe=self._multiframe)
+ # END and CONECT records are written when file is being close()d + +
[docs] def write_all_timesteps(self, obj): + """Write all timesteps associated with *obj* to the PDB file. + + *obj* can be a :class:`~MDAnalysis.core.groups.AtomGroup` + or a :class:`~MDAnalysis.core.universe.Universe`. + + The method writes the frames from the one specified as *start* until + the end, using a step of *step* (*start* and *step* are set in the + constructor). Thus, if *u* is a Universe then :: + + u.trajectory[-2] + pdb = PDBWriter("out.pdb", u.atoms.n_atoms) + pdb.write_all_timesteps(u) + + will write a PDB trajectory containing the last 2 frames and :: + + pdb = PDBWriter("out.pdb", u.atoms.n_atoms, start=12, step=2) + pdb.write_all_timesteps(u) + + will be writing frames 12, 14, 16, ... + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + + .. versionchanged:: 2.0.0 + CONECT_ record moved to :meth:`close` + """ + + self._update_frame(obj) + self._write_pdb_header() + + start, step = self.start, self.step + traj = obj.universe.trajectory + + # Start from trajectory[0]/frame 0, if there are more than 1 frame. + # If there is only 1 frame, the traj.frames is not like a python list: + # accessing trajectory[-1] raises key error. + if not start and traj.n_frames > 1: + start = traj.frame + + for framenumber in range(start, len(traj), step): + traj[framenumber] + self._write_next_frame(self.ts, multiframe=True) + + # CONECT record is written when the file is being close()d + self.close() + + # Set the trajectory to the starting position + traj[start]
+ + def _write_next_frame(self, ts=None, **kwargs): + '''write a new timestep to the PDB file + + :Keywords: + *ts* + :class:`timestep.Timestep` object containing coordinates to be written to trajectory file; + if ``None`` then :attr:`PDBWriter.ts`` is tried. + *multiframe* + ``False``: write a single frame (default); ``True`` behave as a trajectory writer + + .. Note:: + + Before using this method with another :class:`timestep.Timestep` in the *ts* + argument, :meth:`PDBWriter._update_frame` *must* be called + with the :class:`~MDAnalysis.core.groups.AtomGroup.Universe` as + its argument so that topology information can be gathered. + + + .. versionchanged:: 1.0.0 + Renamed from `write_next_timestep` to `_write_next_frame`. + ''' + if ts is None: + try: + ts = self.ts + except AttributeError: + errmsg = ("PBDWriter: no coordinate data to write to " + "trajectory file") + raise NoDataError(errmsg) from None + self._check_pdb_coordinates() + self._write_timestep(ts, **kwargs) + + def _deduce_PDB_atom_name(self, atomname, resname): + """Deduce how the atom name should be aligned. + + Atom name format can be deduced from the atom type, yet atom type is + not always available. This function uses the atom name and residue name + to deduce how the atom name should be formatted. The rules in use got + inferred from an analysis of the PDB. See gist at + <https://gist.github.com/jbarnoud/37a524330f29b5b7b096> for more + details. + """ + if atomname == '': + return '' + if len(atomname) >= 4: + return atomname[:4] + elif len(atomname) == 1: + return ' {} '.format(atomname) + elif ((resname == atomname + or atomname[:2] in self.ions + or atomname == 'UNK' + or (resname in self.special_hg and atomname[:2] == 'HG') + or (resname in self.special_cl and atomname[:2] == 'CL') + or Pair(resname, atomname) in self.include_pairs) + and Pair(resname, atomname) not in self.exclude_pairs): + return '{:<4}'.format(atomname) + return ' {:<3}'.format(atomname) + + @staticmethod + def _format_PDB_charges(charges: np.ndarray) -> np.ndarray: + """Format formal charges to match PDB requirements. + + Formal charge entry is set to empty if charge is 0, otherwise the + charge is set to a two character ```<charge value><charge sign>`` + entry, e.g. ``1+`` or ``2-``. + + This method also verifies that formal charges can adhere to the PDB + format (i.e. charge cannot be > 9 or < -9). + + Parameters + ---------- + charges: np.ndarray + NumPy array of integers representing the formal charges of + the atoms being written. + + Returns + ------- + np.ndarray + NumPy array of dtype object with strings representing the + formal charges of the atoms being written. + """ + if not np.issubdtype(charges.dtype, np.integer): + raise ValueError("formal charges array should be of `int` type") + + outcharges = charges.astype(object) + outcharges[outcharges == 0] = '' # empty strings for no charge case + # using np.where is more efficient than looping in sparse cases + for i in np.where(charges < 0)[0]: + if charges[i] < -9: + errmsg = "formal charge < -9 is not supported by PDB standard" + raise ValueError(errmsg) + outcharges[i] = f"{abs(charges[i])}-" + for i in np.where(charges > 0)[0]: + if charges[i] > 9: + errmsg = "formal charge > 9 is not supported by PDB standard" + raise ValueError(errmsg) + outcharges[i] = f"{charges[i]}+" + return outcharges + +
[docs] def _write_timestep(self, ts, multiframe=False): + """Write a new timestep *ts* to file + + Does unit conversion if necessary. + + By setting *multiframe* = ``True``, MODEL_ ... ENDMDL_ records are + written to represent trajectory frames in a multi-model PDB file. (At + the moment we do *not* write the NUMMDL_ record.) + + The *multiframe* = ``False`` keyword signals that the + :class:`PDBWriter` is in single frame mode and no MODEL_ + records are written. + + .. versionchanged:: 0.7.6 + The *multiframe* keyword was added, which completely determines if + MODEL_ records are written. (Previously, this was decided based on + the underlying trajectory and only if ``len(traj) > 1`` would + MODEL records have been written.) + + .. versionchanged:: 1.0.0 + ChainID now comes from the last character of segid, as stated in + the documentation. An indexing issue meant it previously used the + first charater (Issue #2224) + + .. versionchanged:: 2.0.0 + When only :attr:`record_types` attribute is present, instead of + using ATOM_ for both ATOM_ and HETATM_, HETATM_ record + types are properly written out (Issue #1753). + Writing now only uses the contents of the elements attribute + instead of guessing by default. If the elements are missing, + empty records are written out (Issue #2423). + Atoms are now checked for a valid chainID instead of being + overwritten by the last letter of the `segid` (Issue #3144). + + """ + atoms = self.obj.atoms + pos = atoms.positions + if self.convert_units: + pos = self.convert_pos_to_native(pos, inplace=False) + + if multiframe: + self.MODEL(self.frames_written + 1) + + # Make zero assumptions on what information the AtomGroup has! + # theoretically we could get passed only indices! + def get_attr(attrname, default): + """Try and pull info off atoms, else fake it + + attrname - the field to pull of AtomGroup (plural!) + default - default value in case attrname not found + """ + try: + return getattr(atoms, attrname) + except AttributeError: + if self.frames_written == 0: + warnings.warn("Found no information for attr: '{}'" + " Using default value of '{}'" + "".format(attrname, default)) + return np.array([default] * len(atoms)) + altlocs = get_attr('altLocs', ' ') + resnames = get_attr('resnames', 'UNK') + icodes = get_attr('icodes', ' ') + segids = get_attr('segids', ' ') + chainids = get_attr('chainIDs', '') + resids = get_attr('resids', 1) + occupancies = get_attr('occupancies', 1.0) + tempfactors = get_attr('tempfactors', 0.0) + atomnames = get_attr('names', 'X') + elements = get_attr('elements', ' ') + record_types = get_attr('record_types', 'ATOM') + formal_charges = self._format_PDB_charges(get_attr('formalcharges', 0)) + + def validate_chainids(chainids, default): + """Validate each atom's chainID + + chainids - np array of chainIDs + default - default value in case chainID is considered invalid + """ + invalid_length_ids = False + invalid_char_ids = False + missing_ids = False + + for (i, chainid) in enumerate(chainids): + if chainid == "": + missing_ids = True + chainids[i] = default + elif len(chainid) > 1: + invalid_length_ids = True + chainids[i] = default + elif not chainid.isalnum(): + invalid_char_ids = True + chainids[i] = default + + if invalid_length_ids: + warnings.warn("Found chainIDs with invalid length." + " Corresponding atoms will use value of '{}'" + "".format(default)) + if invalid_char_ids: + warnings.warn("Found chainIDs using unnaccepted character." + " Corresponding atoms will use value of '{}'" + "".format(default)) + if missing_ids: + warnings.warn("Found missing chainIDs." + " Corresponding atoms will use value of '{}'" + "".format(default)) + return chainids + + chainids = validate_chainids(chainids, "X") + + # If reindex == False, we use the atom ids for the serial. We do not + # want to use a fallback here. + if not self._reindex: + try: + atom_ids = atoms.ids + except AttributeError: + raise NoDataError( + 'The "id" topology attribute is not set. ' + 'Either set the attribute or use reindex=True.' + ) + else: + atom_ids = np.arange(len(atoms)) + 1 + + for i, atom in enumerate(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]) + vals['altLoc'] = altlocs[i][:1] + vals['resName'] = resnames[i][:4] + vals['resSeq'] = util.ltruncate_int(resids[i], 4) + vals['iCode'] = icodes[i][:1] + vals['pos'] = pos[i] # don't take off atom so conversion works + vals['occupancy'] = occupancies[i] + vals['tempFactor'] = tempfactors[i] + vals['segID'] = segids[i][:4] + vals['chainID'] = chainids[i] + vals['element'] = elements[i][:2].upper() + vals['charge'] = formal_charges[i] + + # record_type attribute, if exists, can be ATOM or HETATM + try: + self.pdbfile.write(self.fmt[record_types[i]].format(**vals)) + except KeyError: + errmsg = (f"Found {record_types[i]} for the record type, but " + f"only allowed types are ATOM or HETATM") + raise ValueError(errmsg) from None + + if multiframe: + self.ENDMDL() + self.frames_written += 1
+ +
[docs] def HEADER(self, trajectory): + """Write HEADER_ record. + + .. versionchanged:: 0.20.0 + Strip `trajectory.header` since it can be modified by the user and should be + sanitized (Issue #2324) + """ + if not hasattr(trajectory, 'header'): + return + header = trajectory.header.strip() + self.pdbfile.write(self.fmt['HEADER'].format(header))
+ +
[docs] def TITLE(self, *title): + """Write TITLE_ record. + + """ + line = " ".join(title) # TODO: should do continuation automatically + self.pdbfile.write(self.fmt['TITLE'].format(line))
+ +
[docs] def REMARK(self, *remarks): + """Write generic REMARKS_ record (without number). + + Each string provided in *remarks* is written as a separate REMARKS_ + record. + + """ + for remark in remarks: + self.pdbfile.write(self.fmt['REMARK'].format(remark))
+ + def COMPND(self, trajectory): + if not hasattr(trajectory, 'compound'): + return + compound = trajectory.compound + for c in compound: + self.pdbfile.write(self.fmt['COMPND'].format(c)) + +
[docs] def CRYST1(self, dimensions, spacegroup='P 1', zvalue=1): + """Write CRYST1_ record. + """ + self.pdbfile.write(self.fmt['CRYST1'].format( + box=dimensions[:3], + ang=dimensions[3:], + spacegroup=spacegroup, + zvalue=zvalue))
+ +
[docs] def MODEL(self, modelnumber): + """Write the MODEL_ record. + + .. note:: + + The maximum MODEL number is limited to 9999 in the PDB + standard (i.e., 4 digits). If frame numbers are larger than + 9999, they will wrap around, i.e., 9998, 9999, 0, 1, 2, ... + + .. versionchanged:: 0.19.0 + Maximum model number is enforced. + + """ + self.pdbfile.write(self.fmt['MODEL'].format(int(str(modelnumber)[-4:])))
+ +
[docs] def END(self): + """Write END_ record. + + Only a single END record is written. Calling END multiple times has no + effect. Because :meth:`~PDBWriter.close` also calls this + method right before closing the file it is recommended to *not* call + :meth:`~PDBWriter.END` explicitly. + + """ + if not self.has_END: + # only write a single END record + self.pdbfile.write(self.fmt['END']) + self.has_END = True
+ +
[docs] def ENDMDL(self): + """Write the ENDMDL_ record. + + """ + self.pdbfile.write(self.fmt['ENDMDL'])
+ +
[docs] def CONECT(self, conect): + """Write CONECT_ record. + + """ + conect = ["{0:5d}".format(entry) for entry in conect] + conect = "".join(conect) + self.pdbfile.write(self.fmt['CONECT'].format(conect))
+ + +
[docs]class ExtendedPDBReader(PDBReader): + """PDBReader that reads a PDB-formatted file with five-digit residue numbers. + + This reader does not conform to the `PDB 3.3 standard`_ because it allows + five-digit residue numbers that may take up columns 23 to 27 (inclusive) + instead of being confined to 23-26 (with column 27 being reserved for the + insertion code in the PDB standard). PDB files in this format are written + by popular programs such as VMD_. + + See Also + -------- + :class:`PDBReader` + + + .. _VMD: http://www.ks.uiuc.edu/Research/vmd/ + + .. versionadded:: 0.8 + """ + format = "XPDB"
+ + +
[docs]class MultiPDBWriter(PDBWriter): + """PDB writer that implements a subset of the `PDB 3.3 standard`_ . + + PDB format as used by NAMD/CHARMM: 4-letter resnames and segID, altLoc + is written. + + By default, :class:`MultiPDBWriter` writes a PDB "movie" (multi frame mode, + *multiframe* = ``True``), consisting of multiple models (using the MODEL_ + and ENDMDL_ records). + + + .. _MODEL: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#MODEL + .. _ENDMDL: http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ENDMDL + .. _CONECT: http://www.wwpdb.org/documentation/file-format-content/format33/sect10.html#CONECT + + + See Also + -------- + This class is identical to :class:`PDBWriter` with the one + exception that it defaults to writing multi-frame PDB files instead of + single frames. + + + .. versionadded:: 0.7.6 + + """ + format = ['PDB', 'ENT'] + multiframe = True # For Writer registration + singleframe = False
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.html new file mode 100644 index 0000000000..55a610f907 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.html @@ -0,0 +1,505 @@ + + + + + + MDAnalysis.coordinates.PDBQT — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.PDBQT

+# -*- 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-2017 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
+#
+
+
+"""
+PDBQT structure files in MDAnalysis --- :mod:`MDAnalysis.coordinates.PDBQT`
+===========================================================================
+
+MDAnalysis reads coordinates from PDBQT_ files and additional optional
+data such as B-factors, partial charge and AutoDock_ atom types.  It
+is also possible to substitute a PDBQT file for a PSF file in order to
+define the list of atoms (but no connectivity information will be
+available in this case).
+
+.. _PDBQT:
+   http://autodock.scripps.edu/faqs-help/faq/what-is-the-format-of-a-pdbqt-file
+.. _AutoDock:
+   http://autodock.scripps.edu/
+"""
+
+import os
+import errno
+import itertools
+import numpy as np
+import warnings
+
+from ..lib import util
+from . import base
+
+
+
[docs]class PDBQTReader(base.SingleFrameReaderBase): + """PDBQTReader that reads a PDBQT-formatted file, no frills. + + Records read: + - CRYST1 for unitcell A,B,C, alpha,beta,gamm + - ATOM. HETATM for x,y,z + + Original `PDB format documentation`_ with `AutoDOCK extensions`_ + + + .. _PDB format documentation: + http://www.wwpdb.org/documentation/file-format-content/format32/v3.2.html + .. _AutoDOCK extensions: + http://autodock.scripps.edu/faqs-help/faq/what-is-the-format-of-a-pdbqt-file + + ============= ============ =========== ============================================= + COLUMNS DATA TYPE FIELD DEFINITION + ============= ============ =========== ============================================= + 1 - 6 Record name "CRYST1" + 7 - 15 Real(9.3) a a (Angstroms). + 16 - 24 Real(9.3) b b (Angstroms). + 25 - 33 Real(9.3) c c (Angstroms). + 34 - 40 Real(7.2) alpha alpha (degrees). + 41 - 47 Real(7.2) beta beta (degrees). + 48 - 54 Real(7.2) gamma gamma (degrees). + + 1 - 6 Record name "ATOM " + 7 - 11 Integer serial Atom serial number. + 13 - 16 Atom name Atom name. + 17 Character altLoc Alternate location indicator. IGNORED + 18 - 21 Residue name resName Residue name. + 22 Character chainID Chain identifier. + 23 - 26 Integer resSeq Residue sequence number. + 27 AChar iCode Code for insertion of residues. IGNORED + 31 - 38 Real(8.3) x Orthogonal coordinates for X in Angstroms. + 39 - 46 Real(8.3) y Orthogonal coordinates for Y in Angstroms. + 47 - 54 Real(8.3) z Orthogonal coordinates for Z in Angstroms. + 55 - 60 Real(6.2) occupancy Occupancy. + 61 - 66 Real(6.2) tempFactor Temperature factor. + 67 - 76 Real(10.4) partialChrg Gasteiger PEOE partial charge *q*. + 79 - 80 LString(2) atomType AutoDOCK atom type *t*. + ============= ============ =========== ============================================= + + We ignore torsion notation and just pull the partial charge and atom type columns:: + + COMPND NSC7810 + REMARK 3 active torsions: + REMARK status: ('A' for Active; 'I' for Inactive) + REMARK 1 A between atoms: A7_7 and C22_23 + REMARK 2 A between atoms: A9_9 and A11_11 + REMARK 3 A between atoms: A17_17 and C21_21 + ROOT + 123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789. (column reference) + ATOM 1 A1 INH I 1.054 3.021 1.101 0.00 0.00 0.002 A + ATOM 2 A2 INH I 1.150 1.704 0.764 0.00 0.00 0.012 A + ATOM 3 A3 INH I -0.006 0.975 0.431 0.00 0.00 -0.024 A + ATOM 4 A4 INH I 0.070 -0.385 0.081 0.00 0.00 0.012 A + ATOM 5 A5 INH I -1.062 -1.073 -0.238 0.00 0.00 0.002 A + ATOM 6 A6 INH I -2.306 -0.456 -0.226 0.00 0.00 0.019 A + ATOM 7 A7 INH I -2.426 0.885 0.114 0.00 0.00 0.052 A + ATOM 8 A8 INH I -1.265 1.621 0.449 0.00 0.00 0.002 A + ATOM 9 A9 INH I -1.339 2.986 0.801 0.00 0.00 -0.013 A + ATOM 10 A10 INH I -0.176 3.667 1.128 0.00 0.00 0.013 A + ENDROOT + BRANCH 9 11 + ATOM 11 A11 INH I -2.644 3.682 0.827 0.00 0.00 -0.013 A + ATOM 12 A16 INH I -3.007 4.557 -0.220 0.00 0.00 0.002 A + ATOM 13 A12 INH I -3.522 3.485 1.882 0.00 0.00 0.013 A + ATOM 14 A15 INH I -4.262 5.209 -0.177 0.00 0.00 -0.024 A + ATOM 15 A17 INH I -2.144 4.784 -1.319 0.00 0.00 0.052 A + ATOM 16 A14 INH I -5.122 4.981 0.910 0.00 0.00 0.012 A + ATOM 17 A20 INH I -4.627 6.077 -1.222 0.00 0.00 0.012 A + ATOM 18 A13 INH I -4.749 4.135 1.912 0.00 0.00 0.002 A + ATOM 19 A19 INH I -3.777 6.285 -2.267 0.00 0.00 0.002 A + ATOM 20 A18 INH I -2.543 5.650 -2.328 0.00 0.00 0.019 A + BRANCH 15 21 + ATOM 21 C21 INH I -0.834 4.113 -1.388 0.00 0.00 0.210 C + ATOM 22 O1 INH I -0.774 2.915 -1.581 0.00 0.00 -0.644 OA + ATOM 23 O3 INH I 0.298 4.828 -1.237 0.00 0.00 -0.644 OA + ENDBRANCH 15 21 + ENDBRANCH 9 11 + BRANCH 7 24 + ATOM 24 C22 INH I -3.749 1.535 0.125 0.00 0.00 0.210 C + ATOM 25 O2 INH I -4.019 2.378 -0.708 0.00 0.00 -0.644 OA + ATOM 26 O4 INH I -4.659 1.196 1.059 0.00 0.00 -0.644 OA + ENDBRANCH 7 24 + TORSDOF 3 + 123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789. (column reference) + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + """ + format = 'PDBQT' + units = {'time': None, 'length': 'Angstrom'} + + def _read_first_frame(self): + coords = [] + unitcell = np.zeros(6, dtype=np.float32) + with util.openany(self.filename) as pdbfile: + for line in pdbfile: + # Should only break at the 'END' of a model definition + # and prevent premature exit for a torsion termination + # , eg, ENDBRANCH + if line.startswith('END\n'): + break + if line.startswith('CRYST1'): + # lengths + x, y, z = np.float32((line[6:15], line[15:24], line[24:33])) + # angles + A, B, G = np.float32((line[33:40], line[40:47], line[47:54])) + unitcell[:] = x, y, z, A, B, G + if line.startswith(('ATOM', 'HETATM')): + # convert all entries at the end once for optimal speed + coords.append([line[30:38], line[38:46], line[46:54]]) + self.n_atoms = len(coords) + self.ts = self._Timestep.from_coordinates( + coords, + **self._ts_kwargs) + self.ts.dimensions = unitcell + self.ts.frame = 0 # 0-based frame number + if self.convert_units: + # in-place ! + self.convert_pos_from_native(self.ts._pos) + if self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) + +
[docs] def Writer(self, filename, **kwargs): + """Returns a permissive (simple) PDBQTWriter for *filename*. + + Parameters + ---------- + filename : str + filename of the output PDBQT file + + Returns + ------- + :class:`PDBQTWriter` + + """ + return PDBQTWriter(filename, **kwargs)
+ + +
[docs]class PDBQTWriter(base.WriterBase): + """PDBQT writer that implements a subset of the PDB_ 3.2 standard and the PDBQT_ spec. + + .. _PDB: http://www.wwpdb.org/documentation/file-format-content/format32/v3.2.html + .. _PDBQT: http://autodock.scripps.edu/faqs-help/faq/what-is-the-format-of-a-pdbqt-file + + + .. versionchanged:: 2.6.0 + Files are now written in `wt` mode, and keep extensions, allowing + for files to be written under compressed formats + """ + + fmt = { + 'ATOM': ("ATOM {serial:5d} {name:<4.4s} {resName:<4.4s}" + "{chainID:1.1s}{resSeq:4d}{iCode:1.1s}" + " {pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}{occupancy:6.2f}" + "{tempFactor:6.2f} {charge:< 1.3f} {element:<2.2s}\n"), + 'REMARK': "REMARK {0}\n", + 'TITLE': "TITLE {0}\n", + 'CRYST1': ("CRYST1{box[0]:9.3f}{box[1]:9.3f}{box[2]:9.3f}" + "{ang[0]:7.2f}{ang[1]:7.2f}{ang[2]:7.2f} " + "{spacegroup:<11s}{zvalue:4d}\n"), + } + format = 'PDBQT' + units = {'time': None, 'length': 'Angstrom'} + pdb_coor_limits = {"min": -999.9995, "max": 9999.9995} + + def __init__(self, filename, **kwargs): + self.filename = util.filename(filename, ext='pdbqt', keep=True) + self.pdb = util.anyopen(self.filename, 'wt') + +
[docs] def close(self): + self.pdb.close()
+ +
[docs] def write(self, selection, frame=None): + """Write selection at current trajectory frame to file. + + Parameters + ---------- + selection : AtomGroup + The selection to be written + frame : int (optional) + optionally move to frame index `frame` before writing; the default + is to write the current trajectory frame + + Note + ---- + The first letter of the + :attr:`~MDAnalysis.core.groups.Atom.segid` is used as the PDB + chainID. + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + + """ + try: + u = selection.universe + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if frame is not None: + u.trajectory[frame] # advance to frame + else: + try: + frame = u.trajectory.ts.frame + except AttributeError: + frame = 0 # should catch cases when we are analyzing a single PDB (?) + + atoms = selection.atoms # make sure to use atoms (Issue 46) + coor = atoms.positions # can write from selection == Universe (Issue 49) + + # Check attributes + attrs = {} + missing_topology = [] + for attr, dflt in ( + ('altLocs', ' '), + ('charges', 0.0), + ('icodes', ' '), + ('names', 'X'), + ('occupancies', 1.0), + ('resids', 1), + ('resnames', 'UNK'), + ('tempfactors', 0.0), + ('types', ' '), + ): + try: + attrs[attr] = getattr(atoms, attr) + except AttributeError: + attrs[attr] = itertools.cycle((dflt,)) + missing_topology.append(attr) + # Order of preference: chainids -> segids -> blank string + try: + attrs['chainids'] = atoms.chainids + except AttributeError: + try: + attrs['chainids'] = atoms.segids + except AttributeError: + attrs['chainids'] = itertools.cycle((' ',)) + missing_topology.append('chainids') + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "".format(miss=', '.join(missing_topology))) + + # check if any coordinates are illegal (coordinates are already + # in Angstroem per package default) + if not self.has_valid_coordinates(self.pdb_coor_limits, coor): + self.close() + try: + os.remove(self.filename) + except OSError as err: + if err.errno == errno.ENOENT: + pass + raise ValueError( + "PDB files must have coordinate values between {0:.3f}" + " and {1:.3f} Angstroem: No file was written." + "".format(self.pdb_coor_limits["min"], + self.pdb_coor_limits["max"])) + + # Write title record + # http://www.wwpdb.org/documentation/file-format-content/format32/sect2.html + line = "FRAME " + str(frame) + " FROM " + str(u.trajectory.filename) + self.pdb.write(self.fmt['TITLE'].format(line)) + + # Write CRYST1 record + # http://www.wwpdb.org/documentation/file-format-content/format32/sect8.html + box = self.convert_dimensions_to_unitcell(u.trajectory.ts) + self.pdb.write(self.fmt['CRYST1'].format(box=box[:3], ang=box[3:], + spacegroup='P 1', zvalue=1)) + + # Write atom records + # http://www.wwpdb.org/documentation/file-format-content/format32/sect9.html + for serial, (pos, name, resname, chainid, resid, icode, + occupancy, tempfactor, charge, element) in enumerate( + zip(coor, attrs['names'], attrs['resnames'], attrs['chainids'], + attrs['resids'], attrs['icodes'], attrs['occupancies'], + attrs['tempfactors'], attrs['charges'], attrs['types']), + start=1): + serial = util.ltruncate_int(serial, 5) # check for overflow here? + resid = util.ltruncate_int(resid, 4) + name = name[:4] + if len(name) < 4: + name = " " + name # customary to start in column 14 + chainid = chainid.strip()[-1:] # take the last character + + self.pdb.write(self.fmt['ATOM'].format( + serial=serial, + name=name, + resName=resname, + chainID=chainid, + resSeq=resid, + iCode=icode, + pos=pos, + occupancy=occupancy, + tempFactor=tempfactor, + charge=charge, + element=element, + )) + + self.close()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/PQR.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PQR.html new file mode 100644 index 0000000000..a231e33c98 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/PQR.html @@ -0,0 +1,478 @@ + + + + + + MDAnalysis.coordinates.PQR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.PQR

+# -*- 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-2017 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
+#
+
+
+"""
+PQR file format --- :mod:`MDAnalysis.coordinates.PQR`
+=====================================================
+
+Read atoms with charges from a PQR_ file (as written by PDB2PQR_). The
+following is adopted from the description of the PQR_ format as used by APBS_:
+
+*MDAnalysis* reads very loosely-formatted PQR files: all fields are
+**whitespace-delimited** rather than the strict column formatting mandated
+by the PDB_ format. This more liberal formatting allows coordinates
+which are larger/smaller than ±999 Å.
+
+MDAnalysis reads data on a per-line basis from PQR files using the following format::
+
+   recordName serial atomName residueName chainID residueNumber X Y Z charge radius
+
+If this fails it is assumed that the *chainID* was omitted and the shorter
+format is read::
+
+   recordName serial atomName residueName residueNumber X Y Z charge radius
+
+Anything else will raise a :exc:`ValueError`.
+
+The whitespace is the most important feature of this format: fields
+*must* be separated by at least one space or tab character. The fields
+are:
+
+*recordName*
+    A string which specifies the type of PQR entry and should either be ATOM or
+    HETATM.
+*serial*
+    An integer which provides the atom index (but note that MDAnalysis renumbers
+    atoms so one cannot rely on the *serial*)
+*atomName*
+    A string which provides the atom name.
+*residueName*
+    A string which provides the residue name.
+*chainID*
+    An optional string which provides the chain ID of the atom.
+*residueNumber*
+    An integer which provides the residue index.
+*X Y Z*
+    Three floats which provide the atomic coordiantes.
+*charge*
+    A float which provides the atomic charge (in electrons).
+*radius*
+    A float which provides the atomic radius (in Å).
+
+Clearly, this format can deviate wildly from PDB_ due to the use of whitespaces
+rather than specific column widths and alignments. This deviation can be
+particularly significant when large coordinate values are used.
+
+Output should look like this (although the only real requirement is
+*whitespace* separation between *all* entries). The chainID is optional
+and can be omitted::
+
+  ATOM      1  N    MET     1     -11.921   26.307   10.410 -0.3000 1.8500
+  ATOM     36  NH1  ARG     2      -6.545   25.499    3.854 -0.8000 1.8500
+  ATOM     37 HH11  ARG     2      -6.042   25.480    4.723  0.4600 0.2245
+
+
+.. Warning:: Fields *must be white-space separated* or data are read
+             incorrectly. PDB formatted files are *not* guaranteed to be
+             white-space separated so extra care should be taken when quickly
+             converting PDB files into PQR files using simple scripts.
+
+For example, PQR files created with PDB2PQR_ and the `--whitespace`
+option are guaranteed to conform to the above format::
+
+   pdb2pqr --ff=charmm --whitespace 4ake.pdb 4ake.pqr
+
+
+Notes
+-----
+The PQR format does not provide a means by which to provide box information.
+In all cases the `dimensions` attribute will be set to `None`.
+
+
+.. _PQR:     https://apbs-pdb2pqr.readthedocs.io/en/latest/formats/pqr.html
+.. _APBS:    https://apbs-pdb2pqr.readthedocs.io/en/latest/apbs/index.html
+.. _PDB2PQR: https://apbs-pdb2pqr.readthedocs.io/en/latest/pdb2pqr/index.html
+.. _PDB:     http://www.wwpdb.org/documentation/file-format
+"""
+import itertools
+import numpy as np
+import warnings
+
+from ..lib import util
+from . import base
+
+
+
[docs]class PQRReader(base.SingleFrameReaderBase): + """Read a PQR_ file into MDAnalysis. + + .. _PQR: + https://apbs-pdb2pqr.readthedocs.io/en/latest/formats/pqr.html + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + """ + format = 'PQR' + units = {'time': None, 'length': 'Angstrom'} + + # how to slice fields[x:y] to grab coordinates + _SLICE_INDICES = { + 'ORIGINAL': (-5, -2), + 'NO_CHAINID': (-5, -2), + 'GROMACS': (-6, -3), + } + + def _read_first_frame(self): + from ..topology.PQRParser import PQRParser + flavour = None + + coords = [] + with util.openany(self.filename) as pqrfile: + for line in pqrfile: + if line.startswith(('ATOM', 'HETATM')): + if flavour is None: + flavour = PQRParser.guess_flavour(line) + x, y = self._SLICE_INDICES[flavour] + + fields = line.split() + # convert all entries at the end once for optimal speed + coords.append(fields[x:y]) + + self.n_atoms = len(coords) + self.ts = self._Timestep.from_coordinates( + coords, **self._ts_kwargs) + self.ts.frame = 0 # 0-based frame number + if self.convert_units: + # in-place ! + self.convert_pos_from_native(self.ts._pos) + +
[docs] def Writer(self, filename, **kwargs): + """Returns a PQRWriter for *filename*. + + Parameters + ---------- + filename : str + filename of the output PQR file + + Returns + ------- + :class:`PQRWriter` + """ + return PQRWriter(filename, **kwargs)
+ + +
[docs]class PQRWriter(base.WriterBase): + """Write a single coordinate frame in whitespace-separated PQR format. + + Charges ("Q") are taken from the + :attr:`MDAnalysis.core.groups.Atom.charge` attribute while + radii are obtaine from the + :attr:`MDAnalysis.core.groups.Atom.radius` attribute. + + * If the segid is 'SYSTEM' then it will be set to the empty + string. Otherwise the first letter will be used as the chain ID. + * The serial number always starts at 1 and increments sequentially + for the atoms. + + The output format is similar to ``pdb2pqr --whitespace``. + + + .. versionadded:: 0.9.0 + .. versionchanged:: 2.6.0 + Files are now written in `wt` mode, and keep extensions, allowing + for files to be written under compressed formats + """ + format = 'PQR' + units = {'time': None, 'length': 'Angstrom'} + + # serial, atomName, residueName, chainID, residueNumber, XYZ, charge, radius + fmt_ATOM = ("ATOM {serial:6d} {name:<4} {resname:<3} {chainid:1.1}" + " {resid:4d} {pos[0]:-8.3f} {pos[1]:-8.3f}" + " {pos[2]:-8.3f} {charge:-7.4f} {radius:6.4f}\n") + fmt_remark = "REMARK {0} {1}\n" + + def __init__(self, filename, convert_units=True, **kwargs): + """Set up a PQRWriter with full whitespace separation. + + Parameters + ---------- + filename : str + output filename + convert_units: bool (optional) + units are converted to the MDAnalysis base format; [``True``] + remarks : str (optional) + remark lines (list of strings) or single string to be added to the + top of the PQR file + """ + self.filename = util.filename(filename, ext='pqr', keep=True) + self.convert_units = convert_units # convert length and time to base units + self.remarks = kwargs.pop('remarks', "PQR file written by MDAnalysis") + +
[docs] def write(self, selection, frame=None): + """Write selection at current trajectory frame to file. + + Parameters + ---------- + selection : AtomGroup or Universe + MDAnalysis AtomGroup or Universe + frame : int (optional) + optionally move to frame index `frame`; by default, write the + current frame + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + + """ + # write() method that complies with the Trajectory API + try: + u = selection.universe + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if frame is not None: + u.trajectory[frame] # advance to frame + else: + try: + frame = u.trajectory.ts.frame + except AttributeError: + frame = 0 # should catch cases when we are analyzing a single frame(?) + + atoms = selection.atoms # make sure to use atoms (Issue 46) + coordinates = atoms.positions # can write from selection == Universe (Issue 49) + if self.convert_units: + self.convert_pos_to_native(coordinates) # inplace because coordinates is already a copy + + # Check atom attributes + # required: + # - name + # - resname + # - chainid + # - resid + # - position + # - charge + # - radius + attrs = {} + missing_topology = [] + for attr, dflt in ( + ('names', itertools.cycle(('X',))), + ('resnames', itertools.cycle(('UNK',))), + ('resids', itertools.cycle((1,))), + ('charges', itertools.cycle((0.0,))), + ('radii', itertools.cycle((1.0,))), + ): + try: + attrs[attr] = getattr(atoms, attr) + except AttributeError: + attrs[attr] = dflt + missing_topology.append(attr) + + # chainids require special handling + # try chainids, then segids + # if neither, use ' ' + # if 'SYSTEM', use ' ' + try: + attrs['chainids'] = atoms.chainids + except AttributeError: + try: + attrs['chainids'] = atoms.segids + except AttributeError: + pass + if not 'chainids' in attrs or all(attrs['chainids'] == 'SYSTEM'): + attrs['chainids'] = itertools.cycle((' ',)) + + if 'charges' in missing_topology: + total_charge = 0.0 + else: + total_charge = atoms.total_charge() + + if missing_topology: + warnings.warn( + "Supplied AtomGroup was missing the following attributes: " + "{miss}. These will be written with default values. " + "".format(miss=', '.join(missing_topology))) + + with util.openany(self.filename, 'wt') as pqrfile: + # Header / Remarks + # The *remarknumber* is typically 1 but :program:`pdb2pgr` + # also uses 6 for the total charge and 5 for warnings. + for rem in util.asiterable(self.remarks): + pqrfile.write(self.fmt_remark.format(rem, 1)) + pqrfile.write(self.fmt_remark.format( + "Input: frame {0} of {1}".format(frame, u.trajectory.filename), + 5)) + pqrfile.write(self.fmt_remark.format( + "total charge: {0:+8.4f} e".format(total_charge), 6)) + + # Atom descriptions and coords + for atom_index, (pos, name, resname, chainid, resid, charge, radius) in enumerate(zip( + coordinates, attrs['names'], attrs['resnames'], attrs['chainids'], + attrs['resids'], attrs['charges'], attrs['radii']), start=1): + # pad so that only 4-letter atoms are left-aligned + name = " " + name if len(name) < 4 else name + + pqrfile.write(self.fmt_ATOM.format( + serial=atom_index, name=name, resname=resname, + chainid=chainid, resid=resid, pos=pos, charge=charge, + radius=radius))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/TNG.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TNG.html new file mode 100644 index 0000000000..621f5d1794 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TNG.html @@ -0,0 +1,669 @@ + + + + + + MDAnalysis.coordinates.TNG — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.TNG

+# -*- 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-2017 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
+#
+
+"""
+TNG trajectory files --- :mod:`MDAnalysis.coordinates.TNG`
+==========================================================
+
+
+The TNG format :cite:p:`Lundborg2014` is a format used in `GROMACS`_ for
+storage of trajectory and topology information. The TNG format allows a wide
+range of compression algorithms and unlike the compressed XTC format can also
+store velocities and forces in addition to positions.
+
+The classes in this module are based on the `pytng`_ package for reading TNG
+files. The reader is directed to the `pytng documentation`_ for further reading
+about how pytng works under the hood. Pytng is an optional dependency and must
+be installed to use this Reader. Use of the reader without pytng installed will
+raise an `ImportError`. The variable `HAS_PYTNG` indicates whether this module
+has pytng availble.
+
+In addition to particle-dependent trajectory information like positions,
+forces and velocities, the TNG format can store trajectory metadata and
+other arbitrary time dependent data. Additional information can range from
+the virial and pressure components to the molecular topology of the system.
+This is enabled by a block based system in which binary flags indicate the
+presence or absence of various data blocks. The structure of a TNG file is
+provided  in the `TNG specification`_. The TNG paper :cite:p:`Lundborg2014` and
+the `pytng documentation`_ are also good resources. The user is encouraged to
+read the full list of `TNG blocks`_ to understand the full power of the TNG
+format.
+
+
+
+Current Limitations
+-------------------
+Currently there is only a Reader for TNG files and no Writer. This will depend
+on upstream changes in pytng. Additionally, it is not currently possible to
+read the molecular topology from a TNG file.
+
+There are also some limitations to reading TNG files with pytng.
+Currently we do not allow data to be read *off stride*. In essence this
+means that all of the critical trajectory data (positions, box, velocities
+(if present), forces (if present)) must share the same stride in trajectory
+integrator steps. These critical blocks in the TNG file are henceforth called
+*special blocks*. Optional blocks (all blocks that are not special blocks)
+will not be read if they do not share an integrator step with, or are not
+divisible by the shared integrator step of the special blocks.
+
+
+References
+----------
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Lundborg2014
+
+
+.. Links
+
+.. _GROMACS:
+    https://www.gromacs.org/
+.. _pytng:
+    https://github.com/MDAnalysis/pytng
+.. _pytng documentation:
+    https://www.mdanalysis.org/pytng/
+.. _TNG blocks:
+    https://www.mdanalysis.org/pytng/documentation_pages/Blocks.html
+.. _TNG specification:
+    https://gitlab.com/hugomacdermott/tng/-/blob/master/Trajectoryformatspecification.mk
+
+"""
+
+import warnings
+from typing import List, Optional
+
+import numpy as np
+from MDAnalysis.coordinates import base
+from MDAnalysis.coordinates.timestep import Timestep
+from MDAnalysis.lib.mdamath import triclinic_box
+from MDAnalysis.lib.util import store_init_arguments
+
+from ..due import Doi, due
+
+try:
+    import pytng
+except ImportError:
+    # Indicates whether pytng is found.
+    HAS_PYTNG = False
+else:
+    # Indicates whether pytng is found.
+    HAS_PYTNG = True
+
+
+
[docs]class TNGReader(base.ReaderBase): + r"""Reader for the TNG format + + The TNG format :cite:p:`Lundborg2014` is a format used in `GROMACS`_ for + storage of trajectory and topology information. This reader is are based on + the `pytng`_ package for reading TNG files. The reader is directed to the + `pytng documentation`_ and `TNG specification`_ for further reading. + + The TNG format allows a wide range of compression + algorithms and unlike the compressed XTC format can also store velocities + and forces in addition to positions. + + The contents of the *special blocks* (positions, box, velocities, forces) + are read into the timestep if present. Additional blocks are read into the + `ts.data` dictionary if they are available at the current frame. + + .. versionadded:: 2.4.0 + """ + + format = "TNG" + # NOTE: Time units are in seconds unlike other GROMACS formats + units = { + "time": "second", + "length": "nm", + "velocity": "nm/ps", + "force": "kJ/(mol*nm)", + } + + _box_blockname = "TNG_TRAJ_BOX_SHAPE" + _positions_blockname = "TNG_TRAJ_POSITIONS" + _velocities_blockname = "TNG_TRAJ_VELOCITIES" + _forces_blockname = "TNG_TRAJ_FORCES" + _special_blocks = [ + _box_blockname, + _positions_blockname, + _velocities_blockname, + _forces_blockname, + ] + + @due.dcite(Doi("10.1002/jcc.23495"), description="The TNG paper", path=__name__) + @store_init_arguments + def __init__(self, filename: str, convert_units: bool = True, **kwargs): + """Initialize a TNG trajectory + + Parameters + ---------- + filename : str + filename of the trajectory + convert_units : bool (optional) + convert into MDAnalysis units + + """ + if not HAS_PYTNG: + raise ImportError("TNGReader: To read TNG files please install pytng") + + super(TNGReader, self).__init__(filename, **kwargs) + + self.filename = filename + self.convert_units = convert_units + + self._file_iterator = pytng.TNGFileIterator(self.filename, "r") + self.n_atoms = self._file_iterator.n_atoms + self._n_steps = self._file_iterator.n_steps + + # names of the blocks + self._block_names = list(self._file_iterator.block_ids.keys()) + # block ids, dict of C long long + self._block_dictionary = self._file_iterator.block_ids + self._block_strides = self._file_iterator.block_strides + self._data_frames = self._file_iterator.n_data_frames + # init all special blocks to not present + self._special_block_present = {k: False for k in self._special_blocks} + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + + # check for all the special blocks + self._has_box = self._box_blockname in self._block_names + if self._has_box: + self._special_block_present[self._box_blockname] = True + self.ts.dimensions = np.zeros(6, dtype=np.float32) + + self._has_positions = self._positions_blockname in self._block_names + if self._has_positions: + self._special_block_present[self._positions_blockname] = True + self.ts.positions = self._file_iterator.make_ndarray_for_block_from_name( + self._positions_blockname + ) + + self._has_velocities = self._velocities_blockname in self._block_names + if self._has_velocities: + self._special_block_present[self._velocities_blockname] = True + self.ts.velocities = self._file_iterator.make_ndarray_for_block_from_name( + self._velocities_blockname + ) + + self._has_forces = self._forces_blockname in self._block_names + if self._has_forces: + self._special_block_present[self._forces_blockname] = True + self.ts.forces = self._file_iterator.make_ndarray_for_block_from_name( + self._forces_blockname + ) + + # check for any additional blocks that will be read into ts.data + self._additional_blocks = [ + block for block in self._block_names if block not in self._special_blocks + ] + self._check_strides_and_frames() + self._frame = 0 + # box needs a temporary place to be stored as ts.dimensions is + # wrong shape initially + self._box_temp = self._file_iterator.make_ndarray_for_block_from_name( + self._box_blockname + ) + self._frame = -1 + self._read_next_timestep() + + def _check_strides_and_frames(self): + """ + Check that the strides and frame numbers of the blocks in the TNG + file match up so that the file can be iterated over retrieving data at + each integrator step + """ + + strides = [] + n_data_frames = [] + + for block in self.special_blocks: + stride = self._block_strides[block] + strides.append(stride) + n_data_frame = self._data_frames[block] + n_data_frames.append(n_data_frame) + + strides_eq = all(v == strides[0] for v in strides) + frames_eq = all(v == n_data_frames[0] for v in n_data_frames) + + if (not strides_eq) or (not frames_eq): + raise IOError( + "Strides of TNG special blocks not equal, file cannot be read" + ) + + self._global_stride = strides[0] + # NOTE frame number is 0 indexed so increment + self._n_frames = n_data_frames[0] + 1 + + self._additional_blocks_to_read = [] + for block in self._additional_blocks: + stride_add = self._block_strides[block] + if stride_add != self._global_stride: + if stride_add % self._global_stride: # pragma: no cover + warnings.warn( + f"TNG additional block {block} does not match" + " strides of other blocks and is not" + " divisible by the global stride_length." + " It will not be read" + ) + else: + self._additional_blocks_to_read.append(block) # pragma: no cover + else: + self._additional_blocks_to_read.append(block) + +
[docs] def close(self): + """close the reader""" + self._file_iterator._close()
+ +
[docs] @staticmethod + def parse_n_atoms(filename: str) -> int: + """parse the number of atoms in the TNG trajectory file + + Parameters + ---------- + filename : str + The name of the TNG file + + Returns + ------- + n_atoms : int + The number of atoms in the TNG file + + """ + if not HAS_PYTNG: + raise ImportError("TNGReader: To read TNG files please install pytng") + with pytng.TNGFileIterator(filename, "r") as tng: + n_atoms = tng.n_atoms + return n_atoms
+ + @property + def n_frames(self) -> int: + """number of frames in trajectory + + Returns + ------- + n_frames : int + The number of data containing frames in the trajectory + """ + return self._n_frames + + @property + def blocks(self) -> List[str]: + """list of the blocks that are in the file + + Returns + ------- + + blocks : list + The block names present in the TNG trajectory + """ + return self._block_names + + @property + def special_blocks(self) -> List[str]: + """list of the special blocks that are in the file + + Returns + ------- + + special_blocks : list + The special block names (positions, box, velocities, forces) + present in the TNG trajectory + """ + return [k for k, v in self._special_block_present.items() if v] + + @property + def additional_blocks(self) -> List[str]: + """list of the additional (non-special) blocks that are being read from + the trajectory. This may be exclude some blocks present in the file if + they do not fall on the same trajectory stride as the positions and + velocities. + + Returns + ------- + + additional_blocks : list + The additional block names in the TNG trajectory + """ + return self._additional_blocks_to_read + + def _reopen(self): + """reopen the trajectory""" + self.ts.frame = 0 + self._frame = -1 + self._file_iterator._close() + self._file_iterator._open(self.filename, "r") + + def _frame_to_step(self, frame: int) -> int: + """Convert a frame number to an integrator step + + Parameters + ---------- + frame : int + The frame number + + Returns + ------- + integrators_step : int + The integrator step of the frame in the TNG file + + """ + return frame * self._global_stride + + def _read_frame(self, i: int) -> Timestep: + """read frame i + + Parameters + ---------- + i : int + The trajectory frame to be read + + Returns + ------- + ts : Timestep + Data from frame i encapsulated in an MDA `:class:Timestep` + """ + self._frame = i - 1 + ts = self._read_next_timestep() + return ts + + def _read_next_timestep(self, ts: Optional[Timestep] = None) -> Timestep: + """Read next frame into a timestep + + Parameters + ---------- + ts : Timestep + The timestep to read the data into + + Returns + ------- + ts : Timestep + The timestep filled with data from the next step + """ + if self._frame == self.n_frames - 1: + raise IOError("trying to go over trajectory limit") + if ts is None: + ts = self.ts + # convert from frames to integrator steps + step = self._frame_to_step(self._frame + 1) + iterator_step = self._file_iterator.read_step(step) + self._frame += 1 + ts = self._frame_to_ts(iterator_step, ts) + return ts + + def _frame_to_ts( + self, curr_step: "pytng.TNGCurrentIntegratorStep", ts: Timestep + ) -> Timestep: + """convert a TNGCurrentIteratorStep to an MDA Timestep + + Parameters + ---------- + curr_step : pytng.TNGCurrentIntegratorStep + The current timestep in the TNG trajectory + + ts : Timestep + The current timestep in the MDA trajectory + + Returns + ------- + ts: Timestep + The current timestep in the MDA trajectory with data from TNG + trajectory integrator step + + Raises + ------ + IOError + The reading of one of the attributes from the TNG file failed + """ + + ts.frame = self._frame + time = curr_step.get_time() + if self.convert_units: + time = self.convert_time_from_native(time) + ts.time = time + ts.data["step"] = curr_step.step + + if self._has_box: + curr_step.get_box(self._box_temp) + ts.dimensions = triclinic_box(*self._box_temp.reshape(3, 3)) + if not curr_step.read_success: + raise IOError("Failed to read box from TNG file") + if self.convert_units: + self.convert_pos_from_native(ts.dimensions[:3]) + if self._has_positions: + curr_step.get_positions(ts.positions) + if not curr_step.read_success: + raise IOError("Failed to read positions from TNG file") + if self.convert_units: + self.convert_pos_from_native(ts.positions) + if self._has_velocities: + curr_step.get_velocities(ts.velocities) + if not curr_step.read_success: + raise IOError("Failed to read velocities from TNG file") + if self.convert_units: + self.convert_velocities_from_native(ts.velocities) + if self._has_forces: + curr_step.get_forces(ts.forces) + if not curr_step.read_success: + raise IOError("Failed to read forces from TNG file") + if self.convert_units: + self.convert_forces_from_native(self.ts.forces) + + for block in self._additional_blocks_to_read: + add_block_stride = self._block_strides[block] + # check we are on stride for our block + if not (add_block_stride % self._global_stride): + block_data = self._file_iterator.make_ndarray_for_block_from_name(block) + # additional blocks read into ts.data dictionary + ts.data[block] = curr_step.get_blockid( + self._block_dictionary[block], block_data + ) + if not curr_step.read_success: + raise IOError( + f"Failed to read additional block {block} from TNG file" + ) + return ts + + def __getstate__(self): + """Make a dictionary of the class state to pickle Reader instance. + + Must be done manually as pytng uses a non-trivial`__cinit__`. + """ + state = self.__dict__.copy() + # cant have PyTNG file iterator in as it is non-pickable + del state["_file_iterator"] + return state + + def __setstate__(self, state): + """Restore class from `state` dictionary in unpickling of Reader + instance + """ + 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) + +
[docs] def Writer(self): + """Writer for TNG files + + Raises + ------ + NotImplementedError + Currently there is not writer for TNG files pending implementation + upstream in pytng. + """ + raise NotImplementedError("There is currently no writer for TNG files")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRJ.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRJ.html new file mode 100644 index 0000000000..2236ab4bed --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRJ.html @@ -0,0 +1,1406 @@ + + + + + + MDAnalysis.coordinates.TRJ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.TRJ

+# -*- 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-2017 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
+#
+"""AMBER trajectories --- :mod:`MDAnalysis.coordinates.TRJ`
+========================================================
+
+AMBER_ can write :ref:`ASCII trajectories<ascii-trajectories>` ("traj") and
+:ref:`binary trajectories<netcdf-trajectories>` ("netcdf"). MDAnalysis supports
+reading of both formats and writing for the binary trajectories.
+
+Note
+----
+Support for AMBER is still somewhat *experimental* and feedback and
+contributions are highly appreciated. Use the `Issue Tracker`_ or get in touch
+on the `MDAnalysis mailinglist`_.
+
+
+.. rubric:: Units
+
+AMBER trajectories are assumed to be in the following units:
+
+* lengths in Angstrom (Å)
+* time in ps (but see below)
+
+
+.. _netcdf-trajectories:
+
+Binary NetCDF trajectories
+--------------------------
+
+The `AMBER netcdf`_ format make use of NetCDF_ (Network Common Data
+Form) format. Such binary trajectories are recognized in MDAnalysis by
+the '.ncdf' suffix and read by the :class:`NCDFReader`.
+
+Binary trajectories can also contain velocities and forces, and can record the
+exact time
+step. In principle, the trajectories can be in different units than the AMBER
+defaults of ångström and picoseconds but at the moment MDAnalysis only supports
+those and will raise a :exc:`NotImplementedError` if anything else is detected.
+
+.. autoclass:: NCDFReader
+   :members:
+
+.. autoclass:: NCDFWriter
+   :members:
+
+.. autoclass:: NCDFPicklable
+   :members:
+
+.. _ascii-trajectories:
+
+ASCII TRAJ trajectories
+-----------------------
+
+ASCII AMBER_ TRJ coordinate files (as defined in `AMBER TRJ format`_)
+are handled by the :class:`TRJReader`. It is also possible to directly
+read *bzip2* or *gzip* compressed files.
+
+AMBER ASCII trajectories are recognised by the suffix '.trj',
+'.mdcrd' or '.crdbox (possibly with an additional '.gz' or '.bz2').
+
+.. Note::
+
+   In the AMBER community, these trajectories are often saved with the
+   suffix '.crd' but this extension conflicts with the CHARMM CRD
+   format and MDAnalysis *will not correctly autodetect AMBER ".crd"
+   trajectories*. Instead, explicitly provide the ``format="TRJ"``
+   argument to :class:`~MDAnalysis.core.universe.Universe`::
+
+     u = MDAnalysis.Universe("top.prmtop", "traj.crd", format="TRJ")
+
+   In this way, the AMBER :class:`TRJReader` is used.
+
+
+.. rubric:: Limitations
+
+* Periodic boxes are only stored as box lengths A, B, C in an AMBER
+  trajectory; the reader always assumes that these are orthorhombic
+  boxes.
+
+* The trajectory does not contain time information so we simply set
+  the time step to 1 ps (or the user could provide it as kwarg *dt*)
+
+* Trajectories with fewer than 4 atoms probably fail to be read (BUG).
+
+* If the trajectory contains exactly *one* atom then it is always
+  assumed to be non-periodic (for technical reasons).
+
+* Velocities are currently *not supported* as ASCII trajectories.
+
+.. autoclass:: TRJReader
+   :members:
+
+
+
+.. Links
+
+.. _AMBER: http://ambermd.org
+.. _AMBER TRJ format: http://ambermd.org/formats.html#trajectory
+..    The formats page was archived as
+..    http://www.webcitation.org/query?url=http%3A%2F%2Fambermd.org%2Fformats.html&date=2018-02-11
+..    Use the archived version if the original disappears. [orbeckst]
+.. _AMBER netcdf format: http://ambermd.org/netcdf/nctraj.xhtml
+..    The formats page was archived as
+..    http://www.webcitation.org/query?url=http%3A%2F%2Fambermd.org%2Fnetcdf%2Fnctraj.xhtml&date=2018-02-11
+..    Use the archived version if the original disappears. [orbeckst]
+.. _AMBER netcdf: http://ambermd.org/netcdf/nctraj.xhtml
+.. _NetCDF: http://www.unidata.ucar.edu/software/netcdf
+.. _Issue Tracker: https://github.com/MDAnalysis/mdanalysis/issues
+.. _MDAnalysis mailinglist: https://groups.google.com/group/mdnalysis-discussion
+
+"""
+import scipy.io.netcdf
+import numpy as np
+import warnings
+import errno
+import logging
+from math import isclose
+
+import MDAnalysis
+from .timestep import Timestep
+from . import base
+from ..lib import util
+from ..lib.util import store_init_arguments
+logger = logging.getLogger("MDAnalysis.coordinates.AMBER")
+
+
+try:
+    import netCDF4
+except ImportError:
+    netCDF4 = None
+    logger.warning("netCDF4 is not available. Writing AMBER ncdf files will be slow.")
+
+
+
[docs]class TRJReader(base.ReaderBase): + """AMBER trajectory reader. + + Reads the ASCII formatted `AMBER TRJ format`_. Periodic box information + is auto-detected. + + The number of atoms in a timestep *must* be provided in the `n_atoms` + keyword because it is not stored in the trajectory header and cannot be + reliably autodetected. The constructor raises a :exc:`ValueError` if + `n_atoms` is left at its default value of ``None``. + + The length of a timestep is not stored in the trajectory itself but can + be set by passing the `dt` keyword argument to the constructor; it + is assumed to be in ps. The default value is 1 ps. + + .. _AMBER TRJ format: http://ambermd.org/formats.html#trajectory + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based. + kwarg `delta` renamed to `dt`, for uniformity with other Readers + """ + format = ['TRJ', 'MDCRD', 'CRDBOX'] + units = {'time': 'ps', 'length': 'Angstrom'} + _Timestep = Timestep + + @store_init_arguments + def __init__(self, filename, n_atoms=None, **kwargs): + super(TRJReader, self).__init__(filename, **kwargs) + if n_atoms is None: + raise ValueError("AMBER TRJ reader REQUIRES the n_atoms keyword") + self._n_atoms = n_atoms + self._n_frames = None + + self.trjfile = None # have _read_next_timestep() open it properly! + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + + # FORMAT(10F8.3) (X(i), Y(i), Z(i), i=1,NATOM) + self.default_line_parser = util.FORTRANReader("10F8.3") + self.lines_per_frame = int(np.ceil(3.0 * self.n_atoms / len( + self.default_line_parser))) + # The last line per frame might have fewer than 10 + # We determine right away what parser we need for the last + # line because it will be the same for all frames. + last_per_line = 3 * self.n_atoms % len(self.default_line_parser) + self.last_line_parser = util.FORTRANReader("{0:d}F8.3".format( + last_per_line)) + + # FORMAT(10F8.3) BOX(1), BOX(2), BOX(3) + # is this always on a separate line?? + self.box_line_parser = util.FORTRANReader("3F8.3") + + # Now check for box + self._detect_amber_box() + + # open file, read first frame + self._read_next_timestep() + + def _read_frame(self, frame): + if self.trjfile is None: + self.open_trajectory() + self.trjfile.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in _read_next + return self._read_next_timestep() + + def _read_next_timestep(self): + # FORMAT(10F8.3) (X(i), Y(i), Z(i), i=1,NATOM) + ts = self.ts + if self.trjfile is None: + self.open_trajectory() + + # Read coordinat frame: + # coordinates = numpy.zeros(3*self.n_atoms, dtype=np.float32) + _coords = [] + for number, line in enumerate(self.trjfile): + try: + _coords.extend(self.default_line_parser.read(line)) + except ValueError: + # less than 10 entries on the line: + _coords.extend(self.last_line_parser.read(line)) + if number == self.lines_per_frame - 1: + # read all atoms that are there in this frame + break + if _coords == []: + # at the end of the stream (the loop has not been entered) + raise EOFError + + # Read box information + if self.periodic: + line = next(self.trjfile) + box = self.box_line_parser.read(line) + ts.dimensions = box + [90., 90., 90.] # assumed + + # probably slow ... could be optimized by storing the coordinates in + # X,Y,Z lists or directly filling the array; the array/reshape is not + # good because it creates an intermediate array + ts._pos[:] = np.array(_coords).reshape(self.n_atoms, 3) + ts.frame += 1 + return ts + + def _detect_amber_box(self): + """Detecting a box in a AMBER trajectory + + Rewind trajectory and check for potential box data + after the first frame. + + Set :attr:`TRJReader.periodic` to ``True`` if box was + found, ``False`` otherwise. + + Only run at the beginning as it *rewinds* the trajctory. + + - see if there's data after the atoms have been read that looks + like:: + + FORMAT(10F8.3) BOX(1), BOX(2), BOX(3) + BOX : size of periodic box + + - this WILL fail if we have exactly 1 atom in the trajectory because + there's no way to distinguish the coordinates from the box + so for 1 atom we always assume no box + + .. TODO:: needs a Timestep that knows about AMBER unitcells! + """ + if self.n_atoms == 1: + # for 1 atom we cannot detect the box with the current approach + self.periodic = False # see _read_next_timestep()! + wmsg = "Trajectory contains a single atom: assuming periodic=False" + warnings.warn(wmsg) + return False + + self._reopen() + self.periodic = False # make sure that only coordinates are read + self._read_next_timestep() + ts = self.ts + # TODO: what do we do with 1-frame trajectories? Try..except EOFError? + line = next(self.trjfile) + nentries = self.default_line_parser.number_of_matches(line) + if nentries == 3: + self.periodic = True + ts.dimensions = self.box_line_parser.read(line) + [90., 90., 90.] + else: + self.periodic = False + self.close() + return self.periodic + + @property + def n_frames(self): + """Number of frames (obtained from reading the whole trajectory).""" + if self._n_frames is not None: # return cached value + return self._n_frames + try: + self._n_frames = self._read_trj_n_frames(self.filename) + except IOError: + return 0 + else: + return self._n_frames + + def _read_trj_n_frames(self, filename): + lpf = self.lines_per_frame + if self.periodic: + lpf += 1 + + self._offsets = offsets = [] + counter = 0 + with util.openany(self.filename) as f: + line = f.readline() # ignore first line + while line: + if counter % lpf == 0: + offsets.append(f.tell()) + line = f.readline() + counter += 1 + offsets.pop() # last offset is EOF + return len(offsets) + + @property + def n_atoms(self): + return self._n_atoms + + def _reopen(self): + self.close() + self.open_trajectory() + +
[docs] def open_trajectory(self): + """Open the trajectory for reading and load first frame.""" + self.trjfile = util.anyopen(self.filename) + self.header = self.trjfile.readline() # ignore first line + if len(self.header.rstrip()) > 80: + # Chimera uses this check + raise OSError( + "Header of AMBER formatted trajectory has more than 80 chars. " + "This is probably not a AMBER trajectory.") + # reset ts + ts = self.ts + ts.frame = -1 + + return self.trjfile
+ +
[docs] def close(self): + """Close trj trajectory file if it was open.""" + if self.trjfile is None: + return + self.trjfile.close() + self.trjfile = None
+ + +
[docs]class NCDFReader(base.ReaderBase): + """Reader for `AMBER NETCDF format`_ (version 1.0). + + AMBER binary trajectories are automatically recognised by the + file extension ".ncdf". + + The number of atoms (`n_atoms`) does not have to be provided as it can + be read from the trajectory. The trajectory reader can randomly access + frames and therefore supports direct indexing (with 0-based frame + indices) and full-feature trajectory iteration, including slicing. + + Velocities are autodetected and read into the + :attr:`Timestep._velocities` attribute. + + Forces are autodetected and read into the + :attr:`Timestep._forces` attribute. + + Periodic unit cell information is detected and used to populate the + :attr:`Timestep.dimensions` attribute. (If no unit cell is available in + the trajectory, then :attr:`Timestep.dimensions` will return + ``[0,0,0,0,0,0]``). + + Current limitations: + + * only trajectories with time in ps and lengths in Angstroem are processed + + The NCDF reader uses :mod:`scipy.io.netcdf` and therefore :mod:`scipy` must + be installed. It supports the *mmap* keyword argument (when reading): + ``mmap=True`` is memory efficient and directly maps the trajectory on disk + to memory (using the :class:`~mmap.mmap`); ``mmap=False`` may consume large + amounts of memory because it loads the whole trajectory into memory but it + might be faster. The default is ``mmap=None`` and then default behavior of + :class:`scipy.io.netcdf_file` prevails, i.e. ``True`` when + *filename* is a file name, ``False`` when *filename* is a file-like object. + + .. _AMBER NETCDF format: http://ambermd.org/netcdf/nctraj.xhtml + + See Also + -------- + :class:`NCDFWriter` + + + .. versionadded: 0.7.6 + .. versionchanged:: 0.10.0 + Added ability to read Forces + .. versionchanged:: 0.11.0 + Frame labels now 0-based instead of 1-based. + kwarg `delta` renamed to `dt`, for uniformity with other Readers. + .. versionchanged:: 0.17.0 + Uses :mod:`scipy.io.netcdf` and supports the *mmap* kwarg. + .. versionchanged:: 0.20.0 + Now reads scale_factors for all expected AMBER convention variables. + Timestep variables now adhere standard MDAnalysis units, with lengths + of angstrom, time of ps, velocity of angstrom/ps and force of + kJ/(mol*Angstrom). It is noted that with 0.19.2 and earlier versions, + velocities would have often been reported in values of angstrom/AKMA + time units instead (Issue #2323). + .. versionchanged:: 1.0.0 + Support for reading `degrees` units for `cell_angles` has now been + removed (Issue #2327) + .. versionchanged:: 2.0.0 + Now use a picklable :class:`scipy.io.netcdf_file`-- + :class:`NCDFPicklable`. + Reading of `dt` now defaults to 1.0 ps if `dt` cannot be extracted from + the first two frames of the trajectory. + :meth:`Writer` now also sets `convert_units`, `velocities`, `forces` and + `scale_factor` information for the :class:`NCDFWriter`. + + """ + + format = ['NCDF', 'NC'] + multiframe = True + version = "1.0" + units = {'time': 'ps', + 'length': 'Angstrom', + 'velocity': 'Angstrom/ps', + 'force': 'kcal/(mol*Angstrom)'} + + _Timestep = Timestep + + @store_init_arguments + def __init__(self, filename, n_atoms=None, mmap=None, **kwargs): + + self._mmap = mmap + + super(NCDFReader, self).__init__(filename, **kwargs) + + # ensure maskandscale is off so we don't end up double scaling + self.trjfile = NCDFPicklable(self.filename, + mmap=self._mmap, + maskandscale=False) + + # AMBER NetCDF files should always have a convention + try: + conventions = self.trjfile.Conventions + if not ('AMBER' in conventions.decode('utf-8').split(',') or + 'AMBER' in conventions.decode('utf-8').split()): + errmsg = ("NCDF trajectory {0} does not conform to AMBER " + "specifications, " + "http://ambermd.org/netcdf/nctraj.xhtml " + "('AMBER' must be one of the token in attribute " + "Conventions)".format(self.filename)) + logger.fatal(errmsg) + raise TypeError(errmsg) + except AttributeError: + errmsg = "NCDF trajectory {0} is missing Conventions".format( + self.filename) + logger.fatal(errmsg) + raise ValueError(errmsg) from None + + # AMBER NetCDF files should also have a ConventionVersion + try: + ConventionVersion = self.trjfile.ConventionVersion.decode('utf-8') + if not ConventionVersion == self.version: + wmsg = ("NCDF trajectory format is {0!s} but the reader " + "implements format {1!s}".format( + ConventionVersion, self.version)) + warnings.warn(wmsg) + logger.warning(wmsg) + except AttributeError: + errmsg = "NCDF trajectory {0} is missing ConventionVersion".format( + self.filename) + raise ValueError(errmsg) from None + + # The AMBER NetCDF standard enforces 64 bit offsets + if not self.trjfile.version_byte == 2: + errmsg = ("NCDF trajectory {0} does not conform to AMBER " + "specifications, as detailed in " + "https://ambermd.org/netcdf/nctraj.xhtml " + "(NetCDF file does not use 64 bit offsets " + "[version_byte = 2])".format(self.filename)) + logger.fatal(errmsg) + raise TypeError(errmsg) + + # The AMBER NetCDF standard enforces 3D coordinates + try: + if not self.trjfile.dimensions['spatial'] == 3: + errmsg = "Incorrect spatial value for NCDF trajectory file" + raise TypeError(errmsg) + except KeyError: + errmsg = "NCDF trajectory does not contain spatial dimension" + raise ValueError(errmsg) from None + + # AMBER NetCDF specs require program and programVersion. Warn users + # if those attributes do not exist + if not (hasattr(self.trjfile, 'program') and + hasattr(self.trjfile, 'programVersion')): + wmsg = ("NCDF trajectory {0} may not fully adhere to AMBER " + "standards as either the `program` or `programVersion` " + "attributes are missing".format(self.filename)) + warnings.warn(wmsg) + logger.warning(wmsg) + + try: + self.n_atoms = self.trjfile.dimensions['atom'] + if n_atoms is not None and n_atoms != self.n_atoms: + errmsg = ("Supplied n_atoms ({0}) != natom from ncdf ({1}). " + "Note: n_atoms can be None and then the ncdf value " + "is used!".format(n_atoms, self.n_atoms)) + raise ValueError(errmsg) + except KeyError: + errmsg = ("NCDF trajectory {0} does not contain atom " + "information".format(self.filename)) + raise ValueError(errmsg) from None + + try: + self.n_frames = self.trjfile.dimensions['frame'] + # example trajectory when read with scipy.io.netcdf has + # dimensions['frame'] == None (indicating a record dimension that + # can grow) whereas if read with netCDF4 I get + # len(dimensions['frame']) == 10: in any case, we need to get + # the number of frames from somewhere such as the time variable: + if self.n_frames is None: + self.n_frames = self.trjfile.variables['coordinates'].shape[0] + except KeyError: + errmsg = (f"NCDF trajectory {self.filename} does not contain " + f"frame information") + raise ValueError(errmsg) from None + + try: + self.remarks = self.trjfile.title + except AttributeError: + self.remarks = "" + # other metadata (*= requd): + # - application AMBER + # + + # checks for not-implemented features (other units would need to be + # hacked into MDAnalysis.units) + try: + self._verify_units(self.trjfile.variables['time'].units, 'picosecond') + self.has_time = True + except KeyError: + self.has_time = False + wmsg = ("NCDF trajectory does not contain `time` information;" + " `time` will be set as an increasing index") + warnings.warn(wmsg) + logger.warning(wmsg) + + + self._verify_units(self.trjfile.variables['coordinates'].units, + 'angstrom') + + # Check for scale_factor attributes for all data variables and + # store this to multiply through later (Issue #2323) + self.scale_factors = {'time': None, + 'cell_lengths': None, + 'cell_angles': None, + 'coordinates': None, + 'velocities': None, + 'forces': None} + + for variable in self.trjfile.variables: + if hasattr(self.trjfile.variables[variable], 'scale_factor'): + if variable in self.scale_factors: + scale_factor = self.trjfile.variables[variable].scale_factor + if not isinstance(scale_factor, (float, np.floating)): + raise TypeError(f"{scale_factor} is not a float") + self.scale_factors[variable] = scale_factor + else: + errmsg = ("scale_factors for variable {0} are " + "not implemented".format(variable)) + raise NotImplementedError(errmsg) + + self.has_velocities = 'velocities' in self.trjfile.variables + if self.has_velocities: + self._verify_units(self.trjfile.variables['velocities'].units, + 'angstrom/picosecond') + + self.has_forces = 'forces' in self.trjfile.variables + if self.has_forces: + self._verify_units(self.trjfile.variables['forces'].units, + 'kilocalorie/mole/angstrom') + + self.periodic = 'cell_lengths' in self.trjfile.variables + if self.periodic: + self._verify_units(self.trjfile.variables['cell_lengths'].units, + 'angstrom') + # As of v1.0.0 only `degree` is accepted as a unit + cell_angle_units = self.trjfile.variables['cell_angles'].units + self._verify_units(cell_angle_units, 'degree') + + self._current_frame = 0 + + self.ts = self._Timestep(self.n_atoms, + velocities=self.has_velocities, + forces=self.has_forces, + reader=self, # for dt + **self._ts_kwargs) + + # load first data frame + self._read_frame(0) + + @staticmethod + def _verify_units(eval_unit, expected_units): + if eval_unit.decode('utf-8') != expected_units: + errmsg = ("NETCDFReader currently assumes that the trajectory " + "was written in units of {0} instead of {1}".format( + eval_unit.decode('utf-8'), expected_units)) + raise NotImplementedError(errmsg) + +
[docs] @staticmethod + def parse_n_atoms(filename, **kwargs): + with scipy.io.netcdf_file(filename, mmap=None) as f: + n_atoms = f.dimensions['atom'] + return n_atoms
+ + def _get_var_and_scale(self, variable, frame): + """Helper function to get variable at given frame from NETCDF file and + scale if necessary. + + Note + ---- + If scale_factor is 1.0 within numerical precision then we don't apply + the scaling. + """ + scale_factor = self.scale_factors[variable] + if scale_factor is None or isclose(scale_factor, 1): + return self.trjfile.variables[variable][frame] + else: + return self.trjfile.variables[variable][frame] * scale_factor + + def _read_frame(self, frame): + ts = self.ts + + if self.trjfile is None: + raise IOError("Trajectory is closed") + if np.dtype(type(frame)) != np.dtype(int): + # convention... for netcdf could also be a slice + raise TypeError("frame must be a positive integer or zero") + if frame >= self.n_frames or frame < 0: + raise IndexError("frame index must be 0 <= frame < {0}".format( + self.n_frames)) + # note: self.trjfile.variables['coordinates'].shape == (frames, n_atoms, 3) + ts._pos[:] = self._get_var_and_scale('coordinates', frame) + if self.has_time: + ts.time = self._get_var_and_scale('time', frame) + if self.has_velocities: + ts._velocities[:] = self._get_var_and_scale('velocities', frame) + if self.has_forces: + ts._forces[:] = self._get_var_and_scale('forces', frame) + if self.periodic: + unitcell = np.zeros(6) + unitcell[:3] = self._get_var_and_scale('cell_lengths', frame) + unitcell[3:] = self._get_var_and_scale('cell_angles', frame) + ts.dimensions = unitcell + if self.convert_units: + self.convert_pos_from_native(ts._pos) # in-place ! + self.convert_time_from_native( + ts.time) # in-place ! (hope this works...) + if self.has_velocities: + self.convert_velocities_from_native(ts._velocities, + inplace=True) + if self.has_forces: + self.convert_forces_from_native(ts._forces, inplace=True) + if self.periodic: + # in-place ! (only lengths) + self.convert_pos_from_native(ts.dimensions[:3]) + ts.frame = frame # frame labels are 0-based + self._current_frame = frame + return ts + + def _reopen(self): + self._current_frame = -1 + + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + try: + return self._read_frame(self._current_frame + 1) + except IndexError: + raise IOError from None + + def _get_dt(self): + """Gets dt based on the time difference between the first and second + frame. If missing (i.e. an IndexError is triggered), raises an + AttributeError which triggers the default 1 ps return of dt(). + """ + try: + t1 = self.trjfile.variables['time'][1] + t0 = self.trjfile.variables['time'][0] + except (IndexError, KeyError): + raise AttributeError + return t1 - t0 + +
[docs] def close(self): + """Close trajectory; any further access will raise an :exc:`IOError`. + + .. Note:: The underlying :mod:`scipy.io.netcdf` module may open netcdf + files with :class:`~mmap.mmap` if ``mmap=True`` was + set. Hence *any* reference to an array *must* be removed + before the file can be closed. + + """ + if self.trjfile is not None: + self.trjfile.close() + self.trjfile = None
+ +
[docs] def Writer(self, filename, **kwargs): + """Returns a NCDFWriter for `filename` with the same parameters as this NCDF. + + All values can be changed through keyword arguments. + + Parameters + ---------- + filename : str + filename of the output NCDF trajectory + n_atoms : int (optional) + number of atoms + remarks : str (optional) + string that is stored in the title field + convert_units : bool (optional) + ``True``: units are converted to the AMBER base format + velocities : bool (optional) + Write velocities into the trajectory + forces : bool (optional) + Write forces into the trajectory + scale_time : float (optional) + Scale factor for time units + scale_cell_lengths : float (optional) + Scale factor for cell lengths + scale_cell_angles : float (optional) + Scale factor for cell angles + scale_coordinates : float (optional) + Scale factor for coordinates + scale_velocities : float (optional) + Scale factor for velocities + scale_forces : float (optional) + Scale factor for forces + + Returns + ------- + :class:`NCDFWriter` + """ + n_atoms = kwargs.pop('n_atoms', self.n_atoms) + kwargs.setdefault('remarks', self.remarks) + kwargs.setdefault('convert_units', self.convert_units) + kwargs.setdefault('velocities', self.has_velocities) + kwargs.setdefault('forces', self.has_forces) + for key in self.scale_factors: + kwargs.setdefault(f'scale_{key}', self.scale_factors[key]) + return NCDFWriter(filename, n_atoms, **kwargs)
+ + +
[docs]class NCDFWriter(base.WriterBase): + """Writer for `AMBER NETCDF format`_ (version 1.0). + + AMBER binary trajectories are automatically recognised by the + file extension ".ncdf" or ".nc". + + Velocities are written out if they are detected in the input + :class:`Timestep`. The trajectories are always written with ångström + for the lengths and picoseconds for the time (and hence Å/ps for + velocities and kilocalorie/mole/Å for forces). + + Scale factor variables for time, velocities, cell lengths, cell angles, + coordinates, velocities, or forces can be passed into the writer. If so, + they will be written to the NetCDF file. In this case, the trajectory data + will be written to the NetCDF file divided by the scale factor value. By + default, scale factor variables are not written. The only exception is for + velocities, where it is set to 20.455, replicating the default behaviour of + AMBER. + + Unit cell information is written if available. + + .. _AMBER NETCDF format: http://ambermd.org/netcdf/nctraj.xhtml + + + Parameters + ---------- + filename : str + name of output file + n_atoms : int + number of atoms in trajectory file + convert_units : bool (optional) + ``True``: units are converted to the AMBER base format; [``True``] + velocities : bool (optional) + Write velocities into the trajectory [``False``] + forces : bool (optional) + Write forces into the trajectory [``False``] + scale_time : float (optional) + Scale factor for time units [`None`] + scale_cell_lengths : float (optional) + Scale factor for cell lengths [``None``] + scale_cell_angles : float (optional) + Scale factor for cell angles [``None``] + scale_coordinates : float (optional) + Scale factor for coordinates [``None``] + scale_velocities : float (optional) + Scale factor for velocities [20.455] + scale_forces : float (optional) + Scale factor for forces [``None``] + + + Note + ---- + MDAnalysis uses :mod:`scipy.io.netcdf` to access AMBER files, which are in + netcdf 3 format. Although :mod:`scipy.io.netcdf` is very fast at reading + these files, it is *very* slow when writing, and it becomes slower the + longer the files are. On the other hand, the netCDF4_ package (which + requires the compiled netcdf library to be installed) is fast at writing + but slow at reading. Therefore, we try to use :mod:`netCDF4` for writing if + available but otherwise fall back to the slower :mod:`scipy.io.netcdf`. + + **AMBER users** might have a hard time getting netCDF4 to work with a + conda-based installation (as discussed in `Issue #506`_) because of the way + that AMBER itself handles netcdf: When the AMBER environment is loaded, the + following can happen when trying to import netCDF4:: + + >>> import netCDF4 + Traceback (most recent call last): + File "<string>", line 1, in <module> + File "/scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/__init__.py", line 3, in <module> + from ._netCDF4 import * + ImportError: /scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/_netCDF4.cpython-35m-x86_64-linux-gnu.so: undefined symbol: nc_inq_var_fletcher32 + + The reason for this (figured out via :program:`ldd`) is that AMBER builds + its own NetCDF library that it now inserts into :envvar:`LD_LIBRARY_PATH` + *without the NetCDF4 API and HDF5 bindings*. Since the conda version of + :mod:`netCDF4` was built against the full NetCDF package, the one + :program:`ld` tries to link to at runtime (because AMBER requires + :envvar:`LD_LIBRARY_PATH`) is missing some symbols. Removing AMBER from the + environment fixes the import but is not really a convenient solution for + users of AMBER. + + At the moment there is no obvious solution if one wants to use + :mod:`netCDF4` and AMBER in the same shell session. If you need the fast + writing capabilities of :mod:`netCDF4` then you need to unload your AMBER + environment before importing MDAnalysis. + + + .. _netCDF4: https://unidata.github.io/netcdf4-python/ + .. _`Issue #506`: + https://github.com/MDAnalysis/mdanalysis/issues/506#issuecomment-225081416 + + Raises + ------ + FutureWarning + When writing. The :class:`NCDFWriter` currently does not write any + `scale_factor` values for the data variables. Whilst not in breach + of the AMBER NetCDF standard, this behaviour differs from that of + most AMBER writers, especially for velocities which usually have a + `scale_factor` of 20.455. In MDAnalysis 2.0, the :class:`NCDFWriter` + will enforce `scale_factor` writing to either match user inputs (either + manually defined or via the :class:`NCDFReader`) or those as written by + AmberTools's :program:`sander` under default operation. + + See Also + -------- + :class:`NCDFReader` + + + .. versionadded: 0.7.6 + .. versionchanged:: 0.10.0 + Added ability to write velocities and forces + .. versionchanged:: 0.11.0 + kwarg `delta` renamed to `dt`, for uniformity with other Readers + .. versionchanged:: 0.17.0 + Use fast :mod:`netCDF4` for writing but fall back to slow + :mod:`scipy.io.netcdf` if :mod:`netCDF4` is not available. + .. versionchanged:: 0.20.1 + Changes the `cell_angles` unit to the AMBER NetCDF convention standard + of `degree` instead of the `degrees` written in previous version of + MDAnalysis (Issue #2327). + .. versionchanged:: 2.0.0 + ``dt``, ``start``, and ``step`` keywords were unused and are no longer + set. + Writing of ``scale_factor`` values has now been implemented. By default + only velocities write a scale_factor of 20.455 (echoing the behaviour + seen from AMBER). + + """ + + format = ['NC', 'NCDF'] + multiframe = True + version = "1.0" + units = {'time': 'ps', + 'length': 'Angstrom', + 'velocity': 'Angstrom/ps', + 'force': 'kcal/(mol*Angstrom)'} + + def __init__(self, filename, n_atoms, remarks=None, convert_units=True, + velocities=False, forces=False, scale_time=None, + scale_cell_lengths=None, scale_cell_angles=None, + scale_coordinates=None, scale_velocities=None, + scale_forces=None, **kwargs): + self.filename = filename + if n_atoms == 0: + raise ValueError("NCDFWriter: no atoms in output trajectory") + self.n_atoms = n_atoms + # convert length and time to base units on the fly? + self.convert_units = convert_units + + self.remarks = remarks or "AMBER NetCDF format (MDAnalysis.coordinates.trj.NCDFWriter)" + + self._first_frame = True # signals to open trajectory + self.trjfile = None # open on first write with _init_netcdf() + self.periodic = None # detect on first write + self.has_velocities = velocities + self.has_forces = forces + + self.scale_factors = { + 'time': scale_time, + 'cell_lengths': scale_cell_lengths, + 'cell_angles': scale_cell_angles, + 'coordinates': scale_coordinates, + 'velocities': scale_velocities, + 'forces': scale_forces} + # NCDF standard enforces float scale_factors + for value in self.scale_factors.values(): + if (value is not None) and ( + not isinstance(value, (float, np.floating))): + errmsg = f"scale_factor {value} is not a float" + raise TypeError(errmsg) + + self.curr_frame = 0 + + def _init_netcdf(self, periodic=True): + """Initialize netcdf AMBER 1.0 trajectory. + + The trajectory is opened when the first frame is written + because that is the earliest time that we can detect if the + output should contain periodicity information (i.e. the unit + cell dimensions). + + Based on Joshua Adelman's `netcdf4storage.py`_ in `Issue 109`_ and uses + Jason Swail's hack from `ParmEd/ParmEd#722`_ to switch between + :mod:`scipy.io.netcdf` and :mod:`netCDF4`. + + .. _`Issue 109`: + https://github.com/MDAnalysis/mdanalysis/issues/109 + .. _`netcdf4storage.py`: + https://storage.googleapis.com/google-code-attachments/mdanalysis/issue-109/comment-2/netcdf4storage.py + .. _`ParmEd/ParmEd#722`: https://github.com/ParmEd/ParmEd/pull/722 + + """ + if not self._first_frame: + raise IOError( + errno.EIO, + "Attempt to write to closed file {0}".format(self.filename)) + + if netCDF4: + ncfile = netCDF4.Dataset(self.filename, 'w', + format='NETCDF3_64BIT') + else: + ncfile = scipy.io.netcdf_file(self.filename, + mode='w', version=2, + maskandscale=False) + wmsg = ("Could not find netCDF4 module. Falling back to MUCH " + "slower scipy.io.netcdf implementation for writing.") + logger.warning(wmsg) + warnings.warn(wmsg) + + # Set global attributes. + setattr(ncfile, 'program', 'MDAnalysis.coordinates.TRJ.NCDFWriter') + setattr(ncfile, 'programVersion', MDAnalysis.__version__) + setattr(ncfile, 'Conventions', 'AMBER') + setattr(ncfile, 'ConventionVersion', '1.0') + setattr(ncfile, 'application', 'MDAnalysis') + + # Create dimensions + ncfile.createDimension('frame', + None) # unlimited number of steps (can append) + ncfile.createDimension('atom', + self.n_atoms) # number of atoms in system + ncfile.createDimension('spatial', 3) # number of spatial dimensions + ncfile.createDimension('cell_spatial', 3) # unitcell lengths + ncfile.createDimension('cell_angular', 3) # unitcell angles + ncfile.createDimension('label', 5) # needed for cell_angular + + # Create variables. + coords = ncfile.createVariable('coordinates', 'f4', + ('frame', 'atom', 'spatial')) + setattr(coords, 'units', 'angstrom') + if self.scale_factors['coordinates']: + coords.scale_factor = self.scale_factors['coordinates'] + + spatial = ncfile.createVariable('spatial', 'c', ('spatial', )) + spatial[:] = np.asarray(list('xyz')) + + time = ncfile.createVariable('time', 'f4', ('frame',)) + setattr(time, 'units', 'picosecond') + if self.scale_factors['time']: + time.scale_factor = self.scale_factors['time'] + + self.periodic = periodic + if self.periodic: + cell_lengths = ncfile.createVariable('cell_lengths', 'f8', + ('frame', 'cell_spatial')) + setattr(cell_lengths, 'units', 'angstrom') + if self.scale_factors['cell_lengths']: + cell_lengths.scale_factor = self.scale_factors['cell_lengths'] + + cell_spatial = ncfile.createVariable('cell_spatial', 'c', + ('cell_spatial', )) + cell_spatial[:] = np.asarray(list('abc')) + + cell_angles = ncfile.createVariable('cell_angles', 'f8', + ('frame', 'cell_angular')) + setattr(cell_angles, 'units', 'degree') + if self.scale_factors['cell_angles']: + cell_angles.scale_factor = self.scale_factors['cell_angles'] + + cell_angular = ncfile.createVariable('cell_angular', 'c', + ('cell_angular', 'label')) + cell_angular[:] = np.asarray([list('alpha'), list('beta '), list( + 'gamma')]) + + # These properties are optional, and are specified on Writer creation + if self.has_velocities: + velocs = ncfile.createVariable('velocities', 'f4', + ('frame', 'atom', 'spatial')) + setattr(velocs, 'units', 'angstrom/picosecond') + if self.scale_factors['velocities']: + velocs.scale_factor = self.scale_factors['velocities'] + if self.has_forces: + forces = ncfile.createVariable('forces', 'f4', + ('frame', 'atom', 'spatial')) + setattr(forces, 'units', 'kilocalorie/mole/angstrom') + if self.scale_factors['forces']: + forces.scale_factor = self.scale_factors['forces'] + + # Important for netCDF4! Disable maskandscale for created variables! + # Won't work if called before variable creation! + if netCDF4: + ncfile.set_auto_maskandscale(False) + + ncfile.sync() + self._first_frame = False + self.trjfile = ncfile + +
[docs] def is_periodic(self, ts): + """Test if timestep ``ts`` contains a periodic box. + + Parameters + ---------- + ts : :class:`Timestep` + :class:`Timestep` instance containing coordinates to + be written to trajectory file + + Returns + ------- + bool + Return ``True`` if `ts` contains a valid simulation box + """ + return ts.dimensions is not None
+ + def _write_next_frame(self, ag): + """Write information associated with ``ag`` at current frame into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + + .. versionchanged:: 1.0.0 + Added ability to use either AtomGroup or Universe. + Renamed from `write_next_timestep` to `_write_next_frame`. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + try: + # Atomgroup? + ts = ag.ts + except AttributeError: + try: + # Universe? + ts = ag.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if ts.n_atoms != self.n_atoms: + raise IOError( + "NCDFWriter: Timestep does not have the correct number of atoms") + + if self.trjfile is None: + # first time step: analyze data and open trajectory accordingly + self._init_netcdf(periodic=self.is_periodic(ts)) + + return self._write_next_timestep(ts) + + def _set_frame_var_and_scale(self, varname, data): + """Helper function to set variables and scale them if necessary. + + Note + ---- + If scale_factor is numerically close to 1.0, the variable data is not + scaled. + """ + sfactor = self.scale_factors[varname] + if sfactor is None or isclose(sfactor, 1): + self.trjfile.variables[varname][self.curr_frame] = data + else: + self.trjfile.variables[varname][self.curr_frame] = data / sfactor + + def _write_next_timestep(self, ts): + """Write coordinates and unitcell information to NCDF file. + + Do not call this method directly; instead use + :meth:`write` because some essential setup is done + there before writing the first frame. + + Based on Joshua Adelman's `netcdf4storage.py`_ in `Issue 109`_. + + .. _`Issue 109`: + https://github.com/MDAnalysis/mdanalysis/issues/109 + .. _`netcdf4storage.py`: + https://storage.googleapis.com/google-code-attachments/mdanalysis/issue-109/comment-2/netcdf4storage.py + + + .. versionchanged:: 2.0.0 + Can now write scale_factors, and scale variables accordingly. + """ + pos = ts._pos + time = ts.time + unitcell = ts.dimensions + + if self.convert_units: + # make a copy of the scaled positions so that the in-memory + # timestep is not changed (would have lead to wrong results if + # analysed *after* writing a time step to disk). The new + # implementation could lead to memory problems and/or slow-down for + # very big systems because we temporarily create a new array pos + # for each frame written + pos = self.convert_pos_to_native(pos, inplace=False) + time = self.convert_time_to_native(time, inplace=False) + unitcell = self.convert_dimensions_to_unitcell(ts) + + # write step + # coordinates + self._set_frame_var_and_scale('coordinates', pos) + + # time + self._set_frame_var_and_scale('time', time) + + # unitcell + if self.periodic: + # cell lengths + self._set_frame_var_and_scale('cell_lengths', unitcell[:3]) + + self._set_frame_var_and_scale('cell_angles', unitcell[3:]) + + # velocities + if self.has_velocities: + velocities = ts._velocities + if self.convert_units: + velocities = self.convert_velocities_to_native( + velocities, inplace=False) + + self._set_frame_var_and_scale('velocities', velocities) + + # forces + if self.has_forces: + forces = ts._forces + if self.convert_units: + forces = self.convert_forces_to_native( + forces, inplace=False) + + self._set_frame_var_and_scale('forces', forces) + + self.trjfile.sync() + self.curr_frame += 1 + +
[docs] def close(self): + if self.trjfile is not None: + self.trjfile.close() + self.trjfile = None
+ + +
[docs]class NCDFPicklable(scipy.io.netcdf_file): + """NetCDF file object (read-only) that can be pickled. + + This class provides a file-like object (as returned by + :class:`scipy.io.netcdf_file`) that, + unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename and mmap of the open file handle in + the file are saved. On unpickling, the file is opened by filename, + and the mmap file is loaded. + This means that for a successful unpickle, the original file still has to + be accessible with its filename. + + + .. note:: + This class subclasses :class:`scipy.io.netcdf_file`, please + see the `scipy netcdf API documentation`_ for more information on + the parameters and how the class behaviour. + + + Parameters + ---------- + filename : str or file-like + a filename given a text or byte string. + mmap : None or bool, optional + Whether to mmap `filename` when reading. True when `filename` + is a file name, False when `filename` is a file-like object. + version : {1, 2}, optional + Sets the netcdf file version to read / write. 1 is classic, 2 is + 64-bit offset format. Default is 1 (but note AMBER ncdf *requires* 2). + maskandscale : bool, optional + Whether to automatically scale and mask data. Default is False. + + Example + ------- + :: + + f = NCDFPicklable(NCDF) + print(f.variables['coordinates'].data) + f.close() + + can also be used as context manager:: + + with NCDFPicklable(NCDF) as f: + print(f.variables['coordinates'].data) + + See Also + --------- + :class:`MDAnalysis.lib.picklable_file_io.FileIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BufferIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.TextIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.GzipPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BZ2Picklable` + + + .. versionadded:: 2.0.0 + + + .. _`scipy netcdf API documentation`: https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.netcdf_file.html + """ + def __getstate__(self): + return (self.filename, self.use_mmap, self.version_byte, + self.maskandscale) + + def __setstate__(self, args): + self.__init__(args[0], mmap=args[1], version=args[2], + maskandscale=args[3])
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRR.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRR.html new file mode 100644 index 0000000000..dd381a6bee --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRR.html @@ -0,0 +1,368 @@ + + + + + + MDAnalysis.coordinates.TRR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.TRR

+# -*- 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-2017 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
+#
+"""
+TRR trajectory files --- :mod:`MDAnalysis.coordinates.TRR`
+==========================================================
+
+Read and write GROMACS TRR trajectories.
+
+See Also
+--------
+MDAnalysis.coordinates.XTC: Read and write GROMACS XTC trajectory files.
+MDAnalysis.coordinates.XDR: BaseReader/Writer for XDR based formats
+"""
+import errno
+from . import base
+from .XDR import XDRBaseReader, XDRBaseWriter
+from ..lib.formats.libmdaxdr import TRRFile
+from ..lib.mdamath import triclinic_vectors, triclinic_box
+
+
+
[docs]class TRRWriter(XDRBaseWriter): + """Writer for the Gromacs TRR format. + + The Gromacs TRR trajectory format is a lossless format. The TRR format can + store *velocities* and *forces* in addition to the coordinates. It is also + used by other Gromacs tools to store and process other data such as modes + from a principal component analysis. + + If the data dictionary of a :class:`Timestep` contains the key + 'lambda' the corresponding value will be used as the lambda value + for written TRR file. If ``None`` is found the lambda is set to 0. + + If the data dictionary of a :class:`Timestep` contains the key + 'step' the corresponding value will be used as the step value for + the written TRR file. If the dictionary does not contain 'step', then + the step is set to the :class:`Timestep` frame attribute. + + """ + + format = 'TRR' + multiframe = True + units = {'time': 'ps', 'length': 'nm', 'velocity': 'nm/ps', + 'force': 'kJ/(mol*nm)'} + _file = TRRFile + + def _write_next_frame(self, ag): + """Write information associated with ``ag`` at current frame into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + See Also + -------- + <FormatWriter>.write(AtomGroup/Universe/TimeStep) + The normal write() method takes a more general input + + + .. versionchanged:: 1.0.0 + Renamed from `write_next_timestep` to `_write_next_frame`. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + .. versionchanged:: 2.1.0 + When possible, TRRWriter assigns `ts.data['step']` to `step` rather + than `ts.frame`. + """ + try: + ts = ag.ts + except AttributeError: + try: + # special case: can supply a Universe, too... + ts = ag.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + xyz = None + if ts.has_positions: + xyz = ts.positions.copy() + if self._convert_units: + self.convert_pos_to_native(xyz) + + velo = None + if ts.has_velocities: + velo = ts.velocities.copy() + if self._convert_units: + self.convert_velocities_to_native(velo) + + forces = None + if ts.has_forces: + forces = ts.forces.copy() + if self._convert_units: + self.convert_forces_to_native(forces) + + time = ts.time + step = ts.data.get('step', ts.frame) + + if self._convert_units: + dimensions = self.convert_dimensions_to_unitcell(ts, inplace=False) + + box = triclinic_vectors(dimensions) + + lmbda = 0 + if 'lambda' in ts.data: + lmbda = ts.data['lambda'] + + self._xdr.write(xyz, velo, forces, box, step, time, lmbda, + self.n_atoms)
+ + +
[docs]class TRRReader(XDRBaseReader): + """Reader for the Gromacs TRR format. + + The Gromacs TRR trajectory format is a lossless format. The TRR format can + store *velocities* and *forces* in addition to the coordinates. It is also + used by other Gromacs tools to store and process other data such as modes + from a principal component analysis. + + The lambda value is written in the data dictionary of the returned + :class:`Timestep` + + Notes + ----- + See :ref:`Notes on offsets <offsets-label>` for more information about + offsets. + + """ + format = 'TRR' + units = {'time': 'ps', 'length': 'nm', 'velocity': 'nm/ps', + 'force': 'kJ/(mol*nm)'} + _writer = TRRWriter + _file = TRRFile + + def _read_next_timestep(self, ts=None): + """copy next frame into timestep + + versionadded:: 2.4.0 + TRRReader implements this method so that it can use + read_direct_xvf to read the data directly into the timestep + rather than copying it from a temporary array. + """ + if self._frame == self.n_frames - 1: + raise IOError(errno.EIO, 'trying to go over trajectory limit') + if ts is None: + ts = self.ts + # allocate arrays to read into, will set to proper values + # in _frame_to_ts + ts.has_positions = True + ts.has_velocities = True + ts.has_forces = True + frame = self._xdr.read_direct_xvf(ts.positions, ts.velocities, ts.forces) + self._frame += 1 + self._frame_to_ts(frame, ts) + return ts + + def _frame_to_ts(self, frame, ts): + """convert a trr-frame to a mda TimeStep""" + ts.time = frame.time + ts.frame = self._frame + ts.data['step'] = frame.step + + ts.has_positions = frame.hasx + ts.has_velocities = frame.hasv + ts.has_forces = frame.hasf + ts.dimensions = triclinic_box(*frame.box) + + if self.convert_units: + if ts.dimensions is not None: + self.convert_pos_from_native(ts.dimensions[:3]) + + if ts.has_positions: + if self._sub is not None: + ts.positions = frame.x[self._sub] + else: + ts.positions = frame.x + if self.convert_units: + self.convert_pos_from_native(ts.positions) + + if ts.has_velocities: + if self._sub is not None: + ts.velocities = frame.v[self._sub] + else: + ts.velocities = frame.v + if self.convert_units: + self.convert_velocities_from_native(ts.velocities) + + if ts.has_forces: + if self._sub is not None: + ts.forces = frame.f[self._sub] + else: + ts.forces = frame.f + if self.convert_units: + self.convert_forces_from_native(ts.forces) + + ts.data['lambda'] = frame.lmbda + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRZ.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRZ.html new file mode 100644 index 0000000000..e6dcaee90f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRZ.html @@ -0,0 +1,743 @@ + + + + + + MDAnalysis.coordinates.TRZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.TRZ

+# -*- 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-2017 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
+#
+# TRZ Reader written by Richard J. Gowers (2013)
+
+"""TRZ trajectory I/O  --- :mod:`MDAnalysis.coordinates.TRZ`
+============================================================
+
+Classes to read `IBIsCO`_ / `YASP`_ TRZ binary trajectories, including
+coordinates, velocities and more (see attributes of the :class:`Timestep`).
+
+Data are read and written in binary representation but because this depends on
+the machine hardware architecture, MDAnalysis *always* reads and writes TRZ
+trajectories in *little-endian* byte order.
+
+.. _IBIsCO: http://www.theo.chemie.tu-darmstadt.de/ibisco/IBISCO.html
+.. _YASP: http://www.theo.chemie.tu-darmstadt.de/group/services/yaspdoc/yaspdoc.html
+
+Classes
+-------
+
+.. autoclass:: TRZReader
+   :members:
+
+.. autoclass:: TRZWriter
+   :members:
+
+"""
+import warnings
+import numpy as np
+import os
+import errno
+
+from . import base
+from ..exceptions import NoDataError
+from .timestep import Timestep
+from ..lib import util
+from ..lib.util import cached, store_init_arguments
+from .core import triclinic_box, triclinic_vectors
+
+
+
[docs]class TRZReader(base.ReaderBase): + """Reads an IBIsCO or YASP trajectory file + + Attributes + ---------- + ts : timestep.Timestep + :class:`~MDAnalysis.coordinates.timestep.Timestep` object containing + coordinates of current frame + + Note + ---- + Binary TRZ trajectories are *always* assumed to be written in + *little-endian* byte order and are read as such. + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based. + Extra data (Temperature, Energies, Pressures, etc) now read + into ts.data dictionary. + Now passes a weakref of self to ts (ts._reader). + .. versionchanged:: 1.0.1 + Now checks for the correct `n_atoms` on reading + and can raise :exc:`ValueError`. + .. versionchanged:: 2.1.0 + TRZReader now returns a default :attr:`dt` of 1.0 when it cannot be + obtained from the difference between two frames. + .. versionchanged:: 2.3.0 + _frame attribute moved to `ts.data` dictionary. + """ + + format = "TRZ" + + units = {'time': 'ps', 'length': 'nm', 'velocity': 'nm/ps'} + + @store_init_arguments + def __init__(self, trzfilename, n_atoms=None, **kwargs): + """Creates a TRZ Reader + + Parameters + ---------- + trzfilename : str + name of input file + n_atoms : int + number of atoms in trajectory, must be taken from topology file! + convert_units : bool (optional) + converts units to MDAnalysis defaults + + Raises + ------ + ValueError + If `n_atoms` or the number of atoms in the topology file do not + match the number of atoms in the trajectory. + """ + super(TRZReader, self).__init__(trzfilename, **kwargs) + + if n_atoms is None: + raise ValueError('TRZReader requires the n_atoms keyword') + + self.trzfile = util.anyopen(self.filename, 'rb') + self._cache = dict() + self._n_atoms = n_atoms + + self._read_trz_header() + self.ts = Timestep(self.n_atoms, + velocities=True, + forces=self.has_force, + reader=self, + **self._ts_kwargs) + + # structured dtype of a single trajectory frame + readarg = str(n_atoms) + '<f4' + frame_contents = [ + ('p1', '<i4'), + ('nframe', '<i4'), + ('ntrj', '<i4'), + ('natoms', '<i4'), + ('treal', '<f8'), + ('p2', '<2i4'), + ('box', '<9f8'), + ('p3', '<2i4'), + ('pressure', '<f8'), + ('ptensor', '<6f8'), + ('p4', '<3i4'), + ('etot', '<f8'), + ('ptot', '<f8'), + ('ek', '<f8'), + ('T', '<f8'), + ('p5', '<6i4'), + ('rx', readarg), + ('pad2', '<2i4'), + ('ry', readarg), + ('pad3', '<2i4'), + ('rz', readarg), + ('pad4', '<2i4'), + ('vx', readarg), + ('pad5', '<2i4'), + ('vy', readarg), + ('pad6', '<2i4'), + ('vz', readarg)] + if not self.has_force: + frame_contents += [('pad7', '<i4')] + else: + frame_contents += [ + ('pad7', '<2i4'), + ('fx', readarg), + ('pad8', '<2i4'), + ('fy', readarg), + ('pad9', '<2i4'), + ('fz', readarg), + ('pad10', '<i4')] + self._dtype = np.dtype(frame_contents) + + self._read_next_timestep() + + def _read_trz_header(self): + """Reads the header of the trz trajectory""" + self._headerdtype = np.dtype([ + ('p1', '<i4'), + ('title', '80c'), + ('p2', '<2i4'), + ('force', '<i4'), + ('p3', '<i4')]) + data = np.fromfile(self.trzfile, dtype=self._headerdtype, count=1) + self.title = ''.join(c.decode('utf-8') for c in data['title'][0]).strip() + if data['force'] == 10: + self.has_force = False + elif data['force'] == 20: + self.has_force = True + else: + raise IOError + + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + + try: + data = np.fromfile(self.trzfile, dtype=self._dtype, count=1) + if data['natoms'][0] != self.n_atoms: + raise ValueError("Supplied n_atoms {} is incompatible " + "with provided trajectory file. " + "Maybe `topology` is wrong?".format( + self.n_atoms)) + ts.frame = data['nframe'][0] - 1 # 0 based for MDA + ts.data['frame'] = data['ntrj'][0] # moved from attr to data + ts.time = data['treal'][0] + ts.dimensions = triclinic_box(*(data['box'].reshape(3, 3))) + ts.data['pressure'] = data['pressure'] + ts.data['pressure_tensor'] = data['ptensor'] + ts.data['total_energy'] = data['etot'] + ts.data['potential_energy'] = data['ptot'] + ts.data['kinetic_energy'] = data['ek'] + ts.data['temperature'] = data['T'] + ts._x[:] = data['rx'] + ts._y[:] = data['ry'] + ts._z[:] = data['rz'] + ts._velocities[:, 0] = data['vx'] + ts._velocities[:, 1] = data['vy'] + ts._velocities[:, 2] = data['vz'] + if self.has_force: + ts._forces[:, 0] = data['fx'] + ts._forces[:, 1] = data['fy'] + ts._forces[:, 2] = data['fz'] + except IndexError: # Raises indexerror if data has no data (EOF) + raise IOError from None + else: + # Convert things read into MDAnalysis' native formats (nm -> angstroms) + if self.convert_units: + self.convert_pos_from_native(self.ts._pos) + if self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) + self.convert_velocities_from_native(self.ts._velocities) + + return ts + + @property + def n_atoms(self): + """Number of atoms in a frame""" + return self._n_atoms + + @property + @cached('n_frames') + def n_frames(self): + """Total number of frames in a trajectory""" + try: + return self._read_trz_n_frames(self.trzfile) + except IOError: + return 0 + + def _read_trz_n_frames(self, trzfile): + """Uses size of file and dtype information to determine how many frames exist + + .. versionchanged:: 0.9.0 + Now is based on filesize rather than reading entire file + """ + fsize = os.fstat(trzfile.fileno()).st_size # size of file in bytes + + if not (fsize - self._headerdtype.itemsize) % self._dtype.itemsize == 0: + raise IOError("Trajectory has incomplete frames") # check that division is sane + + nframes = int((fsize - self._headerdtype.itemsize) / self._dtype.itemsize) # returns long int otherwise + + return nframes + + def _get_dt(self): + """The amount of time between frames in ps + + Assumes that this step is constant (ie. 2 trajectories with different + steps haven't been stitched together). + Returns ``AttributeError`` in case of ``StopIteration`` + (which makes :attr:`dt` return 1.0). + + .. versionchanged:: 2.1.0 + Now returns an ``AttributeError`` if dt can't be obtained from the + time difference between two frames. + """ + curr_frame = self.ts.frame + try: + t0 = self.ts.time + self.next() + t1 = self.ts.time + dt = t1 - t0 + except StopIteration: + raise AttributeError + else: + return dt + finally: + self._read_frame(curr_frame) + + @property + @cached('delta') + def delta(self): + """MD integration timestep""" + return self.dt / self.skip_timestep + + @property + @cached('skip_timestep') + def skip_timestep(self): + """Timesteps between trajectory frames""" + curr_frame = self.ts.frame + try: + t0 = self.ts.data['frame'] + self.next() + t1 = self.ts.data['frame'] + skip_timestep = t1 - t0 + except StopIteration: + return 0 + else: + return skip_timestep + finally: + self._read_frame(curr_frame) + + def _read_frame(self, frame): + """Move to *frame* and fill timestep with data. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + """ + move = frame - self.ts.frame + + self._seek(move - 1) + self._read_next_timestep() + return self.ts + + def _seek(self, nframes): + """Move *nframes* in the trajectory + + Note that this doens't read the trajectory (ts remains unchanged) + + .. versionadded:: 0.9.0 + """ + framesize = self._dtype.itemsize + seeksize = framesize * nframes + maxi_l = seeksize + 1 + + if seeksize > maxi_l: + # Workaround for seek not liking long ints + # On python 3 this branch will never be used as we defined maxi_l + # greater than seeksize. + framesize = long(framesize) + seeksize = framesize * nframes + + nreps = int(seeksize / maxi_l) # number of max seeks we'll have to do + rem = int(seeksize % maxi_l) # amount leftover to do once max seeks done + + for _ in range(nreps): + self.trzfile.seek(maxint, 1) + self.trzfile.seek(rem, 1) + else: + seeksize = int(seeksize) + + self.trzfile.seek(seeksize, 1) + + def _reopen(self): + self.close() + self.open_trajectory() + self._read_trz_header() # Moves to start of first frame + +
[docs] def open_trajectory(self): + """Open the trajectory file""" + if self.trzfile is not None: + raise IOError(errno.EALREADY, 'TRZ file already opened', self.filename) + if not os.path.exists(self.filename): + raise IOError(errno.ENOENT, 'TRZ file not found', self.filename) + + self.trzfile = util.anyopen(self.filename, 'rb') + + #Reset ts + ts = self.ts + ts.frame = -1 + + return self.trzfile
+ +
[docs] def Writer(self, filename, n_atoms=None): + if n_atoms is None: + # guess that they want to write the whole timestep unless told otherwise? + n_atoms = self.ts.n_atoms + return TRZWriter(filename, n_atoms)
+ +
[docs] def close(self): + """Close trz file if it was open""" + if self.trzfile is not None: + self.trzfile.close() + self.trzfile = None
+ + +
[docs]class TRZWriter(base.WriterBase): + """Writes a TRZ format trajectory. + + Note + ---- + Binary TRZ trajectories are *always* written in *little-endian* byte order. + + """ + + format = 'TRZ' + multiframe = True + + units = {'time': 'ps', 'length': 'nm', 'velocity': 'nm/ps'} + + def __init__(self, filename, n_atoms, title='TRZ', convert_units=True): + """Create a TRZWriter + + Parameters + ---------- + filename : str + name of output file + n_atoms : int + number of atoms in trajectory + title : str (optional) + title of the trajectory; the title must be 80 characters or + shorter, a longer title raises a ValueError exception. + convert_units : bool (optional) + units are converted to the MDAnalysis base format; [``True``] + """ + self.filename = filename + if n_atoms is None: + raise ValueError("TRZWriter requires the n_atoms keyword") + if n_atoms == 0: + raise ValueError("TRZWriter: no atoms in output trajectory") + self.n_atoms = n_atoms + + if len(title) > 80: + raise ValueError("TRZWriter: 'title' must be 80 characters of shorter") + + self.convert_units = convert_units + + self.trzfile = util.anyopen(self.filename, 'wb') + + self._writeheader(title) + + floatsize = str(n_atoms) + '<f4' + self.frameDtype = np.dtype([ + ('p1a', '<i4'), + ('nframe', '<i4'), + ('ntrj', '<i4'), + ('natoms', '<i4'), + ('treal', '<f8'), + ('p1b', '<i4'), + ('p2a', '<i4'), + ('box', '<9f8'), + ('p2b', '<i4'), + ('p3a', '<i4'), + ('pressure', '<f8'), + ('ptensor', '<6f8'), + ('p3b', '<i4'), + ('p4a', '<i4'), + ('six', '<i4'), + ('etot', '<f8'), + ('ptot', '<f8'), + ('ek', '<f8'), + ('T', '<f8'), + ('blanks', '<2f8'), + ('p4b', '<i4'), + ('p5a', '<i4'), + ('rx', floatsize), + ('p5b', '<i4'), + ('p6a', '<i4'), + ('ry', floatsize), + ('p6b', '<i4'), + ('p7a', '<i4'), + ('rz', floatsize), + ('p7b', '<i4'), + ('p8a', '<i4'), + ('vx', floatsize), + ('p8b', '<i4'), + ('p9a', '<i4'), + ('vy', floatsize), + ('p9b', '<i4'), + ('p10a', '<i4'), + ('vz', floatsize), + ('p10b', '<i4')]) + + def _writeheader(self, title): + hdt = np.dtype([ + ('pad1', '<i4'), ('title', '80c'), ('pad2', '<i4'), + ('pad3', '<i4'), ('nrec', '<i4'), ('pad4', '<i4')]) + out = np.zeros((), dtype=hdt) + out['pad1'], out['pad2'] = 80, 80 + out['title'] = title + ' ' * (80 - len(title)) + out['pad3'], out['pad4'] = 4, 4 + out['nrec'] = 10 + out.tofile(self.trzfile) + + def _write_next_frame(self, obj): + """Write information associated with ``obj`` at current frame into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + + .. versionchanged:: 1.0.0 + Renamed from `write_next_timestep` to `_write_next_frame`. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + # Check size of ts is same as initial + try: # atomgroup? + ts = obj.ts + except AttributeError: # universe? + try: + ts = obj.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + if not obj.atoms.n_atoms == self.n_atoms: + errmsg = "Number of atoms in ts different to initialisation" + raise ValueError(errmsg) + + # Gather data, faking it when unavailable + data = {} + faked_attrs = [] + for att in ['pressure', 'pressure_tensor', 'total_energy', + 'potential_energy', 'kinetic_energy', 'temperature']: + try: + data[att] = ts.data[att] + except KeyError: + if att == 'pressure_tensor': + data[att] = np.zeros(6, dtype=np.float64) + else: + data[att] = 0.0 + faked_attrs.append(att) + try: + data['step'] = ts.data['frame'] + except KeyError: + data['step'] = ts.frame + faked_attrs.append('step') + try: + data['time'] = ts.time + except AttributeError: + data['time'] = float(ts.frame) + faked_attrs.append('time') + if faked_attrs: + warnings.warn("Timestep didn't have the following attributes: '{0}', " + "these will be set to 0 in the output trajectory" + "".format(", ".join(faked_attrs))) + + # Convert other stuff into our format + if ts.dimensions is not None: + unitcell = triclinic_vectors(ts.dimensions).reshape(9) + else: + warnings.warn("Timestep didn't have dimensions information, " + "box will be written as all zero values") + unitcell = np.zeros(9, dtype=np.float32) + + try: + vels = ts.velocities + except NoDataError: + vels = np.zeros((self.n_atoms, 3), dtype=np.float32, order='F') + warnings.warn("Timestep didn't have velocity information, " + "this will be set to zero in output trajectory. ") + + out = np.zeros((), dtype=self.frameDtype) + out['p1a'], out['p1b'] = 20, 20 + out['nframe'] = ts.frame + 1 # TRZ wants 1 based + out['ntrj'] = data['step'] + out['natoms'] = self.n_atoms + out['treal'] = data['time'] + out['p2a'], out['p2b'] = 72, 72 + out['box'] = self.convert_pos_to_native(unitcell, inplace=False) + out['p3a'], out['p3b'] = 56, 56 + out['pressure'] = data['pressure'] + out['ptensor'] = data['pressure_tensor'] + out['p4a'], out['p4b'] = 60, 60 + out['six'] = 6 + out['etot'] = data['total_energy'] + out['ptot'] = data['potential_energy'] + out['ek'] = data['kinetic_energy'] + out['T'] = data['temperature'] + out['blanks'] = 0.0, 0.0 + size = ts.n_atoms * 4 # size of float for vels & coords + out['p5a'], out['p5b'] = size, size + out['rx'] = self.convert_pos_to_native(ts._x, inplace=False) + out['p6a'], out['p6b'] = size, size + out['ry'] = self.convert_pos_to_native(ts._y, inplace=False) + out['p7a'], out['p7b'] = size, size + out['rz'] = self.convert_pos_to_native(ts._z, inplace=False) + out['p8a'], out['p8b'] = size, size + out['vx'] = self.convert_velocities_to_native(vels[:, 0], inplace=False) + out['p9a'], out['p9b'] = size, size + out['vy'] = self.convert_velocities_to_native(vels[:, 1], inplace=False) + out['p10a'], out['p10b'] = size, size + out['vz'] = self.convert_velocities_to_native(vels[:, 2], inplace=False) + out.tofile(self.trzfile) + +
[docs] def close(self): + """Close if it was open""" + if self.trzfile is None: + return + self.trzfile.close() + self.trzfile = None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.html new file mode 100644 index 0000000000..fa551860d2 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.html @@ -0,0 +1,329 @@ + + + + + + MDAnalysis.coordinates.TXYZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.TXYZ

+# -*- 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-2017 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
+#
+"""
+TXYZ file format --- :mod:`MDAnalysis.coordinates.TXYZ`
+=======================================================
+
+Coordinate reader for Tinker_ xyz files .txyz and trajectory .arc files.
+Differences between Tinker format_ and normal xyz files:
+
+- there is only one header line containing both the number of atoms and a comment
+- column 1 contains atom numbers (starting from 1)
+- column 6 contains atoms types
+- the following columns indicate connectivity (atoms to which that particular atom is
+  bonded, according to numbering in column 1)
+
+.. _format: http://chembytes.wikidot.com/tnk-tut00#toc2
+.. _Tinker: https://dasher.wustl.edu/tinker/
+
+
+Classes
+-------
+
+.. autoclass:: TXYZReader
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+import os
+import errno
+
+from ..lib import util
+from . import base
+from ..lib.util import openany, cached, store_init_arguments
+from .timestep import Timestep
+
+
[docs]class TXYZReader(base.ReaderBase): + """Reads from a TXYZ file""" + + + format = ['TXYZ', 'ARC'] + # these are assumed! + units = {'time': 'ps', 'length': 'Angstrom'} + _Timestep = Timestep + + @store_init_arguments + def __init__(self, filename, **kwargs): + super(TXYZReader, self).__init__(filename, **kwargs) + + # the filename has been parsed to be either be foo.xyz or foo.xyz.bz2 by + # coordinates::core.py so the last file extension will tell us if it is + # bzipped or not + root, ext = os.path.splitext(self.filename) + self.xyzfile = util.anyopen(self.filename) + self._cache = dict() + # Check if file has box information saved + with util.openany(self.filename) as inp: + inp.readline() + line = inp.readline() + # If second line has float at second position, we have box info + try: + float(line.split()[1]) + except ValueError: + self.periodic = False + else: + self.periodic = True + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + + self._read_next_timestep() + + @property + @cached('n_atoms') + def n_atoms(self): + """number of atoms in a frame""" + with util.anyopen(self.filename) as f: + n = f.readline().split()[0] + # need to check type of n + return int(n) + + @property + @cached('n_frames') + def n_frames(self): + try: + return self._read_xyz_n_frames() + except IOError: + return 0 + + def _read_xyz_n_frames(self): + # the number of lines in the XYZ file will be 1 greater than the + # number of atoms + linesPerFrame = self.n_atoms + 1 + if self.periodic: + linesPerFrame += 1 + counter = 0 + offsets = [] + + with util.anyopen(self.filename) as f: + line = True + while line: + if not counter % linesPerFrame: + offsets.append(f.tell()) + line = f.readline() + counter += 1 + + # need to check this is an integer! + n_frames = int(counter / linesPerFrame) + self._offsets = offsets + return n_frames + + def _read_frame(self, frame): + self.xyzfile.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in next + return self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + # check that the timestep object exists + if ts is None: + ts = self.ts + + f = self.xyzfile + + try: + # we assume that there is only one header line per frame + f.readline() + if self.periodic: + ts.dimensions = f.readline().split() + # convert all entries at the end once for optimal speed + tmp_buf = [] + for i in range(self.n_atoms): + tmp_buf.append(f.readline().split()[2:5]) + ts.positions = tmp_buf + ts.frame += 1 + return ts + except (ValueError, IndexError) as err: + raise EOFError(err) from None + + def _reopen(self): + self.close() + self.open_trajectory() + + def open_trajectory(self): + if self.xyzfile is not None: + raise IOError( + errno.EALREADY, 'TXYZ file already opened', self.filename) + + self.xyzfile = util.anyopen(self.filename) + + # reset ts + ts = self.ts + ts.frame = -1 + + return self.xyzfile + +
[docs] def close(self): + """Close arc trajectory file if it was open.""" + if self.xyzfile is None: + return + self.xyzfile.close() + self.xyzfile = None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/XDR.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XDR.html new file mode 100644 index 0000000000..07cd66245f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XDR.html @@ -0,0 +1,474 @@ + + + + + + MDAnalysis.coordinates.XDR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.XDR

+# -*- 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-2017 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
+#
+"""\
+XDR based trajectory files --- :mod:`MDAnalysis.coordinates.XDR`
+================================================================
+
+This module contains helper function and classes to read the XTC and TRR file
+formats.
+
+See Also
+--------
+MDAnalysis.coordinates.XTC: Read and write GROMACS XTC trajectory files.
+MDAnalysis.coordinates.TRR: Read and write GROMACS TRR trajectory files.
+MDAnalysis.lib.formats.libmdaxdr: Low level xdr format reader
+"""
+
+import errno
+import numpy as np
+from os.path import getctime, getsize, isfile, split, join
+import warnings
+import fasteners
+
+from . import base
+from ..lib.mdamath import triclinic_box
+from ..lib.util import store_init_arguments
+
+
+
[docs]def offsets_filename(filename, ending='npz'): + """Return offset or its lock filename for XDR files. + For this the filename is appended + with `_offsets.{ending}`. + + Parameters + ---------- + filename : str + filename of trajectory + ending : str (optional) + fileending of offsets file + + Returns + ------- + offset_filename : str + + """ + head, tail = split(filename) + return join(head, f'.{tail}_offsets.{ending}')
+ + +
[docs]def read_numpy_offsets(filename): + """read offsets into dictionary. + + This assume offsets have been saved using numpy + + Parameters + ---------- + filename : str + filename of offsets + + Returns + ------- + offsets : dict + dictionary of offsets information + + """ + try: + return {k: v for k, v in np.load(filename).items()} + + # `ValueError` is encountered when the offset file is corrupted. + except (ValueError, IOError): + warnings.warn(f"Failed to load offsets file {filename}\n") + return False
+ +
[docs]class XDRBaseReader(base.ReaderBase): + """Base class for libmdaxdr file formats xtc and trr + + This class handles integration of XDR based formats into MDAnalysis. The + XTC and TRR classes only implement `_write_next_frame` and + `_frame_to_ts`. + + .. _offsets-label: + + Notes + ----- + XDR based readers store persistent offsets on disk. The offsets are used to + enable access to random frames efficiently. These offsets will be generated + automatically the first time the trajectory is opened. Generally offsets + are stored in hidden `*_offsets.npz` files. Afterwards opening the same + file again is fast. It sometimes can happen that the stored offsets get out + off sync with the trajectory they refer to. For this the offsets also store + the number of atoms, size of the file and last modification time. If any of + them change the offsets are recalculated. Writing of the offset file can + fail when the directory where the trajectory file resides is not writable + or if the disk is full. In this case a warning message will be shown but + the offsets will nevertheless be used during the lifetime of the trajectory + Reader. However, the next time the trajectory is opened, the offsets will + have to be rebuilt again. + + .. versionchanged:: 1.0.0 + XDR offsets read from trajectory if offsets file read-in fails + .. versionchanged:: 2.0.0 + Add a InterProcessLock when generating offsets + .. versionchanged:: 2.4.0 + Use a direct read into ts attributes + """ + @store_init_arguments + def __init__(self, filename, convert_units=True, sub=None, + refresh_offsets=False, **kwargs): + """ + Parameters + ---------- + filename : str + trajectory filename + convert_units : bool (optional) + convert units to MDAnalysis units + sub : array_like (optional) + `sub` is an array of indices to pick out the corresponding + coordinates and load only them; this requires that the topology + itself is that of the sub system. + refresh_offsets : bool (optional) + force refresh of offsets + **kwargs : dict + General reader arguments. + + """ + super(XDRBaseReader, self).__init__(filename, + convert_units=convert_units, + **kwargs) + self._xdr = self._file(self.filename) + + self._sub = sub + if self._sub is not None: + self.n_atoms = len(self._sub) + else: + self.n_atoms = self._xdr.n_atoms + + if not refresh_offsets: + self._load_offsets() + else: + self._read_offsets(store=True) + frame = self._xdr.read() + try: + xdr_frame = self._xdr.read() + dt = xdr_frame.time - frame.time + self._xdr.seek(1) + except StopIteration: + dt = 0 + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + self._frame = 0 + self._frame_to_ts(frame, self.ts) + # these should only be initialized once + self.ts.dt = dt + self.ts.dimensions = triclinic_box(*frame.box) + if self.convert_units: + if self.ts.dimensions is not None: + self.convert_pos_from_native(self.ts.dimensions[:3]) + +
[docs] @classmethod + def parse_n_atoms(cls, filename, **kwargs): + with cls._file(filename) as f: + n_atoms = f.n_atoms + return n_atoms
+ +
[docs] def close(self): + """close reader""" + self._xdr.close()
+ + def _load_offsets(self): + """load frame offsets from file, reread them from the trajectory if that + fails. To prevent the competition of generating the same offset file + from multiple processes, an `InterProcessLock` is used.""" + fname = offsets_filename(self.filename) + lock_name = offsets_filename(self.filename, + ending='lock') + + # check if the location of the lock is writable. + try: + with fasteners.InterProcessLock(lock_name) as filelock: + pass + except OSError as e: + if isinstance(e, PermissionError) or e.errno == errno.EROFS: + warnings.warn(f"Cannot write lock/offset file in same location as " + f"{self.filename}. Using slow offset calculation.") + self._read_offsets(store=True) + return + else: + raise + + with fasteners.InterProcessLock(lock_name) as filelock: + if not isfile(fname): + self._read_offsets(store=True) + return + + # if offsets file read correctly, data will be a dictionary of offsets + # if not, data will be False + # if False, offsets should be read from the trajectory + # this warning can be avoided by loading Universe like: + # u = mda.Universe(data.TPR, data.XTC, refresh_offsets=True) + # refer to Issue #1893 + data = read_numpy_offsets(fname) + if not data: + warnings.warn(f"Reading offsets from {fname} failed, " + "reading offsets from trajectory instead.\n" + "Consider setting 'refresh_offsets=True' " + "when loading your Universe.") + self._read_offsets(store=True) + return + + ctime_ok = size_ok = n_atoms_ok = False + + try: + ctime_ok = getctime(self.filename) == data['ctime'] + size_ok = getsize(self.filename) == data['size'] + n_atoms_ok = self._xdr.n_atoms == data['n_atoms'] + except KeyError: + # we tripped over some old offset formated file + pass + + if not (ctime_ok and size_ok and n_atoms_ok): + warnings.warn("Reload offsets from trajectory\n " + "ctime or size or n_atoms did not match") + self._read_offsets(store=True) + else: + self._xdr.set_offsets(data['offsets']) + + def _read_offsets(self, store=False): + """read frame offsets from trajectory""" + fname = offsets_filename(self.filename) + offsets = self._xdr.offsets + if store: + ctime = getctime(self.filename) + size = getsize(self.filename) + try: + np.savez(fname, + offsets=offsets, size=size, ctime=ctime, + n_atoms=self._xdr.n_atoms) + except Exception as e: + warnings.warn(f"Couldn't save offsets because: {e}") + + @property + def n_frames(self): + """number of frames in trajectory""" + return len(self._xdr) + + def _reopen(self): + """reopen trajectory""" + self.ts.frame = 0 + self._frame = -1 + offsets = self._xdr.offsets.copy() + self._xdr.close() + self._xdr.open(self.filename.encode('utf-8'), 'r') + # only restore in case we actually had offsets + if len(offsets) != 0: + self._xdr.set_offsets(offsets) + + def _read_frame(self, i): + """read frame i""" + self._frame = i - 1 + try: + self._xdr.seek(i) + timestep = self._read_next_timestep() + except IOError: + warnings.warn('seek failed, recalculating offsets and retrying') + offsets = self._xdr.calc_offsets() + self._xdr.set_offsets(offsets) + self._read_offsets(store=True) + self._xdr.seek(i) + timestep = self._read_next_timestep() + return timestep + +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Return writer for trajectory format""" + if n_atoms is None: + n_atoms = self.n_atoms + return self._writer(filename, n_atoms=n_atoms, **kwargs)
+ + +
[docs]class XDRBaseWriter(base.WriterBase): + """Base class for libmdaxdr file formats xtc and trr""" + + def __init__(self, filename, n_atoms, convert_units=True, **kwargs): + """ + Parameters + ---------- + filename : str + filename of trajectory + n_atoms : int + number of atoms to be written + convert_units : bool (optional) + convert from MDAnalysis units to format specific units + **kwargs : dict + General writer arguments + """ + self.filename = filename + self._convert_units = convert_units + self.n_atoms = n_atoms + self._xdr = self._file(self.filename, 'w') + +
[docs] def close(self): + """close trajectory""" + self._xdr.close()
+ + def __del__(self): + self.close()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/XTC.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XTC.html new file mode 100644 index 0000000000..96f7090a3d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XTC.html @@ -0,0 +1,330 @@ + + + + + + MDAnalysis.coordinates.XTC — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.XTC

+# -*- 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-2017 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
+#
+"""
+XTC trajectory files --- :mod:`MDAnalysis.coordinates.XTC`
+==========================================================
+
+Read and write GROMACS XTC trajectories.
+
+See Also
+--------
+MDAnalysis.coordinates.TRR: Read and write GROMACS TRR trajectory files.
+MDAnalysis.coordinates.XDR: BaseReader/Writer for XDR based formats
+"""
+
+import errno
+from . import base
+from .XDR import XDRBaseReader, XDRBaseWriter
+from ..lib.formats.libmdaxdr import XTCFile
+from ..lib.mdamath import triclinic_vectors, triclinic_box
+
+
+
[docs]class XTCWriter(XDRBaseWriter): + """Writer for the Gromacs XTC trajectory format. + + XTC is a compressed trajectory format from Gromacs. The trajectory is saved + with reduced precision (3 decimal places by default) compared to other + lossless formarts like TRR and DCD. The main advantage of XTC files is that + they require significantly less disk space and the loss of precision is + usually not a problem. + """ + format = 'XTC' + multiframe = True + units = {'time': 'ps', 'length': 'nm'} + _file = XTCFile + + def __init__(self, filename, n_atoms, convert_units=True, + precision=3, **kwargs): + """ + Parameters + ---------- + filename : str + filename of the trajectory + n_atoms : int + number of atoms to write + convert_units : bool (optional) + convert into MDAnalysis units + precision : float (optional) + set precision of saved trjactory to this number of decimal places. + """ + super(XTCWriter, self).__init__(filename, n_atoms, convert_units, + **kwargs) + self.precision = precision + + def _write_next_frame(self, ag): + """Write information associated with ``ag`` at current frame into trajectory + + Parameters + ---------- + ag : AtomGroup or Universe + + See Also + -------- + <FormatWriter>.write(AtomGroup/Universe) + The normal write() method takes a more general input + + + .. versionchanged:: 1.0.0 + Added ability to use either AtomGroup or Universe. + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + try: + # Atomgroup? + ts = ag.ts + except AttributeError: + try: + # Universe? + ts = ag.trajectory.ts + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + + xyz = ts.positions.copy() + time = ts.time + step = ts.frame + dimensions = ts.dimensions + + if self._convert_units: + xyz = self.convert_pos_to_native(xyz, inplace=False) + dimensions = self.convert_dimensions_to_unitcell(ts, inplace=False) + + box = triclinic_vectors(dimensions) + # libmdaxdr will multiply the coordinates by precision. This means for + # a precision of 3 decimal places we need to pass 1000.0 to the xdr + # library. + precision = 10.0 ** self.precision + self._xdr.write(xyz, box, step, time, precision)
+ + +
[docs]class XTCReader(XDRBaseReader): + """Reader for the Gromacs XTC trajectory format. + + XTC is a compressed trajectory format from Gromacs. The trajectory is saved + with reduced precision (3 decimal places) compared to other lossless + formarts like TRR and DCD. The main advantage of XTC files is that they + require significantly less disk space and the loss of precision is usually + not a problem. + + Notes + ----- + See :ref:`Notes on offsets <offsets-label>` for more information about + offsets. + + + + """ + format = 'XTC' + units = {'time': 'ps', 'length': 'nm'} + _writer = XTCWriter + _file = XTCFile + + def _read_next_timestep(self, ts=None): + """ + copy next frame into timestep + + versionadded:: 2.4.0 + XTCReader implements this method so that it can use + read_direct_x method of XTCFile to read the data directly + into the timestep rather than copying it from a temporary array. + """ + if self._frame == self.n_frames - 1: + raise IOError(errno.EIO, 'trying to go over trajectory limit') + if ts is None: + ts = self.ts + if ts.has_positions: + frame = self._xdr.read_direct_x(ts.positions) + else: + frame = self._xdr.read() + self._frame += 1 + self._frame_to_ts(frame, ts) + return ts + + def _frame_to_ts(self, frame, ts): + """convert a xtc-frame to a mda TimeStep""" + ts.frame = self._frame + ts.time = frame.time + ts.data['step'] = frame.step + ts.dimensions = triclinic_box(*frame.box) + + if self._sub is not None: + ts.positions = frame.x[self._sub] + else: + ts.positions = frame.x + if self.convert_units: + self.convert_pos_from_native(ts.positions) + if ts.dimensions is not None: + self.convert_pos_from_native(ts.dimensions[:3]) + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/XYZ.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XYZ.html new file mode 100644 index 0000000000..87d7bbdca4 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/XYZ.html @@ -0,0 +1,620 @@ + + + + + + MDAnalysis.coordinates.XYZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.XYZ

+# -*- 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-2017 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
+#
+
+
+"""XYZ trajectory reader --- :mod:`MDAnalysis.coordinates.XYZ`
+==============================================================
+
+The :ref:`XYZ format <xyz-format>` is a loosely defined, simple
+coordinate trajectory format. The implemented format definition was
+taken from the `VMD xyzplugin`_ and is therefore compatible with VMD.
+
+Note the following:
+
+* Comments are not allowed in the XYZ file (we neither read nor write
+  them to remain compatible with VMD).
+* The atom name (first column) is ignored during reading.
+* The coordinates are assumed to be space-delimited rather than fixed
+  width (this may cause issues - see below).
+* All fields to the right of the z-coordinate are ignored.
+* The unitcell information is all zeros since this is not recorded in
+  the XYZ format.
+
+.. rubric:: Units
+
+* Coordinates are in Angstroms.
+* The length of a timestep can be set by passing the *dt* argument,
+  it's assumed to be in ps (default: 1 ps).
+
+There appears to be no rigid format definition so it is likely users
+will need to tweak this class.
+
+.. _xyz-format:
+
+XYZ File format
+---------------
+
+Definition used by the :class:`XYZReader` and :class:`XYZWriter` (and
+the `VMD xyzplugin`_ from whence the definition was taken)::
+
+    [ comment line            ] !! NOT IMPLEMENTED !! DO NOT INCLUDE
+    [ N                       ] # of atoms, required by this xyz reader plugin  line 1
+    [ molecule name           ] name of molecule (can be blank)                 line 2
+    atom1 x y z [optional data] atom name followed by xyz coords                line 3
+    atom2 x y z [ ...         ] and (optionally) other data.
+    ...
+    atomN x y z [ ...         ]                                                 line N+2
+
+
+Note
+----
+* comment lines not implemented (do not include them)
+* molecule name: the line is required but the content is ignored
+  at the moment
+* optional data (after the coordinates) are presently ignored
+
+
+.. Links
+.. _`VMD xyzplugin`: http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/xyzplugin.html
+
+Classes
+-------
+
+"""
+import itertools
+import os
+import errno
+import numpy as np
+import warnings
+import logging
+logger = logging.getLogger('MDAnalysis.coordinates.XYZ')
+
+from . import base
+from .timestep import Timestep
+from ..lib import util
+from ..lib.util import cached, store_init_arguments
+from ..exceptions import NoDataError
+from ..version import __version__
+
+
+
[docs]class XYZWriter(base.WriterBase): + """Writes an XYZ file + + The XYZ file format is not formally defined. This writer follows + the VMD implementation for the molfile `xyzplugin`_. + + + Notes + ----- + By default, the XYZ writer will attempt to use the input + :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` ``elements`` record to assign + atom names in the XYZ file. If the ``elements`` record is missing, then + the ``name`` record will be used. In the event that neither of these are + available, the atoms will all be named ``X``. Please see, the + `User Guide`_ for more information on how to add topology attributes if + you wish to add your own elements / atom names to a + :class:`~MDAnalysis.core.universe.Universe`. + + + .. Links + + .. _xyzplugin: + http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/xyzplugin.html + .. _User Guide: + https://userguide.mdanalysis.org/examples/constructing_universe.html#Adding-topology-attributes + + + .. versionchanged:: 1.0.0 + Use elements attribute instead of names attribute, if present. + .. versionchanged:: 2.0.0 + Support for passing timestep to the writer was deprecated in 1.0 and + has now been removed. As a consequence, custom names can no longer be + passed to the writer, these should be added to the + :class:`~MDAnalysis.core.universe.Universe`, or + :class:`~MDAnalysis.core.groups.AtomGroup` before invoking the writer. + """ + + format = 'XYZ' + multiframe = True + # these are assumed! + units = {'time': 'ps', 'length': 'Angstrom'} + + def __init__(self, filename, n_atoms=None, convert_units=True, + remark=None, **kwargs): + """Initialize the XYZ trajectory writer + + Parameters + ---------- + filename: str + filename of trajectory file. If it ends with "gz" then the file + will be gzip-compressed; if it ends with "bz2" it will be bzip2 + compressed. + n_atoms: int (optional) + Number of atoms in trajectory. By default assume that this is None + and that this file is used to store several different models + instead of a single trajectory. If a number is provided each + written TimeStep has to contain the same number of atoms. + convert_units : bool (optional) + convert quantities to default MDAnalysis units of Angstrom upon + writing [``True``] + remark: str (optional) + single line of text ("molecule name"). By default writes MDAnalysis + version and frame + + + .. versionchanged:: 1.0.0 + Removed :code:`default_remark` variable (Issue #2692). + .. versionchanged:: 2.0.0 + Due to the removal of timestep as an input for writing, the atoms + parameter is no longer relevant and has been removed. If passing + an empty universe, please use ``add_TopologyAttr`` to add in the + required elements or names. + """ + self.filename = filename + self.remark = remark + self.n_atoms = n_atoms + self.convert_units = convert_units + + # can also be gz, bz2 + self._xyz = util.anyopen(self.filename, 'wt') + + def _get_atoms_elements_or_names(self, atoms): + """Return a list of atom elements (if present) or fallback to atom names""" + try: + return atoms.atoms.elements + except (AttributeError, NoDataError): + try: + return atoms.atoms.names + except (AttributeError, NoDataError): + wmsg = ("Input AtomGroup or Universe does not have atom " + "elements or names attributes, writer will default " + "atom names to 'X'") + warnings.warn(wmsg) + return itertools.cycle(('X',)) + +
[docs] def close(self): + """Close the trajectory file and finalize the writing""" + if self._xyz is not None: + self._xyz.write("\n") + self._xyz.close() + self._xyz = None
+ +
[docs] def write(self, obj): + """Write object `obj` at current trajectory frame to file. + + Atom elements (or names) in the output are taken from the `obj` or + default to the value of the `atoms` keyword supplied to the + :class:`XYZWriter` constructor. + + Parameters + ---------- + obj : Universe or AtomGroup + The :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` to write. + + + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + # prepare the Timestep and extract atom names if possible + # (The way it is written it should be possible to write + # trajectories with frames that differ in atom numbers + # but this is not tested.) + try: + atoms = obj.atoms + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + else: + if hasattr(obj, 'universe'): + # For AtomGroup and children (Residue, ResidueGroup, Segment) + ts_full = obj.universe.trajectory.ts + if ts_full.n_atoms == atoms.n_atoms: + ts = ts_full + else: + # Only populate a time step with the selected atoms. + ts = ts_full.copy_slice(atoms.indices) + elif hasattr(obj, 'trajectory'): + # For Universe only --- get everything + ts = obj.trajectory.ts + # update atom names + self.atomnames = self._get_atoms_elements_or_names(atoms) + + self._write_next_frame(ts)
+ + def _write_next_frame(self, ts=None): + """ + Write coordinate information in *ts* to the trajectory + + .. versionchanged:: 1.0.0 + Print out :code:`remark` if present, otherwise use generic one + (Issue #2692). + Renamed from `write_next_timestep` to `_write_next_frame`. + """ + if ts is None: + if not hasattr(self, 'ts'): + raise NoDataError('XYZWriter: no coordinate data to write to ' + 'trajectory file') + else: + ts = self.ts + + if self.n_atoms is not None: + if self.n_atoms != ts.n_atoms: + raise ValueError('n_atoms keyword was specified indicating ' + 'that this should be a trajectory of the ' + 'same model. But the provided TimeStep has a ' + 'different number ({}) then expected ({})' + ''.format(ts.n_atoms, self.n_atoms)) + else: + if (not isinstance(self.atomnames, itertools.cycle) and + len(self.atomnames) != ts.n_atoms): + logger.info('Trying to write a TimeStep with unknown atoms. ' + 'Expected {} atoms, got {}. Try using "write" if you are ' + 'using "_write_next_frame" directly'.format( + len(self.atomnames), ts.n_atoms)) + self.atomnames = np.array([self.atomnames[0]] * ts.n_atoms) + + if self.convert_units: + coordinates = self.convert_pos_to_native( + ts.positions, inplace=False) + else: + coordinates = ts.positions + + # Write number of atoms + self._xyz.write("{0:d}\n".format(ts.n_atoms)) + + # Write remark + if self.remark is None: + remark = "frame {} | Written by MDAnalysis {} (release {})\n".format( + ts.frame, self.__class__.__name__, __version__) + + self._xyz.write(remark) + else: + self._xyz.write(self.remark.strip() + "\n") + + # Write content + for atom, (x, y, z) in zip(self.atomnames, coordinates): + self._xyz.write("{0!s:>8} {1:10.5f} {2:10.5f} {3:10.5f}\n" + "".format(atom, x, y, z))
+ + +
[docs]class XYZReader(base.ReaderBase): + """Reads from an XYZ file + + :Data: + :attr:`ts` + Timestep object containing coordinates of current frame + + :Methods: + ``len(xyz)`` + return number of frames in xyz + ``for ts in xyz:`` + iterate through trajectory + + .. Note: this can read both compressed (foo.xyz) and compressed + (foo.xyz.bz2 or foo.xyz.gz) files; uncompression is handled + on the fly and also reads streams via + :class:`~MDAnalysis.lib.util.NamedStream`. + + The XYZ file format follows VMD's xyzplugin_ and is also described + under :ref:`XYZ format <xyz-format>`. + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based. Added *dt* and + *time_offset* keywords (passed to :class:`Timestep`) + """ + + # Phil Fowler: + # Validation: the geometric centre of 1284 atoms was calculated over + # 500 frames using both MDAnalysis and a VMD Tcl script. There was + # exact agreement (measured to three decimal places). bzipped and + # gzipped versions of the XYZ file were also tested + + format = "XYZ" + # these are assumed! + units = {'time': 'ps', 'length': 'Angstrom'} + _Timestep = Timestep + + @store_init_arguments + def __init__(self, filename, **kwargs): + super(XYZReader, self).__init__(filename, **kwargs) + + # the filename has been parsed to be either be foo.xyz or foo.xyz.bz2 by + # coordinates::core.py so the last file extension will tell us if it is + # bzipped or not + root, ext = os.path.splitext(self.filename) + self.xyzfile = util.anyopen(self.filename) + self.compression = ext[1:] if ext[1:] != "xyz" else None + self._cache = dict() + + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + # Haven't quite figured out where to start with all the self._reopen() + # etc. + # (Also cannot just use seek() or reset() because that would break + # with urllib2.urlopen() streams) + self._read_next_timestep() + + @property + @cached('n_atoms') + def n_atoms(self): + """number of atoms in a frame""" + with util.anyopen(self.filename) as f: + n = f.readline() + # need to check type of n + return int(n) + + @property + @cached('n_frames') + def n_frames(self): + try: + return self._read_xyz_n_frames() + except IOError: + return 0 + + def _read_xyz_n_frames(self): + # the number of lines in the XYZ file will be 2 greater than the + # number of atoms + linesPerFrame = self.n_atoms + 2 + counter = 0 + offsets = [] + + with util.anyopen(self.filename) as f: + line = True + while line: + if not counter % linesPerFrame: + offsets.append(f.tell()) + line = f.readline() + counter += 1 + + # need to check this is an integer! + n_frames = int(counter / linesPerFrame) + self._offsets = offsets + return n_frames + + def _read_frame(self, frame): + self.xyzfile.seek(self._offsets[frame]) + self.ts.frame = frame - 1 # gets +1'd in next + return self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + # check that the timestep object exists + if ts is None: + ts = self.ts + + f = self.xyzfile + + try: + # we assume that there are only two header lines per frame + f.readline() + f.readline() + # convert all entries at the end once for optimal speed + tmp_buf = [] + for i in range(self.n_atoms): + tmp_buf.append(f.readline().split()[1:4]) + ts.positions = tmp_buf + ts.frame += 1 + return ts + except (ValueError, IndexError) as err: + raise EOFError(err) from None + + def _reopen(self): + self.close() + self.open_trajectory() + + def open_trajectory(self): + if self.xyzfile is not None: + raise IOError( + errno.EALREADY, 'XYZ file already opened', self.filename) + + self.xyzfile = util.anyopen(self.filename) + + # reset ts + ts = self.ts + ts.frame = -1 + + return self.xyzfile + +
[docs] def Writer(self, filename, n_atoms=None, **kwargs): + """Returns a XYZWriter for *filename* with the same parameters as this + XYZ. + + Parameters + ---------- + filename: str + filename of the output trajectory + n_atoms: int (optional) + number of atoms. If none is given use the same number of atoms from + the reader instance is used + **kwargs: + See :class:`XYZWriter` for additional kwargs + + Returns + ------- + :class:`XYZWriter` (see there for more details) + + See Also + -------- + :class:`XYZWriter` + """ + if n_atoms is None: + n_atoms = self.n_atoms + return XYZWriter(filename, n_atoms=n_atoms, **kwargs)
+ +
[docs] def close(self): + """Close xyz trajectory file if it was open.""" + if self.xyzfile is None: + return + self.xyzfile.close() + self.xyzfile = None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/base.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/base.html new file mode 100644 index 0000000000..b530aba2db --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/base.html @@ -0,0 +1,1962 @@ + + + + + + MDAnalysis.coordinates.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.base

+# -*- 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-2017 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
+#
+
+
+"""\
+Base classes --- :mod:`MDAnalysis.coordinates.base`
+===================================================
+
+Derive, FrameIterator, Reader and Writer classes from the classes
+in this module. The derived classes must follow the :ref:`Trajectory API`.
+
+
+.. _FrameIterators:
+
+FrameIterators
+--------------
+
+FrameIterators are "sliced trajectories" (a trajectory is a
+:ref:`Reader <Readers>`) that can be iterated over. They are typically
+created by slicing a trajectory or by fancy-indexing of a trajectory
+with an array of frame numbers or a boolean mask of all frames.
+
+Iterator classes used by the by the :class:`ProtoReader`:
+
+.. autoclass:: FrameIteratorBase
+
+.. autoclass:: FrameIteratorSliced
+
+.. autoclass:: FrameIteratorAll
+
+.. autoclass:: FrameIteratorIndices
+
+
+.. _ReadersBase:
+
+Readers
+-------
+
+Readers know how to take trajectory data in a given format and present it in a
+common API to the user in MDAnalysis. There are two types of readers:
+
+1. Readers for *multi frame trajectories*, i.e., file formats that typically
+   contain many frames. These readers are typically derived from
+   :class:`ReaderBase`.
+
+2. Readers for *single frame formats*: These file formats only contain a single
+   coordinate set. These readers are derived from
+   :class:`SingleFrameReaderBase`.
+
+The underlying low-level readers handle closing of files in different
+ways. Typically, the MDAnalysis readers try to ensure that files are always
+closed when a reader instance is garbage collected, which relies on
+implementing a :meth:`~ReaderBase.__del__` method. However, in some cases, this
+is not necessary (for instance, for the single frame formats) and then such a
+method can lead to undesirable side effects (such as memory leaks). In this
+case, :class:`ProtoReader` should be used.
+
+
+.. autoclass:: ReaderBase
+   :members:
+   :inherited-members:
+
+.. autoclass:: SingleFrameReaderBase
+   :members:
+   :inherited-members:
+
+.. autoclass:: ProtoReader
+   :members:
+
+
+
+.. _WritersBase:
+
+Writers
+-------
+
+Writers know how to write information in a :class:`Timestep` to a trajectory
+file.
+
+.. autoclass:: WriterBase
+   :members:
+   :inherited-members:
+
+
+Converters
+----------
+
+Converters output information to other libraries.
+
+.. autoclass:: ConverterBase
+   :members:
+   :inherited-members:
+
+
+Helper classes
+--------------
+
+The following classes contain basic functionality that all readers and
+writers share.
+
+.. autoclass:: IOBase
+   :members:
+
+"""
+import abc
+import numpy as np
+import numbers
+import warnings
+from typing import Any, Union, Optional, List, Dict
+
+from .timestep import Timestep
+from . import core
+from .. import (
+    _READERS, _READER_HINTS,
+    _SINGLEFRAME_WRITERS,
+    _MULTIFRAME_WRITERS,
+    _CONVERTERS
+)
+from .. import units
+from ..auxiliary.base import AuxReader
+from ..auxiliary.core import auxreader
+from ..auxiliary.core import get_auxreader_for
+from ..auxiliary import _AUXREADERS
+from ..lib.util import asiterable, Namespace, store_init_arguments
+from ..lib.util import NamedStream
+
+
+
[docs]class FrameIteratorBase(object): + """ + Base iterable over the frames of a trajectory. + + A frame iterable has a length that can be accessed with the :func:`len` + function, and can be indexed similarly to a full trajectory. When indexed, + indices are resolved relative to the iterable and not relative to the + trajectory. + + .. versionadded:: 0.19.0 + + """ + def __init__(self, trajectory): + self._trajectory = trajectory + + def __len__(self): + raise NotImplementedError() + + @staticmethod + def _avoid_bool_list(frames): + if isinstance(frames, list) and frames and isinstance(frames[0], bool): + return np.array(frames, dtype=bool) + return frames + + @property + def trajectory(self): + return self._trajectory
+ + +
[docs]class FrameIteratorSliced(FrameIteratorBase): + """ + Iterable over the frames of a trajectory on the basis of a slice. + + Parameters + ---------- + trajectory: ProtoReader + The trajectory over which to iterate. + frames: slice + A slice to select the frames of interest. + + See Also + -------- + FrameIteratorBase + + .. versionadded:: 0.19.0 + + """ + def __init__(self, trajectory, frames): + # It would be easier to store directly a range object, as it would + # store its parameters in a single place, calculate its length, and + # take care of most the indexing. Though, doing so is not compatible + # with python 2 where xrange (or range with six) is only an iterator. + super(FrameIteratorSliced, self).__init__(trajectory) + self._start, self._stop, self._step = trajectory.check_slice_indices( + frames.start, frames.stop, frames.step, + ) + + def __len__(self): + return range_length(self.start, self.stop, self.step) + + def __iter__(self): + for i in range(self.start, self.stop, self.step): + yield self.trajectory[i] + self.trajectory.rewind() + + def __getitem__(self, frame): + if isinstance(frame, numbers.Integral): + length = len(self) + if not -length < frame < length: + raise IndexError('Index {} is out of range of the range of length {}.' + .format(frame, length)) + if frame < 0: + frame = len(self) + frame + frame = self.start + frame * self.step + return self.trajectory._read_frame_with_aux(frame) + elif isinstance(frame, slice): + step = (frame.step or 1) * self.step + if frame.start is None: + if frame.step is None or frame.step > 0: + start = self.start + else: + start = self.start + (len(self) - 1) * self.step + else: + start = self.start + (frame.start or 0) * self.step + if frame.stop is None: + if frame.step is None or frame.step > 0: + last = start + (range_length(start, self.stop, step) - 1) * step + else: + last = self.start + stop = last + np.sign(step) + else: + stop = self.start + (frame.stop or 0) * self.step + + new_slice = slice(start, stop, step) + frame_iterator = FrameIteratorSliced(self.trajectory, new_slice) + # The __init__ of FrameIteratorSliced does some conversion between + # the way indices are handled in slices and the way they are + # handled by range. We need to overwrite this conversion as we + # already use the logic for range. + frame_iterator._start = start + frame_iterator._stop = stop + frame_iterator._step = step + return frame_iterator + else: + # Indexing with a lists of bools does not behave the same in all + # version of numpy. + frame = self._avoid_bool_list(frame) + frames = np.array(list(range(self.start, self.stop, self.step)))[frame] + return FrameIteratorIndices(self.trajectory, frames) + + @property + def start(self): + return self._start + + @property + def stop(self): + return self._stop + + @property + def step(self): + return self._step
+ + +
[docs]class FrameIteratorAll(FrameIteratorBase): + """ + Iterable over all the frames of a trajectory. + + Parameters + ---------- + trajectory: ProtoReader + The trajectory over which to iterate. + + See Also + -------- + FrameIteratorBase + + .. versionadded:: 0.19.0 + + """ + def __init__(self, trajectory): + super(FrameIteratorAll, self).__init__(trajectory) + + def __len__(self): + return self.trajectory.n_frames + + def __iter__(self): + return iter(self.trajectory) + + def __getitem__(self, frame): + return self.trajectory[frame]
+ + +
[docs]class FrameIteratorIndices(FrameIteratorBase): + """ + Iterable over the frames of a trajectory listed in a sequence of indices. + + Parameters + ---------- + trajectory: ProtoReader + The trajectory over which to iterate. + frames: sequence + A sequence of indices. + + See Also + -------- + FrameIteratorBase + """ + def __init__(self, trajectory, frames): + super(FrameIteratorIndices, self).__init__(trajectory) + self._frames = [] + for frame in frames: + if not isinstance(frame, numbers.Integral): + raise TypeError("Frames indices must be integers.") + frame = trajectory._apply_limits(frame) + self._frames.append(frame) + self._frames = tuple(self._frames) + + def __len__(self): + return len(self.frames) + + def __iter__(self): + for frame in self.frames: + yield self.trajectory._read_frame_with_aux(frame) + self.trajectory.rewind() + + def __getitem__(self, frame): + if isinstance(frame, numbers.Integral): + frame = self.frames[frame] + return self.trajectory._read_frame_with_aux(frame) + else: + frame = self._avoid_bool_list(frame) + frames = np.array(self.frames)[frame] + return FrameIteratorIndices(self.trajectory, frames) + + @property + def frames(self): + return self._frames
+ + +
[docs]class IOBase(object): + """Base class bundling common functionality for trajectory I/O. + + .. versionchanged:: 0.8 + Added context manager protocol. + """ + + #: dict with units of of *time* and *length* (and *velocity*, *force*, + #: ... for formats that support it) + units = {'time': None, 'length': None, 'velocity': None} + +
[docs] def convert_pos_from_native(self, x, inplace=True): + """Conversion of coordinate array x from native units to base units. + + Parameters + ---------- + x : array_like + Positions to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input `x` is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + + .. versionchanged:: 0.7.5 + Keyword `inplace` can be set to ``False`` so that a + modified copy is returned *unless* no conversion takes + place, in which case the reference to the unmodified `x` is + returned. + + """ + f = units.get_conversion_factor('length', + self.units['length'], 'Angstrom') + if f == 1.: + return x + if not inplace: + return f * x + x *= f + return x
+ +
[docs] def convert_velocities_from_native(self, v, inplace=True): + """Conversion of velocities array *v* from native to base units + + Parameters + ---------- + v : array_like + Velocities to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input *v* is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + + .. versionadded:: 0.7.5 + """ + f = units.get_conversion_factor( + 'speed', self.units['velocity'], 'Angstrom/ps') + if f == 1.: + return v + if not inplace: + return f * v + v *= f + return v
+ +
[docs] def convert_forces_from_native(self, force, inplace=True): + """Conversion of forces array *force* from native to base units + + Parameters + ---------- + force : array_like + Forces to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input *force* is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + .. versionadded:: 0.7.7 + """ + f = units.get_conversion_factor( + 'force', self.units['force'], 'kJ/(mol*Angstrom)') + if f == 1.: + return force + if not inplace: + return f * force + force *= f + return force
+ +
[docs] def convert_time_from_native(self, t, inplace=True): + """Convert time *t* from native units to base units. + + Parameters + ---------- + t : array_like + Time values to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input `t` is modified in place and also returned + (although note that scalar values `t` are passed by value in Python and + hence an in-place modification has no effect on the caller.) In-place + operations improve performance because allocating new arrays is + avoided. + + + .. versionchanged:: 0.7.5 + Keyword `inplace` can be set to ``False`` so that a + modified copy is returned *unless* no conversion takes + place, in which case the reference to the unmodified `x` is + returned. + + """ + f = units.get_conversion_factor( + 'time', self.units['time'], 'ps') + if f == 1.: + return t + if not inplace: + return f * t + t *= f + return t
+ +
[docs] def convert_pos_to_native(self, x, inplace=True): + """Conversion of coordinate array `x` from base units to native units. + + Parameters + ---------- + x : array_like + Positions to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input `x` is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + + .. versionchanged:: 0.7.5 + Keyword `inplace` can be set to ``False`` so that a + modified copy is returned *unless* no conversion takes + place, in which case the reference to the unmodified `x` is + returned. + + """ + f = units.get_conversion_factor( + 'length', 'Angstrom', self.units['length']) + if f == 1.: + return x + if not inplace: + return f * x + x *= f + return x
+ +
[docs] def convert_velocities_to_native(self, v, inplace=True): + """Conversion of coordinate array `v` from base to native units + + Parameters + ---------- + v : array_like + Velocities to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input `v` is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + + .. versionadded:: 0.7.5 + """ + f = units.get_conversion_factor( + 'speed', 'Angstrom/ps', self.units['velocity']) + if f == 1.: + return v + if not inplace: + return f * v + v *= f + return v
+ +
[docs] def convert_forces_to_native(self, force, inplace=True): + """Conversion of force array *force* from base to native units. + + Parameters + ---------- + force : array_like + Forces to transform + inplace : bool (optional) + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input `force` is modified in place and also returned. + In-place operations improve performance because allocating new arrays + is avoided. + + + .. versionadded:: 0.7.7 + """ + f = units.get_conversion_factor( + 'force', 'kJ/(mol*Angstrom)', self.units['force']) + if f == 1.: + return force + if not inplace: + return f * force + force *= f + return force
+ +
[docs] def convert_time_to_native(self, t, inplace=True): + """Convert time *t* from base units to native units. + + Parameters + ---------- + t : array_like + Time values to transform + inplace : bool, optional + Whether to modify the array inplace, overwriting previous data + + Note + ---- + By default, the input *t* is modified in place and also + returned. (Also note that scalar values *t* are passed by + value in Python and hence an in-place modification has no + effect on the caller.) + + .. versionchanged:: 0.7.5 + Keyword *inplace* can be set to ``False`` so that a + modified copy is returned *unless* no conversion takes + place, in which case the reference to the unmodified *x* is + returned. + + """ + f = units.get_conversion_factor( + 'time', 'ps', self.units['time']) + if f == 1.: + return t + if not inplace: + return f * t + t *= f + return t
+ +
[docs] def close(self): + """Close the trajectory file.""" + pass # pylint: disable=unnecessary-pass
+ + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + # see http://docs.python.org/2/library/stdtypes.html#typecontextmanager + self.close() + return False # do not suppress exceptions
+ + +class _Readermeta(abc.ABCMeta): + """Automatic Reader registration metaclass + + .. versionchanged:: 1.0.0 + Added _format_hint functionality + """ + # Auto register upon class creation + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) # pylint: disable=non-parent-init-called + try: + fmt = asiterable(classdict['format']) + except KeyError: + pass + else: + for fmt_name in fmt: + fmt_name = fmt_name.upper() + _READERS[fmt_name] = cls + + if '_format_hint' in classdict: + # isn't bound yet, so access __func__ + _READER_HINTS[fmt_name] = classdict['_format_hint'].__func__ + + +
[docs]class ProtoReader(IOBase, metaclass=_Readermeta): + """Base class for Readers, without a :meth:`__del__` method. + + Extends :class:`IOBase` with most attributes and methods of a generic + Reader, with the exception of a :meth:`__del__` method. It should be used + as base for Readers that do not need :meth:`__del__`, especially since + having even an empty :meth:`__del__` might lead to memory leaks. + + See the :ref:`Trajectory API` definition in + :mod:`MDAnalysis.coordinates.__init__` for the required attributes and + methods. + + See Also + -------- + :class:`ReaderBase` + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + .. versionchanged:: 2.0.0 + Now supports (un)pickle. Upon unpickling, + the current timestep is retained by reconstrunction. + """ + + #: The appropriate Timestep class, e.g. + #: :class:`MDAnalysis.coordinates.xdrfile.XTC.Timestep` for XTC. + _Timestep = Timestep + _transformations: list + _auxs: dict + _filename: Any + n_frames: int + + def __init__(self): + # initialise list to store added auxiliary readers in + # subclasses should now call super + self._auxs = {} + self._transformations=[] + + def __len__(self) -> int: + return self.n_frames + +
[docs] @classmethod + def parse_n_atoms(cls, filename, **kwargs): + """Read the coordinate file and deduce the number of atoms + + Returns + ------- + n_atoms : int + the number of atoms in the coordinate file + + Raises + ------ + NotImplementedError + when the number of atoms can't be deduced + """ + raise NotImplementedError("{} cannot deduce the number of atoms" + "".format(cls.__name__))
+ +
[docs] def next(self) -> Timestep: + """Forward one step to next frame.""" + try: + ts = self._read_next_timestep() + except (EOFError, IOError): + self.rewind() + raise StopIteration from None + else: + for auxname, reader in self._auxs.items(): + ts = self._auxs[auxname].update_ts(ts) + + ts = self._apply_transformations(ts) + + return ts
+ + def __next__(self) -> Timestep: + """Forward one step to next frame when using the `next` builtin.""" + return self.next() + +
[docs] def rewind(self) -> Timestep: + """Position at beginning of trajectory""" + self._reopen() + self.next()
+ + @property + def dt(self) -> float: + """Time between two trajectory frames in picoseconds.""" + return self.ts.dt + + @property + def totaltime(self) -> float: + """Total length of the trajectory + + The time is calculated as ``(n_frames - 1) * dt``, i.e., we assume that + the first frame no time as elapsed. Thus, a trajectory with two frames will + be considered to have a length of a single time step `dt` and a + "trajectory" with a single frame will be reported as length 0. + + """ + return (self.n_frames - 1) * self.dt + + @property + def frame(self) -> int: + """Frame number of the current time step. + + This is a simple short cut to :attr:`Timestep.frame`. + """ + return self.ts.frame + + @property + def time(self): + """Time of the current frame in MDAnalysis time units (typically ps). + + This is either read straight from the Timestep, or calculated as + time = :attr:`Timestep.frame` * :attr:`Timestep.dt` + """ + return self.ts.time + + @property + def trajectory(self): + # Makes a reader effectively commpatible with a FrameIteratorBase + return self + +
[docs] def Writer(self, filename, **kwargs): + """A trajectory writer with the same properties as this trajectory.""" + raise NotImplementedError( + "Sorry, there is no Writer for this format in MDAnalysis. " + "Please file an enhancement request at " + "https://github.com/MDAnalysis/mdanalysis/issues")
+ +
[docs] def OtherWriter(self, filename, **kwargs): + """Returns a writer appropriate for *filename*. + + Sets the default keywords *start*, *step* and *dt* (if + available). *n_atoms* is always set from :attr:`Reader.n_atoms`. + + + See Also + -------- + :meth:`Reader.Writer` and :func:`MDAnalysis.Writer` + + """ + kwargs['n_atoms'] = self.n_atoms # essential + kwargs.setdefault('start', self.frame) + try: + kwargs.setdefault('dt', self.dt) + except KeyError: + pass + return core.writer(filename, **kwargs)
+ + @abc.abstractmethod + def _read_next_timestep(self, ts=None): + # Example from DCDReader: + # if ts is None: + # ts = self.ts + # ts.frame = self._read_next_frame(etc) + # return ts + ... + + def __iter__(self): + """ Iterate over trajectory frames. """ + self._reopen() + return self + + @abc.abstractmethod + def _reopen(self): + """Should position Reader to just before first frame + + Calling next after this should return the first frame + """ + pass # pylint: disable=unnecessary-pass + + def _apply_limits(self, frame): + if frame < 0: + frame += len(self) + if frame < 0 or frame >= len(self): + raise IndexError("Index {} exceeds length of trajectory ({})." + "".format(frame, len(self))) + return frame + + def __getitem__(self, frame): + """Return the Timestep corresponding to *frame*. + + If `frame` is a integer then the corresponding frame is + returned. Negative numbers are counted from the end. + + If frame is a :class:`slice` then an iterator is returned that + allows iteration over that part of the trajectory. + + Note + ---- + *frame* is a 0-based frame index. + """ + if isinstance(frame, numbers.Integral): + frame = self._apply_limits(frame) + return self._read_frame_with_aux(frame) + elif isinstance(frame, (list, np.ndarray)): + if len(frame) != 0 and isinstance(frame[0], (bool, np.bool_)): + # Avoid having list of bools + frame = np.asarray(frame, dtype=bool) + # Convert bool array to int array + frame = np.arange(len(self))[frame] + return FrameIteratorIndices(self, frame) + elif isinstance(frame, slice): + start, stop, step = self.check_slice_indices( + frame.start, frame.stop, frame.step) + if start == 0 and stop == len(self) and step == 1: + return FrameIteratorAll(self) + else: + return FrameIteratorSliced(self, frame) + else: + raise TypeError("Trajectories must be an indexed using an integer," + " slice or list of indices") + + def _read_frame(self, frame): + """Move to *frame* and fill timestep with data.""" + raise TypeError("{0} does not support direct frame indexing." + "".format(self.__class__.__name__)) + # Example implementation in the DCDReader: + # self._jump_to_frame(frame) + # ts = self.ts + # ts.frame = self._read_next_frame(ts._x, ts._y, ts._z, + # ts.dimensions, 1) + # return ts + + def _read_frame_with_aux(self, frame): + """Move to *frame*, updating ts with trajectory, transformations and auxiliary data.""" + ts = self._read_frame(frame) # pylint: disable=assignment-from-no-return + for aux in self.aux_list: + ts = self._auxs[aux].update_ts(ts) + + ts = self._apply_transformations(ts) + + return ts + + def _sliced_iter(self, start, stop, step): + """Generator for slicing a trajectory. + + *start* *stop* and *step* are 3 integers describing the slice. + Error checking is not done past this point. + + A :exc:`NotImplementedError` is raised if random access to + frames is not implemented. + """ + # override with an appropriate implementation e.g. using self[i] might + # be much slower than skipping steps in a next() loop + try: + for i in range(start, stop, step): + yield self._read_frame_with_aux(i) + self.rewind() + except TypeError: # if _read_frame not implemented + errmsg = f"{self.__class__.__name__} does not support slicing." + raise TypeError(errmsg) from None + +
[docs] def check_slice_indices(self, start, stop, step): + """Check frame indices are valid and clip to fit trajectory. + + The usage follows standard Python conventions for :func:`range` but see + the warning below. + + Parameters + ---------- + start : int or None + Starting frame index (inclusive). ``None`` corresponds to the default + of 0, i.e., the initial frame. + stop : int or None + Last frame index (exclusive). ``None`` corresponds to the default + of n_frames, i.e., it includes the last frame of the trajectory. + step : int or None + step size of the slice, ``None`` corresponds to the default of 1, i.e, + include every frame in the range `start`, `stop`. + + Returns + ------- + start, stop, step : tuple (int, int, int) + Integers representing the slice + + Warning + ------- + The returned values `start`, `stop` and `step` give the expected result + when passed in :func:`range` but gives unexpected behavior when passed + in a :class:`slice` when ``stop=None`` and ``step=-1`` + + This can be a problem for downstream processing of the output from this + method. For example, slicing of trajectories is implemented by passing + the values returned by :meth:`check_slice_indices` to :func:`range` :: + + range(start, stop, step) + + and using them as the indices to randomly seek to. On the other hand, + in :class:`MDAnalysis.analysis.base.AnalysisBase` the values returned + by :meth:`check_slice_indices` are used to splice the trajectory by + creating a :class:`slice` instance :: + + slice(start, stop, step) + + This creates a discrepancy because these two lines are not equivalent:: + + range(10, -1, -1) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] + range(10)[slice(10, -1, -1)] # [] + + """ + + slice_dict = {'start': start, 'stop': stop, 'step': step} + for varname, var in slice_dict.items(): + if isinstance(var, numbers.Integral): + slice_dict[varname] = int(var) + elif (var is None): + pass + else: + raise TypeError("{0} is not an integer".format(varname)) + + start = slice_dict['start'] + stop = slice_dict['stop'] + step = slice_dict['step'] + + if step == 0: + raise ValueError("Step size is zero") + + nframes = len(self) + step = step or 1 + + if start is None: + start = 0 if step > 0 else nframes - 1 + elif start < 0: + start += nframes + if start < 0: + start = 0 + + if step < 0 and start >= nframes: + start = nframes - 1 + + if stop is None: + stop = nframes if step > 0 else -1 + elif stop < 0: + stop += nframes + + if step > 0 and stop > nframes: + stop = nframes + + return start, stop, step
+ + def __repr__(self): + return ("<{cls} {fname} with {nframes} frames of {natoms} atoms>" + "".format( + cls=self.__class__.__name__, + fname=self.filename, + nframes=self.n_frames, + natoms=self.n_atoms + )) + +
[docs] def timeseries(self, asel: Optional['AtomGroup']=None, + start: Optional[int]=None, stop: Optional[int]=None, + step: Optional[int]=None, + order: Optional[str]='fac') -> np.ndarray: + """Return a subset of coordinate data for an AtomGroup + + Parameters + ---------- + asel : AtomGroup (optional) + The :class:`~MDAnalysis.core.groups.AtomGroup` to read the + coordinates from. Defaults to ``None``, in which case the full set + of coordinate data is returned. + start : int (optional) + Begin reading the trajectory at frame index `start` (where 0 is the + index of the first frame in the trajectory); the default + ``None`` starts at the beginning. + stop : int (optional) + End reading the trajectory at frame index `stop`-1, i.e, `stop` is + excluded. The trajectory is read to the end with the default + ``None``. + step : int (optional) + Step size for reading; the default ``None`` is equivalent to 1 and + means to read every frame. + order : str (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates) + + See Also + -------- + :class:`MDAnalysis.coordinates.memory` + + + .. versionadded:: 2.4.0 + """ + start, stop, step = self.check_slice_indices(start, stop, step) + nframes = len(range(start, stop, step)) + + if asel is not None: + if len(asel) == 0: + raise ValueError( + "Timeseries requires at least one atom to analyze") + atom_numbers = asel.indices + natoms = len(atom_numbers) + else: + natoms = self.n_atoms + atom_numbers = np.arange(natoms) + + # allocate output array in 'fac' order + coordinates = np.empty((nframes, natoms, 3), dtype=np.float32) + for i, ts in enumerate(self[start:stop:step]): + coordinates[i, :] = ts.positions[atom_numbers] + + # switch axes around + default_order = 'fac' + if order != default_order: + try: + newidx = [default_order.index(i) for i in order] + except ValueError: + raise ValueError(f"Unrecognized order key in {order}, " + "must be permutation of 'fac'") + + try: + coordinates = np.moveaxis(coordinates, newidx, [0, 1, 2]) + except ValueError: + errmsg = ("Repeated or missing keys passed to argument " + f"`order`: {order}, each key must be used once") + raise ValueError(errmsg) + return coordinates
+ +# TODO: Change order of aux_spec and auxdata for 3.0 release, cf. Issue #3811 +
[docs] def add_auxiliary(self, + aux_spec: Union[str, Dict[str, str]] = None, + auxdata: Union[str, AuxReader] = None, + format: str = None, + **kwargs) -> None: + """Add auxiliary data to be read alongside trajectory. + + Auxiliary data may be any data timeseries from the trajectory + additional to that read in by the trajectory reader. *auxdata* can + be an :class:`~MDAnalysis.auxiliary.base.AuxReader` instance, or the + data itself as e.g. a filename; in the latter case an appropriate + :class:`~MDAnalysis.auxiliary.base.AuxReader` is guessed from the + data/file format. An appropriate `format` may also be directly provided + as a key word argument. + + On adding, the AuxReader is initially matched to the current timestep + of the trajectory, and will be updated when the trajectory timestep + changes (through a call to :meth:`next()` or jumping timesteps with + ``trajectory[i]``). + + The representative value(s) of the auxiliary data for each timestep (as + calculated by the :class:`~MDAnalysis.auxiliary.base.AuxReader`) are + stored in the current timestep in the ``ts.aux`` namespace under + *aux_spec*; e.g. to add additional pull force data stored in + pull-force.xvg:: + + u = MDAnalysis.Universe(PDB, XTC) + u.trajectory.add_auxiliary('pull', 'pull-force.xvg') + + The representative value for the current timestep may then be accessed + as ``u.trajectory.ts.aux.pull`` or ``u.trajectory.ts.aux['pull']``. + + + The following applies to energy readers like the + :class:`~MDAnalysis.auxiliary.EDR.EDRReader`. + + All data that is present in the (energy) file can be added by omitting + `aux_spec` like so:: + + u.trajectory.add_auxiliary(auxdata="ener.edr") + + *aux_spec* is expected to be a dictionary that maps the desired + attribute name in the ``ts.aux`` namespace to the precise data to be + added as identified by a :attr:`data_selector`:: + + term_dict = {"temp": "Temperature", "epot": "Potential"} + u.trajectory.add_auxiliary(term_dict, "ener.edr") + + Adding this data can be useful, for example, to filter trajectory + frames based on non-coordinate data like the potential energy of each + time step. Trajectory slicing allows working on a subset of frames:: + + selected_frames = np.array([ts.frame for ts in u.trajectory + if ts.aux.epot < some_threshold]) + subset = u.trajectory[selected_frames] + + + See Also + -------- + :meth:`remove_auxiliary` + + Note + ---- + Auxiliary data is assumed to be time-ordered, with no duplicates. See + the :ref:`Auxiliary API`. + """ + if auxdata is None: + raise ValueError("No input `auxdata` specified, but it needs " + "to be provided.") + if type(auxdata) not in list(_AUXREADERS.values()): + # i.e. if auxdata is a file, not an instance of an AuxReader + reader_type = get_auxreader_for(auxdata) + auxreader = reader_type(auxdata) + else: + auxreader = auxdata + auxreader.attach_auxiliary(self, aux_spec, format, **kwargs)
+ +
[docs] def remove_auxiliary(self, auxname): + """Clear data and close the :class:`~MDAnalysis.auxiliary.base.AuxReader` + for the auxiliary *auxname*. + + See Also + -------- + :meth:`add_auxiliary` + """ + aux = self._check_for_aux(auxname) + aux.close() + del aux + delattr(self.ts.aux, auxname)
+ + @property + def aux_list(self): + """ Lists the names of added auxiliary data. """ + return self._auxs.keys() + + def _check_for_aux(self, auxname): + """ Check for the existance of an auxiliary *auxname*. If present, + return the AuxReader; if not, raise ValueError + """ + if auxname in self.aux_list: + return self._auxs[auxname] + else: + raise ValueError("No auxiliary named {name}".format(name=auxname)) + +
[docs] def next_as_aux(self, auxname): + """ Move to the next timestep for which there is at least one step from + the auxiliary *auxname* within the cutoff specified in *auxname*. + + This allows progression through the trajectory without encountering + ``NaN`` representative values (unless these are specifically part of the + auxiliary data). + + If the auxiliary cutoff is not set, where auxiliary steps are less frequent + (``auxiliary.dt > trajectory.dt``), this allows progression at the + auxiliary pace (rounded to nearest timestep); while if the auxiliary + steps are more frequent, this will work the same as calling + :meth:`next()`. + + See the :ref:`Auxiliary API`. + + See Also + -------- + :meth:`iter_as_aux` + """ + + aux = self._check_for_aux(auxname) + ts = self.ts + # catch up auxiliary if it starts earlier than trajectory + while aux.step_to_frame(aux.step + 1, ts) is None: + next(aux) + # find the next frame that'll have a representative value + next_frame = aux.next_nonempty_frame(ts) + if next_frame is None: + # no more frames with corresponding auxiliary values; stop iteration + raise StopIteration + # some readers set self._frame to -1, rather than self.frame, on + # _reopen; catch here or doesn't read first frame + while self.frame != next_frame or getattr(self, '_frame', 0) == -1: + # iterate trajectory until frame is reached + ts = self.next() + return ts
+ +
[docs] def iter_as_aux(self, auxname): + """Iterate through timesteps for which there is at least one assigned + step from the auxiliary *auxname* within the cutoff specified in *auxname*. + + See Also + -------- + :meth:`next_as_aux` + :meth:`iter_auxiliary` + """ + aux = self._check_for_aux(auxname) + self._reopen() + aux._restart() + while True: + try: + yield self.next_as_aux(auxname) + except StopIteration: + return
+ +
[docs] def iter_auxiliary(self, auxname, start=None, stop=None, step=None, + selected=None): + """ Iterate through the auxiliary *auxname* independently of the trajectory. + + Will iterate over the specified steps of the auxiliary (defaults to all + steps). Allows to access all values in an auxiliary, including those out + of the time range of the trajectory, without having to also iterate + through the trajectory. + + After interation, the auxiliary will be repositioned at the current step. + + Parameters + ---------- + auxname : str + Name of the auxiliary to iterate over. + (start, stop, step) : optional + Options for iterating over a slice of the auxiliary. + selected : lst | ndarray, optional + List of steps to iterate over. + + Yields + ------ + :class:`~MDAnalysis.auxiliary.base.AuxStep` object + + See Also + -------- + :meth:`iter_as_aux` + """ + aux = self._check_for_aux(auxname) + if selected is not None: + selection = selected + else: + selection = slice(start, stop, step) + for i in aux[selection]: + yield i + aux.read_ts(self.ts)
+ +
[docs] def get_aux_attribute(self, auxname, attrname): + """Get the value of *attrname* from the auxiliary *auxname* + + Parameters + ---------- + auxname : str + Name of the auxiliary to get value for + attrname : str + Name of gettable attribute in the auxiliary reader + + See Also + -------- + :meth:`set_aux_attribute` + """ + aux = self._check_for_aux(auxname) + return getattr(aux, attrname)
+ +
[docs] def set_aux_attribute(self, auxname, attrname, new): + """ Set the value of *attrname* in the auxiliary *auxname*. + + Parameters + ---------- + auxname : str + Name of the auxiliary to alter + attrname : str + Name of settable attribute in the auxiliary reader + new + New value to try set *attrname* to + + See Also + -------- + :meth:`get_aux_attribute` + :meth:`rename_aux` - to change the *auxname* attribute + """ + aux = self._check_for_aux(auxname) + if attrname == 'auxname': + self.rename_aux(auxname, new) + else: + setattr(aux, attrname, new)
+ +
[docs] def rename_aux(self, auxname, new): + """ Change the name of the auxiliary *auxname* to *new*. + + Provided there is not already an auxiliary named *new*, the auxiliary + name will be changed in ts.aux namespace, the trajectory's + list of added auxiliaries, and in the auxiliary reader itself. + + Parameters + ---------- + auxname : str + Name of the auxiliary to rename + new : str + New name to try set + + Raises + ------ + ValueError + If the name *new* is already in use by an existing auxiliary. + """ + aux = self._check_for_aux(auxname) + if new in self.aux_list: + raise ValueError("Auxiliary data with name {name} already " + "exists".format(name=new)) + aux.auxname = new + self._auxs[new] = self._auxs.pop(auxname) + setattr(self.ts.aux, new, self.ts.aux[auxname]) + delattr(self.ts.aux, auxname)
+ +
[docs] def get_aux_descriptions(self, auxnames=None): + """Get descriptions to allow reloading the specified auxiliaries. + + If no auxnames are provided, defaults to the full list of added + auxiliaries. + + Passing the resultant description to ``add_auxiliary()`` will allow + recreation of the auxiliary. e.g., to duplicate all auxiliaries into a + second trajectory:: + + descriptions = trajectory_1.get_aux_descriptions() + for aux in descriptions: + trajectory_2.add_auxiliary(**aux) + + + Returns + ------- + list + List of dictionaries of the args/kwargs describing each auxiliary. + + See Also + -------- + :meth:`MDAnalysis.auxiliary.base.AuxReader.get_description` + """ + if not auxnames: + auxnames = self.aux_list + descriptions = [self._auxs[aux].get_description() for aux in auxnames] + return descriptions
+ + @property + def transformations(self): + """ Returns the list of transformations""" + return self._transformations + + @transformations.setter + def transformations(self, transformations): + if not self._transformations: + self._transformations = transformations + else: + raise ValueError("Transformations are already set") + +
[docs] def add_transformations(self, *transformations): + """Add all transformations to be applied to the trajectory. + + This function take as list of transformations as an argument. These + transformations are functions that will be called by the Reader and given + a :class:`Timestep` object as argument, which will be transformed and returned + to the Reader. + The transformations can be part of the :mod:`~MDAnalysis.transformations` + module, or created by the user, and are stored as a list `transformations`. + This list can only be modified once, and further calls of this function will + raise an exception. + + .. code-block:: python + + u = MDAnalysis.Universe(topology, coordinates) + workflow = [some_transform, another_transform, this_transform] + u.trajectory.add_transformations(*workflow) + + The transformations are applied in the order given in the list + `transformations`, i.e., the first transformation is the first + or innermost one to be applied to the :class:`Timestep`. The + example above would be equivalent to + + .. code-block:: python + + for ts in u.trajectory: + ts = this_transform(another_transform(some_transform(ts))) + + + Parameters + ---------- + transform_list : list + list of all the transformations that will be applied to the coordinates + in the order given in the list + + See Also + -------- + :mod:`MDAnalysis.transformations` + + """ + + try: + self.transformations = transformations + except ValueError: + errmsg = ("Can't add transformations again. Please create a new " + "Universe object") + raise ValueError(errmsg) from None + else: + self.ts = self._apply_transformations(self.ts)
+ + + # call reader here to apply the newly added transformation on the + # current loaded frame? + + def _apply_transformations(self, ts): + """Applies all the transformations given by the user """ + + for transform in self.transformations: + ts = transform(ts) + + return ts + + def __setstate__(self, state): + self.__dict__ = state + self[self.ts.frame]
+ + +
[docs]class ReaderBase(ProtoReader): + """Base class for trajectory readers that extends :class:`ProtoReader` with a + :meth:`__del__` method. + + New Readers should subclass :class:`ReaderBase` and properly implement a + :meth:`close` method, to ensure proper release of resources (mainly file + handles). Readers that are inherently safe in this regard should subclass + :class:`ProtoReader` instead. + + See the :ref:`Trajectory API` definition in for the required attributes and + methods. + + See Also + -------- + :class:`ProtoReader` + + + .. versionchanged:: 0.11.0 + Most of the base Reader class definitions were offloaded to + :class:`ProtoReader` so as to allow the subclassing of ReaderBases without a + :meth:`__del__` method. Created init method to create common + functionality, all ReaderBase subclasses must now :func:`super` through this + class. Added attribute :attr:`_ts_kwargs`, which is created in init. + Provides kwargs to be passed to :class:`Timestep` + .. versionchanged:: 1.0 + Removed deprecated flags functionality, use convert_units kwarg instead + + """ + @store_init_arguments + def __init__(self, filename, convert_units=True, **kwargs): + super(ReaderBase, self).__init__() + + if isinstance(filename, NamedStream): + self.filename = filename + else: + self.filename = str(filename) + self.convert_units = convert_units + + ts_kwargs = {} + for att in ('dt', 'time_offset'): + try: + val = kwargs[att] + except KeyError: + pass + else: + ts_kwargs[att] = val + + self._ts_kwargs = ts_kwargs + +
[docs] def copy(self): + """Return independent copy of this Reader. + + New Reader will have its own file handle and can seek/iterate + independently of the original. + + Will also copy the current state of the Timestep held in the original + Reader. + + + .. versionchanged:: 2.2.0 + Arguments used to construct the reader are correctly captured and + passed to the creation of the new class. Previously the only + ``n_atoms`` was passed to class copies, leading to a class created + with default parameters which may differ from the original class. + """ + + new = self.__class__(**self._kwargs) + + if self.transformations: + new.add_transformations(*self.transformations) + # seek the new reader to the same frame we started with + new[self.ts.frame] + # then copy over the current Timestep in case it has + # been modified since initial load + new.ts = self.ts.copy() + for auxname, auxread in self._auxs.items(): + new.add_auxiliary(auxname, auxread.copy()) + return new
+ + def __del__(self): + for aux in self.aux_list: + self._auxs[aux].close() + self.close()
+ + +class _Writermeta(type): + # Auto register this format upon class creation + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) + try: + # grab the string which describes this format + # could be either 'PDB' or ['PDB', 'ENT'] for multiple formats + fmt = asiterable(classdict['format']) + except KeyError: + # not required however + pass + else: + # does the Writer support single and multiframe writing? + single = classdict.get('singleframe', True) + multi = classdict.get('multiframe', False) + + if single: + for f in fmt: + f = f.upper() + _SINGLEFRAME_WRITERS[f] = cls + if multi: + for f in fmt: + f = f.upper() + _MULTIFRAME_WRITERS[f] = cls + + +
[docs]class WriterBase(IOBase, metaclass=_Writermeta): + """Base class for trajectory writers. + + See :ref:`Trajectory API` definition in for the required attributes and + methods. + + + .. versionchanged:: 2.0.0 + Deprecated :func:`write_next_timestep` has now been removed, please use + :func:`write` instead. + + """ + +
[docs] def convert_dimensions_to_unitcell(self, ts, inplace=True): + """Read dimensions from timestep *ts* and return appropriate unitcell. + + The default is to return ``[A,B,C,alpha,beta,gamma]``; if this + is not appropriate then this method has to be overriden. + """ + # override if the native trajectory format does NOT use + # [A,B,C,alpha,beta,gamma] + if ts.dimensions is None: + lengths, angles = np.zeros(3), np.zeros(3) + else: + lengths, angles = ts.dimensions[:3], ts.dimensions[3:] + if not inplace: + lengths = lengths.copy() + lengths = self.convert_pos_to_native(lengths) + return np.concatenate([lengths, angles])
+ +
[docs] def write(self, obj): + """Write current timestep, using the supplied `obj`. + + Parameters + ---------- + obj : :class:`~MDAnalysis.core.groups.AtomGroup` or :class:`~MDAnalysis.core.universe.Universe` + write coordinate information associate with `obj` + + Note + ---- + The size of the `obj` must be the same as the number of atoms provided + when setting up the trajectory. + + + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument to write has now been + removed. Use AtomGroup or Universe as an input instead. + """ + return self._write_next_frame(obj)
+ + def __del__(self): + self.close() + + def __repr__(self): + try: + return "< {0!s} {1!r} for {2:d} atoms >".format(self.__class__.__name__, self.filename, self.n_atoms) + except (TypeError, AttributeError): + # no trajectory loaded yet or a Writer that does not need e.g. + # self.n_atoms + return "< {0!s} {1!r} >".format(self.__class__.__name__, self.filename) + +
[docs] def has_valid_coordinates(self, criteria, x): + """Returns ``True`` if all values are within limit values of their formats. + + Due to rounding, the test is asymmetric (and *min* is supposed to be negative): + + min < x <= max + + Parameters + ---------- + criteria : dict + dictionary containing the *max* and *min* values in native units + x : numpy.ndarray + ``(x, y, z)`` coordinates of atoms selected to be written out + + Returns + ------- + bool + """ + x = np.ravel(x) + return np.all(criteria["min"] < x) and np.all(x <= criteria["max"])
+ + +
[docs]class SingleFrameReaderBase(ProtoReader): + """Base class for Readers that only have one frame. + + To use this base class, define the method :meth:`_read_first_frame` to + read from file `self.filename`. This should populate the attribute + `self.ts` with a :class:`Timestep` object. + + .. versionadded:: 0.10.0 + .. versionchanged:: 0.11.0 + Added attribute "_ts_kwargs" for subclasses + Keywords "dt" and "time_offset" read into _ts_kwargs + .. versionchanged:: 2.2.0 + Calling `__iter__` now rewinds the reader before yielding a + :class:`Timestep` object (fixing behavior that was not + well defined previously). + """ + _err = "{0} only contains a single frame" + + @store_init_arguments + def __init__(self, filename, convert_units=True, n_atoms=None, **kwargs): + super(SingleFrameReaderBase, self).__init__() + + self.filename = filename + self.convert_units = convert_units + + self.n_frames = 1 + self.n_atom = n_atoms + + ts_kwargs = {} + for att in ('dt', 'time_offset'): + try: + val = kwargs[att] + except KeyError: + pass + else: + ts_kwargs[att] = val + + self._ts_kwargs = ts_kwargs + self._read_first_frame() + +
[docs] def copy(self): + """Return independent copy of this Reader. + + New Reader will have its own file handle and can seek/iterate + independently of the original. + + Will also copy the current state of the Timestep held in the original + Reader. + + + .. versionchanged:: 2.2.0 + Arguments used to construct the reader are correctly captured and + passed to the creation of the new class. Previously the only + ``n_atoms`` was passed to class copies, leading to a class created + with default parameters which may differ from the original class. + """ + new = self.__class__(**self._kwargs) + + new.ts = self.ts.copy() + for auxname, auxread in self._auxs.items(): + new.add_auxiliary(auxname, auxread.copy()) + # since the transformations have already been applied to the frame + # simply copy the property + new.transformations = self.transformations + + return new
+ + def _read_first_frame(self): # pragma: no cover + # Override this in subclasses to create and fill a Timestep + pass + +
[docs] def rewind(self): + self._read_first_frame() + for auxname, auxread in self._auxs.items(): + self.ts = auxread.update_ts(self.ts) + super(SingleFrameReaderBase, self)._apply_transformations(self.ts)
+ + def _reopen(self): + pass + +
[docs] def next(self): + raise StopIteration(self._err.format(self.__class__.__name__))
+ + def _read_next_timestep(self, ts=None): + raise NotImplementedError(self._err.format(self.__class__.__name__)) + + def __iter__(self): + self.rewind() + yield self.ts + return + + def _read_frame(self, frame): + if frame != 0: + raise IndexError(self._err.format(self.__class__.__name__)) + + return self.ts + +
[docs] def close(self): + # all single frame readers should use context managers to access + # self.filename. Explicitly setting it to the null action in case + # the IOBase.close method is ever changed from that. + pass
+ +
[docs] def add_transformations(self, *transformations): + """ Add all transformations to be applied to the trajectory. + + This function take as list of transformations as an argument. These + transformations are functions that will be called by the Reader and given + a :class:`Timestep` object as argument, which will be transformed and returned + to the Reader. + The transformations can be part of the :mod:`~MDAnalysis.transformations` + module, or created by the user, and are stored as a list `transformations`. + This list can only be modified once, and further calls of this function will + raise an exception. + + .. code-block:: python + + u = MDAnalysis.Universe(topology, coordinates) + workflow = [some_transform, another_transform, this_transform] + u.trajectory.add_transformations(*workflow) + + Parameters + ---------- + transform_list : list + list of all the transformations that will be applied to the coordinates + + See Also + -------- + :mod:`MDAnalysis.transformations` + """ + #Overrides :meth:`~MDAnalysis.coordinates.base.ProtoReader.add_transformations` + #to avoid unintended behaviour where the coordinates of each frame are transformed + #multiple times when iterating over the trajectory. + #In this method, the trajectory is modified all at once and once only. + + super(SingleFrameReaderBase, self).add_transformations(*transformations) + for transform in self.transformations: + self.ts = transform(self.ts)
+ + def _apply_transformations(self, ts): + """ Applies the transformations to the timestep.""" + # Overrides :meth:`~MDAnalysis.coordinates.base.ProtoReader.add_transformations` + # to avoid applying the same transformations multiple times on each frame + + return ts
+ + +def range_length(start, stop, step): + if (step > 0 and start < stop): + # We go from a lesser number to a larger one. + return int(1 + (stop - 1 - start) // step) + elif (step < 0 and start > stop): + # We count backward from a larger number to a lesser one. + return int(1 + (start - 1 - stop) // (-step)) + else: + # The range is empty. + return 0 + + +class _Convertermeta(type): + # Auto register upon class creation + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) + try: + fmt = asiterable(classdict['lib']) + except KeyError: + pass + else: + for f in fmt: + f = f.upper() + _CONVERTERS[f] = cls + +
[docs]class ConverterBase(IOBase, metaclass=_Convertermeta): + """Base class for converting to other libraries. + + See Also + -------- + :mod:`MDAnalysis.converters` + """ + + def __repr__(self): + return "<{cls}>".format(cls=self.__class__.__name__) + + def convert(self, obj): + raise NotImplementedError
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/chain.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/chain.html new file mode 100644 index 0000000000..3d3434f632 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/chain.html @@ -0,0 +1,760 @@ + + + + + + MDAnalysis.coordinates.chain — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.chain

+# -*- 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-2017 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
+#
+
+"""\
+ChainReader --- :mod:`MDAnalysis.coordinates.chain`
+===================================================
+
+The :class:`ChainReader` is used by MDAnalysis internally to represent multiple
+trajectories as one virtual trajectory. Users typically do not need to use the
+:class:`ChainReader` explicitly and the following documentation is primarily of
+interest to developers.
+
+.. autoclass:: ChainReader
+   :members:
+
+   .. automethod:: _get_local_frame
+   .. automethod:: _apply
+   .. automethod:: _get
+   .. automethod:: _get_same
+   .. automethod:: _read_frame
+
+"""
+import warnings
+
+import os.path
+import bisect
+from typing import Tuple
+import numpy as np
+
+from ..lib import util
+from ..lib.util import asiterable, store_init_arguments
+from . import base
+from . import core
+
+
+def multi_level_argsort(l):
+    """Return indices to sort a multi value tuple. Sorting is done on the first
+    value of the tuple.
+
+
+    Parameters
+    ----------
+    l : list
+
+    Returns
+    -------
+    indices
+
+    Example
+    -------
+    >>> multi_level_argsort(((0, 2), (4, 9), (0, 4), (7, 9)))
+    [0, 2, 1, 3]
+
+    """
+    return [el[0] for el in sorted(enumerate(l), key=lambda x: x[1][0])]
+
+
+def filter_times(times, dt):
+    """Given a list of start and end times this function filters out any duplicate
+    time steps preferring the last tuple.
+
+    Parameters
+    ----------
+    times : list
+        sorted list of times
+    dt : float
+        timestep between two frames
+
+    Returns
+    -------
+    list:
+        indices of times to be used with overlaps removed
+
+    Example
+    -------
+    >>> filter_times(((0, 3), (0, 3)))
+    [1, ]
+    >>> filter_times(((0, 3), (0, 4)))
+    [1, ]
+    >>> filter_times(((0, 3), (3, 4)))
+    [0, 1]
+    >>> filter_times(((0, 3), (2, 5), (4, 9)))
+    [1, 2, 3]
+
+    """
+    # Special cases
+    if len(times) == 1:
+        return [0, ]
+    elif len(times) == 2:
+        if times[0][0] < times[1][0]:
+            return [0, 1]
+        elif np.allclose(times[0][0], times[1][0]):
+            return [1, ]
+        else:
+            return [0, ]
+    if np.unique(times).size == 2:
+        return [len(times) - 1, ]
+
+    # more then 2 unique time entries
+
+    used_idx = [0, ]
+
+    for i, (first, middle, last) in enumerate(zip(times[:-2], times[1:-1], times[2:]), start=1):
+        if np.allclose(first[0], middle[0]):
+            used_idx[-1] = i
+        elif not np.allclose(middle[1] - middle[0], dt):
+            if (middle[0] <= first[1]) and (last[0] <= middle[1]):
+                used_idx.append(i)
+        elif (middle[0] <= first[1]):
+            used_idx.append(i)
+
+    # take care of first special case
+    if times[-2][1] <= times[-1][1]:
+        used_idx.append(len(times) - 1)
+
+    return used_idx
+
+
+def check_allowed_filetypes(readers, allowed):
+    """
+    Make a check that  all readers have the same filetype and are  of the
+    allowed files types. Throws Exception on failure.
+
+    Parameters
+    ----------
+    readers : list of MDA readers
+    allowed : list of allowed formats
+    """
+    classname = type(readers[0])
+    only_one_reader = np.all([isinstance(r,  classname) for r in readers])
+    if not only_one_reader:
+        readernames = [type(r) for r in readers]
+        raise ValueError("ChainReader: continuous=true only supported"
+                         " when all files are using the same reader. "
+                         "Found: {}".format(readernames))
+    if readers[0].format not in allowed:
+        raise NotImplementedError("ChainReader: continuous=True only "
+                                  "supported for formats: {}".format(allowed))
+
+
+
[docs]class ChainReader(base.ReaderBase): + """Reader that concatenates multiple trajectories on the fly. + + The :class:`ChainReader` is used by MDAnalysis internally to + represent multiple trajectories as one virtual trajectory. Users + typically do not need to use the :class:`ChainReader` explicitly. + + Chainreader can also handle a continuous trajectory split over several + files. To use this pass the ``continuous == True`` keyword argument. + Setting ``continuous=True`` will make the reader choose frames from the set + of trajectories in such a way that the trajectory appears to be as + continuous in time as possible, i.e. that time is strictly monotonically + increasing. This means that there will be no duplicate time frames and no + jumps backwards in time. However, there can be gaps in time (e.g., multiple + time steps can appear to be missing). Ultimately, it is the user's + responsibility to ensure that the input trajectories can be virtually + stitched together in a meaningful manner. As an example take the following + trajectory that is split into three parts. The column represents the time + and the trajectory segments overlap. With the continuous chainreader only + the frames marked with a + will be read. + + :: + + part01: ++++-- + part02: ++++++- + part03: ++++++++ + + .. warning:: + + The order in which trajectories are given to the chainreader can change + what frames are used with the continuous option. + + The default chainreader will read all frames. The continuous option is + currently only supported for XTC, TRR, and LAMMPSDUMP files. + + Notes + ----- + The trajectory API attributes exist but most of them only reflect the first + trajectory in the list; :attr:`ChainReader.n_frames`, + :attr:`ChainReader.n_atoms`, and :attr:`ChainReader.fixed` are properly + set, though + + + .. versionchanged:: 0.11.0 + Frames now 0-based instead of 1-based + .. versionchanged:: 0.13.0 + :attr:`time` now reports the time summed over each trajectory's + frames and individual :attr:`dt`. + .. versionchanged:: 0.19.0 + added ``continuous`` trajectory option + .. versionchanged:: 0.19.0 + limit output of __repr__ + .. versionchanged:: 2.0.0 + Now ChainReader can be (un)pickled. Upon unpickling, + current timestep is retained. + + """ + format = 'CHAIN' + + @store_init_arguments + def __init__(self, filenames, skip=1, dt=None, continuous=False, + convert_units=True, **kwargs): + """Set up the chain reader. + + Parameters + ---------- + filenames : str or list or sequence + file name or list of file names; the reader will open all file names + and provide frames in the order of trajectories from the list. Each + trajectory must contain the same number of atoms in the same order + (i.e. they all must belong to the same topology). The trajectory + format is deduced from the extension of each file name. + + Extension: `filenames` are either a single file name or list of file + names in either plain file names format or ``(filename, format)`` + tuple combination. This allows explicit setting of the format for + each individual trajectory file. + skip : int (optional) + skip step (also passed on to the individual trajectory readers); + must be same for all trajectories + dt : float (optional) + Passed to individual trajectory readers to enforce a common time + difference between frames, in MDAnalysis time units. If not set, each + reader's `dt` will be used (either inferred from the trajectory + files, or set to the reader's default) when reporting frame times; + note that this might lead an inconsistent time difference between + frames. + continuous : bool (optional) + treat all trajectories as one single long trajectory. Adds several + checks; all trajectories have the same dt, they contain at least 2 + frames, and they are all of the same file-type. Not implemented for + all trajectory formats! This can be used to analyze GROMACS + simulations without concatenating them prior to analysis. + **kwargs : dict (optional) + all other keyword arguments are passed on to each trajectory reader + unchanged + + """ + super(ChainReader, self).__init__(filename='CHAIN', + skip=skip, + convert_units=convert_units, + dt=dt, + **kwargs) + + filenames = asiterable(filenames) + # Override here because single frame readers handle this argument as a + # kwarg to a timestep which behaves differently if dt is present or not. + if dt is not None: + 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]) + # pointer to "active" trajectory index into self.readers + self.__active_reader_index = 0 + + self.skip = skip + self.n_atoms = self._get_same('n_atoms') + + # Translation between virtual frames and frames in individual + # trajectories. Assumes that individual trajectories i contain frames + # that can be addressed with an index 0 <= f < n_frames[i] + + # Build a map of frames: ordered list of starting virtual frames; the + # index i into this list corresponds to the index into self.readers + # + # For virtual frame 0 <= k < sum(n_frames) find corresponding + # trajectory i and local frame f (i.e. readers[i][f] will correspond to + # ChainReader[k]). + # build map 'start_frames', which is used by _get_local_frame() + n_frames = self._get('n_frames') + # [0]: frames are 0-indexed internally + # (see Timestep.check_slice_indices()) + self._start_frames = np.cumsum([0] + n_frames) + + self.n_frames = np.sum(n_frames) + self.dts = np.array(self._get('dt')) + self.total_times = self.dts * n_frames + + # calculate new start_frames to have a time continuous trajectory. + if continuous: + check_allowed_filetypes(self.readers, ['XTC', 'TRR', "LAMMPSDUMP"]) + if np.any(np.array(n_frames) == 1): + raise RuntimeError("ChainReader: Need at least two frames in " + "every trajectory with continuous=True") + # TODO: allow floating point precision in dt check + dt = self._get_same('dt') + n_frames = np.asarray(self._get('n_frames')) + self.dts = np.ones(self.dts.shape) * dt + + # the sorting needs to happen on two levels. The first major level + # is by start times and the second is by end times. + # The second level of sorting is needed for cases like: + # [0 1 2 3 4 5 6 7 8 9] [0 1 2 4] + # to + # [0 1 2 4] [0 1 2 3 4 5 6 7 8 9] + # after that sort the chain reader will work + times = [] + for r in self.readers: + r[0] + start = r.ts.time + r[-1] + end = r.ts.time + times.append((start, end)) + # sort step + sort_idx = multi_level_argsort(times) + self.readers = [self.readers[i] for i in sort_idx] + self.filenames = self.filenames[sort_idx] + self.total_times = self.dts * n_frames[sort_idx] + + # filter step: remove indices if we have complete overlap + if len(self.readers) > 1: + used_idx = filter_times(np.array(times)[sort_idx], dt) + + self.readers = [self.readers[i] for i in used_idx] + self.filenames = self.filenames[used_idx] + self.total_times = self.dts[used_idx] * n_frames[used_idx] + + # rebuild lookup table + sf = [0, ] + n_frames = 0 + for r1, r2 in zip(self.readers[:-1], self.readers[1:]): + r2[0], r1[0] + r1_start_time = r1.time + start_time = r2.time + r1[-1] + if r1.time < start_time: + warnings.warn("Missing frame in continuous chain", UserWarning) + + # check for interleaving + r1[1] + if r1_start_time < start_time < r1.time: + raise RuntimeError("ChainReader: Interleaving not supported " + "with continuous=True.") + + # find end where trajectory was restarted from + for ts in r1[::-1]: + if ts.time < start_time: + break + sf.append(sf[-1] + ts.frame + 1) + n_frames += ts.frame + 1 + + n_frames += self.readers[-1].n_frames + + self._start_frames = sf + self.n_frames = n_frames + self._sf = sf + + # make sure that iteration always yields frame 0 + # rewind() also sets self.ts + self.ts = None + self.rewind() + + @staticmethod + def _format_hint(thing): + """Can ChainReader read the object *thing* + + .. versionadded:: 1.0.0 + """ + return (not isinstance(thing, np.ndarray) and + util.iterable(thing) and + not util.isstream(thing)) + +
[docs] def _get_local_frame(self, k) -> Tuple[int, int]: + """Find trajectory index and trajectory frame for chained frame `k`. + + Parameters + ---------- + + k : int + Frame `k` in the chained trajectory can be found in the trajectory at + index *i* and frame index *f*. + + Frames are internally treated as 0-based indices into the trajectory. + + Returns + ------- + i : int + trajectory + f : int + frame in trajectory i + + + Raises + ------ + IndexError for `k<0` or `i<0`. + + + Note + ---- + Does not check if `k` is larger than the maximum number of frames in + the chained trajectory. + + """ + if k < 0: + raise IndexError("Virtual (chained) frames must be >= 0") + # trajectory index i + i = bisect.bisect_right(self._start_frames, k) - 1 + if i < 0: + raise IndexError("Cannot find trajectory for virtual frame {0:d}".format(k)) + # local frame index f in trajectory i (frame indices are 0-based) + f = k - self._start_frames[i] + return i, f
+ + def __getstate__(self): + state = self.__dict__.copy() + # save ts temporarily otherwise it will be changed during rewinding. + state['ts'] = self.ts.__deepcopy__() + + # the ts.frame of each reader is set to the chained frame index during + # iteration, thus we need to rewind the readers that have been used. + # PR #2723 + for reader in state['readers'][:self.__active_reader_index + 1]: + reader.rewind() + + # retrieve the current ts + self.ts = state['ts'] + return state + + def __setstate__(self, state): + self.__dict__.update(state) + self.ts.frame = self.__current_frame + + # methods that can change with the current reader +
[docs] def convert_time_from_native(self, t): + return self.active_reader.convert_time_from_native(t)
+ +
[docs] def convert_time_to_native(self, t): + return self.active_reader.convert_time_to_native(t)
+ +
[docs] def convert_pos_from_native(self, x): + return self.active_reader.convert_from_native(x)
+ +
[docs] def convert_pos_to_native(self, x): + return self.active_reader.convert_pos_to_native(x)
+ + # attributes that can change with the current reader + # TODO: check that skip_timestep is still supported in all readers + # or should this be removed? + @property + def skip_timestep(self): + return self.active_reader.skip_timestep + + @property + def delta(self): + return self.active_reader.delta + + @property + def periodic(self): + """:attr:`periodic` attribute of the currently read trajectory""" + return self.active_reader.periodic + + @property + def units(self): + """:attr:`units` attribute of the currently read trajectory""" + return self.active_reader.units + + @property + def compressed(self): + """:attr:`compressed` attribute of the currently read trajectory""" + try: + return self.active_reader.compressed + except AttributeError: + return None + + @property + def frame(self): + """Cumulative frame number of the current time step.""" + return self.ts.frame + + @property + def time(self): + """Cumulative time of the current frame in MDAnalysis time units (typically ps).""" + # Before 0.13 we had to distinguish between enforcing a common dt or + # summing over each reader's times. + # Now each reader is either already instantiated with a common dt, or + # left at its default dt. In any case, we sum over individual times. + trajindex, subframe = self._get_local_frame(self.frame) + return self.total_times[:trajindex].sum() + subframe * self.dts[trajindex] + +
[docs] def _apply(self, method, **kwargs): + """Execute `method` with `kwargs` for all readers.""" + return [reader.__getattribute__(method)(**kwargs) for reader in self.readers]
+ +
[docs] def _get(self, attr): + """Get value of `attr` for all readers.""" + return [reader.__getattribute__(attr) for reader in self.readers]
+ +
[docs] def _get_same(self, attr): + """Verify that `attr` has the same value for all readers and return value. + + Parameters + ---------- + attr : str + attribute name + + Returns + ------- + value : int or float or str or object + common value of the attribute + + Raises + ------ + ValueError if not all readers have the same value + + """ + values = np.array(self._get(attr)) + value = values[0] + if not np.allclose(values, value): + bad_traj = np.array(self.filenames)[values != value] + raise ValueError("The following trajectories do not have the correct {0} " + " ({1}):\n{2}".format(attr, value, bad_traj)) + return value
+ + def __activate_reader(self, i): + """Make reader `i` the active reader.""" + # private method, not to be used by user to avoid a total mess + if not (0 <= i < len(self.readers)): + raise IndexError("Reader index must be 0 <= i < {0:d}".format(len(self.readers))) + self.__active_reader_index = i + self.filename = self.filenames[i] + + @property + def active_reader(self): + """Reader instance from which frames are currently being read.""" + return self.readers[self.__active_reader_index] + +
[docs] def _read_frame(self, frame): + """Position trajectory at frame index `frame` and + return :class:`~MDAnalysis.coordinates.timestep.Timestep`. + + The frame is translated to the corresponding reader and local + frame index and the :class:`Timestep` instance in + :attr:`ChainReader.ts` is updated. + + Notes + ----- + `frame` is 0-based, i.e. the first frame in the trajectory is + accessed with ``frame = 0``. + + See Also + -------- + :meth:`~ChainReader._get_local_frame` + + """ + i, f = self._get_local_frame(frame) + # seek to (1) reader i and (2) frame f in trajectory i + self.__activate_reader(i) + self.active_reader[f] # rely on reader to implement __getitem__() + # update Timestep + self.ts = self.active_reader.ts + self.ts.frame = frame # continuous frames, 0-based + self.__current_frame = frame + return self.ts
+ + def _read_next_timestep(self, ts=None): + if ts is None: + ts = self.ts + + if self.__current_frame < self.n_frames - 1: + j, f = self._get_local_frame(self.__current_frame + 1) + self.__activate_reader(j) + self.ts = self.active_reader[f] + self.ts.frame = self.__current_frame + 1 + self.__current_frame += 1 + return self.ts + else: + raise StopIteration() + + def _reopen(self): + """Internal method: Rewind trajectories themselves and trj pointer.""" + self.__current_frame = -1 + self._apply('rewind') + +
[docs] def close(self): + self._apply('close')
+ + 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) + else: + fnames = ", ".join([os.path.basename(fn) for fn in self.filenames]) + return ("<{clsname} containing {fname} with {nframes} frames of {natoms} atoms>" + "".format( + clsname=self.__class__.__name__, + fname=fnames, + nframes=self.n_frames, + natoms=self.n_atoms))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.html new file mode 100644 index 0000000000..da6c51f407 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.html @@ -0,0 +1,669 @@ + + + + + + MDAnalysis.coordinates.chemfiles — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.chemfiles

+# -*- 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-2017 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.
+#
+# 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
+#
+"""
+Reading trajectories with *chemfiles* --- :mod:`MDAnalysis.coordinates.chemfiles`
+=================================================================================
+
+MDAnalysis interoperates with the `chemfiles`_ library. The *chemfiles* C++ library
+supports an expanding set of file formats, some of which are not natively supported by
+MDAnalysis. Using the *CHEMFILES* reader you can use  `chemfiles`_ for the low-level
+file reading. Check the list of `chemfile-supported file formats <formats>`_.
+
+.. _chemfiles: https://chemfiles.org
+.. _formats: https://chemfiles.org/chemfiles/0.10.0/formats.html#list-of-supported-formats
+.. NOTE: MDAnalysis currently restricts chemfiles to 0.10 <= version < 0.11. Update the link
+..       above to the latest documentation once this restriction is lifted.
+..       https://chemfiles.org/chemfiles/latest/formats.html#list-of-supported-formats
+
+Using the CHEMFILES reader
+--------------------------
+
+When reading, set the ``format="CHEMFILES"`` keyword argument and I/O is delegated to
+`chemfiles`_. For example::
+
+   >>> import MDAnalysis as mda
+   >>> from MDAnalysis.tests import datafiles as data
+   >>> u = mda.Universe(data.TPR, data.TRR, format="CHEMFILES")
+   >>> print(u.trajectory)
+   <ChemfilesReader ~/anaconda3/envs/mda3/lib/python3.8/site-packages/MDAnalysisTests/data/adk_oplsaa.trr with 10 frames of 47681 atoms>
+
+You can then use the :class:`~MDAnalysis.core.universe.Universe` as usual while chemfiles
+is handling the I/O transparently in the background.
+
+`chemfiles`_ can also *write* a number of formats for which there are no Writers in
+MDAnalysis. For example, to write a mol2 file::
+
+   >>> u = mda.Universe(data.mol2_ligand)
+   >>> with mda.Writer("ligand.mol2", format="CHEMFILES") as W:
+   ...     W.write(u.atoms)
+
+
+
+
+Classes
+-------
+
+Classes to read and write files using the `chemfiles`_ library. This library
+provides C++ implementation of multiple formats readers and writers.
+
+.. autoclass:: ChemfilesReader
+
+.. autoclass:: ChemfilesWriter
+
+.. autoclass:: ChemfilesPicklable
+
+Helper functions
+----------------
+
+.. autodata:: MIN_CHEMFILES_VERSION
+.. autodata:: MAX_CHEMFILES_VERSION
+.. autofunction:: check_chemfiles_version
+
+"""
+import numpy as np
+import warnings
+from packaging.version import Version
+
+from . import base
+from ..lib.util import store_init_arguments
+
+try:
+    import chemfiles
+except ImportError:
+    HAS_CHEMFILES = False
+
+    # Allow building documentation even if chemfiles is not installed
+    import types
+
+    class MockTrajectory:
+        pass
+
+    chemfiles = types.ModuleType("chemfiles")
+    chemfiles.Trajectory = MockTrajectory
+else:
+    HAS_CHEMFILES = True
+
+
+#: Lowest version of chemfiles that is supported by MDAnalysis.
+MIN_CHEMFILES_VERSION = Version("0.10")
+#: Lowest version of chemfiles that is *not supported* by MDAnalysis.
+MAX_CHEMFILES_VERSION = Version("0.11")
+
+
+
[docs]def check_chemfiles_version(): + """Check if an appropriate *chemfiles* is available + + Returns ``True`` if a usable chemfiles version is available, + with :data:`MIN_CHEMFILES_VERSION` <= version < + :data:`MAX_CHEMFILES_VERSION` + + .. versionadded:: 1.0.0 + """ + if not HAS_CHEMFILES: + warnings.warn( + "chemfiles package not found, " + "try installing it with 'pip install chemfiles'" + ) + return False + version = Version(chemfiles.__version__) + return version >= MIN_CHEMFILES_VERSION and version < MAX_CHEMFILES_VERSION
+ + +
[docs]class ChemfilesReader(base.ReaderBase): + """Coordinate reader using chemfiles. + + The file format to used is guessed based on the file extension. If no + matching format is found, a ``ChemfilesError`` is raised. It is also + possible to manually specify the format to use for a given file. + + .. versionadded:: 1.0.0 + """ + + format = "chemfiles" + units = {"time": "fs", "length": "Angstrom"} + + @store_init_arguments + def __init__(self, filename, chemfiles_format="", **kwargs): + """ + Parameters + ---------- + filename : chemfiles.Trajectory or str + the chemfiles object to read or filename to read + chemfiles_format : str (optional) + if *filename* was a string, use the given format name instead of + guessing from the extension. The `list of supported formats + <formats>`_ and the associated names is available in the chemfiles + documentation. + **kwargs : dict + General reader arguments. + + """ + if not check_chemfiles_version(): + raise RuntimeError( + "Please install Chemfiles > {}" "".format(MIN_CHEMFILES_VERSION) + ) + super(ChemfilesReader, self).__init__(filename, **kwargs) + self._format = chemfiles_format + self._cached_n_atoms = None + self._open() + self.ts = self._Timestep(self.n_atoms, **self._ts_kwargs) + self.next() + + @staticmethod + def _format_hint(thing): + """Can this Reader read *thing*""" + # nb, filename strings can still get passed through if + # format='CHEMFILES' is used + return HAS_CHEMFILES and isinstance(thing, chemfiles.Trajectory) + + def _open(self): + self._closed = False + self._step = 0 + self._frame = -1 + if isinstance(self.filename, chemfiles.Trajectory): + self._file = self.filename + else: + self._file = ChemfilesPicklable(self.filename, "r", self._format) + + def close(self): + """close reader""" + if not self._closed: + self._file.close() + self._closed = True + + @property + def n_frames(self): + """number of frames in trajectory""" + return self._file.nsteps + + @property + def n_atoms(self): + """number of atoms in the first frame of the trajectory""" + if self._cached_n_atoms is None: + self._cached_n_atoms = len(self._file.read_step(0).atoms) + return self._cached_n_atoms + + def _reopen(self): + """reopen trajectory""" + self.close() + self._open() + + def _read_frame(self, i): + """read frame i""" + self._step = i + return self._read_next_timestep() + + def _read_next_timestep(self, ts=None): + """copy next frame into timestep""" + if self._step >= self.n_frames: + raise IOError("trying to go over trajectory limit") + if ts is None: + ts = self.ts + self.ts = ts + frame = self._file.read_step(self._step) + self._frame_to_ts(frame, ts) + ts.frame = frame.step + self._step += 1 + return ts + + def _frame_to_ts(self, frame, ts): + """convert a chemfiles frame to a :class:`TimeStep`""" + if len(frame.atoms) != self.n_atoms: + raise IOError( + "The number of atom changed in the trajectory. " + "This is not supported by MDAnalysis." + ) + + ts.dimensions = np.r_[frame.cell.lengths, frame.cell.angles] + ts.positions[:] = frame.positions[:] + if frame.has_velocities(): + ts.has_velocities = True + ts.velocities[:] = frame.velocities[:] + + def Writer(self, filename, n_atoms=None, **kwargs): + """Return writer for trajectory format""" + if n_atoms is None: + n_atoms = self.n_atoms + return ChemfilesWriter(filename, n_atoms, **kwargs)
+ + +
[docs]class ChemfilesWriter(base.WriterBase): + """ + Coordinate writer using chemfiles. + + The file format to used is guessed based on the file extension. If no + matching format is found, a ``ChemfilesError`` is raised. It is also + possible to manually specify the format to use for a given file. + + Chemfiles support writting to files with varying number of atoms if the + underlying format support it. This is the case of most of text-based + formats. + + .. versionadded:: 1.0.0 + """ + + format = "chemfiles" + multiframe = True + + # chemfiles mostly[1] uses these units for the in-memory representation, + # and convert into the file format units when writing. + # + # [1] mostly since some format don't have a specified unit + # (XYZ for example), so then chemfiles just assume they are in A and fs. + units = {"time": "fs", "length": "Angstrom"} + + def __init__( + self, + filename, + n_atoms=0, + mode="w", + chemfiles_format="", + topology=None, + **kwargs + ): + """ + Parameters + ---------- + filename: str + filename of trajectory file. + n_atoms: int + number of atoms in the trajectory to write. This value is not + used and can vary during trajectory, if the underlying format + support it + mode : str (optional) + file opening mode: use 'a' to append to an existing file or 'w' to + create a new file + chemfiles_format : str (optional) + use the given format name instead of guessing from the extension. + The `list of supported formats <formats>`_ and the associated names + is available in chemfiles documentation. + topology : Universe or AtomGroup (optional) + use the topology from this :class:`~MDAnalysis.core.groups.AtomGroup` + or :class:`~MDAnalysis.core.universe.Universe` to write all the + timesteps to the file + **kwargs : dict + General writer arguments. + + """ + if not check_chemfiles_version(): + raise RuntimeError( + "Please install Chemfiles > {}" "".format(MIN_CHEMFILES_VERSION) + ) + self.filename = filename + self.n_atoms = n_atoms + if mode != "a" and mode != "w": + raise IOError("Expected 'a' or 'w' as mode in ChemfilesWriter") + self._file = chemfiles.Trajectory(self.filename, mode, chemfiles_format) + self._closed = False + if topology is not None: + if isinstance(topology, str): + self._file.set_topology(topology) + else: + topology = self._topology_to_chemfiles(topology, n_atoms) + self._file.set_topology(topology) + + def close(self): + """Close the trajectory file and finalize the writing""" + if hasattr(self, "_closed") and not self._closed: + self._file.close() + self._closed = True + + def _write_next_frame(self, obj): + """Write information associated with ``obj`` at current frame into + trajectory. + + Topology for the output is taken from the `obj` or default to the value + of the `topology` keyword supplied to the :class:`ChemfilesWriter` + constructor. + + If `obj` contains velocities, and the underlying format supports it, the + velocities are written to the file. Writing forces is unsupported at the + moment. + + Parameters + ---------- + obj : AtomGroup or Universe + The :class:`~MDAnalysis.core.groups.AtomGroup` or + :class:`~MDAnalysis.core.universe.Universe` to write. + + + .. versionchanged:: 2.0.0 + Deprecated support for Timestep argument has now been removed. + Use AtomGroup or Universe as an input instead. + """ + try: + atoms = obj.atoms + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None + else: + if hasattr(obj, "universe"): + # For AtomGroup and children (Residue, ResidueGroup, Segment) + ts_full = obj.universe.trajectory.ts + if ts_full.n_atoms == atoms.n_atoms: + ts = ts_full + else: + # Only populate a time step with the selected atoms. + ts = ts_full.copy_slice(atoms.indices) + elif hasattr(obj, "trajectory"): + # For Universe only --- get everything + ts = obj.trajectory.ts + + frame = self._timestep_to_chemfiles(ts) + frame.topology = self._topology_to_chemfiles(obj, len(frame.atoms)) + + self._file.write(frame) + + def _timestep_to_chemfiles(self, ts): + """ + Convert a Timestep to a chemfiles Frame + """ + # TODO: CONVERTERS? + frame = chemfiles.Frame() + frame.resize(ts.n_atoms) + if ts.has_positions: + frame.positions[:] = ts.positions[:] + if ts.has_velocities: + frame.add_velocities() + frame.velocities[:] = ts.velocities[:] + + # if there is no cell information in this universe, still pass a valid + # cell to chemfiles + if ts.dimensions is None: + lengths, angles = np.zeros(3), np.array([90, 90, 90.0]) + else: + lengths = ts.dimensions[:3] + angles = ts.dimensions[3:] + + frame.cell = chemfiles.UnitCell(lengths, angles) + + return frame + + def _topology_to_chemfiles(self, obj, n_atoms): + """ + Convert an AtomGroup or an Universe to a chemfiles Topology + """ + topology = chemfiles.Topology() + if not hasattr(obj, "atoms"): + # use an empty topology + topology.resize(n_atoms) + return topology + + # (1) add all atoms to the topology + residues = {} + for atom in obj.atoms: + name = getattr(atom, "name", "") + type = getattr(atom, "type", name) + chemfiles_atom = chemfiles.Atom(name, type) + + if hasattr(atom, "altLoc"): + chemfiles_atom["altloc"] = str(atom.altLoc) + + if hasattr(atom, "segid"): + chemfiles_atom["segid"] = str(atom.segid) + + if hasattr(atom, "segindex"): + chemfiles_atom["segindex"] = int(atom.segindex) + + if hasattr(atom, "resid"): + resname = getattr(atom, "resname", "") + if atom.resid not in residues.keys(): + residues[atom.resid] = chemfiles.Residue(resname, atom.resid) + residue = residues[atom.resid] + + atom_idx = len(topology.atoms) + residue.atoms.append(atom_idx) + + if hasattr(atom, "record_type"): + # set corresponding chemfiles residue property + if atom.record_type == "ATOM": + residue["is_standard_pdb"] = True + else: + residue["is_standard_pdb"] = False + + topology.atoms.append(chemfiles_atom) + + # (2) add residues to the topology + for residue in residues.values(): + topology.residues.append(residue) + + # (3) add bonds to the topology + for bond in getattr(obj, "bonds", []): + topology.add_bond(bond.atoms[0].ix, bond.atoms[1].ix) + + return topology
+ + +
[docs]class ChemfilesPicklable(chemfiles.Trajectory): + """Chemfiles file object (read-only) that can be pickled. + + This class provides a file-like object (as returned by + :class:`chemfiles.Trajectory`) that, + unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, path, mode, and format of the file handle + are saved. On unpickling, the file is opened by path with mode, + and saved format. + This means that for a successful unpickle, the original file still has + to be accessible with its filename. + + Note + ---- + Can only be used with reading ('r') mode. + Upon pickling, the current frame is reset. `universe.trajectory[i]` has + to be used to return to its original frame. + + Parameters + ---------- + filename : str + a filename given a text or byte string. + mode : 'r' , optional + only 'r' can be used for pickling. + format : '', optional + guessed from the file extension if empty. + + Example + ------- + :: + + f = ChemfilesPicklable(XYZ, 'r', '') + print(f.read()) + f.close() + + can also be used as context manager:: + + with ChemfilesPicklable(XYZ) as f: + print(f.read()) + + See Also + --------- + :class:`MDAnalysis.lib.picklable_file_io.FileIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BufferIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.TextIOPicklable` + :class:`MDAnalysis.lib.picklable_file_io.GzipPicklable` + :class:`MDAnalysis.lib.picklable_file_io.BZ2Picklable` + + + .. versionadded:: 2.0.0 + """ + + def __init__(self, path, mode="r", format=""): + if mode != "r": + raise ValueError("Only read mode ('r') files can be pickled.") + super().__init__(path=path, mode=mode, format=format) + + def __getstate__(self): + return self.path, self._Trajectory__mode, self._Trajectory__format + + def __setstate__(self, args): + self.__init__(*args)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/core.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/core.html new file mode 100644 index 0000000000..2ed2d41457 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/core.html @@ -0,0 +1,276 @@ + + + + + + MDAnalysis.coordinates.core — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.core

+# -*- 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-2017 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
+#
+
+
+"""
+Common functions for coordinate reading --- :mod:`MDAnalysis.coordinates.core`
+==============================================================================
+
+Important base classes are collected in :mod:`MDAnalysis.coordinates.base`.
+
+.. autofunction:: reader
+.. autofunction:: writer
+
+Helper functions:
+
+.. autofunction:: get_reader_for
+.. autofunction:: get_writer_for
+
+"""
+
+from ..lib import util
+from ..lib.mdamath import triclinic_box, triclinic_vectors, box_volume
+from ..core._get_readers import get_reader_for, get_writer_for
+
+
+
[docs]def reader(filename, format=None, **kwargs): + """Provide a trajectory reader instance for *filename*. + + This function guesses the file format from the extension of *filename* and + it will throw a :exc:`TypeError` if the extension is not recognized. + + In most cases, no special keyword arguments are necessary. + + All other keywords are passed on to the underlying Reader classes; see + their documentation for details. + + Parameters + ---------- + filename : str or tuple + filename (or tuple of filenames) of the input coordinate file + kwargs + Keyword arguments for the selected Reader class. + + Returns + ------- + :class:`~base.Reader` + A trajectory Reader instance + + See Also + -------- + :ref:`Supported coordinate formats` + + + """ + if isinstance(filename, tuple): + Reader = get_reader_for(filename[0], + format=filename[1]) + filename = filename[0] + else: + Reader = get_reader_for(filename, format=format) + try: + return Reader(filename, **kwargs) + except ValueError: + errmsg = f'Unable to read {filename} with {Reader}.' + raise TypeError(errmsg) from None
+ + +
[docs]def writer(filename, n_atoms=None, **kwargs): + """Initialize a trajectory writer instance for *filename*. + + Parameters + ---------- + filename : str + Output filename of the trajectory; the extension determines the + format. + n_atoms : int (optional) + The number of atoms in the output trajectory; can be ommitted + for single-frame writers. + multiframe : bool (optional) + ``True``: write a trajectory with multiple frames; ``False`` + only write a single frame snapshot; ``None`` first try to get + a multiframe writer and then fall back to single frame [``None``] + kwargs : optional + Keyword arguments for the writer; all trajectory Writers accept + ``start``: starting time [0], ``step``: step size in frames [1], + ``dt``: length of time between two frames, in ps [1.0] Some readers + accept additional arguments, which need to be looked up in the + documentation of the reader. + + Returns + ------- + :class:`~base.Writer` + A trajectory Writer instance + + See Also + -------- + :ref:`Supported coordinate formats` + + + .. versionchanged:: 0.7.6 + Added `multiframe` keyword. See also :func:`get_writer_for`. + + """ + Writer = get_writer_for(filename, format=kwargs.pop('format', None), + multiframe=kwargs.pop('multiframe', None)) + return Writer(filename, n_atoms=n_atoms, **kwargs)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/memory.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/memory.html new file mode 100644 index 0000000000..1bccd5b98c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/memory.html @@ -0,0 +1,800 @@ + + + + + + MDAnalysis.coordinates.memory — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.coordinates.memory

+# -*- 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-2017 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
+#
+"""\
+=========================================================================
+Reading trajectories from memory --- :mod:`MDAnalysis.coordinates.memory`
+=========================================================================
+
+:Author: Wouter Boomsma
+:Year: 2016
+:Copyright: GNU Public License v2
+:Maintainer: Wouter Boomsma <wb@di.ku.dk>, wouterboomsma on github
+
+
+.. versionadded:: 0.16.0
+
+The module contains a trajectory reader that operates on an array in
+memory, rather than reading from file. This makes it possible to
+operate on raw coordinates using existing MDAnalysis tools. In
+addition, it allows the user to make changes to the coordinates in a
+trajectory (e.g. through
+:attr:`MDAnalysis.core.groups.AtomGroup.positions`) without having
+to write the entire state to file.
+
+
+How to use the :class:`MemoryReader`
+====================================
+
+The :class:`MemoryReader` can be used to either directly generate a
+trajectory as a numpy array or by transferring an existing trajectory
+to memory.
+
+In-memory representation of arbitrary trajectories
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If sufficient memory is available to hold a whole trajectory in memory
+then analysis can be sped up substantially by transferring the
+trajectory to memory.
+
+The most straightforward use of the :class:`MemoryReader` is to simply
+use the ``in_memory=True`` flag for the
+:class:`~MDAnalysis.core.universe.Universe` class, which
+automatically transfers a trajectory to memory::
+
+ import MDAnalysis as mda
+ from MDAnalysisTests.datafiles import TPR, XTC
+
+ universe = mda.Universe(TPR, XTC, in_memory=True)
+
+Of course, sufficient memory has to be available to hold the whole
+trajectory.
+
+
+Switching a trajectory to an in-memory representation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The decision to transfer the trajectory to memory can be made at any
+time with the
+:meth:`~MDAnalysis.core.universe.Universe.transfer_to_memory` method
+of a :class:`~MDAnalysis.core.universe.Universe`::
+
+    universe = mda.Universe(TPR, XTC)
+    universe.transfer_to_memory()
+
+This operation may take a while (with `verbose=True` a progress bar is
+displayed) but then subsequent operations on the trajectory directly
+operate on the in-memory array and will be very fast.
+
+
+Constructing a Reader from a numpy array
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`MemoryReader` provides great flexibility because it
+becomes possible to create a :class:`~MDAnalysis.core.universe.Universe` directly
+from a numpy array.
+
+A simple example consists of a new universe created from the array
+extracted from a DCD
+:meth:`~MDAnalysis.coordinates.DCD.DCDReader.timeseries`::
+
+    import MDAnalysis as mda
+    from MDAnalysisTests.datafiles import DCD, PSF
+    from MDAnalysis.coordinates.memory import MemoryReader
+
+    universe = mda.Universe(PSF, DCD)
+
+    coordinates = universe.trajectory.timeseries(universe.atoms)
+    universe2 = mda.Universe(PSF, coordinates, format=MemoryReader, order='afc')
+
+
+.. _create-in-memory-trajectory-with-AnalysisFromFunction:
+
+.. rubric:: Creating an in-memory trajectory with
+            :func:`~MDAnalysis.analysis.base.AnalysisFromFunction`
+
+The :meth:`~MDAnalysis.coordinates.DCD.DCDReader.timeseries` is
+currently only implemented for the
+:class:`~MDAnalysis.coordinates.DCD.DCDReader`. However, the
+:func:`MDAnalysis.analysis.base.AnalysisFromFunction` can provide the
+same functionality for any supported trajectory format::
+
+  import MDAnalysis as mda
+  from MDAnalysis.tests.datafiles import PDB, XTC
+
+  from MDAnalysis.coordinates.memory import MemoryReader
+  from MDAnalysis.analysis.base import AnalysisFromFunction
+
+  u = mda.Universe(PDB, XTC)
+
+  coordinates = AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                                     u.atoms).run().results['timeseries']
+  u2 = mda.Universe(PDB, coordinates, format=MemoryReader)
+
+.. _creating-in-memory-trajectory-label:
+
+Creating an in-memory trajectory of a sub-system
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Creating a trajectory for just a selection of an existing trajectory
+requires the transfer of the appropriate coordinates as well as
+creation of a topology of the sub-system. For the latter one can use
+the :func:`~MDAnalysis.core.universe.Merge` function, for the former
+the :meth:`~MDAnalysis.core.universe.Universe.load_new` method of a
+:class:`~MDAnalysis.core.universe.Universe` together with the
+:class:`MemoryReader`. In the following, an in-memory trajectory of
+only the protein is created::
+
+  import MDAnalysis as mda
+  from MDAnalysis.tests.datafiles import PDB, XTC
+
+  from MDAnalysis.coordinates.memory import MemoryReader
+  from MDAnalysis.analysis.base import AnalysisFromFunction
+
+  u = mda.Universe(PDB, XTC)
+  protein = u.select_atoms("protein")
+
+  coordinates = AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                                     protein).run().results['timeseries']
+  u2 = mda.Merge(protein)            # create the protein-only Universe
+  u2.load_new(coordinates, format=MemoryReader)
+
+The protein coordinates are extracted into ``coordinates`` and then
+the in-memory trajectory is loaded from these coordinates. In
+principle, this could have all be done in one line::
+
+  u2 = mda.Merge(protein).load_new(
+           AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                                protein).run().results['timeseries'],
+           format=MemoryReader)
+
+The new :class:`~MDAnalysis.core.universe.Universe` ``u2`` can be used
+to, for instance, write out a new trajectory or perform fast analysis
+on the sub-system.
+
+
+Classes
+=======
+
+
+.. autoclass:: MemoryReader
+   :members:
+   :inherited-members:
+
+"""
+import logging
+import errno
+import numpy as np
+import warnings
+import copy
+
+from . import base
+from .timestep import Timestep
+
+
+# These methods all pass in an existing *view* onto a larger array
+def _replace_positions_array(ts, new):
+    """Replace the array of positions
+
+    Replaces the array of positions by another array.
+
+
+    Note
+    ----
+    The behavior of :meth:`_replace_positions_array` is different from the
+    behavior of the :attr:`position` property that replaces the **content**
+    of the array. The :meth:`_replace_positions_array` method should only be
+    used to set the positions to a different frame in
+    :meth:`MemoryReader._read_next_timestep`; there, the memory reader sets
+    the positions to a view of the correct frame.  Modifying the positions
+    for a given frame should be done with the :attr:`positions` attribute
+    that does not break the link between the array of positions in the time
+    step and the :attr:`MemoryReader.coordinate_array`.
+
+
+    .. versionadded:: 0.19.0
+    .. versionchanged:: 2.0.0
+       This function, and the _repalace helper functions for velocities,
+       forces, and dimensions, have been moved out of the now removed
+       custom timestep object for :class:`MemoryReader`.
+    """
+    ts.has_positions = True
+    ts._pos = new
+
+
+def _replace_velocities_array(ts, new):
+    ts.has_velocities = True
+    ts._velocities = new
+
+
+def _replace_forces_array(ts, new):
+    ts.has_forces = True
+    ts._forces = new
+
+
+def _replace_dimensions(ts, new):
+    ts._unitcell = new
+
+
+
[docs]class MemoryReader(base.ProtoReader): + """ + MemoryReader works with trajectories represented as numpy arrays. + + A trajectory reader interface to a numpy array of the coordinates. + For compatibility with the timeseries interface, support is provided for + specifying the order of columns through the `order` keyword. + + .. versionadded:: 0.16.0 + .. versionchanged:: 1.0.0 + Support for the deprecated `format` keyword for + :meth:`MemoryReader.timeseries` has now been removed. + """ + + format = 'MEMORY' + + def __init__(self, coordinate_array, order='fac', + dimensions=None, dt=1, filename=None, + velocities=None, forces=None, + **kwargs): + """ + Parameters + ---------- + coordinate_array : numpy.ndarray + The underlying array of coordinates. The MemoryReader now + necessarily requires a np.ndarray + order : {"afc", "acf", "caf", "fac", "fca", "cfa"} (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates). + dimensions: [A, B, C, alpha, beta, gamma] (optional) + unitcell dimensions (*A*, *B*, *C*, *alpha*, *beta*, *gamma*) + lengths *A*, *B*, *C* are in the MDAnalysis length unit (Å), and + angles are in degrees. An array of dimensions can be given, + which must then be shape (nframes, 6) + dt: float (optional) + The time difference between frames (ps). If :attr:`time` + is set, then `dt` will be ignored. + filename: string (optional) + The name of the file from which this instance is created. Set to ``None`` + when created from an array + velocities : numpy.ndarray (optional) + Atom velocities. Must match shape of coordinate_array. Will share order + with coordinates. + forces : numpy.ndarray (optional) + Atom forces. Must match shape of coordinate_array Will share order + with coordinates + + Raises + ------ + TypeError if the coordinate array passed is not a np.ndarray + + Note + ---- + At the moment, only a fixed `dimension` is supported, i.e., the same + unit cell for all frames in `coordinate_array`. See issue `#1041`_. + + + .. _`#1041`: https://github.com/MDAnalysis/mdanalysis/issues/1041 + + .. versionchanged:: 0.19.0 + The input to the MemoryReader now must be a np.ndarray + Added optional velocities and forces + .. versionchanged:: 2.2.0 + Input kwargs are now stored under the :attr:`_kwargs` attribute, + and are passed on class creation in :meth:`copy`. + """ + + super(MemoryReader, self).__init__() + self.filename = filename + self.stored_order = order + self._kwargs = kwargs + + # See Issue #1685. The block below checks if the coordinate array + # passed is of shape (N, 3) and if it is, the coordiante array is + # reshaped to (1, N, 3) + try: + if coordinate_array.ndim == 2 and coordinate_array.shape[1] == 3: + coordinate_array = coordinate_array[np.newaxis, :, :] + except AttributeError: + errmsg = ("The input has to be a numpy.ndarray that corresponds " + "to the layout specified by the 'order' keyword.") + raise TypeError(errmsg) from None + + self.set_array(coordinate_array, order) + self.n_frames = \ + self.coordinate_array.shape[self.stored_order.find('f')] + self.n_atoms = \ + self.coordinate_array.shape[self.stored_order.find('a')] + + if velocities is not None: + try: + velocities = np.asarray(velocities, dtype=np.float32) + except ValueError: + errmsg = (f"'velocities' must be array-like got " + f"{type(velocities)}") + raise TypeError(errmsg) from None + # if single frame, make into array of 1 frame + if velocities.ndim == 2: + velocities = velocities[np.newaxis, :, :] + if not velocities.shape == self.coordinate_array.shape: + raise ValueError('Velocities has wrong shape {} ' + 'to match coordinates {}' + ''.format(velocities.shape, + self.coordinate_array.shape)) + self.velocity_array = velocities.astype(np.float32, copy=False) + else: + self.velocity_array = None + + if forces is not None: + try: + forces = np.asarray(forces, dtype=np.float32) + except ValueError: + errmsg = f"'forces' must be array like got {type(forces)}" + raise TypeError(errmsg) from None + if forces.ndim == 2: + forces = forces[np.newaxis, :, :] + if not forces.shape == self.coordinate_array.shape: + raise ValueError('Forces has wrong shape {} ' + 'to match coordinates {}' + ''.format(forces.shape, + self.coordinate_array.shape)) + self.force_array = forces.astype(np.float32, copy=False) + else: + self.force_array = None + + provided_n_atoms = kwargs.pop("n_atoms", None) + if (provided_n_atoms is not None and + provided_n_atoms != self.n_atoms + ): + raise ValueError( + "The provided value for n_atoms ({}) " + "does not match the shape of the coordinate " + "array ({})".format(provided_n_atoms, self.n_atoms) + ) + + self.ts = self._Timestep(self.n_atoms, **kwargs) + self.ts.dt = dt + + if dimensions is None: + self.dimensions_array = np.zeros((self.n_frames, 6), dtype=np.float32) + else: + try: + dimensions = np.asarray(dimensions, dtype=np.float32) + except ValueError: + errmsg = (f"'dimensions' must be array-like got " + f"{type(dimensions)}") + raise TypeError(errmsg) from None + if dimensions.shape == (6,): + # single box, tile this to trajectory length + # allows modifying the box of some frames + dimensions = np.tile(dimensions, (self.n_frames, 1)) + elif dimensions.shape != (self.n_frames, 6): + raise ValueError("Provided dimensions array has shape {}. " + "This must be a array of shape (6,) or " + "(n_frames, 6)".format(dimensions.shape)) + self.dimensions_array = dimensions + + self.ts.frame = -1 + self.ts.time = -1 + self._read_next_timestep() + + @staticmethod + def _format_hint(thing): + """For internal use: Check if MemoryReader can operate on *thing* + + .. versionadded:: 1.0.0 + """ + return isinstance(thing, np.ndarray) + +
[docs] @staticmethod + def parse_n_atoms(filename, order='fac', **kwargs): + """Deduce number of atoms in a given array of coordinates + + Parameters + ---------- + filename : numpy.ndarray + data which will be used later in MemoryReader + order : {"afc", "acf", "caf", "fac", "fca", "cfa"} (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates). + + Returns + ------- + n_atoms : int + number of atoms in system + """ + # assume filename is a numpy array + return filename.shape[order.find('a')]
+ +
[docs] def copy(self): + """Return a copy of this Memory Reader""" + vels = (self.velocity_array.copy() + if self.velocity_array is not None else None) + fors = (self.force_array.copy() + if self.force_array is not None else None) + dims = self.dimensions_array.copy() + + new = self.__class__( + self.coordinate_array.copy(), + order=self.stored_order, + dimensions=dims, + velocities=vels, + forces=fors, + dt=self.ts.dt, + filename=self.filename, + **self._kwargs + ) + new[self.ts.frame] + + for auxname, auxread in self._auxs.items(): + new.add_auxiliary(auxname, auxread.copy()) + # since transformations are already applied to the whole trajectory + # simply copy the property + new.transformations = self.transformations + + return new
+ +
[docs] def set_array(self, coordinate_array, order='fac'): + """ + Set underlying array in desired column order. + + Parameters + ---------- + coordinate_array : :class:`~numpy.ndarray` object + The underlying array of coordinates + order : {"afc", "acf", "caf", "fac", "fca", "cfa"} (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates). + """ + # Only make copy if not already in float32 format + self.coordinate_array = coordinate_array.astype('float32', copy=False) + self.stored_format = order
+ +
[docs] def get_array(self): + """ + Return underlying array. + """ + return self.coordinate_array
+ + def _reopen(self): + """Reset iteration to first frame""" + self.ts.frame = -1 + self.ts.time = -1 + +
[docs] def timeseries(self, asel=None, start=0, stop=-1, step=1, order='afc'): + """Return a subset of coordinate data for an AtomGroup in desired + column order. If no selection is given, it will return a view of the + underlying array, while a copy is returned otherwise. + + Parameters + --------- + asel : AtomGroup (optional) + Atom selection. Defaults to ``None``, in which case the full set of + coordinate data is returned. Note that in this case, a view + of the underlying numpy array is returned, while a copy of the + data is returned whenever `asel` is different from ``None``. + start : int (optional) + the start trajectory frame + stop : int (optional) + the end trajectory frame + + .. deprecated:: 2.4.0 + Note that `stop` is currently *inclusive* but will be + changed in favour of being *exclusive* in version 3.0. + + step : int (optional) + the number of trajectory frames to skip + order : {"afc", "acf", "caf", "fac", "fca", "cfa"} (optional) + the order/shape of the return data array, corresponding + to (a)tom, (f)rame, (c)oordinates all six combinations + of 'a', 'f', 'c' are allowed ie "fac" - return array + where the shape is (frame, number of atoms, + coordinates). + + + .. versionchanged:: 1.0.0 + Deprecated `format` keyword has been removed. Use `order` instead. + .. versionchanged:: 2.4.0 + ValueError now raised instead of NoDataError for empty input + AtomGroup + """ + if stop != -1: + warnings.warn("MemoryReader.timeseries inclusive `stop` " + "indexing will be removed in 3.0 in favour of exclusive " + "indexing", category=DeprecationWarning) + + array = self.get_array() + if order == self.stored_order: + pass + elif order[0] == self.stored_order[0]: + array = np.swapaxes(array, 1, 2) + elif order[1] == self.stored_order[1]: + array = np.swapaxes(array, 0, 2) + elif order[2] == self.stored_order[2]: + array = np.swapaxes(array, 0, 1) + elif order[0] == self.stored_order[1]: + array = np.swapaxes(array, 1, 0) + array = np.swapaxes(array, 1, 2) + elif order[0] == self.stored_order[2]: + array = np.swapaxes(array, 2, 0) + array = np.swapaxes(array, 1, 2) + + a_index = order.find('a') + f_index = order.find('f') + stop_index = stop+1 + if stop_index == 0: + stop_index = None + basic_slice = ([slice(None)] * f_index + + [slice(start, stop_index, step)] + + [slice(None)] * (2-f_index)) + + # Return a view if either: + # 1) asel is None + # 2) asel corresponds to the selection of all atoms. + array = array[tuple(basic_slice)] + if (asel is None or asel is asel.universe.atoms): + return array + else: + if len(asel) == 0: + raise ValueError("Timeseries requires at least one atom " + "to analyze") + # If selection is specified, return a copy + return array.take(asel.indices, a_index)
+ + def _read_next_timestep(self, ts=None): + """copy next frame into timestep""" + + if self.ts.frame >= self.n_frames-1: + raise IOError(errno.EIO, 'trying to go over trajectory limit') + if ts is None: + ts = self.ts + ts.frame += 1 + f_index = self.stored_order.find('f') + basic_slice = ([slice(None)]*(f_index) + + [self.ts.frame] + + [slice(None)]*(2-f_index)) + _replace_positions_array(ts, self.coordinate_array[tuple(basic_slice)]) + _replace_dimensions(ts, self.dimensions_array[self.ts.frame]) + if self.velocity_array is not None: + _replace_velocities_array(ts, self.velocity_array[tuple(basic_slice)]) + if self.force_array is not None: + _replace_forces_array(ts, self.force_array[tuple(basic_slice)]) + + ts.time = self.ts.frame * self.dt + return ts + + def _read_frame(self, i): + """read frame i""" + # Frame number is incremented to zero by _read_next_timestep() + self.ts.frame = i - 1 + return self._read_next_timestep() + + def __repr__(self): + """String representation""" + return ("<{cls} with {nframes} frames of {natoms} atoms>" + "".format( + cls=self.__class__.__name__, + nframes=self.n_frames, + natoms=self.n_atoms + )) + +
[docs] def add_transformations(self, *transformations): + """ Add all transformations to be applied to the trajectory. + + This function take as list of transformations as an argument. These + transformations are functions that will be called by the Reader and given + a :class:`Timestep` object as argument, which will be transformed and returned + to the Reader. + The transformations can be part of the :mod:`~MDAnalysis.transformations` + module, or created by the user, and are stored as a list `transformations`. + This list can only be modified once, and further calls of this function will + raise an exception. + + .. code-block:: python + + u = MDAnalysis.Universe(topology, coordinates) + workflow = [some_transform, another_transform, this_transform] + u.trajectory.add_transformations(*workflow) + + Parameters + ---------- + transform_list : list + list of all the transformations that will be applied to the coordinates + + See Also + -------- + :mod:`MDAnalysis.transformations` + """ + #Overrides :meth:`~MDAnalysis.coordinates.base.ProtoReader.add_transformations` + #to avoid unintended behaviour where the coordinates of each frame are transformed + #multiple times when iterating over the trajectory. + #In this method, the trajectory is modified all at once and once only. + + super(MemoryReader, self).add_transformations(*transformations) + for i, ts in enumerate(self): + for transform in self.transformations: + ts = transform(ts)
+ + def _apply_transformations(self, ts): + """ Applies the transformations to the timestep.""" + # Overrides :meth:`~MDAnalysis.coordinates.base.ProtoReader.add_transformations` + # to avoid applying the same transformations multiple times on each frame + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/coordinates/null.html b/2.7.0-dev0/_modules/MDAnalysis/coordinates/null.html new file mode 100644 index 0000000000..914f3b8bfb --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/coordinates/null.html @@ -0,0 +1,212 @@ + + + + + + MDAnalysis.coordinates.null — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.coordinates.null

+# -*- 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-2017 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
+#
+"""
+Null output --- :mod:`MDAnalysis.coordinates.null`
+==================================================
+
+The :class:`NullWriter` provides a Writer instance that behaves like
+any other writer but effectively ignores its input and does not write
+any output files. This is similar to writing to ``/dev/null``.
+
+This class exists to allow developers writing generic code and tests.
+
+Classes
+-------
+
+.. autoclass:: NullWriter
+   :members:
+
+"""
+from . import base
+
+
+
[docs]class NullWriter(base.WriterBase): + """A trajectory Writer that does not do anything. + + The NullWriter is the equivalent to ``/dev/null``: it behaves like + a Writer but ignores all input. It can be used in order to + suppress output. + """ + format = 'NULL' + multiframe = True + units = {'time': 'ps', 'length': 'Angstrom'} + + def __init__(self, filename, **kwargs): + pass + + def _write_next_frame(self, obj): + try: + atoms = obj.atoms + except AttributeError: + errmsg = "Input obj is neither an AtomGroup or Universe" + raise TypeError(errmsg) from None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/_get_readers.html b/2.7.0-dev0/_modules/MDAnalysis/core/_get_readers.html new file mode 100644 index 0000000000..d2bd53d1a1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/_get_readers.html @@ -0,0 +1,431 @@ + + + + + + MDAnalysis.core._get_readers — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core._get_readers

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- http://www.MDAnalysis.org
+# Copyright (c) 2006-2015 Naveen Michaud-Agrawal, Elizabeth J. Denning, Oliver Beckstein
+# and contributors (see AUTHORS for the full list)
+#
+# Released under the GNU Public Licence, v2 or any higher version
+#
+# Please cite your use of MDAnalysis in published work:
+# 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
+#
+"""Functions for fetching Readers
+
+These functions officially live in in topology/core (parsers) and
+coordinates/core (all others).  They are declared here to avoid
+circular imports.
+
+"""
+import copy
+import inspect
+
+from .. import (_READERS, _READER_HINTS,
+                _PARSERS, _PARSER_HINTS,
+                _MULTIFRAME_WRITERS, _SINGLEFRAME_WRITERS, _CONVERTERS)
+from ..lib import util
+
+
+
[docs]def get_reader_for(filename, format=None): + """Return the appropriate trajectory reader class for `filename`. + + Parameters + ---------- + filename + filename of the input trajectory or coordinate file. Also can + handle a few special cases, see notes below. + format : str or :class:`Reader` (optional) + Define the desired format. Can be a string to request a given + Reader. + If a class is passed, it will be assumed that this is + a Reader and will be returned. + + Returns + ------- + :class:`Reader` + A Reader object + + + Raises + ------ + ValueError + If no appropriate Reader is found + + + Notes + ----- + There are a number of special cases that can be handled: + + - If `filename` is a numpy array, + :class:`~MDAnalysis.coordinates.memory.MemoryReader` is returned. + - If `filename` is an MMTF object, + :class:`~MDAnalysis.coordinates.MMTF.MMTFReader` is returned. + - If `filename` is a ParmEd Structure, + :class:`~MDAnalysis.coordinates.ParmEd.ParmEdReader` is returned. + - If `filename` is an iterable of filenames, + :class:`~MDAnalysis.coordinates.chain.ChainReader` is returned. + + Automatic detection is disabled when an explicit `format` is provided, + unless a list of filenames is given, in which case + :class:`~MDAnalysis.coordinates.chain.ChainReader` is returned and `format` + passed to the :class:`~MDAnalysis.coordinates.chain.ChainReader`. + + .. versionchanged:: 1.0.0 + Added format_hint functionalityx + """ + # check if format is actually a Reader + if inspect.isclass(format): + return format + + # ChainReader gets returned even if format is specified + if _READER_HINTS['CHAIN'](filename): + format = 'CHAIN' + # Only guess if format is not specified + if format is None: + for fmt_name, test in _READER_HINTS.items(): + if test(filename): + format = fmt_name + break + else: # hits else if for loop completes + # else let the guessing begin! + format = util.guess_format(filename) + format = format.upper() + try: + return _READERS[format] + except KeyError: + errmsg = ( + "Unknown coordinate trajectory format '{0}' for '{1}'. The FORMATs \n" + " {2}\n" + " are implemented in MDAnalysis.\n" + " See https://docs.mdanalysis.org/documentation_pages/coordinates/init.html#id1\n" + " Use the format keyword to explicitly set the format: 'Universe(...,format=FORMAT)'\n" + " For missing formats, raise an issue at " + "https://github.com/MDAnalysis/mdanalysis/issues".format( + format, filename, _READERS.keys())) + raise ValueError(errmsg) from None
+ + +
[docs]def get_writer_for(filename, format=None, multiframe=None): + """Return an appropriate trajectory or frame writer class for `filename`. + + The format is determined by the `format` argument or the extension of + `filename`. If `format` is provided, it takes precedence over the + extension of `filename`. + + Parameters + ---------- + filename : str or ``None`` + If no *format* is supplied, then the filename for the trajectory is + examined for its extension and the Writer is chosen accordingly. + If ``None`` is provided, then + :class:`~MDAnalysis.coordinates.null.NullWriter` is selected (and + all output is discarded silently). + format : str (optional) + Explicitly set a format. + multiframe : bool (optional) + ``True``: write multiple frames to the trajectory; ``False``: only + write a single coordinate frame; ``None``: first try trajectory (multi + frame writers), then the single frame ones. Default is ``None``. + + Returns + ------- + :class:`Writer` + A Writer object + + Raises + ------ + ValueError: + The format could not be deduced from `filename` or an unexpected value + was provided for the `multiframe` argument. + TypeError: + No writer was found for the required format or the required `filename` + argument was omitted. + + + .. versionchanged:: 0.7.6 + Added `multiframe` keyword; the default ``None`` reflects the previous + behaviour. + + .. versionchanged:: 0.14.0 + Removed the default value for the `format` argument. Now, the value + provided with the `format` parameter takes precedence over the extension + of `filename`. A :exc:`ValueError` is raised if the format cannot be + deduced from `filename`. + + .. versionchanged:: 0.16.0 + The `filename` argument has been made mandatory. + """ + if filename is None: + format = 'NULL' + elif format is None: + try: + root, ext = util.get_ext(filename) + except (TypeError, AttributeError): + # An AttributeError is raised if filename cannot + # be manipulated as a string. + # A TypeError is raised in py3.6 + # "TypeError: expected str, bytes or os.PathLike object" + errmsg = f'File format could not be guessed from "{filename}"' + raise ValueError(errmsg) from None + else: + format = util.check_compressed_format(root, ext) + + if format == '': + raise ValueError(( + 'File format could not be guessed from {}, ' + 'resulting in empty string - ' + 'only None or valid formats are supported.' + ).format(filename)) + + format = format.upper() + if multiframe is None: + # Multiframe takes priority, else use singleframe + options = copy.copy(_SINGLEFRAME_WRITERS) # do copy to avoid changing in place + options.update(_MULTIFRAME_WRITERS) # update overwrites existing entries + errmsg = "No trajectory or frame writer for format '{0}'" + elif multiframe is True: + options = _MULTIFRAME_WRITERS + errmsg = "No trajectory writer for format '{0}'" + elif multiframe is False: + options = _SINGLEFRAME_WRITERS + errmsg = "No single frame writer for format '{0}'" + else: + raise ValueError("Unknown value '{0}' for multiframe," + " only True, False, None allowed" + "".format(multiframe)) + + try: + return options[format] + except KeyError: + raise TypeError(errmsg.format(format)) from None
+ + +def get_parser_for(filename, format=None): + """Return the appropriate topology parser for `filename`. + + Automatic detection is disabled when an explicit `format` is + provided. + + Parameters + ---------- + filename : str or mmtf.MMTFDecoder + name of the topology file; if this is an instance of + :class:`mmtf.MMTFDecoder` then directly use the MMTF format. + format : str + description of the file format + + Raises + ------ + ValueError + If no appropriate parser could be found. + + .. versionchanged:: 1.0.0 + Added format_hint functionality + """ + if inspect.isclass(format): + return format + + # Only guess if format is not provided + if format is None: + for fmt_name, test in _PARSER_HINTS.items(): + if test(filename): + format = fmt_name + break + else: + format = util.guess_format(filename) + format = format.upper() + try: + return _PARSERS[format] + except KeyError: + try: + rdr = get_reader_for(filename) + except ValueError: + errmsg = ( + "'{0}' isn't a valid topology format, nor a coordinate format\n" + " from which a topology can be minimally inferred.\n" + " You can use 'Universe(topology, ..., topology_format=FORMAT)'\n" + " to explicitly specify the format and\n" + " override automatic detection. Known FORMATs are:\n" + " {1}\n" + " See https://docs.mdanalysis.org/documentation_pages/topology/init.html#supported-topology-formats\n" + " For missing formats, raise an issue at \n" + " https://github.com/MDAnalysis/mdanalysis/issues".format( + format, _PARSERS.keys())) + raise ValueError(errmsg) from None + else: + return _PARSERS['MINIMAL'] + +def get_converter_for(format): + """Return the appropriate topology converter for ``format``. + + Parameters + ---------- + format : str + description of the file format + + Raises + ------ + TypeError + If no appropriate parser could be found. + + + .. versionadded:: 1.0.0 + """ + try: + writer = _CONVERTERS[format] + except KeyError: + errmsg = f'No converter found for {format} format' + raise TypeError(errmsg) from None + return writer +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/accessors.html b/2.7.0-dev0/_modules/MDAnalysis/core/accessors.html new file mode 100644 index 0000000000..bcfd790a36 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/accessors.html @@ -0,0 +1,354 @@ + + + + + + MDAnalysis.core.accessors — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core.accessors

+# -*- 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-2017 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
+#
+
+"""AtomGroup accessors --- :mod:`MDAnalysis.core.accessors`
+====================================================================
+
+This module provides classes for accessing and converting :class:`~MDAnalysis.core.groups.AtomGroup`
+objects. It is used for the :meth:`~MDAnalysis.core.groups.AtomGroup.convert_to`
+method to make it usable in two different ways: ``ag.convert_to("PACKAGE")`` or
+``ag.convert_to.package()``
+
+Example
+-------
+
+.. code-block:: python
+
+    >>> class SpeechWrapper:
+    ...     def __init__(self, person):
+    ...         self.person = person
+    ...     def __call__(self, *args):
+    ...         print(self.person.name, "says", *args)
+    ...     def whoami(self):
+    ...         print("I am %s" % self.person.name)
+    ...
+    >>> class Person:
+    ...     def __init__(self, name):
+    ...         self.name = name
+    ...     say = Accessor("say", SpeechWrapper)
+    ...
+    >>> bob = Person("Bob")
+    >>> bob.say("hello")
+    Bob says hello
+    >>> bob.say.whoami()
+    I am Bob
+
+Classes
+-------
+
+.. autoclass:: Accessor
+   :members:
+
+.. autoclass:: ConverterWrapper
+   :members:
+
+"""
+
+from functools import partial, update_wrapper
+
+from .. import _CONVERTERS
+
+
+
[docs]class Accessor: + """Used to pass data between two classes + + Parameters + ---------- + name : str + Name of the property in the parent class + accessor : class + A class that needs access to its parent's instance + + Example + ------- + If you want the property to be named "convert_to" in the AtomGroup class, + use: + + .. code-block:: python + + >>> class AtomGroup: + >>> # ... + >>> convert_to = Accessor("convert_to", ConverterWrapper) + + And when calling ``ag.convert_to.rdkit()``, the "rdkit" method of the + ConverterWrapper will be able to have access to "ag" + + + .. versionadded:: 2.0.0 + """ + + def __init__(self, name, accessor): + self._accessor = accessor + self._name = name + + def __get__(self, obj, cls): + if obj is None: + # accessing from class instead of instance + return self._accessor + # instances the accessor class with the parent object as argument + wrapped = self._accessor(obj) + # replace the parent object's property with the wrapped instance + # so we avoid reinstantiating the accessor everytime `obj.<_name>` + # is called + object.__setattr__(obj, self._name, wrapped) + return wrapped
+ + +
[docs]class ConverterWrapper: + """Convert :class:`AtomGroup` to a structure from another Python + package. + + The converters are accessible to any AtomGroup through the ``convert_to`` + property. `ag.convert_to` will return this ConverterWrapper, which can be + called directly with the name of the destination package as a string + (similarly to the old API), or through custom methods named after the + package (in lowercase) that are automatically constructed thanks to + metaclass magic. + + Example + ------- + The code below converts a Universe to a :class:`parmed.structure.Structure` + + .. code-block:: python + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import GRO + >>> u = mda.Universe(GRO) + >>> parmed_structure = u.atoms.convert_to('PARMED') + >>> parmed_structure + <Structure 47681 atoms; 11302 residues; 0 bonds; PBC (triclinic); NOT parametrized> + + You can also directly use ``u.atoms.convert_to.parmed()`` + + Parameters + ---------- + package: str + The name of the package to convert to, e.g. ``"PARMED"`` + *args: + Positional arguments passed to the converter + **kwargs: + Keyword arguments passed to the converter + + Returns + ------- + output: + An instance of the structure type from another package. + + Raises + ------ + ValueError: + No converter was found for the required package + + + .. versionadded:: 1.0.0 + .. versionchanged:: 2.0.0 + Moved the ``convert_to`` method to its own class. The old API is still + available and is now case-insensitive to package names, it also accepts + positional and keyword arguments. Each converter function can also + be accessed as a method with the name of the package in lowercase, i.e. + `convert_to.parmed()` + """ + _CONVERTERS = {} + + def __init__(self, ag): + """ + Parameters + ---------- + ag : AtomGroup + The AtomGroup to convert + """ + self._ag = ag + for lib, converter_cls in _CONVERTERS.items(): + method_name = lib.lower() + # makes sure we always use the same instance of the converter + # no matter which atomgroup instance called it + try: + converter = self._CONVERTERS[method_name] + except KeyError: + converter = converter_cls().convert + # store in class attribute + self._CONVERTERS[method_name] = converter + # create partial function that passes ag to the converter + convert = partial(converter, self._ag) + # copy docstring and metadata to the partial function + # note: it won't work with help() + update_wrapper(convert, converter) + setattr(self, method_name, convert) + + def __call__(self, package, *args, **kwargs): + try: + convert = getattr(self, package.lower()) + except AttributeError: + raise ValueError(f"No {package!r} converter found. Available: " + f"{' '.join(self._CONVERTERS.keys())}") from None + return convert(*args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/groups.html b/2.7.0-dev0/_modules/MDAnalysis/core/groups.html new file mode 100644 index 0000000000..10ea154f65 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/groups.html @@ -0,0 +1,4800 @@ + + + + + + MDAnalysis.core.groups — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core.groups

+# -*- 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-2017 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
+#
+
+"""\
+==========================================================
+Core objects: Containers --- :mod:`MDAnalysis.core.groups`
+==========================================================
+
+The :class:`~MDAnalysis.core.universe.Universe` instance contains all the
+particles in the system (which MDAnalysis calls :class:`Atom`). Groups of
+:class:`atoms<Atom>` are handled as :class:`AtomGroup` instances. The
+:class:`AtomGroup` is probably the most important object in MDAnalysis because
+virtually everything can be accessed through it. :class:`AtomGroup` instances
+can be easily created (e.g., from an :meth:`AtomGroup.select_atoms` selection or
+simply by slicing).
+
+For convenience, chemically meaningful groups of :class:`Atoms<Atom>` such as a
+:class:`Residue` or a :class:`Segment` (typically a whole molecule or all of the
+solvent) also exist as containers, as well as groups of these units
+(:class:`ResidueGroup`, :class:`SegmentGroup`).
+
+
+Classes
+=======
+
+Collections
+-----------
+
+.. autoclass:: AtomGroup
+   :members:
+   :inherited-members:
+.. autoclass:: ResidueGroup
+   :members:
+   :inherited-members:
+.. autoclass:: SegmentGroup
+   :members:
+   :inherited-members:
+.. autoclass:: UpdatingAtomGroup
+   :members:
+
+Chemical units
+--------------
+
+.. autoclass:: Atom
+   :members:
+   :inherited-members:
+.. autoclass:: Residue
+   :members:
+   :inherited-members:
+.. autoclass:: Segment
+   :members:
+   :inherited-members:
+
+Levels
+------
+
+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::
+
+   u = mda.Universe()
+
+   ag = u.atoms[:10]
+   at = u.atoms[11]
+
+   ag.level == at.level  # Returns True
+
+   ag.level.singular  # Returns Atom class
+   at.level.plural  # Returns AtomGroup class
+
+"""
+from collections import namedtuple
+import numpy as np
+import functools
+import itertools
+import numbers
+import os
+import contextlib
+import warnings
+
+from .. import (_CONVERTERS,
+                _TOPOLOGY_ATTRS, _TOPOLOGY_TRANSPLANTS, _TOPOLOGY_ATTRNAMES)
+from ..lib import util
+from ..lib.util import (cached, warn_if_not_unique,
+                        unique_int_1d, unique_int_1d_unsorted,
+                        int_array_is_sorted
+                        )
+from ..lib import distances
+from ..lib import transformations
+from ..lib import mdamath
+from .accessors import Accessor, ConverterWrapper
+from ..selections import get_writer as get_selection_writer_for
+from . import selection
+from ..exceptions import NoDataError
+from . import topologyobjects
+from ._get_readers import get_writer_for, get_converter_for
+
+
+def _unpickle(u, ix):
+    return u.atoms[ix]
+
+
+# TODO 3.0: deprecate _unpickle in favor of _unpickle2.
+def _unpickle2(u, ix, cls):
+    return cls(ix, u)
+
+
+def _unpickle_uag(basepickle, selections, selstrs):
+    bfunc, bargs = basepickle[0], basepickle[1:][0]
+    basegroup = bfunc(*bargs)
+    return UpdatingAtomGroup(basegroup, selections, selstrs)
+
+
+def make_classes():
+    r"""Make a fresh copy of all classes
+
+    Returns
+    -------
+    Two dictionaries. One with a set of :class:`_TopologyAttrContainer` classes
+    to serve as bases for :class:`~MDAnalysis.core.universe.Universe`\ -specific
+    MDA container classes. Another with the final merged versions of those
+    classes. The classes themselves are used as hashing keys.
+    """
+    bases = {}
+    classes = {}
+    groups = (AtomGroup, ResidueGroup, SegmentGroup)
+    components = (Atom, Residue, Segment)
+
+    # The 'GBase' middle man is needed so that a single topologyattr
+    #  patching applies automatically to all groups.
+    GBase = bases[GroupBase] = _TopologyAttrContainer._subclass(is_group=True)
+    for cls in groups:
+        bases[cls] = GBase._subclass(is_group=True)
+    # CBase for patching all components
+    CBase = bases[ComponentBase] = _TopologyAttrContainer._subclass(
+        is_group=False)
+    for cls in components:
+        bases[cls] = CBase._subclass(is_group=False)
+
+    # Initializes the class cache.
+    for cls in groups + components:
+        classes[cls] = bases[cls]._mix(cls)
+
+    return bases, classes
+
+
+class _TopologyAttrContainer(object):
+    """Class factory for receiving sets of :class:`TopologyAttr` objects.
+
+    :class:`_TopologyAttrContainer` is a convenience class to encapsulate the
+    functions that deal with:
+    * the import and namespace transplant of
+      :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` objects;
+    * the copying (subclassing) of itself to create distinct bases for the
+      different container classes (:class:`AtomGroup`, :class:`ResidueGroup`,
+      :class:`SegmentGroup`, :class:`Atom`, :class:`Residue`, :class:`Segment`,
+      and subclasses thereof);
+    * the mixing (subclassing and co-inheritance) with the container classes.
+      The mixed subclasses become the final container classes specific to each
+      :class:`~MDAnalysis.core.universe.Universe`.
+    """
+    @classmethod
+    def _subclass(cls, is_group):
+        """Factory method returning :class:`_TopologyAttrContainer` subclasses.
+
+        Parameters
+        ----------
+        is_group : bool
+            The :attr:`_is_group` of the returned class will be set to
+            `is_group`. This is used to distinguish between Groups
+            (:class:`AtomGroup` etc.) and Components (:class:`Atom` etc.) in
+            internal methods when considering actions such as addition of
+            objects or adding
+            :class:`TopologyAttributes<MDAnalysis.core.topologyattrs.TopologyAttr>`
+            to them.
+
+        Returns
+        -------
+        type
+            A subclass of :class:`_TopologyAttrContainer`, with the same name.
+        """
+        newcls = type(cls.__name__, (cls,), {'_is_group': bool(is_group)})
+        if is_group:
+            newcls._SETATTR_WHITELIST = {
+                'positions', 'velocities', 'forces', 'dimensions',
+                'atoms', 'residue', 'residues', 'segment', 'segments',
+            }
+        else:
+            newcls._SETATTR_WHITELIST = {
+                'position', 'velocity', 'force', 'dimensions',
+                'atoms', 'residue', 'residues', 'segment',
+            }
+
+        return newcls
+
+    @classmethod
+    def _mix(cls, other):
+        """Creates a subclass with ourselves and another class as parents.
+
+        Classes mixed at this point override :meth:`__new__`, causing further
+        instantiations to shortcut to :meth:`~object.__new__` (skipping the
+        cache-fetch process for :class:`_MutableBase` subclasses).
+
+        The new class will have an attribute `_derived_class` added, pointing
+        to itself. This pointer instructs which class to use when
+        slicing/adding instances of the new class. At initialization time, the
+        new class may choose to point `_derived_class` to another class (as is
+        done in the initialization of :class:`UpdatingAtomGroup`).
+
+        Parameters
+        ----------
+        other : type
+            The class to mix with ourselves.
+
+        Returns
+        -------
+        type
+            A class of parents :class:`_ImmutableBase`, *other* and this class.
+            Its name is the same as *other*'s.
+        """
+        newcls = type(other.__name__, (_ImmutableBase, cls, other), {})
+        newcls._derived_class = newcls
+        return newcls
+
+    @classmethod
+    def _add_prop(cls, attr):
+        """Add `attr` into the namespace for this class
+
+        Parameters
+        ----------
+        attr : A :class:`TopologyAttr` object
+        """
+
+        def getter(self):
+            return attr.__getitem__(self)
+
+        def setter(self, values):
+            return attr.__setitem__(self, values)
+
+        if cls._is_group:
+            setattr(cls, attr.attrname,
+                    property(getter, setter, None, attr.groupdoc))
+            cls._SETATTR_WHITELIST.add(attr.attrname)
+        else:
+            setattr(cls, attr.singular,
+                    property(getter, setter, None, attr.singledoc))
+            cls._SETATTR_WHITELIST.add(attr.singular)
+
+    @classmethod
+    def _del_prop(cls, attr):
+        """Remove `attr` from the namespace for this class.
+
+        Parameters
+        ----------
+        attr : A :class:`TopologyAttr` object
+        """
+        with contextlib.suppress(AttributeError):
+            delattr(cls, attr.attrname)
+        with contextlib.suppress(AttributeError):
+            delattr(cls, attr.singular)
+
+        cls._SETATTR_WHITELIST.discard(attr.attrname)
+        cls._SETATTR_WHITELIST.discard(attr.singular)
+
+    def __setattr__(self, attr, value):
+        # `ag.this = 42` calls setattr(ag, 'this', 42)
+        if not (attr.startswith('_') or  # 'private' allowed
+                attr in self._SETATTR_WHITELIST or  # known attributes allowed
+                hasattr(self, attr)):  # preexisting (eg properties) allowed
+            raise AttributeError(
+                "Cannot set arbitrary attributes to a {}".format(
+                    'Group' if self._is_group else 'Component'))
+        # if it is, we allow the setattr to proceed by deferring to the super
+        # behaviour (ie do it)
+        super(_TopologyAttrContainer, self).__setattr__(attr, value)
+
+
+class _MutableBase(object):
+    """
+    Base class that merges appropriate :class:`_TopologyAttrContainer` classes.
+
+    Implements :meth:`__new__`. In it the instantiating class is fetched from
+    :attr:`~MDAnalysis.core.universe.Universe._classes`. If there is a cache
+    miss, a merged class is made
+    with a base from :attr:`~MDAnalysis.core.universe.Universe._class_bases`
+    and cached.
+
+    The classes themselves are used as the cache dictionary keys for simplcity
+    in cache retrieval.
+
+    """
+    def __new__(cls, *args, **kwargs):
+        # This pre-initialization wrapper must be pretty generic to
+        # allow for different initialization schemes of the possible classes.
+        # All we really need here is to fish a universe out of the arg list.
+        # The AtomGroup cases get priority and are fished out first.
+        try:
+            u = args[-1].universe
+        except (IndexError, AttributeError):
+            try:
+                # older AtomGroup init method..
+                u = args[0][0].universe
+            except (TypeError, IndexError, AttributeError):
+                from .universe import Universe
+                # Let's be generic and get the first argument that's either a
+                # Universe, a Group, or a Component, and go from there.
+                # This is where the UpdatingAtomGroup args get matched.
+                for arg in args+tuple(kwargs.values()):
+                    if isinstance(arg, (Universe, GroupBase,
+                                        ComponentBase)):
+                        u = arg.universe
+                        break
+                else:
+                    errmsg = (
+                        f"No universe, or universe-containing object "
+                        f"passed to the initialization of {cls.__name__}")
+                    raise TypeError(errmsg) from None
+        try:
+            return object.__new__(u._classes[cls])
+        except KeyError:
+            # Cache miss. Let's find which kind of class this is and merge.
+            try:
+                parent_cls = next(u._class_bases[parent]
+                                  for parent in cls.mro()
+                                  if parent in u._class_bases)
+            except StopIteration:
+                errmsg = (f"Attempted to instantiate class '{cls.__name__}' "
+                          f"but none of its parents are known to the universe."
+                          f" Currently possible parent classes are: "
+                          f"{str(sorted(u._class_bases.keys()))}")
+                raise TypeError(errmsg) from None
+            newcls = u._classes[cls] = parent_cls._mix(cls)
+            return object.__new__(newcls)
+
+    def __getattr__(self, attr):
+        selfcls = type(self).__name__
+
+        if attr in _TOPOLOGY_TRANSPLANTS:
+            topattr, meth, clstype = _TOPOLOGY_TRANSPLANTS[attr]
+            if isinstance(meth, property):
+                attrname = attr
+                attrtype = 'property'
+            else:
+                attrname = attr + '()'
+                attrtype = 'method'
+
+            # property of wrong group/component
+            if not isinstance(self, clstype):
+                mname = 'property' if isinstance(meth, property) else 'method'
+                err = '{attr} is a {method} of {clstype}, not {selfcls}'
+                clsname = clstype.__name__
+                if clsname == 'GroupBase':
+                    clsname = selfcls + 'Group'
+                raise AttributeError(err.format(attr=attrname,
+                                                method=attrtype,
+                                                clstype=clsname,
+                                                selfcls=selfcls))
+            # missing required topologyattr
+            else:
+                err = ('{selfcls}.{attrname} not available; '
+                       'this requires {topattr}')
+                raise NoDataError(err.format(selfcls=selfcls,
+                                             attrname=attrname,
+                                             topattr=topattr))
+
+        else:
+            clean = attr.lower().replace('_', '')
+            err = '{selfcls} has no attribute {attr}. '.format(selfcls=selfcls,
+                                                               attr=attr)
+            if clean in _TOPOLOGY_ATTRNAMES:
+                match = _TOPOLOGY_ATTRNAMES[clean]
+                err += 'Did you mean {match}?'.format(match=match)
+            raise AttributeError(err)
+
+    def get_connections(self, typename, outside=True):
+        """
+        Get bonded connections between atoms as a
+        :class:`~MDAnalysis.core.topologyobjects.TopologyGroup`.
+
+        Parameters
+        ----------
+        typename : str
+            group name. One of {"bonds", "angles", "dihedrals",
+            "impropers", "ureybradleys", "cmaps"}
+        outside : bool (optional)
+            Whether to include connections involving atoms outside
+            this group.
+
+        Returns
+        -------
+        TopologyGroup
+            containing the bonded group of choice, i.e. bonds, angles,
+            dihedrals, impropers, ureybradleys or cmaps.
+
+        .. versionadded:: 1.1.0
+        """
+        # AtomGroup has handy error messages for missing attributes
+        ugroup = getattr(self.universe.atoms, typename)
+        if not ugroup:
+            return ugroup
+        func = np.any if outside else np.all
+        try:
+            indices = self.atoms.ix_array
+        except AttributeError:  # if self is an Atom
+            indices = self.ix_array
+        seen = [np.in1d(col, indices) for col in ugroup._bix.T]
+        mask = func(seen, axis=0)
+        return ugroup[mask]
+
+
+class _ImmutableBase(object):
+    """Class used to shortcut :meth:`__new__` to :meth:`object.__new__`.
+
+    """
+    # When mixed via _TopologyAttrContainer._mix this class has MRO priority.
+    #  Setting __new__ like this will avoid having to go through the
+    #  cache lookup if the class is reused (as in ag._derived_class(...)).
+    __new__ = object.__new__
+
+
+def _pbc_to_wrap(function):
+    """Raises deprecation warning if 'pbc' is set and assigns value to 'wrap'"""
+    @functools.wraps(function)
+    def wrapped(group, *args, **kwargs):
+        if kwargs.get('pbc', None) is not None:
+            warnings.warn("The 'pbc' kwarg has been deprecated and will be "
+                          "removed in version 3.0., "
+                          "please use 'wrap' instead",
+                          DeprecationWarning)
+            kwargs['wrap'] = kwargs.pop('pbc')
+
+        return function(group, *args, **kwargs)
+    return wrapped
+
+
+def check_wrap_and_unwrap(function):
+    """Raises ValueError when both 'wrap' and 'unwrap' are set to True"""
+    @functools.wraps(function)
+    def wrapped(group, *args, **kwargs):
+        if kwargs.get('wrap') and kwargs.get('unwrap'):
+            raise ValueError("both 'wrap' and 'unwrap' can not be set to true")
+        return function(group, *args, **kwargs)
+    return wrapped
+
+
+def _only_same_level(function):
+    @functools.wraps(function)
+    def wrapped(self, other):
+        if not isinstance(other, (ComponentBase, GroupBase)):  # sanity check
+            raise TypeError("Can't perform '{}' between objects:"
+                            " '{}' and '{}'".format(
+                                function.__name__,
+                                type(self).__name__,
+                                type(other).__name__))
+        if self.level != other.level:
+            raise TypeError("Can't perform '{}' on different level objects"
+                            "".format(function.__name__))
+        if self.universe is not other.universe:
+            raise ValueError(
+                "Can't operate on objects from different Universes")
+        return function(self, other)
+    return wrapped
+
+
+class GroupBase(_MutableBase):
+    r"""Base class from which a :class:`<~MDAnalysis.core.universe.Universe`\ 's
+    Group class is built.
+
+    Instances of :class:`GroupBase` provide the following operations that
+    conserve element repetitions and order:
+
+    +-------------------------------+------------+----------------------------+
+    | Operation                     | Equivalent | Result                     |
+    +===============================+============+============================+
+    | ``len(s)``                    |            | number of elements (atoms, |
+    |                               |            | residues or segment) in    |
+    |                               |            | the group                  |
+    +-------------------------------+------------+----------------------------+
+    | ``s == t``                    |            | test if ``s`` and ``t``    |
+    |                               |            | contain the same elements  |
+    |                               |            | in the same order          |
+    +-------------------------------+------------+----------------------------+
+    | ``x in s``                    |            | test if component ``x`` is |
+    |                               |            | part of group ``s``        |
+    +-------------------------------+------------+----------------------------+
+    | ``s.concatenate(t)``          | ``s + t``  | new Group with elements    |
+    |                               |            | from ``s`` and from ``t``  |
+    +-------------------------------+------------+----------------------------+
+    | ``s.subtract(t)``             |            | new Group with elements    |
+    |                               |            | from ``s`` that are not    |
+    |                               |            | in ``t``                   |
+    +-------------------------------+------------+----------------------------+
+
+    The following operations treat the Group as set. Any result will have any
+    duplicate entries removed and the Group will be sorted.
+
+    +-------------------------------+------------+----------------------------+
+    | Operation                     | Equivalent | Result                     |
+    +===============================+============+============================+
+    | ``s.isdisjoint(t)``           |            | ``True`` if ``s`` and      |
+    |                               |            | ``t`` do not share         |
+    |                               |            | elements                   |
+    +-------------------------------+------------+----------------------------+
+    | ``s.issubset(t)``             |            | test if all elements of    |
+    |                               |            | ``s`` are part of ``t``    |
+    +-------------------------------+------------+----------------------------+
+    | ``s.is_strict_subset(t)``     |            | test if all elements of    |
+    |                               |            | ``s`` are part of ``t``,   |
+    |                               |            | and ``s != t``             |
+    +-------------------------------+------------+----------------------------+
+    | ``s.issuperset(t)``           |            | test if all elements of    |
+    |                               |            | ``t`` are part of ``s``    |
+    +-------------------------------+------------+----------------------------+
+    | ``s.is_strict_superset(t)``   |            | test if all elements of    |
+    |                               |            | ``t`` are part of ``s``,   |
+    |                               |            | and ``s != t``             |
+    +-------------------------------+------------+----------------------------+
+    | ``s.union(t)``                | ``s | t``  | new Group with elements    |
+    |                               |            | from both ``s`` and ``t``  |
+    +-------------------------------+------------+----------------------------+
+    | ``s.intersection(t)``         | ``s & t``  | new Group with elements    |
+    |                               |            | common to ``s`` and ``t``  |
+    +-------------------------------+------------+----------------------------+
+    | ``s.difference(t)``           | ``s - t``  | new Group with elements of |
+    |                               |            | ``s`` that are not in ``t``|
+    +-------------------------------+------------+----------------------------+
+    | ``s.symmetric_difference(t)`` | ``s ^ t``  | new Group with elements    |
+    |                               |            | that are part of ``s`` or  |
+    |                               |            | ``t`` but not both         |
+    +-------------------------------+------------+----------------------------+
+    """
+
+    def __init__(self, *args):
+        try:
+            if len(args) == 1:
+                # list of atoms/res/segs, old init method
+                ix = [at.ix for at in args[0]]
+                u = args[0][0].universe
+            else:
+                # current/new init method
+                ix, u = args
+        except (AttributeError,  # couldn't find ix/universe
+                TypeError):  # couldn't iterate the object we got
+            errmsg = (
+                "Can only initialise a Group from an iterable of Atom/Residue/"
+                "Segment objects eg: AtomGroup([Atom1, Atom2, Atom3]) "
+                "or an iterable of indices and a Universe reference "
+                "eg: AtomGroup([0, 5, 7, 8], u).")
+            raise TypeError(errmsg) from None
+
+        # indices for the objects I hold
+        self._ix = np.asarray(ix, dtype=np.intp)
+        self._u = u
+        self._cache = dict()
+
+    def __hash__(self):
+        return hash((self._u, self.__class__, tuple(self.ix.tolist())))
+
+    def __len__(self):
+        return len(self.ix)
+
+    def __getitem__(self, item):
+        # supports
+        # - integer access
+        # - boolean slicing
+        # - fancy indexing
+        # because our _ix attribute is a numpy array
+        # it can be sliced by all of these already,
+        # so just return ourselves sliced by the item
+        if item is None:
+            raise TypeError('None cannot be used to index a group.')
+        elif isinstance(item, numbers.Integral):
+            return self.level.singular(self.ix[item], self.universe)
+        else:
+            if isinstance(item, list) and item:  # check for empty list
+                # hack to make lists into numpy arrays
+                # important for boolean slicing
+                item = np.array(item)
+            # We specify _derived_class instead of self.__class__ to allow
+            # subclasses, such as UpdatingAtomGroup, to control the class
+            # resulting from slicing.
+            return self._derived_class(self.ix[item], self.universe)
+
+    def __getattr__(self, attr):
+        selfcls = type(self).__name__
+        if attr in _TOPOLOGY_ATTRS:
+            cls = _TOPOLOGY_ATTRS[attr]
+            if attr == cls.singular and attr != cls.attrname:
+                err = ('{selfcls} has no attribute {attr}. '
+                       'Do you mean {plural}?')
+                raise AttributeError(err.format(selfcls=selfcls, attr=attr,
+                                                plural=cls.attrname))
+            else:
+                err = 'This Universe does not contain {singular} information'
+                raise NoDataError(err.format(singular=cls.singular))
+        else:
+            return super(GroupBase, self).__getattr__(attr)
+
+    def __repr__(self):
+        name = self.level.name
+        return ("<{}Group with {} {}{}>"
+                "".format(name.capitalize(), len(self), name,
+                          "s"[len(self) == 1:]))  # Shorthand for a conditional plural 's'.
+
+    def __str__(self):
+        name = self.level.name
+        if len(self) <= 10:
+            return '<{}Group {}>'.format(name.capitalize(), repr(list(self)))
+        else:
+            return '<{}Group {}, ..., {}>'.format(name.capitalize(),
+                                                  repr(list(self)[:3])[:-1],
+                                                  repr(list(self)[-3:])[1:])
+
+    def __add__(self, other):
+        """Concatenate the Group with another Group or Component of the same
+        level.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with elements of `self` and `other` concatenated
+
+        """
+        return self.concatenate(other)
+
+    def __radd__(self, other):
+        """Using built-in sum requires supporting 0 + self. If other is
+        anything other 0, an exception will be raised.
+
+        Parameters
+        ----------
+        other : int
+            Other should be 0, or else an exception will be raised.
+
+        Returns
+        -------
+        self
+            Group with elements of `self` reproduced
+
+        """
+        if other == 0:
+            return self._derived_class(self.ix, self.universe)
+        else:
+            raise TypeError("unsupported operand type(s) for +:"
+                            " '{}' and '{}'".format(type(self).__name__,
+                                                    type(other).__name__))
+
+    def __sub__(self, other):
+        return self.difference(other)
+
+    @_only_same_level
+    def __eq__(self, other):
+        """Test group equality.
+
+        Two groups are equal if they contain the same indices in
+        the same order. Groups that are not at the same level or that belong
+        to different :class:`Universes<MDAnalysis.core.universe.Universe>`
+        cannot be compared.
+        """
+        o_ix = other.ix
+        return np.array_equal(self.ix, o_ix)
+
+    def __contains__(self, other):
+        if not other.level == self.level:
+            # maybe raise TypeError instead?
+            # eq method raises Error for wrong comparisons
+            return False
+        return other.ix in self.ix
+
+    def __or__(self, other):
+        return self.union(other)
+
+    def __and__(self, other):
+        return self.intersection(other)
+
+    def __xor__(self, other):
+        return self.symmetric_difference(other)
+
+    @property
+    def universe(self):
+        """The underlying :class:`~MDAnalysis.core.universe.Universe` the group
+        belongs to.
+        """
+        return self._u
+
+    @property
+    def ix(self):
+        """Unique indices of the components in the Group.
+
+        - If this Group is an :class:`AtomGroup`, these are the
+          indices of the :class:`Atom` instances.
+        - If it is a :class:`ResidueGroup`, these are the indices of
+          the :class:`Residue` instances.
+        - If it is a :class:`SegmentGroup`, these are the indices of
+          the :class:`Segment` instances.
+
+        """
+        return self._ix
+
+    @property
+    def ix_array(self):
+        """Unique indices of the components in the Group.
+
+        For a Group, :attr:`ix_array` is the same as :attr:`ix`. This method
+        gives a consistent API between components and groups.
+
+        See Also
+        --------
+        :attr:`ix`
+        """
+        return self._ix
+
+    @property
+    def dimensions(self):
+        """Obtain a copy of the dimensions of the currently loaded Timestep"""
+        dims = self.universe.trajectory.ts.dimensions
+        if dims is None:
+            return dims
+        else:
+            return dims.copy()
+
+    @dimensions.setter
+    def dimensions(self, dimensions):
+        self.universe.trajectory.ts.dimensions = dimensions
+
+    @property
+    @cached('sorted_unique')
+    def sorted_unique(self):
+        return self.asunique(sorted=True)
+
+    @property
+    @cached('unsorted_unique')
+    def unsorted_unique(self):
+        return self.asunique(sorted=False)
+
+    @property
+    @cached('issorted')
+    def issorted(self):
+        return int_array_is_sorted(self.ix)
+
+    @property
+    @cached('isunique')
+    def isunique(self):
+        """Boolean indicating whether all components of the group are unique,
+        i.e., the group contains no duplicates.
+
+        Examples
+        --------
+
+           >>> ag = u.atoms[[2, 1, 2, 2, 1, 0]]
+           >>> ag
+           <AtomGroup with 6 atoms>
+           >>> ag.isunique
+           False
+           >>> ag2 = ag.unique
+           >>> ag2
+           <AtomGroup with 3 atoms>
+           >>> ag2.isunique
+           True
+
+        See Also
+        --------
+        asunique
+
+
+        .. versionadded:: 0.19.0
+        """
+        if len(self) <= 1:
+            return True
+        return unique_int_1d(self.ix).shape[0] == self.ix.shape[0]
+
+    def _asunique(self, group, sorted=False, set_mask=False):
+        try:
+            name = 'sorted_unique' if sorted else 'unsorted_unique'
+            return self._cache[name]
+        except KeyError:
+            pass
+
+        if self.isunique:
+            if not sorted:
+                self._cache['unsorted_unique'] = self
+                return self
+            if self.issorted:
+                self._cache['unsorted_unique'] = self
+                self._cache['sorted_unique'] = self
+                return self
+
+        if sorted:
+            if set_mask:
+                unique_ix, restore_mask = np.unique(
+                    self.ix, return_inverse=True)
+                self._unique_restore_mask = restore_mask
+            else:
+                unique_ix = unique_int_1d(self.ix)
+
+            _unique = group[unique_ix]
+            _unique._cache['isunique'] = True
+            _unique._cache['issorted'] = True
+            _unique._cache['sorted_unique'] = _unique
+            _unique._cache['unsorted_unique'] = _unique
+            self._cache['sorted_unique'] = _unique
+            return _unique
+
+        indices = unique_int_1d_unsorted(self.ix)
+        if set_mask:
+            mask = np.zeros_like(self.ix)
+            for i, x in enumerate(indices):
+                values = np.where(self.ix == x)[0]
+                mask[values] = i
+            self._unique_restore_mask = mask
+
+        issorted = int_array_is_sorted(indices)
+        if issorted and 'sorted_unique' in self._cache:
+            self._cache['unsorted_unique'] = self.sorted_unique
+            return self.sorted_unique
+
+        _unique = group[indices]
+        _unique._cache['isunique'] = True
+        _unique._cache['issorted'] = issorted
+        _unique._cache['unsorted_unique'] = _unique
+        self._cache['unsorted_unique'] = _unique
+        if issorted:
+            self._cache['sorted_unique'] = _unique
+            _unique._cache['sorted_unique'] = _unique
+        return _unique
+
+    def _get_compound_indices(self, compound):
+        if compound == 'residues':
+            compound_indices = self.atoms.resindices
+        elif compound == 'segments':
+            compound_indices = self.atoms.segindices
+        elif compound == 'molecules':
+            try:
+                compound_indices = self.atoms.molnums
+            except AttributeError:
+                errmsg = ("Cannot use compound='molecules': No molecule "
+                          "information in topology.")
+                raise NoDataError(errmsg) from None
+        elif compound == 'fragments':
+            try:
+                compound_indices = self.atoms.fragindices
+            except NoDataError:
+                errmsg = ("Cannot use compound='fragments': No bond "
+                          "information in topology.")
+                raise NoDataError(errmsg) from None
+        elif compound == 'group':
+            raise ValueError("This method does not accept compound='group'")
+        else:
+            raise ValueError("Unrecognized compound definition: {}\nPlease use"
+                             " one of 'residues', 'segments', 'molecules',"
+                             " or 'fragments'.".format(compound))
+        return compound_indices
+
+    def _split_by_compound_indices(self, compound, stable_sort=False):
+        """Splits a group's compounds into groups of equal compound size.
+
+        Grouping equal sizes together facilitates subsequent vectorization.
+
+        For a 10-atom molecule with atoms organized into compounds C0 through
+        C2::
+
+           at.id:  0  1  2  3  4  5  6  7  8  9
+        compound: C0 C0 C0 C0 C1 C1 C2 C2 C2 C2
+
+        this function will yield an `atom_masks` list with two submasks: one
+        for compounds of size 2 and one for compounds of size 4:
+        [array([[4, 5]]),
+         array([[1, 2, 3, 0],
+                [8, 7, 6, 9]])]
+
+        (Note that atom order within component submasks may be lost unless a
+        `stable_sort` is requested)
+        These submasks can be used directly to fancy-index arrays of the same
+        length as self (including :class:`AtomGroups<AtomGroup>`).
+
+        This function also returns `compound_masks`, the boolean mapping of
+        each of the `atom_masks` submask into the original compound order::
+        [array([False,  True, False]),
+         array([ True, False,  True])]
+
+        Parameters
+        ----------
+        compound : {'segments', 'residues', 'molecules', 'fragments'}
+            The compound type to base splitting on.
+        stable_sort : bool, optional
+            Whether to ensure that, when needed, sorting does not affect an
+            atom's order within a compound (at a cost to performance). E.g.,
+            for an unwrap operation it is important that the first atom of a
+            compound is always the same, whereas a center-of-geometry
+            computation wouldn't care.
+
+        Returns
+        -------
+        atom_masks : list of numpy.ndarray
+            Integer masks for fancy-indexing atoms/weights lists; masks are
+            already shaped as ``(number of compounds of a given size,
+            compound_size)``.
+        compound_masks : list of numpy.ndarray
+            1D boolean masks for fancy-indexing lists of compounds. Translate
+            the distribution of the compounds in each mask of `atom_masks` into
+            their original order.
+        n_compounds : int
+            The number of individual compounds.
+        """
+        # Caching would help here, especially when repeating the operation
+        # over different frames, since these masks are coordinate-independent.
+        # However, cache must be invalidated whenever new compound indices are
+        # modified, which is not yet implemented.
+        # Also, should we include here the grouping for 'group', which is
+        # essentially a non-split?
+
+        compound_indices = self._get_compound_indices(compound)
+        compound_sizes = np.bincount(compound_indices)
+        size_per_atom = compound_sizes[compound_indices]
+        compound_sizes = compound_sizes[compound_sizes != 0]
+        unique_compound_sizes = unique_int_1d(compound_sizes)
+
+        # Are we already sorted? argsorting and fancy-indexing can be expensive
+        # so we do a quick pre-check.
+        needs_sorting = np.any(np.diff(compound_indices) < 0)
+        if needs_sorting:
+            # stable sort ensures reproducibility, especially concerning who
+            # gets to be a compound's atom[0] and be a reference for unwrap.
+            if stable_sort:
+                sort_indices = np.argsort(compound_indices, kind='stable')
+            else:
+                # Quicksort
+                sort_indices = np.argsort(compound_indices)
+            # We must sort size_per_atom accordingly (Issue #3352).
+            size_per_atom = size_per_atom[sort_indices]
+
+        compound_masks = []
+        atom_masks = []
+        for compound_size in unique_compound_sizes:
+            compound_masks.append(compound_sizes == compound_size)
+            if needs_sorting:
+                atom_masks.append(sort_indices[size_per_atom == compound_size]
+                                   .reshape(-1, compound_size))
+            else:
+                atom_masks.append(np.where(size_per_atom == compound_size)[0]
+                                   .reshape(-1, compound_size))
+
+        return atom_masks, compound_masks, len(compound_sizes)
+
+    @warn_if_not_unique
+    @_pbc_to_wrap
+    @check_wrap_and_unwrap
+    def center(self, weights, wrap=False, unwrap=False, compound='group'):
+        """Weighted center of (compounds of) the group
+
+        Computes the weighted center of :class:`Atoms<Atom>` in the group.
+        Weighted centers per :class:`Residue`, :class:`Segment`, molecule, or
+        fragment can be obtained by setting the `compound` parameter
+        accordingly. If the weights of a compound sum up to zero, the
+        coordinates of that compound's weighted center will be ``nan`` (not a
+        number).
+
+        Parameters
+        ----------
+        weights : array_like or None
+            Weights to be used. Setting `weights=None` is equivalent to passing
+            identical weights for all atoms of the group.
+        wrap : bool, optional
+            If ``True`` and `compound` is ``'group'``, move all atoms to the
+            primary unit cell before calculation.
+            If ``True`` and `compound` is not ``'group'`` the center of each
+            compound will be calculated without moving any
+            :class:`Atoms<Atom>` to keep the compounds intact. Instead, the
+            resulting position vectors will be moved to the primary unit cell
+            after calculation. Default [``False``].
+        unwrap : bool, optional
+            If ``True``, compounds will be unwrapped before computing their
+             centers.
+        compound : {'group', 'segments', 'residues', 'molecules', 'fragments'}, optional
+            If ``'group'``, the weighted center of all atoms in the group will
+            be returned as a single position vector. Else, the weighted centers
+            of each :class:`Segment`, :class:`Residue`, molecule, or fragment
+            will be returned as an array of position vectors, i.e. a 2d array.
+            Note that, in any case, *only* the positions of :class:`Atoms<Atom>`
+            *belonging to the group* will be taken into account.
+
+        Returns
+        -------
+        center : numpy.ndarray
+            Position vector(s) of the weighted center(s) of the group.
+            If `compound` was set to ``'group'``, the output will be a single
+            position vector.
+            If `compound` was set to ``'segments'``, ``'residues'``,
+            ``'molecules'``, or ``'fragments'``, the output will be a 2d array
+            of shape ``(n, 3)`` where ``n`` is the number of compounds.
+
+        Raises
+        ------
+        ValueError
+            If `compound` is not one of ``'group'``, ``'segments'``,
+            ``'residues'``, ``'molecules'``, or ``'fragments'``.
+        ValueError
+            If both 'wrap' and 'unwrap' set to true.
+        ~MDAnalysis.exceptions.NoDataError
+            If `compound` is ``'molecule'`` but the topology doesn't
+            contain molecule information (molnums) or if `compound` is
+            ``'fragments'`` but the topology doesn't contain bonds.
+
+        Examples
+        --------
+
+        To find the center of charge of a given :class:`AtomGroup`::
+
+            >>> sel = u.select_atoms('prop mass > 4.0')
+            >>> sel.center(sel.charges)
+
+        To find the centers of mass per residue of all CA :class:`Atoms<Atom>`::
+
+            >>> sel = u.select_atoms('name CA')
+            >>> sel.center(sel.masses, compound='residues')
+
+
+        .. versionchanged:: 0.19.0 Added `compound` parameter
+        .. versionchanged:: 0.20.0 Added ``'molecules'`` and ``'fragments'``
+            compounds
+        .. versionchanged:: 0.20.0 Added `unwrap` parameter
+        .. versionchanged:: 1.0.0 Removed flags affecting default behaviour
+        .. versionchanged::
+           2.1.0 Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but
+           is deprecated and will be removed in version 3.0.
+        """
+        atoms = self.atoms
+
+        # enforce calculations in double precision:
+        dtype = np.float64
+
+        comp = compound.lower()
+        if comp == 'group':
+            if wrap:
+                coords = atoms.pack_into_box(inplace=False)
+            elif unwrap:
+                coords = atoms.unwrap(
+                    compound=comp, reference=None, inplace=False)
+            else:
+                coords = atoms.positions
+            # If there's no atom, return its (empty) coordinates unchanged.
+            if len(atoms) == 0:
+                return coords
+            if weights is None:
+                # promote coords to dtype if required:
+                coords = coords.astype(dtype, copy=False)
+                return coords.mean(axis=0)
+            # promote weights to dtype if required:
+            weights = weights.astype(dtype, copy=False)
+            return np.einsum('ij,ij->j',coords,weights[:, None]) / weights.sum()
+
+        # When compound split caching gets implemented it will be clever to
+        # preempt at this point whether or not stable sorting will be needed
+        # later for unwrap (so that we don't split now with non-stable sort,
+        # only to have to re-split with stable sort if unwrap is requested).
+        (atom_masks,
+         compound_masks,
+         n_compounds) = self._split_by_compound_indices(comp)
+
+        # Unwrap Atoms
+        if unwrap:
+            coords = atoms.unwrap(compound=comp, reference=None, inplace=False)
+        else:
+            coords = atoms.positions
+        if weights is None:
+            coords = coords.astype(dtype, copy=False)
+        else:
+            weights = weights.astype(dtype, copy=False)
+
+        # Allocate output array:
+        centers = np.empty((n_compounds, 3), dtype=dtype)
+        # Compute centers per compound for each compound size:
+        for compound_mask, atom_mask in zip(compound_masks, atom_masks):
+            _coords = coords[atom_mask]
+            if weights is None:
+                _centers = _coords.mean(axis=1)
+            else:
+                _weights = weights[atom_mask]
+                _centers = np.einsum('ijk,ijk->ik',_coords,_weights[:, :, None])
+                _centers /= _weights.sum(axis=1)[:, None]
+            centers[compound_mask] = _centers
+        if wrap:
+            centers = distances.apply_PBC(centers, atoms.dimensions)
+        return centers
+
+    @warn_if_not_unique
+    @_pbc_to_wrap
+    @check_wrap_and_unwrap
+    def center_of_geometry(self, wrap=False, unwrap=False, compound='group'):
+        r"""Center of geometry of (compounds of) the group
+
+        .. math::
+            \boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}
+
+        where :math:`\boldsymbol r_i` of :class:`Atoms<Atom>` :math:`i`.
+        Centers of geometry per :class:`Residue` or per :class:`Segment` can
+        be obtained by setting the `compound` parameter accordingly.
+
+        Parameters
+        ----------
+        wrap : bool, optional
+            If ``True`` and `compound` is ``'group'``, move all atoms to the
+            primary unit cell before calculation. If ``True`` and `compound` is
+            ``'segments'`` or ``'residues'``, the center of each compound will
+            be calculated without moving any :class:`Atoms<Atom>` to keep the
+            compounds intact. Instead, the resulting position vectors will be
+            moved to the primary unit cell after calculation. Default False.
+        unwrap : bool, optional
+            If ``True``, compounds will be unwrapped before computing their
+            centers.
+        compound : {'group', 'segments', 'residues', 'molecules', 'fragments'}, optional
+            If ``'group'``, the center of geometry of all :class:`Atoms<Atom>`
+            in the group will be returned as a single position vector. Else,
+            the centers of geometry of each :class:`Segment` or
+            :class:`Residue` will be returned as an array of position vectors,
+            i.e. a 2d array. Note that, in any case, *only* the positions of
+            :class:`Atoms<Atom>` *belonging to the group* will be taken into
+            account.
+
+        Returns
+        -------
+        center : numpy.ndarray
+            Position vector(s) of the geometric center(s) of the group.
+            If `compound` was set to ``'group'``, the output will be a single
+            position vector.
+            If `compound` was set to ``'segments'`` or ``'residues'``, the
+            output will be a 2d array of shape ``(n, 3)`` where ``n`` is the
+            number of compounds.
+
+
+        .. versionchanged:: 0.8 Added `pbc` keyword
+        .. versionchanged:: 0.19.0 Added `compound` parameter
+        .. versionchanged:: 0.20.0 Added ``'molecules'`` and ``'fragments'``
+            compounds
+        .. versionchanged:: 0.20.0 Added `unwrap` parameter
+        .. versionchanged:: 1.0.0 Removed flags affecting default behaviour
+        .. versionchanged::
+           2.1.0 Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but
+           is deprecated and will be removed in version 3.0.
+        """
+        return self.center(None, wrap=wrap, compound=compound, unwrap=unwrap)
+
+    centroid = center_of_geometry
+
+    @warn_if_not_unique
+    def accumulate(self, attribute, function=np.sum, compound='group'):
+        r"""Accumulates the attribute associated with (compounds of) the group.
+
+        Accumulates the attribute of :class:`Atoms<Atom>` in the group.
+        The accumulation per :class:`Residue`, :class:`Segment`, molecule,
+        or fragment can be obtained by setting the `compound` parameter
+        accordingly. By default, the method sums up all attributes per compound,
+        but any function that takes an array and returns an acuumulation over a
+        given axis can be used. For multi-dimensional input arrays, the
+        accumulation is performed along the first axis.
+
+        Parameters
+        ----------
+        attribute : str or array_like
+            Attribute or array of values to accumulate.
+            If a :class:`numpy.ndarray` (or compatible) is provided, its first
+            dimension must have the same length as the total number of atoms in
+            the group.
+        function : callable, optional
+            The function performing the accumulation. It must take the array of
+            attribute values to accumulate as its only positional argument and
+            accept an (optional) keyword argument ``axis`` allowing to specify
+            the axis along which the accumulation is performed.
+        compound : {'group', 'segments', 'residues', 'molecules', 'fragments'},\
+                   optional
+            If ``'group'``, the accumulation of all attributes associated with
+            atoms in the group will be returned as a single value. Otherwise,
+            the accumulation of the attributes per :class:`Segment`,
+            :class:`Residue`, molecule, or fragment will be returned as a 1d
+            array. Note that, in any case, *only* the :class:`Atoms<Atom>`
+            *belonging to the group* will be taken into account.
+
+        Returns
+        -------
+        float or numpy.ndarray
+            Acuumulation of the `attribute`.
+            If `compound` is set to ``'group'``, the first dimension of the
+            `attribute` array will be contracted to a single value.
+            If `compound` is set to ``'segments'``, ``'residues'``,
+            ``'molecules'``, or ``'fragments'``, the length of the first
+            dimension will correspond to the number of compounds. In all cases,
+            the other dimensions of the returned array will be of the original
+            shape (without the first dimension).
+
+        Raises
+        ------
+        ValueError
+            If the length of a provided `attribute` array does not correspond to
+            the number of atoms in the group.
+        ValueError
+            If `compound` is not one of ``'group'``, ``'segments'``,
+            ``'residues'``, ``'molecules'``, or ``'fragments'``.
+        ~MDAnalysis.exceptions.NoDataError
+            If `compound` is ``'molecule'`` but the topology doesn't
+            contain molecule information (molnums), or if `compound` is
+            ``'fragments'`` but the topology doesn't contain bonds.
+
+        Examples
+        --------
+
+        To find the total charge of a given :class:`AtomGroup`::
+
+            >>> sel = u.select_atoms('prop mass > 4.0')
+            >>> sel.accumulate('charges')
+
+        To find the total mass per residue of all CA :class:`Atoms<Atom>`::
+
+            >>> sel = u.select_atoms('name CA')
+            >>> sel.accumulate('masses', compound='residues')
+
+        To find the maximum atomic charge per fragment of a given
+        :class:`AtomGroup`::
+
+            >>> sel.accumulate('charges', compound="fragments", function=np.max)
+
+
+        .. versionadded:: 0.20.0
+        """
+
+        atoms = self.atoms
+
+        if isinstance(attribute, str):
+            attribute_values = getattr(atoms, attribute)
+        else:
+            attribute_values = np.asarray(attribute)
+            if len(attribute_values) != len(atoms):
+                raise ValueError("The input array length ({}) does not match "
+                                 "the number of atoms ({}) in the group."
+                                 "".format(len(attribute_values), len(atoms)))
+
+        comp = compound.lower()
+
+        if comp == 'group':
+            return function(attribute_values, axis=0)
+
+        (atom_masks,
+         compound_masks,
+         n_compounds) = self._split_by_compound_indices(comp)
+
+        higher_dims = list(attribute_values.shape[1:])
+
+        # Allocate output array:
+        # (what dtype should this be?)
+        accumulation = np.empty([n_compounds] + higher_dims)
+        # Apply the accumulation function per compound for each compound size:
+        for compound_mask, atom_mask in zip(compound_masks, atom_masks):
+            _elements = attribute_values[atom_mask]
+            _accumulation = function(_elements, axis=1)
+            accumulation[compound_mask] = _accumulation
+        return accumulation
+
+    @_pbc_to_wrap
+    def bbox(self, wrap=False):
+        """Return the bounding box of the selection.
+
+        The lengths A,B,C of the orthorhombic enclosing box are ::
+
+          L = AtomGroup.bbox()
+          A,B,C = L[1] - L[0]
+
+        Parameters
+        ----------
+        wrap : bool, optional
+            If ``True``, move all :class:`Atoms<Atom>` to the primary unit cell
+            before calculation. [``False``]
+
+        Returns
+        -------
+         corners : numpy.ndarray
+            2x3 array giving corners of bounding box as
+            ``[[xmin, ymin, zmin], [xmax, ymax, zmax]]``.
+
+
+        .. versionadded:: 0.7.2
+        .. versionchanged:: 0.8 Added *pbc* keyword
+        .. versionchanged:: 1.0.0 Removed flags affecting default behaviour
+        .. versionchanged::
+           2.1.0 Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but
+           is deprecated and will be removed in version 3.0.
+        """
+        # TODO: Add unwrap/compounds treatment
+        atomgroup = self.atoms
+
+        if wrap:
+            x = atomgroup.pack_into_box(inplace=False)
+        else:
+            x = atomgroup.positions
+
+        return np.array([x.min(axis=0), x.max(axis=0)])
+
+    @_pbc_to_wrap
+    def bsphere(self, wrap=False):
+        """Return the bounding sphere of the selection.
+
+        The sphere is calculated relative to the
+        :meth:`center of geometry<center_of_geometry>`.
+
+        Parameters
+        ----------
+        wrap : bool, optional
+            If ``True``, move all atoms to the primary unit cell before
+            calculation. [``False``]
+
+        Returns
+        -------
+        R : float
+            Radius of the bounding sphere.
+        center : numpy.ndarray
+            Coordinates of the sphere center as ``[xcen, ycen, zcen]``.
+
+
+        .. versionadded:: 0.7.3
+        .. versionchanged:: 0.8 Added *pbc* keyword
+        .. versionchanged::
+           2.1.0 Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but
+           is deprecated and will be removed in version 3.0.
+        """
+        atomgroup = self.atoms.unsorted_unique
+
+        if wrap:
+            x = atomgroup.pack_into_box(inplace=False)
+            centroid = atomgroup.center_of_geometry(wrap=True)
+        else:
+            x = atomgroup.positions
+            centroid = atomgroup.center_of_geometry(wrap=False)
+
+        R = np.sqrt(np.max(np.sum(np.square(x - centroid), axis=1)))
+
+        return R, centroid
+
+    def transform(self, M):
+        r"""Apply homogenous transformation matrix `M` to the coordinates.
+
+        :class:`Atom` coordinates are rotated and translated in-place.
+
+        Parameters
+        ----------
+        M : array_like
+            4x4 matrix with the rotation in ``R = M[:3, :3]`` and the
+            translation in ``t = M[:3, 3]``.
+
+        Returns
+        -------
+        self
+
+        See Also
+        --------
+        MDAnalysis.lib.transformations : module of all coordinate transforms
+
+        Notes
+        -----
+        The rotation :math:`\mathsf{R}` is about the origin and is applied
+        before the translation :math:`\mathbf{t}`:
+
+        .. math::
+
+           \mathbf{x}' = \mathsf{R}\mathbf{x} + \mathbf{t}
+
+        """
+        M = np.asarray(M)
+        R = M[:3, :3]
+        t = M[:3, 3]
+        return self.rotate(R, [0, 0, 0]).translate(t)
+
+    def translate(self, t):
+        r"""Apply translation vector `t` to the selection's coordinates.
+
+        :class:`Atom` coordinates are translated in-place.
+
+        Parameters
+        ----------
+        t : array_like
+            vector to translate coordinates with
+
+        Returns
+        -------
+        self
+
+        See Also
+        --------
+        MDAnalysis.lib.transformations : module of all coordinate transforms
+
+        Notes
+        -----
+        The method applies a translation to the :class:`AtomGroup`
+        from current coordinates :math:`\mathbf{x}` to new coordinates
+        :math:`\mathbf{x}'`:
+
+        .. math::
+
+            \mathbf{x}' = \mathbf{x} + \mathbf{t}
+
+        """
+        atomgroup = self.atoms.unsorted_unique
+        vector = np.asarray(t)
+        # changes the coordinates in place
+        atomgroup.universe.trajectory.ts.positions[atomgroup.indices] += vector
+        return self
+
+    def rotate(self, R, point=(0, 0, 0)):
+        r"""Apply a rotation matrix `R` to the selection's coordinates.
+        :math:`\mathsf{R}` is a 3x3 orthogonal matrix that transforms a vector
+        :math:`\mathbf{x} \rightarrow \mathbf{x}'`:
+
+        .. math::
+
+            \mathbf{x}' = \mathsf{R}\mathbf{x}
+
+        :class:`Atom` coordinates are rotated in-place.
+
+        Parameters
+        ----------
+        R : array_like
+            3x3 rotation matrix
+        point : array_like, optional
+            Center of rotation
+
+        Returns
+        -------
+        self
+
+        Notes
+        -----
+        By default, rotates about the origin ``point=(0, 0, 0)``. To rotate
+        a group ``g`` around its center of geometry, use
+        ``g.rotate(R, point=g.center_of_geometry())``.
+
+        See Also
+        --------
+        rotateby : rotate around given axis and angle
+        MDAnalysis.lib.transformations : module of all coordinate transforms
+
+        """
+        R = np.asarray(R)
+        point = np.asarray(point)
+
+        # changes the coordinates (in place)
+        atomgroup = self.atoms.unsorted_unique
+        require_translation = bool(np.count_nonzero(point))
+        if require_translation:
+            atomgroup.translate(-point)
+        x = atomgroup.universe.trajectory.ts.positions
+        idx = atomgroup.indices
+        x[idx] = np.dot(x[idx], R.T)
+        if require_translation:
+            atomgroup.translate(point)
+
+        return self
+
+    def rotateby(self, angle, axis, point=None):
+        r"""Apply a rotation to the selection's coordinates.
+
+        Parameters
+        ----------
+        angle : float
+            Rotation angle in degrees.
+        axis : array_like
+            Rotation axis vector.
+        point : array_like, optional
+            Center of rotation. If ``None`` then the center of geometry of this
+            group is used.
+
+        Returns
+        -------
+        self
+
+        Notes
+        -----
+        The transformation from current coordinates :math:`\mathbf{x}`
+        to new coordinates :math:`\mathbf{x}'` is
+
+        .. math::
+
+          \mathbf{x}' = \mathsf{R}\,(\mathbf{x}-\mathbf{p}) + \mathbf{p}
+
+        where :math:`\mathsf{R}` is the rotation by `angle` around the
+        `axis` going through `point` :math:`\mathbf{p}`.
+
+        See Also
+        --------
+        MDAnalysis.lib.transformations.rotation_matrix :
+            calculate :math:`\mathsf{R}`
+
+        """
+        alpha = np.radians(angle)
+        axis = np.asarray(axis)
+        if point is None:
+            point = self.center_of_geometry()
+        point = np.asarray(point)
+        M = transformations.rotation_matrix(alpha, axis, point=point)
+        return self.transform(M)
+
+    def pack_into_box(self, box=None, inplace=True):
+        r"""Shift all :class:`Atoms<Atom>` in this group to the primary unit
+        cell.
+
+        Parameters
+        ----------
+        box : array_like
+            Box dimensions, can be either orthogonal or triclinic information.
+            Cell dimensions must be in an identical to format to those returned
+            by :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`,
+            ``[lx, ly, lz, alpha, beta, gamma]``. If ``None``, uses these
+            timestep dimensions.
+        inplace : bool
+            ``True`` to change coordinates in place.
+
+        Returns
+        -------
+        coords : numpy.ndarray
+            Shifted atom coordinates.
+
+        Notes
+        -----
+        All atoms will be moved so that they lie between 0 and boxlength
+        :math:`L_i` in all dimensions, i.e. the lower left corner of the
+        simulation box is taken to be at (0,0,0):
+
+        .. math::
+
+           x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor
+
+        The default is to take unit cell information from the underlying
+        :class:`~MDAnalysis.coordinates.timestep.Timestep` instance. The optional
+        argument `box` can be used to provide alternative unit cell information
+        (in the MDAnalysis standard format
+        ``[Lx, Ly, Lz, alpha, beta, gamma]``).
+
+        Works with either orthogonal or triclinic box types.
+
+        .. note::
+           :meth:`pack_into_box` is identical to :meth:`wrap` with all default
+           keywords.
+
+        .. note::
+            :meth:`AtomGroup.pack_into_box` is currently faster than
+            :meth:`ResidueGroup.pack_into_box` or
+            :meth:`SegmentGroup.pack_into_box`.
+
+
+        .. versionadded:: 0.8
+        """
+        return self.wrap(box=box, inplace=inplace)
+
+    def wrap(self, compound="atoms", center="com", box=None, inplace=True):
+        r"""Shift the contents of this group back into the primary unit cell
+        according to periodic boundary conditions.
+
+        Specifying a `compound` will keep the :class:`Atoms<Atom>` in each
+        compound together during the process. If `compound` is different from
+        ``'atoms'``, each compound as a whole will be shifted so that its
+        `center` lies within the primary unit cell.
+
+        Parameters
+        ----------
+        compound : {'atoms', 'group', 'segments', 'residues', 'molecules', \
+                    'fragments'}, optional
+            Which type of compound to keep together during wrapping. Note that,
+            in any case, *only* the positions of :class:`Atoms<Atom>`
+            *belonging to the group* will be taken into account.
+        center : {'com', 'cog'}
+            How to define the center of a given group of atoms. If `compound` is
+            ``'atoms'``, this parameter is meaningless and therefore ignored.
+        box : array_like, optional
+            The unitcell dimensions of the system, which can be orthogonal or
+            triclinic and must be provided in the same format as returned by
+            :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`:
+            ``[lx, ly, lz, alpha, beta, gamma]``.
+            If ``None``, uses the
+            dimensions of the current time step.
+        inplace: bool, optional
+            If ``True``, coordinates will be changed in place.
+
+        Returns
+        -------
+        numpy.ndarray
+            Array of wrapped atom coordinates of dtype `np.float32` and shape
+            ``(len(self.atoms.n_atoms), 3)``
+
+        Raises
+        ------
+        ValueError
+            If `compound` is not one of ``'atoms'``, ``'group'``,
+            ``'segments'``, ``'residues'``, ``'molecules'``, or ``'fragments'``.
+        ~MDAnalysis.exceptions.NoDataError
+            If `compound` is ``'molecule'`` but the topology doesn't
+            contain molecule information (molnums) or if `compound` is
+            ``'fragments'`` but the topology doesn't contain bonds or if
+            `center` is ``'com'`` but the topology doesn't contain masses.
+
+        Notes
+        -----
+        All atoms of the group will be moved so that the centers of its
+        compounds lie within the primary periodic image. For orthorhombic unit
+        cells, the primary periodic image is defined as the half-open interval
+        :math:`[0,L_i)` between :math:`0` and boxlength :math:`L_i` in all
+        dimensions :math:`i\in\{x,y,z\}`, i.e., the origin of the of the
+        simulation box is taken to be at the origin :math:`(0,0,0)` of the
+        euclidian coordinate system. A compound center residing at position
+        :math:`x_i` in dimension :math:`i` will be shifted to :math:`x_i'`
+        according to
+
+        .. math::
+
+           x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\,.
+
+        When specifying a `compound`, the translation is calculated based on
+        each compound. The same translation is applied to all atoms
+        within this compound, meaning it will not be broken by the shift.
+        This might however mean that not all atoms of a compound will be
+        inside the unit cell after wrapping, but rather will be the center of
+        the compound.
+        Be aware of the fact that only atoms *belonging to the group* will be
+        taken into account!
+
+        `center` allows to define how the center of each group is computed.
+        This can be either ``'com'`` for center of mass, or ``'cog'`` for
+        center of geometry.
+
+
+        `box` allows a unit cell to be given for the transformation. If not
+        specified, the :attr:`~MDAnalysis.coordinates.timestep.Timestep.dimensions`
+        information from the current
+        :class:`~MDAnalysis.coordinates.timestep.Timestep` will be used.
+
+        .. note::
+            :meth:`AtomGroup.wrap` is currently faster than
+            :meth:`ResidueGroup.wrap` or :meth:`SegmentGroup.wrap`.
+
+        See Also
+        --------
+        :meth:`pack_into_box`
+        :meth:`unwrap`
+        :meth:`MDAnalysis.lib.distances.apply_PBC`
+
+
+        .. versionadded:: 0.9.2
+        .. versionchanged:: 0.20.0
+           The method only acts on atoms *belonging to the group* and returns
+           the wrapped positions as a :class:`numpy.ndarray`.
+           Added optional argument `inplace`.
+        """
+        # Try and auto detect box dimensions:
+        if box is None:
+            box = self.dimensions
+            if box is None:
+                raise ValueError("No dimensions information in Universe. "
+                                 " Either use the 'box' argument or"
+                                 " set the '.dimensions' attribute")
+        else:
+            box = np.asarray(box, dtype=np.float32)
+            if not np.all(box > 0.0) or box.shape != (6,):
+                raise ValueError("Invalid box: Box has invalid shape or not all "
+                                 "box dimensions are positive. You can specify a "
+                                 "valid box using the 'box' argument.")
+
+        # no matter what kind of group we have, we need to work on its (unique)
+        # atoms:
+        atoms = self.atoms
+        if not self.isunique:
+            _atoms = atoms.unsorted_unique
+            restore_mask = atoms._unique_restore_mask
+            atoms = _atoms
+
+        comp = compound.lower()
+        if comp not in ('atoms', 'group', 'segments', 'residues', 'molecules',
+                        'fragments'):
+            raise ValueError("Unrecognized compound definition '{}'. "
+                             "Please use one of 'atoms', 'group', 'segments', "
+                             "'residues', 'molecules', or 'fragments'."
+                             "".format(compound))
+
+        if len(atoms) == 0:
+            return np.zeros((0, 3), dtype=np.float32)
+
+        if comp == "atoms" or len(atoms) == 1:
+            positions = distances.apply_PBC(atoms.positions, box)
+        else:
+            ctr = center.lower()
+            if ctr == 'com':
+                # Don't use hasattr(self, 'masses') because that's incredibly
+                # slow for ResidueGroups or SegmentGroups
+                if not hasattr(self._u._topology, 'masses'):
+                    raise NoDataError("Cannot perform wrap with center='com', "
+                                      "this requires masses.")
+            elif ctr != 'cog':
+                raise ValueError("Unrecognized center definition '{}'. Please "
+                                 "use one of 'com' or 'cog'.".format(center))
+            positions = atoms.positions
+
+            # compute and apply required shift:
+            if ctr == 'com':
+                ctrpos = atoms.center_of_mass(wrap=False, compound=comp)
+                if np.any(np.isnan(ctrpos)):
+                    specifier = 'the' if comp == 'group' else 'one of the'
+                    raise ValueError("Cannot use compound='{0}' with "
+                                     "center='com' because {1} {0}\'s total "
+                                     "mass is zero.".format(comp, specifier))
+            else:  # ctr == 'cog'
+                ctrpos = atoms.center_of_geometry(wrap=False, compound=comp)
+            ctrpos = ctrpos.astype(np.float32, copy=False)
+            target = distances.apply_PBC(ctrpos, box)
+            shifts = target - ctrpos
+
+            if comp == 'group':
+                positions += shifts
+
+            else:
+                compound_indices = atoms._get_compound_indices(comp)
+
+                # apply the shifts:
+                unique_compound_indices = unique_int_1d(compound_indices)
+                shift_idx = 0
+                for i in unique_compound_indices:
+                    mask = np.where(compound_indices == i)
+                    positions[mask] += shifts[shift_idx]
+                    shift_idx += 1
+
+        if inplace:
+            atoms.positions = positions
+        if not self.isunique:
+            positions = positions[restore_mask]
+        return positions
+
+    def unwrap(self, compound='fragments', reference='com', inplace=True):
+        r"""Move atoms of this group so that bonds within the
+        group's compounds aren't split across periodic boundaries.
+
+        This function is most useful when atoms have been packed into the
+        primary unit cell, causing breaks mid-molecule, with the molecule then
+        appearing on either side of the unit cell. This is problematic for
+        operations such as calculating the center of mass of the molecule. ::
+
+           +-----------+       +-----------+
+           |           |       |           |
+           | 6       3 |       |         3 | 6
+           | !       ! |       |         ! | !
+           |-5-8   1-2-|  ==>  |       1-2-|-5-8
+           | !       ! |       |         ! | !
+           | 7       4 |       |         4 | 7
+           |           |       |           |
+           +-----------+       +-----------+
+
+        Parameters
+        ----------
+        compound : {'group', 'segments', 'residues', 'molecules', \
+                    'fragments'}, optional
+            Which type of compound to unwrap. Note that, in any case, all
+            atoms within each compound must be interconnected by bonds, i.e.,
+            compounds must correspond to (parts of) molecules.
+        reference : {'com', 'cog', None}, optional
+            If ``'com'`` (center of mass) or ``'cog'`` (center of geometry), the
+            unwrapped compounds will be shifted so that their individual
+            reference point lies within the primary unit cell.
+            If ``None``, no such shift is performed.
+        inplace : bool, optional
+            If ``True``, coordinates are modified in place.
+
+        Returns
+        -------
+        coords : numpy.ndarray
+            Unwrapped atom coordinate array of shape ``(n, 3)``.
+
+        Raises
+        ------
+        NoDataError
+            If `compound` is ``'molecules'`` but the underlying topology does
+            not contain molecule information, or if `reference` is ``'com'``
+            but the topology does not contain masses.
+        ValueError
+            If `reference` is not one of ``'com'``, ``'cog'``, or ``None``, or
+            if `reference` is ``'com'`` and the total mass of any `compound` is
+            zero.
+
+        Note
+        ----
+        Be aware of the fact that only atoms *belonging to the group* will
+        be unwrapped! If you want entire molecules to be unwrapped, make sure
+        that all atoms of these molecules are part of the group.
+        An AtomGroup containing all atoms of all fragments in the group ``ag``
+        can be created with::
+
+          all_frag_atoms = sum(ag.fragments)
+
+
+        See Also
+        --------
+        :func:`~MDAnalysis.lib.mdamath.make_whole`,
+        :meth:`wrap`,
+        :meth:`pack_into_box`,
+        :func:`~MDanalysis.lib.distances.apply_PBC`
+
+
+        .. versionadded:: 0.20.0
+        """
+        atoms = self.atoms
+        # bail out early if no bonds in topology:
+        if not hasattr(atoms, 'bonds'):
+            raise NoDataError("{}.unwrap() not available; this requires Bonds"
+                              "".format(self.__class__.__name__))
+        unique_atoms = atoms.unsorted_unique
+
+        # Parameter sanity checking
+        if reference is not None:
+            try:
+                reference = reference.lower()
+                if reference not in ('cog', 'com'):
+                    raise ValueError
+            except (AttributeError, ValueError):
+                raise ValueError("Unrecognized reference '{}'. Please use one "
+                                 "of 'com', 'cog', or None.".format(reference))
+        # Don't use hasattr(self, 'masses') because that's incredibly slow for
+        # ResidueGroups or SegmentGroups
+        if reference == 'com' and not hasattr(unique_atoms, 'masses'):
+            raise NoDataError("Cannot perform unwrap with reference='com', "
+                              "this requires masses.")
+
+        # Sanity checking of the compound parameter is done downstream in
+        # _split_by_compound_indices
+        comp = compound.lower()
+
+        # The 'group' needs no splitting:
+        #  There is a lot of code duplication with the multi-compound split
+        #  case below. Both code paths could be merged, but 'group' can be done
+        #  unidimensionally whereas the general multi-compound case involves
+        #  more indexing and is therefore slower. Leaving separate for now.
+        if comp == 'group':
+            positions = mdamath.make_whole(unique_atoms, inplace=False)
+            # Apply reference shift if required:
+            if reference is not None and len(positions) > 0:
+                if reference == 'com':
+                    masses = unique_atoms.masses
+                    total_mass = masses.sum()
+                    if np.isclose(total_mass, 0.0):
+                        raise ValueError("Cannot perform unwrap with "
+                                         "reference='com' because the total "
+                                         "mass of the group is zero.")
+                    refpos = np.einsum('ij,ij->j',positions,masses[:, None])
+                    refpos /= total_mass
+                else:  # reference == 'cog'
+                    refpos = positions.mean(axis=0)
+                refpos = refpos.astype(np.float32, copy=False)
+                target = distances.apply_PBC(refpos, self.dimensions)
+                positions += target - refpos
+
+        else:  # We need to split the group into compounds
+            # When unwrapping and not shifting with a cog/com reference we
+            # need to make sure that the first atom of each compound is stable
+            # regarding sorting.
+            atom_masks = unique_atoms._split_by_compound_indices(comp,
+                                              stable_sort=reference is None)[0]
+            positions = unique_atoms.positions
+            for atom_mask in atom_masks:
+                for mask in atom_mask:
+                    positions[mask] = mdamath.make_whole(unique_atoms[mask],
+                                                         inplace=False)
+                # Apply reference shift if required:
+                if reference is not None:
+                    if reference == 'com':
+                        masses = unique_atoms.masses[atom_mask]
+                        total_mass = masses.sum(axis=1)
+                        if np.any(np.isclose(total_mass, 0.0)):
+                            raise ValueError("Cannot perform unwrap with "
+                                             "reference='com' because the "
+                                             "total mass of at least one of "
+                                             "the {} is zero.".format(comp))
+                        refpos = np.einsum('ijk,ijk->ik',positions[atom_mask],
+                                           masses[:, :, None])
+                        refpos /= total_mass[:, None]
+                    else:  # reference == 'cog'
+                        refpos = positions[atom_mask].mean(axis=1)
+                    refpos = refpos.astype(np.float32, copy=False)
+                    target = distances.apply_PBC(refpos, self.dimensions)
+                    positions[atom_mask] += (target[:, None, :]
+                                             - refpos[:, None, :])
+        if inplace:
+            unique_atoms.positions = positions
+        if not atoms.isunique:
+            positions = positions[atoms._unique_restore_mask]
+        return positions
+
+    def copy(self):
+        """Get another group identical to this one.
+
+
+        .. versionadded:: 0.19.0
+        """
+        group = self[:]
+        group._set_unique_caches_from(self)
+        return group
+
+    def _set_unique_caches_from(self, other):
+        # Try to fill the copied group's uniqueness caches:
+        try:
+            self._cache['isunique'] = other._cache['isunique']
+        except KeyError:
+            pass
+        else:
+            if self.isunique:
+                self._cache['unsorted_unique'] = self
+
+        try:
+            self._cache['issorted'] = other._cache['issorted']
+        except KeyError:
+            pass
+        else:
+            if self.issorted:
+                if self._cache.get('isunique'):
+                    self._cache['sorted_unique'] = self
+
+    def groupby(self, topattrs):
+        """Group together items in this group according to values of *topattr*
+
+        Parameters
+        ----------
+        topattrs: str or list
+           One or more topology attributes to group components by.
+           Single arguments are passed as a string. Multiple arguments
+           are passed as a list.
+
+        Returns
+        -------
+        dict
+            Unique values of the multiple combinations of topology attributes
+            as keys, Groups as values.
+
+        Example
+        -------
+        To group atoms with the same mass together:
+
+        >>> ag.groupby('masses')
+        {12.010999999999999: <AtomGroup with 462 atoms>,
+         14.007: <AtomGroup with 116 atoms>,
+         15.999000000000001: <AtomGroup with 134 atoms>}
+
+        To group atoms with the same residue name and mass together:
+
+          >>> ag.groupby(['resnames', 'masses'])
+          {('ALA', 1.008): <AtomGroup with 95 atoms>,
+           ('ALA', 12.011): <AtomGroup with 57 atoms>,
+           ('ALA', 14.007): <AtomGroup with 19 atoms>,
+           ('ALA', 15.999): <AtomGroup with 19 atoms>},
+           ('ARG', 1.008): <AtomGroup with 169 atoms>,
+           ...}
+
+          >>> ag.groupby(['resnames', 'masses'])('ALA', 15.999)
+           <AtomGroup with 19 atoms>
+
+
+        .. versionadded:: 0.16.0
+        .. versionchanged:: 0.18.0 The function accepts multiple attributes
+        """
+
+        res = dict()
+
+        if isinstance(topattrs, (str, bytes)):
+            attr = topattrs
+            if isinstance(topattrs, bytes):
+                attr = topattrs.decode('utf-8')
+            ta = getattr(self, attr)
+
+            return {i: self[ta == i] for i in set(ta)}
+
+        else:
+            attr = topattrs[0]
+            ta = getattr(self, attr)
+            for i in set(ta):
+                if len(topattrs) == 1:
+                    res[i] = self[ta == i]
+                else:
+                    res[i] = self[ta == i].groupby(topattrs[1:])
+
+            return util.flatten_dict(res)
+
+    @_only_same_level
+    def concatenate(self, other):
+        """Concatenate with another Group or Component of the same level.
+
+        Duplicate entries and original order is preserved. It is synomymous to
+        the `+` operator.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with elements of `self` and `other` concatenated
+
+        Example
+        -------
+        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)
+
+
+        .. versionadded:: 0.16.0
+        """
+        o_ix = other.ix_array
+        return self._derived_class(np.concatenate([self.ix, o_ix]),
+                                   self.universe)
+
+    @_only_same_level
+    def union(self, other):
+        """Group of elements either in this Group or another
+
+        On the contrary to concatenation, this method sort the elements and
+        removes duplicate ones. It is synomymous to the `|` operator.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with the combined elements of `self` and `other`, without
+            duplicate elements
+
+        Example
+        -------
+        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)
+
+        See Also
+        --------
+        concatenate, intersection
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = other.ix_array
+        return self._derived_class(np.union1d(self.ix, o_ix), self.universe)
+
+    @_only_same_level
+    def intersection(self, other):
+        """Group of elements which are in both this Group and another
+
+        This method removes duplicate elements and sorts the result. It is
+        synomymous to the `&` operator.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with the common elements of `self` and `other`, without
+            duplicate elements
+
+        Example
+        -------
+        Intersections can be used when the select atoms string would
+        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)
+
+        See Also
+        --------
+        union
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = other.ix_array
+        return self._derived_class(np.intersect1d(self.ix, o_ix), self.universe)
+
+    @_only_same_level
+    def subtract(self, other):
+        """Group with elements from this Group that don't appear in other
+
+        The original order of this group is kept, as well as any duplicate
+        elements. If an element of this Group is duplicated and appears in
+        the other Group or Component, then all the occurences of that element
+        are removed from the returned Group.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with the elements of `self` that are not in  `other`,
+            conserves order and duplicates.
+
+        Example
+        -------
+        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])
+
+        See Also
+        --------
+        concatenate, difference
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = other.ix_array
+        in_other = np.in1d(self.ix, o_ix)  # mask of in self.ix AND other
+        return self[~in_other]  # ie inverse of previous mask
+
+    @_only_same_level
+    def difference(self, other):
+        """Elements from this Group that do not appear in another
+
+        This method removes duplicate elements and sorts the result. As such,
+        it is different from :meth:`subtract`. :meth:`difference` is synomymous
+        to the `-` operator.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with the elements of `self` that are not in  `other`, without
+            duplicate elements
+
+        See Also
+        --------
+        subtract, symmetric_difference
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = other.ix_array
+        return self._derived_class(np.setdiff1d(self._ix, o_ix), self._u)
+
+    @_only_same_level
+    def symmetric_difference(self, other):
+        """Group of elements which are only in one of this Group or another
+
+        This method removes duplicate elements and the result is sorted. It is
+        synomym to the `^` operator.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        Group
+            Group with the elements that are in `self` or in `other` but not in
+            both, without duplicate elements
+
+        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]
+
+        See Also
+        --------
+        difference
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = other.ix_array
+        return self._derived_class(np.setxor1d(self._ix, o_ix), self._u)
+
+    def isdisjoint(self, other):
+        """If the Group has no elements in common with the other Group
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        bool
+            ``True`` if the two Groups do not have common elements
+
+
+        .. versionadded:: 0.16
+        """
+        return len(self.intersection(other)) == 0
+
+    @_only_same_level
+    def issubset(self, other):
+        """If all elements of this Group are part of another Group
+
+        Note that an empty group is a subset of any group of the same level.
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        bool
+            ``True`` if this Group is a subset of the other one
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = set(other.ix_array)
+        s_ix = set(self.ix)
+        return s_ix.issubset(o_ix)
+
+    def is_strict_subset(self, other):
+        """If this Group is a subset of another Group but not identical
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        bool
+            ``True`` if this Group is a strict subset of the other one
+
+
+        .. versionadded:: 0.16
+        """
+        return self.issubset(other) and not self == other
+
+    @_only_same_level
+    def issuperset(self, other):
+        """If all elements of another Group are part of this Group
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        bool
+            ``True`` if this Group is a subset of the other one
+
+
+        .. versionadded:: 0.16
+        """
+        o_ix = set(other.ix_array)
+        s_ix = set(self.ix)
+        return s_ix.issuperset(o_ix)
+
+    def is_strict_superset(self, other):
+        """If this Group is a superset of another Group but not identical
+
+        Parameters
+        ----------
+        other : Group or Component
+            Group or Component with `other.level` same as `self.level`
+
+        Returns
+        -------
+        bool
+            ``True`` if this Group is a strict superset of the other one
+
+
+        .. versionadded:: 0.16
+        """
+        return self.issuperset(other) and not self == other
+
+
+
[docs]class AtomGroup(GroupBase): + """An ordered array of atoms. + + Can be initiated from an iterable of :class:`Atoms<Atom>`:: + + ag = AtomGroup([Atom1, Atom2, Atom3]) + + Or from providing a list of indices and the + :class:`~MDAnalysis.core.universe.Universe` it should belong to:: + + ag = AtomGroup([72, 14, 25], u) + + Alternatively, an :class:`AtomGroup` is generated by indexing/slicing + another :class:`AtomGroup`, such as the group of all :class:`Atoms<Atom>` in + the :class:`~MDAnalysis.core.universe.Universe` at + :attr:`MDAnalysis.core.universe.Universe.atoms`. + + An :class:`AtomGroup` can be indexed and sliced like a list:: + + ag[0], ag[-1] + + will return the first and the last :class:`Atom` in the group whereas the + slice:: + + ag[0:6:2] + + returns an :class:`AtomGroup` of every second element, corresponding to + indices 0, 2, and 4. + + It also supports "advanced slicing" when the argument is a + :class:`numpy.ndarray` or a :class:`list`:: + + aslice = [0, 3, -1, 10, 3] + ag[aslice] + + will return a new :class:`AtomGroup` of :class:`Atoms<Atom>` with those + indices in the old :class:`AtomGroup`. + + Finally, :class:`AtomGroups<AtomGroup>` can be created from a selection. + See :meth:`select_atoms`. + + .. note:: + + :class:`AtomGroups<AtomGroup>` originating from a selection are sorted + and duplicate elements are removed. This is not true for + :class:`AtomGroups<AtomGroup>` produced by slicing. Thus, slicing can be + used when the order of atoms is crucial (for instance, in order to + define angles or dihedrals). + + :class:`AtomGroups<AtomGroup>` can be compared and combined using group + operators. For instance, :class:`AtomGroups<AtomGroup>` can be concatenated + using `+` or :meth:`concatenate`:: + + ag_concat = ag1 + ag2 # or ag_concat = ag1.concatenate(ag2) + + When groups are concatenated, the order of the :class:`Atoms<Atom>` is + conserved. If :class:`Atoms<Atom>` appear several times in one of the + groups, the duplicates are kept in the resulting group. On the contrary to + :meth:`concatenate`, :meth:`union` treats the :class:`AtomGroups<AtomGroup>` + as sets so that duplicates are removed from the resulting group, and + :class:`Atoms<Atom>` are ordered. The `|` operator is synomymous to + :meth:`union`:: + + ag_union = ag1 | ag2 # or ag_union = ag1.union(ag2) + + The opposite operation to :meth:`concatenate` is :meth:`subtract`. This + method creates a new group with all the :class:`Atoms<Atom>` of the group + that are not in a given other group; the order of the :class:`Atoms<Atom>` + is kept, and so are duplicates. :meth:`difference` is the set version of + :meth:`subtract`. The resulting group is sorted and deduplicated. + + All set methods are listed in the table below. These methods treat the + groups as sorted and deduplicated sets of :class:`Atoms<Atom>`. + + +-------------------------------+------------+----------------------------+ + | Operation | Equivalent | Result | + +===============================+============+============================+ + | ``s.isdisjoint(t)`` | | ``True`` if ``s`` and | + | | | ``t`` do not share | + | | | elements | + +-------------------------------+------------+----------------------------+ + | ``s.issubset(t)`` | | test if all elements of | + | | | ``s`` are part of ``t`` | + +-------------------------------+------------+----------------------------+ + | ``s.is_strict_subset(t)`` | | test if all elements of | + | | | ``s`` are part of ``t``, | + | | | and ``s != t`` | + +-------------------------------+------------+----------------------------+ + | ``s.issuperset(t)`` | | test if all elements of | + | | | ``t`` are part of ``s`` | + +-------------------------------+------------+----------------------------+ + | ``s.is_strict_superset(t)`` | | test if all elements of | + | | | ``t`` are part of ``s``, | + | | | and ``s != t`` | + +-------------------------------+------------+----------------------------+ + | ``s.union(t)`` | ``s | t`` | new Group with elements | + | | | from both ``s`` and ``t`` | + +-------------------------------+------------+----------------------------+ + | ``s.intersection(t)`` | ``s & t`` | new Group with elements | + | | | common to ``s`` and ``t`` | + +-------------------------------+------------+----------------------------+ + | ``s.difference(t)`` | ``s - t`` | new Group with elements of | + | | | ``s`` that are not in ``t``| + +-------------------------------+------------+----------------------------+ + | ``s.symmetric_difference(t)`` | ``s ^ t`` | new Group with elements | + | | | that are part of ``s`` or | + | | | ``t`` but not both | + +-------------------------------+------------+----------------------------+ + + The following methods keep the order of the atoms as well as duplicates. + + +-------------------------------+------------+----------------------------+ + | Operation | Equivalent | Result | + +===============================+============+============================+ + | ``len(s)`` | | number of elements (atoms, | + | | | residues or segment) in | + | | | the group | + +-------------------------------+------------+----------------------------+ + | ``s == t`` | | test if ``s`` and ``t`` | + | | | contain the same elements | + | | | in the same order | + +-------------------------------+------------+----------------------------+ + | ``s.concatenate(t)`` | ``s + t`` | new Group with elements | + | | | from ``s`` and from ``t`` | + +-------------------------------+------------+----------------------------+ + | ``s.subtract(t)`` | | new Group with elements | + | | | from ``s`` that are not | + | | | in ``t`` | + +-------------------------------+------------+----------------------------+ + + The `in` operator allows to test if an :class:`Atom` is in the + :class:`AtomGroup`. + + :class:`AtomGroup` instances are always bound to a + :class:`MDAnalysis.core.universe.Universe`. They cannot exist in isolation. + + During serialization, :class:`AtomGroup` will be pickled with its bound + :class:`MDAnalysis.core.universe.Universe` which means after unpickling, + a new :class:`MDAnalysis.core.universe.Universe` will be created and + 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 + + >>> 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, u_pickled = pickle.load(pickle.dumps(g, u)) + >>> print("g_pickled.universe is u_pickled: ", + >>> u_pickle 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 + + >>> u = mda.Universe(PSF, DCD) + >>> g = u.atoms + >>> h = u.atoms + + >>> 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 + + >>> g_pickled, h_pickled = pickle.load(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 + + The aforementioned two cases are useful for implementation of parallel + analysis base classes. First, you always get an independent + :class:`MDAnalysis.core.universe.Universe` + in the new process; you don't have to worry about detaching and reattaching + Universe with :class:`AtomGroup`. It also means the state of the + new pickled AtomGroup will not be changed with the old Universe, + So either the Universe has to pickled together with the AtomGroup + (e.g. as a tuple, or as attributes of the object to be pickled), or the + implicit new Universe (`AtomGroup.Universe`) needs to be used. + Second, When multiple AtomGroup need to be pickled, they will recognize if + they belong to the same Univese or not. + Also keep in mind that they need to be pickled together. + + See Also + -------- + :class:`MDAnalysis.core.universe.Universe` + + + .. deprecated:: 0.16.2 + *Instant selectors* of :class:`AtomGroup` will be removed in the 1.0 + release. + .. versionchanged:: 1.0.0 + Removed instant selectors, use select_atoms('name ...') to select + atoms by name. + .. versionchanged:: 2.0.0 + :class:`AtomGroup` can always be pickled with or without its universe, + instead of failing when not finding its anchored universe. + .. versionchanged:: 2.1.0 + Indexing an AtomGroup with ``None`` raises a ``TypeError``. + """ + + def __getattr__(self, attr): + # special-case timestep info + if attr in ('velocities', 'forces'): + raise NoDataError('This Timestep has no ' + attr) + elif attr == 'positions': + raise NoDataError('This Universe has no coordinates') + return super(AtomGroup, self).__getattr__(attr) + + def __reduce__(self): + return (_unpickle, (self.universe, self.ix)) + + @property + def atoms(self): + """The :class:`AtomGroup` itself. + + See Also + -------- + copy : return a true copy of the :class:`AtomGroup` + + + .. versionchanged:: 0.19.0 + In previous versions, this returned a copy, but now + the :class:`AtomGroup` itself is returned. This should + not affect any code but only speed up calculations. + + """ + return self + + @property + def n_atoms(self): + """Number of atoms in the :class:`AtomGroup`. + + Equivalent to ``len(self)``. + """ + return len(self) + + @property + def residues(self): + """A sorted :class:`ResidueGroup` of the unique + :class:`Residues<Residue>` present in the :class:`AtomGroup`. + """ + rg = self.universe.residues[unique_int_1d(self.resindices)] + rg._cache['isunique'] = True + rg._cache['issorted'] = True + rg._cache['sorted_unique'] = rg + rg._cache['unsorted_unique'] = rg + return rg + + @residues.setter + def residues(self, new): + # Can set with Res, ResGroup or list/tuple of Res + if isinstance(new, Residue): + r_ix = itertools.cycle((new.resindex,)) + elif isinstance(new, ResidueGroup): + r_ix = new.resindices + else: + try: + r_ix = [r.resindex for r in new] + except AttributeError: + errmsg = ("Can only set AtomGroup residues to Residue " + "or ResidueGroup not {}".format( + ', '.join(type(r) for r in new + if not isinstance(r, Residue)))) + raise TypeError(errmsg) from None + if not isinstance(r_ix, itertools.cycle) and len(r_ix) != len(self): + raise ValueError("Incorrect size: {} for AtomGroup of size: {}" + "".format(len(new), len(self))) + # Optimisation TODO: + # This currently rebuilds the tt len(self) times + # Ideally all changes would happen and *afterwards* tables are built + # Alternatively, if the changes didn't rebuild table, this list + # comprehension isn't terrible. + for at, r in zip(self, r_ix): + self.universe._topology.tt.move_atom(at.ix, r) + + @property + def n_residues(self): + """Number of unique :class:`Residues<Residue>` present in the + :class:`AtomGroup`. + + Equivalent to ``len(self.residues)``. + + """ + return len(self.residues) + + @property + def segments(self): + """A sorted :class:`SegmentGroup` of the unique segments present in the + :class:`AtomGroup`. + """ + sg = self.universe.segments[unique_int_1d(self.segindices)] + sg._cache['isunique'] = True + sg._cache['issorted'] = True + sg._cache['sorted_unique'] = sg + sg._cache['unsorted_unique'] = sg + return sg + + @segments.setter + def segments(self, new): + raise NotImplementedError("Cannot assign Segments to AtomGroup. " + "Segments are assigned to Residues") + + @property + def n_segments(self): + """Number of unique segments present in the :class:`AtomGroup`. + + Equivalent to ``len(self.segments)``. + """ + return len(self.segments) + + @property + @cached('unique_restore_mask') + def _unique_restore_mask(self): + # The _unique_restore_mask property's cache is populated whenever the + # AtomGroup.unique property of a *non-unique* AtomGroup is accessed. + # If _unique_restore_mask is not cached, it is *definitely* used in the + # wrong place, so we raise an exception here. In principle, the + # exception should be an AttributeError, but the error message would + # then be replaced by the __getattr__() error message. To prevent the + # message from being overridden, we raise a RuntimeError instead. + if self.isunique: + msg = ("{0}._unique_restore_mask is not available if the {0} is " + "unique. ".format(self.__class__.__name__)) + else: + msg = ("{0}._unique_restore_mask is only available after " + "accessing {0}.unique. ".format(self.__class__.__name__)) + msg += ("If you see this error message in an unmodified release " + "version of MDAnalysis, this is almost certainly a bug!") + raise RuntimeError(msg) + + @_unique_restore_mask.setter + def _unique_restore_mask(self, mask): + self._cache['unique_restore_mask'] = mask + + @property + def unique(self): + """An :class:`AtomGroup` containing sorted and unique + :class:`Atoms<Atom>` only. + + 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 + <AtomGroup with 6 atoms> + >>> ag.ix + array([2, 1, 2, 2, 1, 0], dtype=int64) + >>> ag2 = ag.unique + >>> ag2 + <AtomGroup with 3 atoms> + >>> ag2.ix + array([0, 1, 2], dtype=int64) + >>> ag2.unique is ag2 + False + + See Also + -------- + + asunique + + .. versionadded:: 0.16.0 + .. versionchanged:: 0.19.0 If the :class:`AtomGroup` is already unique, + :attr:`AtomGroup.unique` now returns the group itself instead of a + copy. + .. versionchanged:: 2.0.0 + This function now always returns a copy. + """ + group = self.sorted_unique[:] + group._cache['isunique'] = True + group._cache['issorted'] = True + group._cache['sorted_unique'] = group + group._cache['unsorted_unique'] = group + return group + +
[docs] def asunique(self, sorted=False): + """Return a :class:`AtomGroup` containing unique + :class:`Atoms<Atom>` only, with optional sorting. + + If the :class:`AtomGroup` is unique, this is the group itself. + + Parameters + ---------- + sorted: bool (optional) + Whether or not the returned AtomGroup should be sorted + by index. + + Returns + ------- + :class:`AtomGroup` + Unique ``AtomGroup`` + + + 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) + + + .. versionadded:: 2.0.0 + """ + return self._asunique(sorted=sorted, group=self.universe.atoms, + set_mask=True)
+ + + @property + def positions(self): + r"""Coordinates of the :class:`Atoms<Atom>` in the :class:`AtomGroup`. + + A :class:`numpy.ndarray` with + :attr:`~numpy.ndarray.shape`\ ``=(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` + and :attr:`~numpy.ndarray.dtype`\ ``=numpy.float32``. + + The positions can be changed by assigning an array of the appropriate + shape, i.e., either ``(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` to + assign individual coordinates, or ``(3,)`` to assign the *same* + coordinate to all :class:`Atoms<Atom>` (e.g., + ``ag.positions = array([0,0,0])`` will move all :class:`Atoms<Atom>` + to the origin). + + .. note:: Changing positions is not reflected in any files; reading any + frame from the + :attr:`~MDAnalysis.core.universe.Universe.trajectory` will + replace the change with that from the file *except* if the + :attr:`~MDAnalysis.core.universe.Universe.trajectory` is held + in memory, e.g., when the + :meth:`~MDAnalysis.core.universe.Universe.transfer_to_memory` + method was used. + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the underlying :class:`~MDAnalysis.coordinates.timestep.Timestep` + does not contain + :attr:`~MDAnalysis.coordinates.timestep.Timestep.positions`. + """ + return self.universe.trajectory.ts.positions[self.ix] + + @positions.setter + def positions(self, values): + ts = self.universe.trajectory.ts + ts.positions[self.ix, :] = values + + @property + def velocities(self): + r"""Velocities of the :class:`Atoms<Atom>` in the :class:`AtomGroup`. + + A :class:`numpy.ndarray` with + :attr:`~numpy.ndarray.shape`\ ``=(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` + and :attr:`~numpy.ndarray.dtype`\ ``=numpy.float32``. + + The velocities can be changed by assigning an array of the appropriate + shape, i.e. either ``(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` to assign + individual velocities or ``(3,)`` to assign the *same* velocity to all + :class:`Atoms<Atom>` (e.g. ``ag.velocities = array([0,0,0])`` will give + all :class:`Atoms<Atom>` zero :attr:`~Atom.velocity`). + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the underlying :class:`~MDAnalysis.coordinates.timestep.Timestep` + does not contain + :attr:`~MDAnalysis.coordinates.timestep.Timestep.velocities`. + """ + ts = self.universe.trajectory.ts + return np.array(ts.velocities[self.ix]) + + @velocities.setter + def velocities(self, values): + ts = self.universe.trajectory.ts + ts.velocities[self.ix, :] = values + + @property + def forces(self): + r"""Forces on each :class:`Atom` in the :class:`AtomGroup`. + + A :class:`numpy.ndarray` with + :attr:`~numpy.ndarray.shape`\ ``=(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` + and :attr:`~numpy.ndarray.dtype`\ ``=numpy.float32``. + + The forces can be changed by assigning an array of the appropriate + shape, i.e. either ``(``\ :attr:`~AtomGroup.n_atoms`\ ``, 3)`` to assign + individual forces or ``(3,)`` to assign the *same* force to all + :class:`Atoms<Atom>` (e.g. ``ag.forces = array([0,0,0])`` will give all + :class:`Atoms<Atom>` a zero :attr:`~Atom.force`). + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the :class:`~MDAnalysis.coordinates.timestep.Timestep` does not + contain :attr:`~MDAnalysis.coordinates.timestep.Timestep.forces`. + """ + ts = self.universe.trajectory.ts + return ts.forces[self.ix] + + @forces.setter + def forces(self, values): + ts = self.universe.trajectory.ts + ts.forces[self.ix, :] = values + + @property + def ts(self): + """Temporary Timestep that contains the selection coordinates. + + A :class:`~MDAnalysis.coordinates.timestep.Timestep` instance, + which can be passed to a trajectory writer. + + If :attr:`~AtomGroup.ts` is modified then these modifications + will be present until the frame number changes (which + typically happens when the underlying + :attr:`~MDAnalysis.core.universe.Universe.trajectory` frame changes). + + It is not possible to assign a new + :class:`~MDAnalysis.coordinates.timestep.Timestep` to the + :attr:`AtomGroup.ts` attribute; change attributes of the object. + """ + trj_ts = self.universe.trajectory.ts # original time step + + return trj_ts.copy_slice(self.indices) + + # As with universe.select_atoms, needing to fish out specific kwargs + # (namely, 'updating') doesn't allow a very clean signature. + +
[docs] def select_atoms(self, sel, *othersel, periodic=True, rtol=1e-05, + atol=1e-08, updating=False, sorted=True, + rdkit_kwargs=None, smarts_kwargs=None, **selgroups): + """Select atoms from within this Group using a selection string. + + Returns an :class:`AtomGroup` sorted according to their index in the + topology (this is to ensure that there are no duplicates, which can + happen with complicated selections). + + Parameters + ---------- + sel : str + string of the selection, eg "name Ca", see below for possibilities. + othersel : iterable of str + further selections to perform. The results of these selections + will be appended onto the results of the first. + periodic : bool (optional) + for geometric selections, whether to account for atoms in different + periodic images when searching + atol : float, optional + The absolute tolerance parameter for float comparisons. + Passed to :func:``numpy.isclose``. + rtol : float, optional + The relative tolerance parameter for float comparisons. + Passed to :func:``numpy.isclose``. + updating : bool (optional) + force the selection to be re evaluated each time the Timestep of the + trajectory is changed. See section on **Dynamic selections** below. + [``True``] + sorted: bool, optional + Whether to sort the output AtomGroup by index. + rdkit_kwargs : dict (optional) + Arguments passed to the + :class:`~MDAnalysis.converters.RDKit.RDKitConverter` when using + selection based on SMARTS queries + smarts_kwargs : dict (optional) + Arguments passed internally to RDKit's `GetSubstructMatches + <https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.Mol.GetSubstructMatches>`_. + + **selgroups : keyword arguments of str: AtomGroup (optional) + when using the "group" keyword in selections, groups are defined by + passing them as keyword arguments. See section on **preexisting + selections** below. + + Raises + ------ + TypeError + If the arbitrary groups passed are not of type + :class:`MDAnalysis.core.groups.AtomGroup` + + Examples + -------- + 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') + + is equivalent to + + >>> sel = universe.select_atoms('resname MET or resname GLY') + + 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 + <AtomGroup with 3420 atoms> + + + 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) + <AtomGroup with 1250 atoms> + + 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) + <Updating AtomGroup with 100 atoms> + + Notes + ----- + + If exact ordering of atoms is required (for instance, for + :meth:`~AtomGroup.angle` or :meth:`~AtomGroup.dihedral` calculations) + then one supplies selections *separately* in the required order. Also, + when multiple :class:`AtomGroup` instances are concatenated with the + ``+`` operator, then the order of :class:`Atom` instances is preserved + and duplicates are *not* removed. + + + See Also + -------- + :ref:`selection-commands-label` for further details and examples. + + + .. rubric:: Selection syntax + + + The selection parser understands the following CASE SENSITIVE + *keywords*: + + **Simple selections** + + protein, backbone, nucleic, nucleicbackbone + selects all atoms that belong to a standard set of residues; + a protein is identfied by a hard-coded set of residue names so + it may not work for esoteric residues. + segid *seg-name* + select by segid (as given in the topology), e.g. ``segid 4AKE`` + or ``segid DMPC`` + resid *residue-number-range* + resid can take a single residue number or a range of numbers. A + range consists of two numbers separated by a colon (inclusive) + such as ``resid 1:5``. A residue number ("resid") is taken + directly from the topology. + If icodes are present in the topology, then these will be + taken into account. Ie 'resid 163B' will only select resid + 163 with icode B while 'resid 163' will select only residue 163. + Range selections will also respect icodes, so 'resid 162-163B' + will select all residues in 162 and those in 163 up to icode B. + resnum *resnum-number-range* + resnum is the canonical residue number; typically it is set to + the residue id in the original PDB structure. + resname *residue-name* + select by residue name, e.g. ``resname LYS`` + name *atom-name* + select by atom name (as given in the topology). Often, this is + force field dependent. Example: ``name CA`` (for C&alpha; atoms) + or ``name OW`` (for SPC water oxygen) + type *atom-type* + select by atom type; this is either a string or a number and + depends on the force field; it is read from the topology file + (e.g. the CHARMM PSF file contains numeric atom types). It has + non-sensical values when a PDB or GRO file is used as a topology + atom *seg-name* *residue-number* *atom-name* + a selector for a single atom consisting of segid resid atomname, + e.g. ``DMPC 1 C2`` selects the C2 carbon of the first residue of + the DMPC segment + altloc *alternative-location* + a selection for atoms where alternative locations are available, + which is often the case with high-resolution crystal structures + e.g. `resid 4 and resname ALA and altloc B` selects only the + atoms of ALA-4 that have an altloc B record. + moltype *molecule-type* + select by molecule type, e.g. ``moltype Protein_A``. At the + moment, only the TPR format defines the molecule type. + record_type *record_type* + for selecting either ATOM or HETATM from PDB-like files. + e.g. ``select_atoms('name CA and not record_type HETATM')`` + smarts *SMARTS-query* + select atoms using Daylight's SMARTS queries, e.g. ``smarts + [#7;R]`` to find nitrogen atoms in rings. Requires RDKit. + All matches are combined as a single unique match. The `smarts` + selection accepts two sets of key word arguments from + `select_atoms()`: the ``rdkit_kwargs`` are passed internally to + `RDKitConverter.convert()` and the ``smarts_kwargs`` are passed to + RDKit's `GetSubstructMatches + <https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.Mol.GetSubstructMatches>`_. + By default, the `useChirality` kwarg in ``rdkit_kwargs`` is set to true + and maxMatches in ``smarts_kwargs`` is + ``max(1000, 10 * n_atoms)``, where ``n_atoms`` is either + ``len(AtomGroup)`` or ``len(Universe.atoms)``, whichever is + applicable. Note that the number of matches can occasionally + exceed the default value of maxMatches, causing too few atoms + to be returned. If this occurs, a warning will be issued. The + 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}) + <AtomGroup with 100 atoms> + + chiral *R | S* + select a particular stereocenter. e.g. ``name C and chirality + S`` to select only S-chiral carbon atoms. Only ``R`` and + ``S`` will be possible options but other values will not raise + an error. + + formalcharge *formal-charge* + select atoms based on their formal charge, e.g. + ``name O and formalcharge -1`` to select all oxygens with a + negative 1 formal charge. + + **Boolean** + + not + all atoms not in the selection, e.g. ``not protein`` selects + all atoms that aren't part of a protein + and, or + combine two selections according to the rules of boolean + algebra, e.g. ``protein and not resname ALA LYS`` + selects all atoms that belong to a protein, but are not in a + lysine or alanine residue + + **Geometric** + + around *distance* *selection* + selects all atoms a certain cutoff away from another selection, + e.g. ``around 3.5 protein`` selects all atoms not belonging to + protein that are within 3.5 Angstroms from the protein + point *x* *y* *z* *distance* + selects all atoms within a cutoff of a point in space, make sure + coordinate is separated by spaces, + e.g. ``point 5.0 5.0 5.0 3.5`` selects all atoms within 3.5 + Angstroms of the coordinate (5.0, 5.0, 5.0) + prop [abs] *property* *operator* *value* + selects atoms based on position, using *property* **x**, **y**, + or **z** coordinate. Supports the **abs** keyword (for absolute + value) and the following *operators*: **<, >, <=, >=, ==, !=**. + For example, ``prop z >= 5.0`` selects all atoms with z + coordinate greater than 5.0; ``prop abs z <= 5.0`` selects all + atoms within -5.0 <= z <= 5.0. + sphzone *radius* *selection* + Selects all atoms that are within *radius* of the center of + geometry of *selection* + sphlayer *inner radius* *outer radius* *selection* + Similar to sphzone, but also excludes atoms that are within + *inner radius* of the selection COG + isolayer *inner radius* *outer radius* *selection* + Similar to sphlayer, but will find layer around all reference + layer, creating an iso-surface. + cyzone *externalRadius* *zMax* *zMin* *selection* + selects all atoms within a cylindric zone centered in the + center of geometry (COG) of a given selection, + e.g. ``cyzone 15 4 -8 protein and resid 42`` selects the + center of geometry of protein and resid 42, and creates a + cylinder of external radius 15 centered on the COG. In z, the + cylinder extends from 4 above the COG to 8 below. Positive + values for *zMin*, or negative ones for *zMax*, are allowed. + cylayer *innerRadius* *externalRadius* *zMax* *zMin* *selection* + selects all atoms within a cylindric layer centered in the + center of geometry (COG) of a given selection, + e.g. ``cylayer 5 10 10 -8 protein`` selects the center of + geometry of protein, and creates a cylindrical layer of inner + radius 5, external radius 10 centered on the COG. In z, the + cylinder extends from 10 above the COG to 8 below. Positive + values for *zMin*, or negative ones for *zMax*, are allowed. + + **Connectivity** + + byres *selection* + selects all atoms that are in the same segment and residue as + selection, e.g. specify the subselection after the byres keyword + bonded *selection* + selects all atoms that are bonded to selection + eg: ``select name H and bonded name O`` selects only hydrogens + bonded to oxygens + + **Index** + + bynum *index-range* + selects all atoms within a range of (1-based) inclusive indices, + e.g. ``bynum 1`` selects the first atom in the universe; + ``bynum 5:10`` selects atoms 5 through 10 inclusive. All atoms + in the :class:`~MDAnalysis.core.universe.Universe` are + consecutively numbered, and the index runs from 1 up to the + total number of atoms. + index *index-range* + selects all atoms within a range of (0-based) inclusive indices, + e.g. ``index 0`` selects the first atom in the universe; + ``index 5:10`` selects atoms 6 through 11 inclusive. All atoms + in the :class:`~MDAnalysis.core.universe.Universe` are + consecutively numbered, and the index runs from 0 up to the + total number of atoms - 1. + + **Preexisting selections** + + group `group-name` + selects the atoms in the :class:`AtomGroup` passed to the + function as a keyword argument named `group-name`. Only the + atoms common to `group-name` and the instance + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` + was called from will be considered, unless ``group`` is + preceded by the ``global`` keyword. `group-name` will be + included in the parsing just by comparison of atom indices. + This means that it is up to the user to make sure the + `group-name` group was defined in an appropriate + :class:`~MDAnalysis.core.universe.Universe`. + global *selection* + by default, when issuing + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` from an + :class:`~MDAnalysis.core.groups.AtomGroup`, selections and + subselections are returned intersected with the atoms of that + instance. Prefixing a selection term with ``global`` causes its + selection to be returned in its entirety. As an example, the + ``global`` keyword allows for + ``lipids.select_atoms("around 10 global protein")`` --- where + ``lipids`` is a group that does not contain any proteins. Were + ``global`` absent, the result would be an empty selection since + the ``protein`` subselection would itself be empty. When issuing + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` from a + :class:`~MDAnalysis.core.universe.Universe`, ``global`` is + ignored. + + **Dynamic selections** + If :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` is + invoked with named argument `updating` set to `True`, an + :class:`~MDAnalysis.core.groups.UpdatingAtomGroup` instance will be + returned, instead of a regular + :class:`~MDAnalysis.core.groups.AtomGroup`. It behaves just like + the latter, with the difference that the selection expressions are + re-evaluated every time the trajectory frame changes (this happens + lazily, only when the + :class:`~MDAnalysis.core.groups.UpdatingAtomGroup` is accessed so + that there is no redundant updating going on). + Issuing an updating selection from an already updating group will + cause later updates to also reflect the updating of the base group. + A non-updating selection or a slicing operation made on an + :class:`~MDAnalysis.core.groups.UpdatingAtomGroup` will return a + static :class:`~MDAnalysis.core.groups.AtomGroup`, which will no + longer update across frames. + + + .. versionchanged:: 0.7.4 Added *resnum* selection. + .. versionchanged:: 0.8.1 Added *group* and *fullgroup* selections. + .. versionchanged:: 0.13.0 Added *bonded* selection. + .. versionchanged:: 0.16.0 Resid selection now takes icodes into account + where present. + .. versionchanged:: 0.16.0 Updating selections now possible by setting + the `updating` argument. + .. versionchanged:: 0.17.0 Added *moltype* and *molnum* selections. + .. versionchanged:: 0.19.0 + Added strict type checking for passed groups. + Added periodic kwarg (default True) + .. versionchanged:: 0.19.2 + Empty sel string now returns an empty Atom group. + .. versionchanged:: 1.0.0 + The ``fullgroup`` selection has now been removed in favor of the + equivalent ``global group`` selection. + Removed flags affecting default behaviour for periodic selections; + periodic are now on by default (as with default flags) + .. versionchanged:: 2.0.0 + Added the *smarts* selection. Added `atol` and `rtol` keywords + to select float values. Added the ``sort`` keyword. Added + `rdkit_kwargs` to pass parameters to the RDKitConverter. + .. versionchanged:: 2.2.0 + Added `smarts_kwargs` to pass parameters to the RDKit + GetSubstructMatch for *smarts* selection. + """ + + if not sel: + warnings.warn("Empty string to select atoms, empty group returned.", + UserWarning) + return self[[]] + + sel_strs = (sel,) + othersel + + for group, thing in selgroups.items(): + if not isinstance(thing, AtomGroup): + raise TypeError("Passed groups must be AtomGroups. " + "You provided {} for group '{}'".format( + thing.__class__.__name__, group)) + + selections = tuple((selection.Parser.parse(s, selgroups, + periodic=periodic, + atol=atol, rtol=rtol, + sorted=sorted, + rdkit_kwargs=rdkit_kwargs, + smarts_kwargs=smarts_kwargs) + for s in sel_strs)) + if updating: + atomgrp = UpdatingAtomGroup(self, selections, sel_strs) + else: + # Apply the first selection and sum to it + atomgrp = sum([sel.apply(self) for sel in selections[1:]], + selections[0].apply(self)) + return atomgrp
+ +
[docs] def split(self, level): + """Split :class:`AtomGroup` into a :class:`list` of + :class:`AtomGroups<AtomGroup>` by `level`. + + Parameters + ---------- + level : {'atom', 'residue', 'molecule', 'segment'} + + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.17.0 Added the 'molecule' level. + """ + accessors = {'segment': 'segindices', + 'residue': 'resindices', + 'molecule': 'molnums'} + + if level == "atom": + return [self.universe.atoms[[a.ix]] for a in self] + + # higher level groupings + try: + levelindices = getattr(self, accessors[level]) + except AttributeError: + errmsg = (f'This universe does not have {level} information. Maybe' + f' it is not provided in the topology format in use.') + raise AttributeError(errmsg) from None + except KeyError: + errmsg = (f"level = '{level}' not supported, must be one of " + f"{accessors.keys()}") + raise ValueError(errmsg) from None + + return [self[levelindices == index] for index in + unique_int_1d(levelindices)]
+ +
[docs] def guess_bonds(self, vdwradii=None, fudge_factor=0.55, lower_bound=0.1): + """Guess bonds, angles, and dihedrals between the atoms in this + :class:`AtomGroup` and add them to the underlying + :attr:`~AtomGroup.universe`. + + Parameters + ---------- + vdwradii : dict, optional + Dict relating atom types: vdw radii + + fudge_factor : float, optional + The factor by which atoms must overlap each other to be considered + a bond. Larger values will increase the number of bonds found. [0.55] + lower_bound : float, optional + The minimum bond length. All bonds found shorter than this length + will be ignored. This is useful for parsing PDB with altloc records + where atoms with altloc A and B may be very close together and + there should be no chemical bond between them. [0.1] + + See Also + -------- + :func:`MDAnalysis.topology.guessers.guess_bonds` + :func:`MDAnalysis.topology.guessers.guess_angles` + :func:`MDAnalysis.topology.guessers.guess_dihedrals` + + + .. versionadded:: 0.10.0 + .. versionchanged:: 0.20.2 + Now applies periodic boundary conditions when guessing bonds. + .. versionchanged:: 2.5.0 + Corrected misleading docs, and now allows passing of `fudge_factor` + and `lower_bound` arguments. + """ + from ..topology.core import guess_bonds, guess_angles, guess_dihedrals + from .topologyattrs import Bonds, Angles, Dihedrals + + def get_TopAttr(u, name, cls): + """either get *name* or create one from *cls*""" + try: + return getattr(u._topology, name) + except AttributeError: + attr = cls([]) + u.add_TopologyAttr(attr) + return attr + + # indices of bonds + b = guess_bonds( + self.atoms, + self.atoms.positions, + vdwradii=vdwradii, + box=self.dimensions, + fudge_factor=fudge_factor, + lower_bound=lower_bound, + ) + bondattr = get_TopAttr(self.universe, "bonds", Bonds) + bondattr._add_bonds(b, guessed=True) + + a = guess_angles(self.bonds) + angleattr = get_TopAttr(self.universe, 'angles', Angles) + angleattr._add_bonds(a, guessed=True) + + d = guess_dihedrals(self.angles) + diheattr = get_TopAttr(self.universe, 'dihedrals', Dihedrals) + diheattr._add_bonds(d)
+ + @property + def bond(self): + """This :class:`AtomGroup` represented as a + :class:`MDAnalysis.core.topologyobjects.Bond` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 2 + + + .. versionadded:: 0.11.0 + """ + if len(self) != 2: + raise ValueError( + "bond only makes sense for a group with exactly 2 atoms") + return topologyobjects.Bond(self.ix, self.universe) + + @property + def angle(self): + """This :class:`AtomGroup` represented as an + :class:`MDAnalysis.core.topologyobjects.Angle` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 3 + + + .. versionadded:: 0.11.0 + """ + if len(self) != 3: + raise ValueError( + "angle only makes sense for a group with exactly 3 atoms") + return topologyobjects.Angle(self.ix, self.universe) + + @property + def dihedral(self): + """This :class:`AtomGroup` represented as a + :class:`~MDAnalysis.core.topologyobjects.Dihedral` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 4 + + + .. versionadded:: 0.11.0 + """ + if len(self) != 4: + raise ValueError( + "dihedral only makes sense for a group with exactly 4 atoms") + return topologyobjects.Dihedral(self.ix, self.universe) + + @property + def improper(self): + """This :class:`AtomGroup` represented as an + :class:`MDAnalysis.core.topologyobjects.ImproperDihedral` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 4 + + + .. versionadded:: 0.11.0 + """ + if len(self) != 4: + raise ValueError( + "improper only makes sense for a group with exactly 4 atoms") + return topologyobjects.ImproperDihedral(self.ix, self.universe) + + @property + def ureybradley(self): + """This :class:`AtomGroup` represented as an + :class:`MDAnalysis.core.topologyobjects.UreyBradley` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 2 + + + .. versionadded:: 1.0.0 + """ + if len(self) != 2: + raise ValueError( + "urey bradley only makes sense for a group with exactly 2 atoms") + return topologyobjects.UreyBradley(self.ix, self.universe) + + @property + def cmap(self): + """This :class:`AtomGroup` represented as an + :class:`MDAnalysis.core.topologyobjects.CMap` object + + Raises + ------ + ValueError + If the :class:`AtomGroup` is not length 5 + + + .. versionadded:: 1.0.0 + """ + if len(self) != 5: + raise ValueError( + "cmap only makes sense for a group with exactly 5 atoms") + return topologyobjects.CMap(self.ix, self.universe) + + convert_to = Accessor("convert_to", ConverterWrapper) + +
[docs] def write(self, filename=None, file_format=None, + filenamefmt="{trjname}_{frame}", frames=None, **kwargs): + """Write `AtomGroup` to a file. + + The output can either be a coordinate file or a selection, depending on + the format. + + 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]) + + Parameters + ---------- + filename : str, optional + ``None``: create TRJNAME_FRAME.FORMAT from filenamefmt [``None``] + file_format : str, optional + The name or extension of a coordinate, trajectory, or selection + file format such as PDB, CRD, GRO, VMD (tcl), PyMol (pml), Gromacs + (ndx) CHARMM (str) or Jmol (spt); case-insensitive [PDB] + filenamefmt : str, optional + format string for default filename; use substitution tokens + 'trjname' and 'frame' ["%(trjname)s_%(frame)d"] + bonds : str, optional + how to handle bond information, especially relevant for PDBs. + ``"conect"``: write only the CONECT records defined in the original + file. ``"all"``: write out all bonds, both the original defined and + those guessed by MDAnalysis. ``None``: do not write out bonds. + Default is ``"conect"``. + frames: array-like or slice or FrameIteratorBase or str, optional + An ensemble of frames to write. The ensemble can be an list or + array of frame indices, a mask of booleans, an instance of + :class:`slice`, or the value returned when a trajectory is indexed. + By default, `frames` is set to ``None`` and only the current frame + is written. If `frames` is set to "all", then all the frame from + trajectory are written. + + + .. versionchanged:: 0.9.0 Merged with write_selection. This method can + now write both selections out. + .. versionchanged:: 0.19.0 + Can write multiframe trajectories with the 'frames' argument. + """ + # TODO: Add a 'verbose' option alongside 'frames'. + + # check that AtomGroup actually has any atoms (Issue #434) + if len(self.atoms) == 0: + raise IndexError("Cannot write an AtomGroup with 0 atoms") + + trj = self.universe.trajectory # unified trajectory API + if frames is None or frames == 'all': + trj_frames = trj[::] + elif isinstance(frames, numbers.Integral): + # We accept everything that indexes a trajectory and returns a + # subset of it. Though, numbers return a Timestep instead. + raise TypeError('The "frames" argument cannot be a number.') + else: + try: + test_trajectory = frames.trajectory + except AttributeError: + trj_frames = trj[frames] + else: + if test_trajectory is not trj: + raise ValueError( + 'The trajectory of {} provided to the frames keyword ' + 'attribute is different from the trajectory of the ' + 'AtomGroup.'.format(frames) + ) + trj_frames = frames + + if filename is None: + trjname, ext = os.path.splitext(os.path.basename(trj.filename)) + filename = filenamefmt.format(trjname=trjname, frame=trj.frame) + filename = util.filename(filename, + ext=file_format if file_format is not None else 'PDB', + keep=True) + # Some writer behave differently when they are given a "multiframe" + # argument. It is the case of the PDB writer tht writes models when + # "multiframe" is True. + # We want to honor what the user provided with the argument if + # provided explicitly. If not, then we need to figure out if we write + # multiple frames or not. + multiframe = kwargs.pop('multiframe', None) + if len(trj_frames) > 1 and multiframe == False: + raise ValueError( + 'Cannot explicitely set "multiframe" to False and request ' + 'more than 1 frame with the "frames" keyword argument.' + ) + elif multiframe is None: + if frames is None: + # By default we only write the current frame. + multiframe = False + else: + multiframe = len(trj_frames) > 1 + + # From the following blocks, one must pass. + # Both can't pass as the extensions don't overlap. + # Try and select a Class using get_ methods (becomes `writer`) + # Once (and if!) class is selected, use it in with block + try: + writer = get_writer_for( + filename, format=file_format, multiframe=multiframe) + except (ValueError, TypeError): + pass + else: + with writer(filename, n_atoms=self.n_atoms, **kwargs) as w: + if frames is None: + w.write(self.atoms) + else: + current_frame = trj.ts.frame + try: + for _ in trj_frames: + w.write(self.atoms) + finally: + trj[current_frame] + return + + try: + # here `file_format` is only used as default, + # anything pulled off `filename` will be used preferentially + writer = get_selection_writer_for(filename, + file_format if file_format is not None else 'PDB') + except (TypeError, NotImplementedError): + pass + else: + with writer(filename, n_atoms=self.n_atoms, **kwargs) as w: + w.write(self.atoms) + return + + raise ValueError("No writer found for format: {}".format(filename))
+ +
[docs] def sort(self, key='ix', keyfunc=None): + """ + Returns a sorted ``AtomGroup`` using a specified attribute as the key. + + Parameters + ---------- + key: str, optional + The name of the ``AtomGroup`` attribute to sort by (e.g. ``ids``, + ``ix``. default= ``ix`` ). + keyfunc: callable, optional + A function to convert multidimensional arrays to a single + dimension. This 1D array will be used as the sort key and + is required when sorting with an ``AtomGroup`` attribute + key which has multiple dimensions. Note: this argument + is ignored when the attribute is one dimensional. + + Returns + ---------- + :class:`AtomGroup` + Sorted ``AtomGroup``. + + Example + ---------- + + .. code-block:: python + + >>> 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]) + >>> ag = ag.sort() + >>> ag.ix + array([0 1 2 3]) + >>> ag.positions + array([[-11.921, 26.307, 10.41 ], + [-11.447, 26.741, 9.595], + [-12.44 , 27.042, 10.926], + [-12.632, 25.619, 10.046]], dtype=float32) + >>> ag = ag.sort("positions", lambda x: x[:, 1]) + >>> ag.positions + array([[-12.632, 25.619, 10.046], + [-11.921, 26.307, 10.41 ], + [-11.447, 26.741, 9.595], + [-12.44 , 27.042, 10.926]], dtype=float32) + + Note + ---------- + This uses a stable sort as implemented by + `numpy.argsort(kind='stable')`. + + + .. versionadded:: 2.0.0 + """ + idx = getattr(self.atoms, key) + if len(idx) != len(self.atoms): + raise ValueError("The array returned by the attribute '{}' " + "must have the same length as the number of " + "atoms in the input AtomGroup".format(key)) + if idx.ndim == 1: + order = np.argsort(idx, kind='stable') + elif idx.ndim > 1: + if keyfunc is None: + raise NameError("The {} attribute returns a multidimensional " + "array. In order to sort it, a function " + "returning a 1D array (to be used as the sort " + "key) must be passed to the keyfunc argument" + .format(key)) + sortkeys = keyfunc(idx) + if sortkeys.ndim != 1: + raise ValueError("The function assigned to the argument " + "'keyfunc':{} doesn't return a 1D array." + .format(keyfunc)) + order = np.argsort(sortkeys, kind='stable') + return self.atoms[order]
+ + +
[docs]class ResidueGroup(GroupBase): + """ResidueGroup base class. + + This class is used by a :class:`~MDAnalysis.core.universe.Universe` for + generating its Topology-specific :class:`ResidueGroup` class. All the + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` components are obtained + from :class:`GroupBase`, so this class only includes ad-hoc methods + specific to :class:`ResidueGroups<ResidueGroup>`. + + ResidueGroups can be compared and combined using group operators. See the + list of these operators on :class:`GroupBase`. + + .. deprecated:: 0.16.2 + *Instant selectors* of Segments will be removed in the 1.0 release. + .. versionchanged:: 1.0.0 + Removed instant selectors, use select_atoms instead + .. versionchanged:: 2.1.0 + Indexing an ResidueGroup with ``None`` raises a ``TypeError``. + """ + + def __reduce__(self): + return (_unpickle2, (self.universe, self.ix, ResidueGroup)) + + @property + def atoms(self): + """An :class:`AtomGroup` of :class:`Atoms<Atom>` present in this + :class:`ResidueGroup`. + + The :class:`Atoms<Atom>` are ordered locally by :class:`Residue` in the + :class:`ResidueGroup`. Duplicates are *not* removed. + """ + u = self.universe + ag = u.atoms[u._topology.tt.residues2atoms_1d(self._ix)] + # If the ResidueGroup is known to be unique, this also holds for the + # atoms therein, since atoms can only belong to one residue at a time. + # On the contrary, if the ResidueGroup is not unique, this does not + # imply non-unique atoms, since residues might be empty. + ag._set_unique_caches_from(self) + return ag + + @property + def n_atoms(self): + """Number of :class:`Atoms<Atom>` present in this :class:`ResidueGroup`, + including duplicate residues (and thus, duplicate atoms). + + Equivalent to ``len(self.atoms)``. + """ + return len(self.atoms) + + @property + def residues(self): + """The :class:`ResidueGroup` itself. + + See Also + -------- + copy : return a true copy of the :class:`ResidueGroup` + + + .. versionchanged:: 0.19.0 + In previous versions, this returned a copy, but now + the :class:`ResidueGroup` itself is returned. This should + not affect any code but only speed up calculations. + + """ + return self + + @property + def n_residues(self): + """Number of residues in the :class:`ResidueGroup`. + + Equivalent to ``len(self)``. + """ + return len(self) + + @property + def segments(self): + """Get sorted :class:`SegmentGroup` of the unique segments present in + the :class:`ResidueGroup`. + """ + sg = self.universe.segments[unique_int_1d(self.segindices)] + sg._cache['isunique'] = True + sg._cache['issorted'] = True + sg._cache['sorted_unique'] = sg + sg._cache['unsorted_unique'] = sg + return sg + + @segments.setter + def segments(self, new): + # Can set with Seg, SegGroup or list/tuple of Seg + if isinstance(new, Segment): + s_ix = itertools.cycle((new.segindex,)) + elif isinstance(new, SegmentGroup): + s_ix = new.segindices + else: + try: + s_ix = [s.segindex for s in new] + except AttributeError: + errmsg = ("Can only set ResidueGroup segments to Segment " + "or SegmentGroup, not {}".format( + ', '.join(type(r) for r in new + if not isinstance(r, Segment)))) + raise TypeError(errmsg) from None + if not isinstance(s_ix, itertools.cycle) and len(s_ix) != len(self): + raise ValueError("Incorrect size: {} for ResidueGroup of size: {}" + "".format(len(new), len(self))) + # Optimisation TODO: + # This currently rebuilds the tt len(self) times + # Ideally all changes would happen and *afterwards* tables are built + # Alternatively, if the changes didn't rebuild table, this list + # comprehension isn't terrible. + for r, s in zip(self, s_ix): + self.universe._topology.tt.move_residue(r.ix, s) + + @property + def n_segments(self): + """Number of unique segments present in the ResidueGroup. + + Equivalent to ``len(self.segments)``. + """ + return len(self.segments) + + @property + def unique(self): + """Return a :class:`ResidueGroup` containing sorted and unique + :class:`Residues<Residue>` only. + + Examples + -------- + + >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] + >>> rg + <ResidueGroup with 6 residues> + >>> rg.ix + array([2, 1, 2, 2, 1, 0]) + >>> rg2 = rg.unique + >>> rg2 + <ResidueGroup with 3 residues> + >>> rg2.ix + array([0, 1, 2]) + >>> rg2.unique is rg2 + False + + + .. versionadded:: 0.16.0 + .. versionchanged:: 0.19.0 If the :class:`ResidueGroup` is already + unique, :attr:`ResidueGroup.unique` now returns the group itself + instead of a copy. + .. versionchanged:: 2.0.0 + This function now always returns a copy. + """ + group = self.sorted_unique[:] + group._cache['isunique'] = True + group._cache['issorted'] = True + group._cache['sorted_unique'] = group + group._cache['unsorted_unique'] = group + return group + +
[docs] def asunique(self, sorted=False): + """Return a :class:`ResidueGroup` containing unique + :class:`Residues<Residue>` only, with optional sorting. + + If the :class:`ResidueGroup` is unique, this is the group itself. + + Parameters + ---------- + sorted: bool (optional) + Whether or not the returned ResidueGroup should be sorted + by resindex. + + Returns + ------- + :class:`ResidueGroup` + Unique ``ResidueGroup`` + + Examples + -------- + + >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] + >>> rg + <ResidueGroup with 6 residues> + >>> rg.ix + array([2, 1, 2, 2, 1, 0]) + >>> rg2 = rg.asunique() + >>> rg2 + <ResidueGroup with 3 residues> + >>> rg2.ix + array([0, 1, 2]) + >>> rg2.asunique() is rg2 + True + + + .. versionadded:: 2.0.0 + """ + return self._asunique(sorted=sorted, group=self.universe.residues)
+ + +
[docs]class SegmentGroup(GroupBase): + """:class:`SegmentGroup` base class. + + This class is used by a :class:`~MDAnalysis.core.universe.Universe` for + generating its Topology-specific :class:`SegmentGroup` class. All the + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` components are obtained + from :class:`GroupBase`, so this class only includes ad-hoc methods specific + to :class:`SegmentGroups<SegmentGroup>`. + + :class:`SegmentGroups<SegmentGroup>` can be compared and combined using + group operators. See the list of these operators on :class:`GroupBase`. + + .. deprecated:: 0.16.2 + *Instant selectors* of Segments will be removed in the 1.0 release. + .. versionchanged:: 1.0.0 + Removed instant selectors, use select_atoms instead + .. versionchanged:: 2.1.0 + Indexing an SegmentGroup with ``None`` raises a ``TypeError``. + """ + + def __reduce__(self): + return (_unpickle2, (self.universe, self.ix, SegmentGroup)) + + @property + def atoms(self): + """An :class:`AtomGroup` of :class:`Atoms<Atom>` present in this + :class:`SegmentGroup`. + + The :class:`Atoms<Atom>` are ordered locally by :class:`Residue`, which + are further ordered by :class:`Segment` in the :class:`SegmentGroup`. + Duplicates are *not* removed. + """ + u = self.universe + ag = u.atoms[u._topology.tt.segments2atoms_1d(self._ix)] + # If the SegmentGroup is known to be unique, this also holds for the + # residues therein, and thus, also for the atoms in those residues. + # On the contrary, if the SegmentGroup is not unique, this does not + # imply non-unique atoms, since segments or residues might be empty. + ag._set_unique_caches_from(self) + return ag + + @property + def n_atoms(self): + """Number of atoms present in the :class:`SegmentGroup`, including + duplicate segments (and thus, duplicate atoms). + + Equivalent to ``len(self.atoms)``. + """ + return len(self.atoms) + + @property + def residues(self): + """A :class:`ResidueGroup` of :class:`Residues<Residue>` present in this + :class:`SegmentGroup`. + + The :class:`Residues<Residue>` are ordered locally by + :class:`Segment` in the :class:`SegmentGroup`. Duplicates are *not* + removed. + """ + rg = self.universe.residues[np.concatenate(self.resindices)] + # If the SegmentGroup is known to be unique, this also holds for the + # residues therein. On the contrary, if the SegmentGroup is not unique, + # this does not imply non-unique residues, since segments might be + # empty. + rg._set_unique_caches_from(self) + return rg + + @property + def n_residues(self): + """Number of residues present in this :class:`SegmentGroup`, including + duplicate segments (and thus, residues). + + Equivalent to ``len(self.residues)``. + """ + return len(self.residues) + + @property + def segments(self): + """The :class:`SegmentGroup` itself. + + See Also + -------- + copy : return a true copy of the :class:`SegmentGroup` + + + .. versionchanged:: 0.19.0 + In previous versions, this returned a copy, but now + the :class:`SegmentGroup` itself is returned. This should + not affect any code but only speed up calculations. + + """ + return self + + @property + def n_segments(self): + """Number of segments in the :class:`SegmentGroup`. + + Equivalent to ``len(self)``. + """ + return len(self) + + @property + def unique(self): + """Return a :class:`SegmentGroup` containing sorted and unique + :class:`Segments<Segment>` only. + + Examples + -------- + + >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] + >>> sg + <SegmentGroup with 6 segments> + >>> sg.ix + array([2, 1, 2, 2, 1, 0]) + >>> sg2 = sg.unique + >>> sg2 + <SegmentGroup with 3 segments> + >>> sg2.ix + array([0, 1, 2]) + >>> sg2.unique is sg2 + False + + + .. versionadded:: 0.16.0 + .. versionchanged:: 0.19.0 If the :class:`SegmentGroup` is already + unique, :attr:`SegmentGroup.unique` now returns the group itself + instead of a copy. + .. versionchanged:: 2.0.0 + This function now always returns a copy. + """ + group = self.sorted_unique[:] + group._cache['isunique'] = True + group._cache['issorted'] = True + group._cache['sorted_unique'] = group + group._cache['unsorted_unique'] = group + return group + +
[docs] def asunique(self, sorted=False): + """Return a :class:`SegmentGroup` containing unique + :class:`Segments<Segment>` only, with optional sorting. + + If the :class:`SegmentGroup` is unique, this is the group itself. + + Parameters + ---------- + sorted: bool (optional) + Whether or not the returned SegmentGroup should be sorted + by segindex. + + Returns + ------- + :class:`SegmentGroup` + Unique ``SegmentGroup`` + + Examples + -------- + + >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] + >>> sg + <SegmentGroup with 6 segments> + >>> sg.ix + array([2, 1, 2, 2, 1, 0]) + >>> sg2 = sg.asunique() + >>> sg2 + <SegmentGroup with 3 segments> + >>> sg2.ix + array([0, 1, 2]) + >>> sg2.asunique() is sg2 + True + + + .. versionadded:: 2.0.0 + """ + return self._asunique(sorted=sorted, group=self.universe.segments)
+ + +@functools.total_ordering +class ComponentBase(_MutableBase): + r"""Base class from which a :class:`~MDAnalysis.core.universe.Universe`\ 's + Component class is built. + + Components are the individual objects that are found in Groups. + """ + + def __init__(self, ix, u): + # index of component + self._ix = ix + self._u = u + + def __getattr__(self, attr): + selfcls = type(self).__name__ + if attr in _TOPOLOGY_ATTRS: + cls = _TOPOLOGY_ATTRS[attr] + if attr == cls.attrname and attr != cls.singular: + err = ('{selfcls} has no attribute {attr}. ' + 'Do you mean {singular}?') + raise AttributeError(err.format(selfcls=selfcls, attr=attr, + singular=cls.singular)) + else: + err = 'This Universe does not contain {singular} information' + raise NoDataError(err.format(singular=cls.singular)) + else: + return super(ComponentBase, self).__getattr__(attr) + + def __lt__(self, other): + if self.level != other.level: + raise TypeError("Can't compare different level objects") + return self.ix < other.ix + + def __eq__(self, other): + if self.level != other.level: + raise TypeError("Can't compare different level objects") + return self.ix == other.ix + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.ix) + + @_only_same_level + def __add__(self, other): + """Concatenate the Component with another Component or Group of the + same level. + + Parameters + ---------- + other : Component or Group + Component or Group with `other.level` same as `self.level` + + Returns + ------- + Group + Group with elements of `self` and `other` concatenated + """ + o_ix = other.ix_array + + return self.level.plural( + np.concatenate([self.ix_array, o_ix]), self.universe) + + def __radd__(self, other): + """Using built-in sum requires supporting 0 + self. If other is + anything other 0, an exception will be raised. + + Parameters + ---------- + other : int + Other should be 0, or else an exception will be raised. + + Returns + ------- + self + Group with elements of `self` reproduced + """ + if other == 0: + return self.level.plural(self.ix_array, self.universe) + else: + raise TypeError("unsupported operand type(s) for +:" + " '{}' and '{}'".format(type(self).__name__, + type(other).__name__)) + + @property + def universe(self): + return self._u + + @property + def ix(self): + """Unique index of this component. + + If this component is an :class:`Atom`, this is the index of the + :class:`Atom`. + If it is a :class:`Residue`, this is the index of the :class:`Residue`. + If it is a :class:`Segment`, this is the index of the :class:`Segment`. + """ + return self._ix + + @property + def ix_array(self): + """Unique index of this component as an array. + + This method gives a consistent API between components and groups. + + See Also + -------- + ix + """ + return np.array([self.ix], dtype=np.intp) + + +
[docs]class Atom(ComponentBase): + """:class:`Atom` base class. + + This class is used by a :class:`~MDAnalysis.core.universe.Universe` for + generating its Topology-specific :class:`Atom` class. All the + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` components are obtained + from :class:`ComponentBase`, so this class only includes ad-hoc methods + specific to :class:`Atoms<Atom>`. + """ + + def __repr__(self): + me = '<Atom {}:'.format(self.ix + 1) + if hasattr(self, 'name'): + me += ' {}'.format(self.name) + if hasattr(self, 'type'): + me += ' of type {}'.format(self.type) + if hasattr(self, 'resname'): + me += ' of resname {},'.format(self.resname) + if hasattr(self, 'resid'): + me += ' resid {}'.format(self.resid) + if hasattr(self, 'segid'): + me += ' and segid {}'.format(self.segid) + if hasattr(self, 'altLoc'): + me += ' and altLoc {}'.format(self.altLoc) + return me + '>' + + def __reduce__(self): + return (_unpickle2, (self.universe, self.ix, Atom)) + + def __getattr__(self, attr): + # special-case timestep info + ts = {'velocity': 'velocities', 'force': 'forces'} + if attr in ts: + raise NoDataError('This Timestep has no ' + ts[attr]) + elif attr == 'position': + raise NoDataError('This Universe has no coordinates') + return super(Atom, self).__getattr__(attr) + + @property + def residue(self): + return self.universe.residues[self.universe._topology.resindices[self]] + + @residue.setter + def residue(self, new): + if not isinstance(new, Residue): + raise TypeError("Can only set Atom residue to Residue, not {}" + "".format(type(new))) + self.universe._topology.tt.move_atom(self.ix, new.resindex) + + @property + def segment(self): + return self.universe.segments[self.universe._topology.segindices[self]] + + @segment.setter + def segment(self, new): + raise NotImplementedError("Cannot set atom segment. " + "Segments are assigned to Residues") + + @property + def position(self): + """Coordinates of the atom. + + The position can be changed by assigning an array of length (3,). + + .. note:: changing the position is not reflected in any files; reading + any frame from the trajectory will replace the change with + that from the file + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the underlying :class:`~MDAnalysis.coordinates.timestep.Timestep` + does not contain + :attr:`~MDAnalysis.coordinates.timestep.Timestep.positions`. + """ + return self.universe.trajectory.ts.positions[self.ix].copy() + + @position.setter + def position(self, values): + self.universe.trajectory.ts.positions[self.ix, :] = values + + @property + def velocity(self): + """Velocity of the atom. + + The velocity can be changed by assigning an array of shape ``(3,)``. + + .. note:: changing the velocity is not reflected in any files; reading + any frame from the trajectory will replace the change with + that from the file + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the underlying :class:`~MDAnalysis.coordinates.timestep.Timestep` + does not contain + :attr:`~MDAnalysis.coordinates.timestep.Timestep.velocities`. + """ + ts = self.universe.trajectory.ts + return ts.velocities[self.ix].copy() + + @velocity.setter + def velocity(self, values): + ts = self.universe.trajectory.ts + ts.velocities[self.ix, :] = values + + @property + def force(self): + """Force on the atom. + + The force can be changed by assigning an array of shape ``(3,)``. + + .. note:: changing the force is not reflected in any files; reading any + frame from the trajectory will replace the change with that + from the file + + Raises + ------ + ~MDAnalysis.exceptions.NoDataError + If the underlying :class:`~MDAnalysis.coordinates.timestep.Timestep` + does not contain + :attr:`~MDAnalysis.coordinates.timestep.Timestep.forces`. + """ + ts = self.universe.trajectory.ts + return ts.forces[self.ix].copy() + + @force.setter + def force(self, values): + ts = self.universe.trajectory.ts + ts.forces[self.ix, :] = values
+ + +
[docs]class Residue(ComponentBase): + """:class:`Residue` base class. + + This class is used by a :class:`~MDAnalysis.core.universe.Universe` for + generating its Topology-specific :class:`Residue` class. All the + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` components are obtained + from :class:`ComponentBase`, so this class only includes ad-hoc methods + specific to :class:`Residues<Residue>`. + """ + + def __repr__(self): + me = '<Residue' + if hasattr(self, 'resname'): + me += ' {},'.format(self.resname) + if hasattr(self, 'resid'): + me += ' {}'.format(self.resid) + + return me + '>' + + def __reduce__(self): + return (_unpickle2, (self.universe, self.ix, Residue)) + + @property + def atoms(self): + """An :class:`AtomGroup` of :class:`Atoms<Atom>` present in this + :class:`Residue`. + """ + ag = self.universe.atoms[self.universe._topology.indices[self][0]] + ag._cache['isunique'] = True + ag._cache['issorted'] = True + ag._cache['sorted_unique'] = ag + ag._cache['unsorted_unique'] = ag + return ag + + @property + def segment(self): + """The :class:`Segment` this :class:`Residue` belongs to. + """ + return self.universe.segments[self.universe._topology.segindices[self]] + + @segment.setter + def segment(self, new): + if not isinstance(new, Segment): + raise TypeError("Can only set Residue segment to Segment, not {}" + "".format(type(new))) + self.universe._topology.tt.move_residue(self.ix, new.segindex)
+ + +
[docs]class Segment(ComponentBase): + """:class:`Segment` base class. + + This class is used by a :class:`~MDAnalysis.core.universe.Universe` for + generating its Topology-specific :class:`Segment` class. All the + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` components are obtained + from :class:`ComponentBase`, so this class only includes ad-hoc methods + specific to :class:`Segments<Segment>`. + + .. deprecated:: 0.16.2 + *Instant selectors* of :class:`Segments<Segment>` will be removed in the + 1.0 release. + .. versionchanged:: 1.0.0 + Removed instant selectors, use either segment.residues[...] to select + residue by number, or segment.residues[segment.residue.resnames = ...] + to select by resname. + """ + + def __repr__(self): + me = '<Segment' + if hasattr(self, 'segid'): + me += ' {}'.format(self.segid) + return me + '>' + + def __reduce__(self): + return (_unpickle2, (self.universe, self.ix, Segment)) + + @property + def atoms(self): + """An :class:`AtomGroup` of :class:`Atoms<Atom>` present in this + :class:`Segment`. + """ + ag = self.universe.atoms[self.universe._topology.indices[self][0]] + ag._cache['isunique'] = True + ag._cache['issorted'] = True + ag._cache['sorted_unique'] = ag + ag._cache['unsorted_unique'] = ag + return ag + + @property + def residues(self): + """A :class:`ResidueGroup` of :class:`Residues<Residue>` present in this + :class:`Segment`. + """ + rg = self.universe.residues[self.universe._topology.resindices[self][0]] + rg._cache['isunique'] = True + rg._cache['issorted'] = True + rg._cache['sorted_unique'] = rg + rg._cache['unsorted_unique'] = rg + return rg
+ + +# Accessing these attrs doesn't trigger an update. The class and instance +# methods of UpdatingAtomGroup that are used during __init__ must all be +# here, otherwise we get __getattribute__ infinite loops. +_UAG_SHORTCUT_ATTRS = { + # Class information of the UAG + "__class__", "_derived_class", + # Metadata of the UAG + "_base_group", "_selections", "_lastupdate", + "level", "_u", "universe", + # Methods of the UAG + "_ensure_updated", + "is_uptodate", + "update_selection", +} + + +
[docs]class UpdatingAtomGroup(AtomGroup): + """:class:`AtomGroup` subclass that dynamically updates its selected atoms. + + Accessing any attribute/method of an :class:`UpdatingAtomGroup` instance + triggers a check for the last frame the group was updated. If the last + frame matches the current trajectory frame, the attribute is returned + normally; otherwise the group is updated (the stored selections are + re-applied), and only then is the attribute returned. + + + .. versionadded:: 0.16.0 + """ + # WARNING: This class has __getattribute__ and __getattr__ methods (the + # latter inherited from AtomGroup). Because of this bugs introduced in the + # class that cause an AttributeError may be very hard to diagnose and + # debug: the most obvious symptom is an infinite loop going through both + # __getattribute__ and __getattr__, and a solution might be to add said + # attribute to _UAG_SHORTCUT_ATTRS. + + def __init__(self, base_group, selections, strings): + """ + + Parameters + ---------- + base_group : :class:`AtomGroup` + group on which *selections* are to be applied. + selections : a tuple of :class:`~MDAnalysis.core.selection.Selection` + instances selections ready to be applied to *base_group*. + """ + # Because we're implementing __getattribute__, which needs _u for + # its check, no self.attribute access can be made before this line + self._u = base_group.universe + self._selections = selections + self._selection_strings = strings + self._base_group = base_group + self._lastupdate = None + self._derived_class = base_group._derived_class + if self._selections: + # Allows the creation of a cheap placeholder UpdatingAtomGroup + # by passing an empty selection tuple. + self._ensure_updated() + +
[docs] def update_selection(self): + """ + Forces the reevaluation and application of the group's selection(s). + + This method is triggered automatically when accessing attributes, if + the last update occurred under a different trajectory frame. + """ + bg = self._base_group + sels = self._selections + if sels: + # As with select_atoms, we select the first sel and then sum to it. + ix = sum([sel.apply(bg) for sel in sels[1:]], + sels[0].apply(bg)).ix + else: + ix = np.array([], dtype=np.intp) + # Run back through AtomGroup init with this information to remake + # ourselves + super(UpdatingAtomGroup, self).__init__(ix, self.universe) + self.is_uptodate = True
+ + @property + def is_uptodate(self): + """ + Checks whether the selection needs updating based on frame number only. + + Modifications to the coordinate data that render selections stale are + not caught, and in those cases :attr:`is_uptodate` may return an + erroneous value. + + Returns + ------- + bool + ``True`` if the group's selection is up-to-date, ``False`` + otherwise. + """ + try: + return self.universe.trajectory.frame == self._lastupdate + except AttributeError: # self.universe has no trajectory + return self._lastupdate == -1 + + @is_uptodate.setter + def is_uptodate(self, value): + if value: + try: + self._lastupdate = self.universe.trajectory.frame + except AttributeError: # self.universe has no trajectory + self._lastupdate = -1 + else: + # This always marks the selection as outdated + self._lastupdate = None + + def _ensure_updated(self): + """ + Checks whether the selection needs updating and updates it if needed. + + Returns + ------- + bool + ``True`` if the group was already up-to-date, ``False`` otherwise. + """ + status = self.is_uptodate + if not status: + self.update_selection() + return status + + def __getattribute__(self, name): + # ALL attribute access goes through here + # If the requested attribute is public (not starting with '_') and + # isn't in the shortcut list, update ourselves + if not (name.startswith('_') or name in _UAG_SHORTCUT_ATTRS): + self._ensure_updated() + # Going via object.__getattribute__ then bypasses this check stage + return object.__getattribute__(self, name) + + def __reduce__(self): + # strategy for unpickling is: + # - unpickle base group + # - recreate UAG as created through select_atoms (basegroup and selstrs) + # even if base_group is a UAG this will work through recursion + return (_unpickle_uag, + (self._base_group.__reduce__(), self._selections, + self._selection_strings)) + + def __repr__(self): + basestr = super(UpdatingAtomGroup, self).__repr__() + if not self._selection_strings: + return basestr + sels = "'{}'".format("' + '".join(self._selection_strings)) + # Cheap comparison. Might fail for corner cases but this is + # mostly cosmetic. + if self._base_group is self.universe.atoms: + basegrp = "the entire Universe." + 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) + + @property + def atoms(self): + """Get a *static* :class:`AtomGroup` identical to the group of currently + selected :class:`Atoms<Atom>` in the :class:`UpdatingAtomGroup`. + + + By returning a *static* :class:`AtomGroup` it becomes possible to + compare the contents of the group *between* trajectory frames. See the + Example below. + + + Note + ---- + The :attr:`atoms` attribute of an :class:`UpdatingAtomGroup` behaves + differently from :attr:`AtomGroup.atoms`: the latter returns the + :class:`AtomGroup` itself whereas the former returns a + :class:`AtomGroup` and not an :class:`UpdatingAtomGroup` (for this, use + :meth:`UpdatingAtomGroup.copy`). + + + Example + ------- + 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:: + + 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 + + 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 + + By remembering the atoms of the current time step in + `water_shell_prev`, it becomes possible to use the :meth:`subtraction + of AtomGroups<AtomGroup.subtract>` to find the water molecules that + changed. + + + See Also + -------- + copy : return a true copy of the :class:`UpdatingAtomGroup` + + """ + return self[:] + +
[docs] def copy(self): + """Get another :class:`UpdatingAtomGroup` identical to this one. + + + .. versionadded:: 0.19.0 + """ + return UpdatingAtomGroup(self._base_group, self._selections, + self._selection_strings)
+ + +# Define relationships between these classes +# with Level objects +_Level = namedtuple('Level', ['name', 'singular', 'plural']) +ATOMLEVEL = _Level('atom', Atom, AtomGroup) +RESIDUELEVEL = _Level('residue', Residue, ResidueGroup) +SEGMENTLEVEL = _Level('segment', Segment, SegmentGroup) + +Atom.level = ATOMLEVEL +AtomGroup.level = ATOMLEVEL +Residue.level = RESIDUELEVEL +ResidueGroup.level = RESIDUELEVEL +Segment.level = SEGMENTLEVEL +SegmentGroup.level = SEGMENTLEVEL + + +def requires(*attrs): + """Decorator to check if all :class:`AtomGroup` arguments have certain + attributes + + Example + ------- + When used to wrap a function, will check all :class:`AtomGroup` arguments + for the listed requirements + + @requires('masses', 'charges') + def mass_times_charge(atomgroup): + return atomgroup.masses * atomgroup.charges + """ + def require_dec(func): + @functools.wraps(func) + def check_args(*args, **kwargs): + for a in args: # for each argument + if isinstance(a, AtomGroup): + # Make list of missing attributes + missing = [attr for attr in attrs + if not hasattr(a, attr)] + if missing: + raise NoDataError( + "{funcname} failed. " + "AtomGroup is missing the following required " + "attributes: {attrs}".format( + funcname=func.__name__, + attrs=', '.join(missing))) + return func(*args, **kwargs) + return check_args + return require_dec +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/selection.html b/2.7.0-dev0/_modules/MDAnalysis/core/selection.html new file mode 100644 index 0000000000..d1929cf455 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/selection.html @@ -0,0 +1,1813 @@ + + + + + + MDAnalysis.core.selection — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core.selection

+# -*- 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-2017 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
+#
+
+"""Atom selection Hierarchy --- :mod:`MDAnalysis.core.selection`
+=============================================================
+
+This module contains objects that represent selections. They are
+constructed and then applied to the group.
+
+In general, :meth:`Parser.parse` creates a :class:`Selection` object
+from a selection string. This :class:`Selection` object is then passed
+an :class:`~MDAnalysis.core.groups.AtomGroup` through its
+:meth:`~MDAnalysis.core.groups.AtomGroup.apply` method to apply the
+``Selection`` to the ``AtomGroup``.
+
+This is all invisible to the user through the
+:meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` method of an
+:class:`~MDAnalysis.core.groups.AtomGroup`.
+
+"""
+import collections
+import re
+import fnmatch
+import functools
+import sys
+import types
+import warnings
+
+import numpy as np
+
+
+from ..lib.util import unique_int_1d
+from ..lib import distances
+from ..exceptions import SelectionError, NoDataError, SelectionWarning
+
+#: Regular expression for recognizing a floating point number in a selection.
+#: Numbers such as 1.2, 1.2e-01, -1.2 are all parsed as Python floats.
+FLOAT_PATTERN = r"-?\d*\.?\d*(?:e[-+]?\d+)?"
+
+#: Regular expression for recognizing un/signed integers in a selection.
+INT_PATTERN = r"-?\d+"
+
+#: Regular expression for recognising a range separator.
+#: Delimiters include ":", "-", "to" and can have arbitrary whitespace.
+RANGE_PATTERN = r"\s*(?:[:-]| to )\s*"
+
+
[docs]def is_keyword(val): + """Is val a selection keyword? + + Returns False on any of the following strings: + - keys in SELECTIONDICT (tokens from Selection objects) + - keys in OPERATIONS (tokens from LogicOperations) + - (Parentheses) + - The value `None` (used as EOF in selection strings) + """ + return (val in _SELECTIONDICT or + val in _OPERATIONS or + val in ['(', ')'] or + val is None)
+ + +
[docs]def grab_not_keywords(tokens): + """Pop tokens from the left until you hit a keyword + + Parameters + ---------- + tokens : collections.deque + deque of strings, some tokens some not + + Returns + ------- + values : list of strings + All non keywords found until a keyword was hit + + Note + ---- + This function pops the values from the deque + + Examples + -------- + grab_not_keywords(['H', 'and','resname', 'MET']) + >>> ['H'] + + grab_not_keywords(['H', 'Ca', 'N', 'and','resname', 'MET']) + >>> ['H', 'Ca' ,'N'] + + grab_not_keywords(['and','resname', 'MET']) + >>> [] + """ + values = [] + while not is_keyword(tokens[0]): + val = tokens.popleft() + # Insert escape characters here to use keywords as names? + values.append(val) + return values
+ + +
[docs]def join_separated_values(values): + """Join range values that are separated by whitespace + + Parameters + ---------- + values: list + list of value strings + + Returns + ------- + values: list of strings + + Examples + -------- + join_separated_values(['37', 'to', '22']) + >>> ['37 to 22'] + + .. versionadded:: 2.0.0 + """ + _values = [] + DELIMITERS = ("to", ":", "-") + while values: + v = values.pop(0) + + if v in DELIMITERS: + try: + _values[-1] = f"{_values[-1]} {v} {values.pop(0)}" + except IndexError: + given = f"{' '.join(_values)} {v} {' '.join(values)}" + raise SelectionError(f"Invalid expression given: {given}") + elif _values and (v[:2] in ('--', 'to') or v[0] == ":" or + any(_values[-1].endswith(x) for x in DELIMITERS)): + _values[-1] = f"{_values[-1]} {v}" + else: + _values.append(v) + return _values
+ +_SELECTIONDICT = {} +_OPERATIONS = {} +# These are named args to select_atoms that have a special meaning and must +# not be allowed as names for the 'group' keyword. +_RESERVED_KWARGS=('updating',) + + +# And and Or are exception and aren't strictly a Selection +# as they work on other Selections rather than doing work themselves. +# So their init is a little strange too.... +class _Operationmeta(type): + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) + try: + _OPERATIONS[classdict['token']] = cls + except KeyError: + pass + + +class LogicOperation(object, metaclass=_Operationmeta): + def __init__(self, lsel, rsel, parser): + self.rsel = rsel + self.lsel = lsel + self.parser = parser + + def apply(self, *args, **kwargs): + return self._apply(*args, **kwargs).asunique(sorted=self.parser.sorted) + + +class AndOperation(LogicOperation): + token = 'and' + precedence = 3 + + def _apply(self, group): + rsel = self.rsel.apply(group) + lsel = self.lsel.apply(group) + + # Mask which lsel indices appear in rsel + mask = np.in1d(rsel.indices, lsel.indices) + # and mask rsel according to that + return rsel[mask] + + +class OrOperation(LogicOperation): + token = 'or' + precedence = 3 + + def _apply(self, group): + lsel = self.lsel.apply(group) + rsel = self.rsel.apply(group) + + # Find unique indices from both these AtomGroups + # and slice main list using them + idx = np.union1d(lsel.indices, rsel.indices).astype(np.int32) + + return group.universe.atoms[idx] + +
[docs]def return_empty_on_apply(func): + """ + Decorator to return empty AtomGroups from the apply() function + without evaluating it + """ + @functools.wraps(func) + def _apply(self, group): + if len(group) == 0: + return group + return func(self, group) + return _apply
+ + +class _Selectionmeta(type): + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) + try: + _SELECTIONDICT[classdict['token']] = cls + _SELECTIONDICT[classdict['token'].lower()] = cls + except KeyError: + pass + + +class Selection(object, metaclass=_Selectionmeta): + + def __init__(self, parser, tokens): + self.parser = parser + + def apply(self, *args, **kwargs): + return self._apply(*args, **kwargs).asunique(sorted=self.parser.sorted) + + +class AllSelection(Selection): + token = 'all' + + def _apply(self, group): + # Check whether group is identical to the one stored + # in the corresponding universe, in which case this + # is returned directly. This works since the Universe.atoms + # are unique by construction. + if group is group.universe.atoms: + return group + return group[:] + + +class UnarySelection(Selection): + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + sel = parser.parse_expression(self.precedence) + self.sel = sel + + +class NotSelection(UnarySelection): + token = 'not' + precedence = 5 + + def _apply(self, group): + notsel = self.sel.apply(group) + return group[~np.in1d(group.indices, notsel.indices)] + + +class GlobalSelection(UnarySelection): + token = 'global' + precedence = 5 + + def _apply(self, group): + return self.sel.apply(group.universe.atoms).unique + + +
[docs]class ByResSelection(UnarySelection): + """ + Selects all atoms that are in the same segment and residue as selection + + .. versionchanged:: 1.0.0 + Use :code:`"resindices"` instead of :code:`"resids"` (see #2669 and #2672) + """ + + token = 'byres' + precedence = 1 + + def _apply(self, group): + res = self.sel.apply(group) + unique_res = unique_int_1d(res.resindices) + mask = np.in1d(group.resindices, unique_res) + + return group[mask]
+ + +class AroundSelection(Selection): + token = 'around' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.cutoff = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + @return_empty_on_apply + def _apply(self, group): + indices = [] + sel = self.sel.apply(group) + # All atoms in group that aren't in sel + sys = group[~np.in1d(group.indices, sel.indices)] + + if not sys or not sel: + return sys[[]] + + box = group.dimensions if self.periodic else None + pairs = distances.capped_distance(sel.positions, sys.positions, + self.cutoff, box=box, + return_distances=False) + if pairs.size > 0: + indices = np.sort(pairs[:, 1]) + + return sys[np.asarray(indices, dtype=np.int64)] + +class SphericalLayerSelection(Selection): + token = 'sphlayer' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.inRadius = float(tokens.popleft()) + self.exRadius = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + @return_empty_on_apply + def _apply(self, group): + indices = [] + sel = self.sel.apply(group) + if len(sel) == 0: + return group[[]] + + box = group.dimensions if self.periodic else None + ref = sel.center_of_geometry().reshape(1, 3).astype(np.float32) + pairs = distances.capped_distance(ref, group.positions, self.exRadius, + min_cutoff=self.inRadius, + box=box, + return_distances=False) + if pairs.size > 0: + indices = np.sort(pairs[:, 1]) + + return group[np.asarray(indices, dtype=np.int64)] + + +class IsoLayerSelection(Selection): + token = 'isolayer' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.inRadius = float(tokens.popleft()) + self.exRadius = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + @return_empty_on_apply + def _apply(self, group): + indices = [] + sel = self.sel.apply(group) + # All atoms in group that aren't in sel + sys = group[~np.in1d(group.indices, sel.indices)] + + if not sys or not sel: + return sys[[]] + + box = group.dimensions if self.periodic else None + pairs_outer = distances.capped_distance(sel.positions, sys.positions, + self.exRadius, box=box, + return_distances=False) + pairs_inner = distances.capped_distance(sel.positions, sys.positions, + self.inRadius, box=box, + return_distances=False) + + if pairs_outer.size > 0: + sys_ind_outer = np.sort(np.unique(pairs_outer[:,1])) + if pairs_inner.size > 0: + sys_ind_inner = np.sort(np.unique(pairs_inner[:,1])) + indices = sys_ind_outer[~np.in1d(sys_ind_outer, sys_ind_inner)] + else: + indices = sys_ind_outer + + return sys[np.asarray(indices, dtype=np.int64)] + + +class SphericalZoneSelection(Selection): + token = 'sphzone' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.cutoff = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + @return_empty_on_apply + def _apply(self, group): + indices = [] + sel = self.sel.apply(group) + if len(sel) == 0: + return group[[]] + + box = group.dimensions if self.periodic else None + ref = sel.center_of_geometry().reshape(1, 3).astype(np.float32) + pairs = distances.capped_distance(ref, group.positions, self.cutoff, + box=box, + return_distances=False) + if pairs.size > 0: + indices = np.sort(pairs[:, 1]) + + return group[np.asarray(indices, dtype=np.int64)] + + +class CylindricalSelection(Selection): + @return_empty_on_apply + def _apply(self, group): + sel = self.sel.apply(group) + if len(sel) == 0: + return group[[]] + # Calculate vectors between point of interest and our group + vecs = group.positions - sel.center_of_geometry() + + if self.periodic and not group.dimensions is None: + box = group.dimensions[:3] + cyl_z_hheight = self.zmax - self.zmin + + if 2 * self.exRadius > box[0]: + raise NotImplementedError( + "The diameter of the cylinder selection ({:.3f}) is larger " + "than the unit cell's x dimension ({:.3f}). Can only do " + "selections where it is smaller or equal." + "".format(2*self.exRadius, box[0])) + if 2 * self.exRadius > box[1]: + raise NotImplementedError( + "The diameter of the cylinder selection ({:.3f}) is larger " + "than the unit cell's y dimension ({:.3f}). Can only do " + "selections where it is smaller or equal." + "".format(2*self.exRadius, box[1])) + if cyl_z_hheight > box[2]: + raise NotImplementedError( + "The total length of the cylinder selection in z ({:.3f}) " + "is larger than the unit cell's z dimension ({:.3f}). Can " + "only do selections where it is smaller or equal." + "".format(cyl_z_hheight, box[2])) + + if np.all(group.dimensions[3:] == 90.): + # Orthogonal version + vecs -= box[:3] * np.rint(vecs / box[:3]) + else: + # Triclinic version + tribox = group.universe.trajectory.ts.triclinic_dimensions + vecs -= tribox[2] * np.rint(vecs[:, 2] / tribox[2][2])[:, None] + vecs -= tribox[1] * np.rint(vecs[:, 1] / tribox[1][1])[:, None] + vecs -= tribox[0] * np.rint(vecs[:, 0] / tribox[0][0])[:, None] + + # First deal with Z dimension criteria + mask = (vecs[:, 2] > self.zmin) & (vecs[:, 2] < self.zmax) + # Mask out based on height to reduce number of radii comparisons + vecs = vecs[mask] + group = group[mask] + + # Radial vectors from sel to each in group + radii = vecs[:, 0]**2 + vecs[:, 1]**2 + mask = radii < self.exRadius**2 + try: + mask &= radii > self.inRadius**2 + except AttributeError: + # Only for cylayer, cyzone doesn't have inRadius + pass + + return group[mask] + + +class CylindricalZoneSelection(CylindricalSelection): + token = 'cyzone' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.exRadius = float(tokens.popleft()) + self.zmax = float(tokens.popleft()) + self.zmin = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + +class CylindricalLayerSelection(CylindricalSelection): + token = 'cylayer' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + self.inRadius = float(tokens.popleft()) + self.exRadius = float(tokens.popleft()) + self.zmax = float(tokens.popleft()) + self.zmin = float(tokens.popleft()) + self.sel = parser.parse_expression(self.precedence) + + +class PointSelection(Selection): + token = 'point' + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.periodic = parser.periodic + x = float(tokens.popleft()) + y = float(tokens.popleft()) + z = float(tokens.popleft()) + self.ref = np.array([x, y, z], dtype=np.float32) + self.cutoff = float(tokens.popleft()) + + @return_empty_on_apply + def _apply(self, group): + indices = [] + + box = group.dimensions if self.periodic else None + pairs = distances.capped_distance(self.ref[None, :], group.positions, self.cutoff, + box=box, + return_distances=False) + if pairs.size > 0: + indices = np.sort(pairs[:, 1]) + + return group[np.asarray(indices, dtype=np.int64)] + + +class AtomSelection(Selection): + token = 'atom' + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.segid = tokens.popleft() + self.resid = int(tokens.popleft()) + self.name = tokens.popleft() + + def _apply(self, group): + sub = group[group.names == self.name] + if sub: + sub = sub[sub.resids == self.resid] + if sub: + sub = sub[sub.segids == self.segid] + return sub.unique + + +class BondedSelection(Selection): + token = 'bonded' + precedence = 1 + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.sel = parser.parse_expression(self.precedence) + + def _apply(self, group): + grp = self.sel.apply(group) + # Check if we have bonds + if not group.bonds: + warnings.warn("Bonded selection has 0 bonds") + return group[[]] + + grpidx = grp.indices + + # (n, 2) array of bond indices + bix = np.array(group.bonds.to_indices()) + + idx = [] + # left side + idx.append(bix[:, 0][np.in1d(bix[:, 1], grpidx)]) + # right side + idx.append(bix[:, 1][np.in1d(bix[:, 0], grpidx)]) + + idx = np.union1d(*idx) + + return group.universe.atoms[np.unique(idx)] + + +class SelgroupSelection(Selection): + token = 'group' + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + grpname = tokens.popleft() + if grpname in _RESERVED_KWARGS: + raise TypeError("The '{}' keyword is reserved and cannot be " + "used as a selection group name." + .format(grpname)) + try: + self.grp = parser.selgroups[grpname] + except KeyError: + errmsg = f"Failed to find group: {grpname}" + raise ValueError(errmsg) from None + + def _apply(self, group): + mask = np.in1d(group.indices, self.grp.indices) + return group[mask] + + +
[docs]class SingleCharSelection(Selection): + """for when an attribute is just a single character, eg RSChirality + + .. versionadded:: 2.1.0 + """ + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + vals = grab_not_keywords(tokens) + if not vals: + raise ValueError("Unexpected token '{0}'".format(tokens[0])) + + self.values = vals + + @return_empty_on_apply + def _apply(self, group): + attr = getattr(group, self.field) + + mask = np.isin(attr, self.values) + + return group[mask]
+ + +class _ProtoStringSelection(Selection): + """Selections based on text attributes + + .. versionchanged:: 1.0.0 + Supports multiple wildcards, based on fnmatch + """ + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + vals = grab_not_keywords(tokens) + if not vals: + raise ValueError("Unexpected token '{0}'".format(tokens[0])) + + self.values = vals + + @return_empty_on_apply + def _apply(self, group): + # rather than work on group.names, cheat and look at the lookup table + nmattr = getattr(group.universe._topology, self.field) + + matches = [] # list of passing indices + # iterate through set of known atom names, check which pass + for nm, ix in nmattr.namedict.items(): + if any(fnmatch.fnmatchcase(nm, val) for val in self.values): + matches.append(ix) + + # atomname indices for members of this group + nmidx = nmattr.nmidx[getattr(group, self.level)] + + return group[np.in1d(nmidx, matches)] + + +
[docs]class AromaticSelection(Selection): + """Select aromatic atoms. + + Aromaticity is available in the `aromaticities` attribute and is made + available through RDKit""" + token = 'aromatic' + field = 'aromaticities' + + def _apply(self, group): + return group[group.aromaticities]
+ + +
[docs]class SmartsSelection(Selection): + """Select atoms based on SMARTS queries. + + Uses RDKit to run the query and converts the result to MDAnalysis. + Supports chirality. + + .. versionchanged:: 2.2.0 + ``rdkit_wargs`` and ``smarts_kwargs`` can now be passed to control + the behaviour of the RDKit converter and RDKit's ``GetSubstructMatches`` + respectively. + The default ``maxMatches`` value passed to ``GetSubstructMatches`` has + been changed from ``1000`` to ``max(1000, n_atoms * 10)`` in order to + limit cases where too few matches were generated. A warning is now also + thrown if ``maxMatches`` has been reached. + """ + token = 'smarts' + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + # The parser will add spaces around parentheses and then split the + # selection based on spaces to create the tokens + # If the input SMARTS query contained parentheses, the query will be + # split because of that and we need to reconstruct it + # We also need to keep the parentheses that are not part of the smarts + # query intact + pattern = [] + counter = {"(": 0, ")": 0} + # loop until keyword but ignore parentheses as a keyword + while tokens[0] in ["(", ")"] or not is_keyword(tokens[0]): + # keep track of the number of open and closed parentheses + if tokens[0] in ["(", ")"]: + counter[tokens[0]] += 1 + # if the char is a closing ")" but there's no corresponding + # open "(" then we've reached then end of the smarts query and + # the current token ")" is part of a grouping parenthesis + if tokens[0] == ")" and counter["("] < (counter[")"]): + break + # add the token to the pattern and remove it from the tokens + val = tokens.popleft() + pattern.append(val) + self.pattern = "".join(pattern) + self.rdkit_kwargs = parser.rdkit_kwargs + self.smarts_kwargs = parser.smarts_kwargs + + def _apply(self, group): + try: + from rdkit import Chem + except ImportError: + raise ImportError("RDKit is required for SMARTS-based atom " + "selection but it's not installed. Try " + "installing it with \n" + "conda install -c conda-forge rdkit") + pattern = Chem.MolFromSmarts(self.pattern) + if not pattern: + raise ValueError(f"{self.pattern!r} is not a valid SMARTS query") + mol = group.convert_to("RDKIT", **self.rdkit_kwargs) + self.smarts_kwargs.setdefault("useChirality", True) + self.smarts_kwargs.setdefault("maxMatches", max(1000, len(group) * 10)) + matches = mol.GetSubstructMatches(pattern, **self.smarts_kwargs) + if len(matches) == self.smarts_kwargs["maxMatches"]: + warnings.warn("Your smarts-based atom selection returned the max" + "number of matches. This indicates that not all" + "matching atoms were selected. When calling" + "atom_group.select_atoms(), the default value" + "of maxMatches is max(100, len(atom_group * 10)). " + "To fix this, add the following argument to " + "select_atoms: \n" + "smarts_kwargs={maxMatches: <higher_value>}") + # flatten all matches and remove duplicated indices + indices = np.unique([idx for match in matches for idx in match]) + # create boolean mask for atoms based on index + mask = np.in1d(range(group.n_atoms), indices) + return group[mask]
+ + +
[docs]class ResidSelection(Selection): + """Select atoms based on numerical fields + + Allows the use of ':', '-' and 'to' to specify a range of values + For example + + resid 1:10 + """ + token = 'resid' + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + values = grab_not_keywords(tokens) + if not values: + raise ValueError("Unexpected token: '{0}'".format(tokens[0])) + + values = join_separated_values(values) + + # each value in uppers and lowers is a tuple of (resid, icode) + uppers = [] + lowers = [] + + for val in values: + m1 = re.match(f"({INT_PATTERN})" + r"(\w?)$", val) + if not m1 is None: + res = m1.groups() + lower = int(res[0]), res[1] + upper = None, None + else: + # check if in appropriate format 'lower:upper' or 'lower-upper' + # each val is one or more digits, maybe a letter + pattern = f"({INT_PATTERN})(\\w?){RANGE_PATTERN}" + pattern += f"({INT_PATTERN})(\\w?)" + selrange = re.match(pattern, val) + if selrange is None: # re.match returns None on failure + raise ValueError("Failed to parse value: {0}".format(val)) + res = selrange.groups() + # resid and icode + lower = int(res[0]), res[1] + upper = int(res[2]), res[3] + + lowers.append(lower) + uppers.append(upper) + + self.lowers = lowers + self.uppers = uppers + + def _apply(self, group): + # Grab arrays here to reduce number of calls to main topology + vals = group.resids + try: # optional attribute + icodes = group.icodes + except (AttributeError, NoDataError): + icodes = None + # if no icodes and icodes are part of selection, cause a fuss + if (any(v[1] for v in self.uppers) or + any(v[1] for v in self.lowers)): + errmsg = ("Selection specified icodes, while the topology " + "doesn't have any.") + raise ValueError(errmsg) from None + + if not icodes is None: + mask = self._sel_with_icodes(vals, icodes) + else: + mask = self._sel_without_icodes(vals) + + return group[mask] + + def _sel_without_icodes(self, vals): + # Final mask that gets applied to group + mask = np.zeros(len(vals), dtype=bool) + + for (u_resid, _), (l_resid, _) in zip(self.uppers, self.lowers): + if u_resid is not None: # range selection + thismask = vals >= l_resid + thismask &= vals <= u_resid + else: # single residue selection + thismask = vals == l_resid + + mask |= thismask + + return mask + + def _sel_with_icodes(self, vals, icodes): + # Final mask that gets applied to group + mask = np.zeros(len(vals), dtype=bool) + + for (u_resid, u_icode), (l_resid, l_icode) in zip(self.uppers, self.lowers): + if u_resid is not None: # Selecting a range + # Special case, if l_resid == u_resid, ie 163A-163C, this simplifies to: + # all 163, and A <= icode <= C + if l_resid == u_resid: + thismask = vals == l_resid + thismask &= icodes >= l_icode + thismask &= icodes <= u_icode + # For 163A to 166B we want: + # [START] all 163 and icode >= 'A' + # [MIDDLE] all of 164 and 165, any icode + # [END] 166 and icode <= 'B' + else: + # start of range + startmask = vals == l_resid + startmask &= icodes >= l_icode + thismask = startmask + + # middle of range + mid = np.arange(l_resid + 1, u_resid) + if len(mid): # if there are any resids in the middle + mid_beg, mid_end = mid[0], mid[-1] + midmask = vals >= mid_beg + midmask &= vals <= mid_end + + thismask |= midmask + + # end of range + endmask = vals == u_resid + endmask &= icodes <= u_icode + + thismask |= endmask + else: # Selecting a single residue + thismask = vals == l_resid + thismask &= icodes == l_icode + + mask |= thismask + + return mask
+ + +
[docs]class BoolSelection(Selection): + """Selection for boolean values""" + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + values = grab_not_keywords(tokens) + if not values: + values = ["true"] + + self.values = [] + for val in values: + lower = val.lower() + if lower == "false": + bval = False + elif lower == "true": + bval = True + else: + raise ValueError(f"'{val}' is an invalid value " + "for boolean selection. " + "Use 'True' or 'False'") + self.values.append(bval) + + def _apply(self, group): + vals = getattr(group, self.field) + mask = np.zeros(len(vals), dtype=bool) + for val in self.values: + mask |= vals == val + return group[mask]
+ + +
[docs]class RangeSelection(Selection): + """Range selection for int values""" + + value_offset = 0 + pattern = f"({INT_PATTERN}){RANGE_PATTERN}({INT_PATTERN})" + dtype = int + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + self.rtol = parser.rtol + self.atol = parser.atol + + values = grab_not_keywords(tokens) + if not values: + raise ValueError("Unexpected token: '{0}'".format(tokens[0])) + + values = join_separated_values(values) + + uppers = [] # upper limit on any range + lowers = [] # lower limit on any range + + for val in values: + try: + lower = self.dtype(val) + upper = None + except ValueError: + # check if in appropriate format 'lower:upper' or 'lower-upper' + selrange = re.match(self.pattern, val) + if not selrange: + errmsg = f"Failed to parse number: {val}" + raise ValueError(errmsg) from None + lower, upper = map(self.dtype, selrange.groups()) + + lowers.append(lower) + uppers.append(upper) + + self.lowers = lowers + self.uppers = uppers + + def _apply(self, group): + mask = np.zeros(len(group), dtype=bool) + vals = getattr(group, self.field) + self.value_offset + + for upper, lower in zip(self.uppers, self.lowers): + if upper is not None: + thismask = vals >= lower + thismask &= vals <= upper + else: + thismask = vals == lower + + mask |= thismask + return group[mask]
+ + +
[docs]class FloatRangeSelection(RangeSelection): + """Range selection for float values""" + + pattern = f"({FLOAT_PATTERN}){RANGE_PATTERN}({FLOAT_PATTERN})" + dtype = float + + def _apply(self, group): + mask = np.zeros(len(group), dtype=bool) + vals = getattr(group, self.field) + self.value_offset + + for upper, lower in zip(self.uppers, self.lowers): + if upper is not None: + thismask = vals >= lower + thismask &= vals <= upper + else: + low, high = lower - 1, lower + 1 + fp = "https://docs.python.org/3.8/tutorial/floatingpoint.html" + msg = ("Using float equality to select atoms is " + "not recommended because of inherent " + "limitations in representing numbers on " + f"computers (see {fp} for more). " + "Instead, we recommend using a range " + f"to select, e.g. '{self.token} {low} to {high}'. " + "If you still want to compare floats, use the " + "`atol` and `rtol` keywords to modify the tolerance " + "for `np.isclose`.") + warnings.warn(msg, category=SelectionWarning) + thismask = np.isclose(vals, lower, atol=self.atol, + rtol=self.rtol) + + mask |= thismask + return group[mask]
+ + +
[docs]class ByNumSelection(RangeSelection): + token = 'bynum' + field = 'indices' + value_offset = 1 # queries are in 1 based indices
+ + +
[docs]class ProteinSelection(Selection): + """Consists of all residues with recognized residue names. + + Recognized residue names in :attr:`ProteinSelection.prot_res`. + + * from the CHARMM force field:: + awk '/RESI/ {printf "'"'"%s"'"',",$2 }' top_all27_prot_lipid.rtf + + * manually added special CHARMM, OPLS/AA and Amber residue names. + + See Also + -------- + :func:`MDAnalysis.lib.util.convert_aa_code` + + + .. versionchanged:: 1.0.1 + prot_res changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'protein' + + prot_res = { + # CHARMM top_all27_prot_lipid.rtf + 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLN', 'GLU', 'GLY', 'HSD', + 'HSE', 'HSP', 'ILE', 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'SER', 'THR', + 'TRP', 'TYR', 'VAL', 'ALAD', + ## 'CHO','EAM', # -- special formyl and ethanolamine termini of gramicidin + # PDB + 'HIS', 'MSE', + # from Gromacs 4.5.3 oplsaa.ff/aminoacids.rtp + 'ARGN', 'ASPH', 'CYS2', 'CYSH', 'QLN', 'PGLU', 'GLUH', 'HIS1', 'HISD', + 'HISE', 'HISH', 'LYSH', + # from Gromacs 4.5.3 gromos53a6.ff/aminoacids.rtp + 'ASN1', 'CYS1', 'HISA', 'HISB', 'HIS2', + # from Gromacs 4.5.3 amber03.ff/aminoacids.rtp + 'HID', 'HIE', 'HIP', 'ORN', 'DAB', 'LYN', 'HYP', 'CYM', 'CYX', 'ASH', + 'GLH', 'ACE', 'NME', + # from Gromacs 2016.3 amber99sb-star-ildn.ff/aminoacids.rtp + 'NALA', 'NGLY', 'NSER', 'NTHR', 'NLEU', 'NILE', 'NVAL', 'NASN', 'NGLN', + 'NARG', 'NHID', 'NHIE', 'NHIP', 'NTRP', 'NPHE', 'NTYR', 'NGLU', 'NASP', + 'NLYS', 'NPRO', 'NCYS', 'NCYX', 'NMET', 'CALA', 'CGLY', 'CSER', 'CTHR', + 'CLEU', 'CILE', 'CVAL', 'CASF', 'CASN', 'CGLN', 'CARG', 'CHID', 'CHIE', + 'CHIP', 'CTRP', 'CPHE', 'CTYR', 'CGLU', 'CASP', 'CLYS', 'CPRO', 'CCYS', + 'CCYX', 'CMET', 'CME', 'ASF', + } + + def _apply(self, group): + resname_attr = group.universe._topology.resnames + # which values in resname attr are in prot_res? + matches = [ix for (nm, ix) in resname_attr.namedict.items() + if nm in self.prot_res] + # index of each atom's resname + nmidx = resname_attr.nmidx[group.resindices] + # intersect atom's resname index and matches to prot_res + return group[np.in1d(nmidx, matches)]
+ + +
[docs]class NucleicSelection(Selection): + """All atoms in nucleic acid residues with recognized residue names. + + Recognized residue names: + + * from the CHARMM force field :: + awk '/RESI/ {printf "'"'"%s"'"',",$2 }' top_all27_prot_na.rtf + * recognized: 'ADE', 'URA', 'CYT', 'GUA', 'THY' + * recognized (CHARMM in Gromacs): 'DA', 'DU', 'DC', 'DG', 'DT' + + .. versionchanged:: 0.8 + additional Gromacs selections + .. versionchanged:: 1.0.1 + nucl_res changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'nucleic' + + nucl_res = { + 'ADE', 'URA', 'CYT', 'GUA', 'THY', 'DA', 'DC', 'DG', 'DT', 'RA', + 'RU', 'RG', 'RC', 'A', 'T', 'U', 'C', 'G', + 'DA5', 'DC5', 'DG5', 'DT5', + 'DA3', 'DC3', 'DG3', 'DT3', + 'RA5', 'RU5', 'RG5', 'RC5', + 'RA3', 'RU3', 'RG3', 'RC3' + } + + def _apply(self, group): + resnames = group.universe._topology.resnames + nmidx = resnames.nmidx[group.resindices] + + matches = [ix for (nm, ix) in resnames.namedict.items() + if nm in self.nucl_res] + mask = np.in1d(nmidx, matches) + + return group[mask]
+ + +
[docs]class BackboneSelection(ProteinSelection): + """A BackboneSelection contains all atoms with name 'N', 'CA', 'C', 'O'. + + This excludes OT* on C-termini + (which are included by, eg VMD's backbone selection). + + + .. versionchanged:: 1.0.1 + bb_atoms changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'backbone' + bb_atoms = {'N', 'CA', 'C', 'O'} + + def _apply(self, group): + atomnames = group.universe._topology.names + resnames = group.universe._topology.resnames + + # filter by atom names + name_matches = [ix for (nm, ix) in atomnames.namedict.items() + if nm in self.bb_atoms] + nmidx = atomnames.nmidx[group.ix] + group = group[np.in1d(nmidx, name_matches)] + + # filter by resnames + resname_matches = [ix for (nm, ix) in resnames.namedict.items() + if nm in self.prot_res] + nmidx = resnames.nmidx[group.resindices] + group = group[np.in1d(nmidx, resname_matches)] + + return group.unique
+ + +
[docs]class NucleicBackboneSelection(NucleicSelection): + """Contains all atoms with name "P", "C5'", C3'", "O3'", "O5'". + + These atoms are only recognized if they are in a residue matched + by the :class:`NucleicSelection`. + + + .. versionchanged:: 1.0.1 + bb_atoms changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'nucleicbackbone' + bb_atoms = {"P", "C5'", "C3'", "O3'", "O5'"} + + def _apply(self, group): + atomnames = group.universe._topology.names + resnames = group.universe._topology.resnames + + # filter by atom names + name_matches = [ix for (nm, ix) in atomnames.namedict.items() + if nm in self.bb_atoms] + nmidx = atomnames.nmidx[group.ix] + group = group[np.in1d(nmidx, name_matches)] + + # filter by resnames + resname_matches = [ix for (nm, ix) in resnames.namedict.items() + if nm in self.nucl_res] + nmidx = resnames.nmidx[group.resindices] + group = group[np.in1d(nmidx, resname_matches)] + + return group.unique
+ + +
[docs]class BaseSelection(NucleicSelection): + """Selection of atoms in nucleobases. + + Recognized atom names (from CHARMM): + + 'N9', 'N7', 'C8', 'C5', 'C4', 'N3', 'C2', 'N1', 'C6', + 'O6','N2','N6', 'O2','N4','O4','C5M' + + + .. versionchanged:: 1.0.1 + base_atoms changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'nucleicbase' + base_atoms = { + 'N9', 'N7', 'C8', 'C5', 'C4', 'N3', 'C2', 'N1', 'C6', + 'O6', 'N2', 'N6', + 'O2', 'N4', 'O4', 'C5M'} + + def _apply(self, group): + atomnames = group.universe._topology.names + resnames = group.universe._topology.resnames + + # filter by atom names + name_matches = [ix for (nm, ix) in atomnames.namedict.items() + if nm in self.base_atoms] + nmidx = atomnames.nmidx[group.ix] + group = group[np.in1d(nmidx, name_matches)] + + # filter by resnames + resname_matches = [ix for (nm, ix) in resnames.namedict.items() + if nm in self.nucl_res] + nmidx = resnames.nmidx[group.resindices] + group = group[np.in1d(nmidx, resname_matches)] + + return group.unique
+ + +
[docs]class NucleicSugarSelection(NucleicSelection): + """Contains all atoms with name C1', C2', C3', C4', O2', O4', O3'. + + + .. versionchanged:: 1.0.1 + sug_atoms changed to set (from numpy array) + performance improved by ~100x on larger systems + """ + token = 'nucleicsugar' + sug_atoms = {"C1'", "C2'", "C3'", "C4'", "O4'"} + + def _apply(self, group): + atomnames = group.universe._topology.names + resnames = group.universe._topology.resnames + + # filter by atom names + name_matches = [ix for (nm, ix) in atomnames.namedict.items() + if nm in self.sug_atoms] + nmidx = atomnames.nmidx[group.ix] + group = group[np.in1d(nmidx, name_matches)] + + # filter by resnames + resname_matches = [ix for (nm, ix) in resnames.namedict.items() + if nm in self.nucl_res] + nmidx = resnames.nmidx[group.resindices] + group = group[np.in1d(nmidx, resname_matches)] + + return group.unique
+ + +
[docs]class PropertySelection(Selection): + """Some of the possible properties: + x, y, z, radius, mass, + + .. versionchanged:: 2.0.0 + changed == operator to use np.isclose instead of np.equals. + Added ``atol`` and ``rtol`` keywords to control ``np.isclose`` + tolerance. + """ + token = 'prop' + ops = dict([ + ('>', np.greater), + ('<', np.less), + ('>=', np.greater_equal), + ('<=', np.less_equal), + ('==', np.isclose), + ('!=', np.not_equal), + ]) + # order here is important, need to check <= before < so the + # larger (in terms of string length) symbol is considered first + _op_symbols = ('<=', '>=', '==', '!=', '<', '>') + + # symbols to replace with when flipping + # eg 6 > x -> x <= 6, 5 == x -> x == 5 + opposite_ops = { + '==': '==', '!=': '!=', + '<': '>=', '>=': '<', + '>': '<=', '<=': '>', + } + + props = {"x": "positions", + "y": "positions", + "z": "positions"} + + def __init__(self, parser, tokens): + """ + Possible splitting around operator: + + prop x < 5 + prop x< 5 + prop x <5 + prop x<5 + """ + super().__init__(parser, tokens) + + prop = tokens.popleft() + oper = None + value = None + if prop == "abs": + self.absolute = True + prop = tokens.popleft() + else: + self.absolute = False + + # check if prop has any extra information atm + for possible in self._op_symbols: + try: + x, y = prop.split(possible) + except ValueError: + # won't unpack into 2 args unless *possible* is present + pass + else: + prop = x + oper = possible + y # add back after splitting + break + + if oper is None: + oper = tokens.popleft() + # check if oper has the value appended + for possible in self._op_symbols: + if possible in oper: + x, y = oper.split(possible) + if y: # '<='.split('<=') == ['', ''], therefore y won't exist + oper = possible + value = y + break + + if value is None: + value = tokens.popleft() + + # check if we flip prop and value + # eg 5 > x -> x <= 5 + if value in self.props: + prop, value = value, prop + oper = self.opposite_ops[oper] + + self.prop = prop + try: + self.operator = self.ops[oper] + except KeyError: + errmsg = (f"Invalid operator : '{oper}' Use one of : " + f"'{self.ops.keys()}'") + raise ValueError(errmsg) from None + else: + if oper == "==": + self.operator = functools.partial(self.operator, + atol=parser.atol, + rtol=parser.rtol) + self.value = float(value) + + def _apply(self, group): + try: + values = getattr(group, self.props[self.prop]) + except KeyError: + errmsg = f"Expected one of {list(self.props.keys())}" + raise SelectionError(errmsg) from None + except NoDataError: + attr = self.props[self.prop] + errmsg = f"This Universe does not contain {attr} information" + raise SelectionError(errmsg) from None + + try: + col = {'x': 0, 'y': 1, 'z': 2}[self.prop] + except KeyError: + pass + else: + values = values[:, col] + + if self.absolute: + values = np.abs(values) + mask = self.operator(values, self.value) + + return group[mask]
+ + +
[docs]class SameSelection(Selection): + """ + Selects all atoms that have the same subkeyword value as any atom in selection + + .. versionchanged:: 1.0.0 + Map :code:`"residue"` to :code:`"resindices"` and :code:`"segment"` to + :code:`"segindices"` (see #2669 and #2672) + """ + + token = 'same' + precedence = 1 + + prop_trans = { + 'fragment': None, + 'x': None, + 'y': None, + 'z': None, + 'residue': 'resindices', + 'segment': 'segindices', + 'name': 'names', + 'type': 'types', + 'resname': 'resnames', + 'resid': 'resids', + 'segid': 'segids', + 'mass': 'masses', + 'charge': 'charges', + 'radius': 'radii', + 'bfactor': 'bfactors', + 'resnum': 'resnums', + } + + def __init__(self, parser, tokens): + super().__init__(parser, tokens) + + prop = tokens.popleft() + if prop not in self.prop_trans: + raise ValueError("Unknown same property : {0}" + "Choose one of : {1}" + "".format(prop, self.prop_trans.keys())) + self.prop = prop + parser.expect("as") + self.sel = parser.parse_expression(self.precedence) + self.prop = prop + + def _apply(self, group): + res = self.sel.apply(group) + if not res: + return group[[]] # empty selection + + # Fragment must come before self.prop_trans lookups! + if self.prop == 'fragment': + # Combine all fragments together, then check where group + # indices are same as fragment(s) indices + allfrags = functools.reduce(lambda x, y: x + y, res.fragments) + + mask = np.in1d(group.indices, allfrags.indices) + return group[mask] + # [xyz] must come before self.prop_trans lookups too! + try: + pos_idx = {'x': 0, 'y': 1, 'z': 2}[self.prop] + except KeyError: + # The self.prop string was already checked, + # so don't need error checking here. + # KeyError at this point is impossible! + attrname = self.prop_trans[self.prop] + vals = getattr(res, attrname) + mask = np.in1d(getattr(group, attrname), vals) + + return group[mask] + else: + vals = res.positions[:, pos_idx] + pos = group.positions[:, pos_idx] + + # isclose only does one value at a time + mask = np.vstack([np.isclose(pos, v) + for v in vals]).any(axis=0) + return group[mask]
+ + +
[docs]class SelectionParser(object): + """A small parser for selection expressions. Demonstration of + recursive descent parsing using Precedence climbing (see + http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm). Transforms + expressions into nested Selection tree. + + For reference, the grammar that we parse is :: + + E(xpression)--> Exp(0) + Exp(p) --> P {B Exp(q)} + P --> U Exp(q) | "(" E ")" | v + B(inary) --> "and" | "or" + U(nary) --> "not" + T(erms) --> segid [value] + | resname [value] + | resid [value] + | name [value] + | type [value] + """ + # Borg pattern: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66531 + _shared_state = {} + + def __new__(cls, *p, **k): + self = object.__new__(cls, *p, **k) + self.__dict__ = cls._shared_state + return self + +
[docs] def expect(self, token): + """Anticipate and remove a given token""" + if self.tokens[0] == token: + self.tokens.popleft() + else: + raise SelectionError( + "Unexpected token: '{0}' Expected: '{1}'" + "".format(self.tokens[0], token))
+ +
[docs] def parse(self, selectstr, selgroups, periodic=None, atol=1e-08, + rtol=1e-05, sorted=True, rdkit_kwargs=None, smarts_kwargs=None): + """Create a Selection object from a string. + + Parameters + ---------- + selectstr : str + The string that describes the selection + selgroups : AtomGroups + AtomGroups to be used in `group` selections + periodic : bool, optional + for distance based selections, whether to consider + periodic boundary conditions + atol : float, optional + The absolute tolerance parameter for float comparisons. + Passed to :func:`numpy.isclose`. + rtol : float, optional + The relative tolerance parameter for float comparisons. + Passed to :func:`numpy.isclose`. + sorted : bool, optional + Whether to sorted the output AtomGroup. + rdkit_kwargs : dict, optional + Arguments passed to the RDKitConverter when using selection based + on SMARTS queries + smarts_kwargs : dict, optional + Arguments passed internally to RDKit's `GetSubstructMatches + <https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.Mol.GetSubstructMatches>`_. + + Returns + ------- + The appropriate Selection object. Use the .apply method on + this to perform the selection. + + Raises + ------ + SelectionError + If anything goes wrong in creating the Selection object. + + + .. versionchanged:: 2.0.0 + Added `atol` and `rtol` keywords to select float values. Added + `rdkit_kwargs` to pass arguments to the RDKitConverter + .. versionchanged:: 2.2.0 + Added ``smarts_kwargs`` argument, allowing users to pass a + a dictionary of arguments to RDKit's ``GetSubstructMatches``. + """ + self.periodic = periodic + self.atol = atol + self.rtol = rtol + self.sorted = sorted + self.rdkit_kwargs = rdkit_kwargs or {} + self.smarts_kwargs = smarts_kwargs or {} + + self.selectstr = selectstr + self.selgroups = selgroups + tokens = selectstr.replace('(', ' ( ').replace(')', ' ) ') + self.tokens = collections.deque(tokens.split() + [None]) + parsetree = self.parse_expression(0) + if self.tokens[0] is not None: + raise SelectionError( + "Unexpected token at end of selection string: '{0}'" + "".format(self.tokens[0])) + return parsetree
+ + def parse_expression(self, p): + exp1 = self._parse_subexp() + while (self.tokens[0] in _OPERATIONS and + _OPERATIONS[self.tokens[0]].precedence >= p): + op = _OPERATIONS[self.tokens.popleft()] + q = 1 + op.precedence + exp2 = self.parse_expression(q) + exp1 = op(exp1, exp2, self) + return exp1 + + def _parse_subexp(self): + op = self.tokens.popleft() + + if op == '(': + exp = self.parse_expression(0) + self.expect(')') + return exp + + try: + return _SELECTIONDICT[op](self, self.tokens) + except KeyError: + errmsg = f"Unknown selection token: '{op}'" + raise SelectionError(errmsg) from None + except ValueError as e: + errmsg = f"Selection failed: '{e}'" + raise SelectionError(errmsg) from None
+ + +# The module level instance +Parser = SelectionParser() + +# create a module container to avoid name clashes of autogenerated classes +_selectors = types.ModuleType(f"{__name__}._selectors", + doc="Automatically generated selectors") +# stick it in sys.modules so pickle can find it +sys.modules[_selectors.__name__] = _selectors + + +
[docs]def gen_selection_class(singular, attrname, dtype, per_object): + """Selection class factory for arbitrary TopologyAttrs. + + Normally this should not be used except within the codebase + or by developers; it is called by the metaclass + :class:`MDAnalysis.core.topologyattrs._TopologyAttrMeta` to + auto-generate suitable selection classes by creating a token + with the topology attribute (singular) name. The function + uses the provided ``dtype`` to choose which Selection class + to subclass: + + * :class:`BoolSelection` for booleans + * :class:`RangeSelection` for integers + * :class:`FloatRangeSelection` for floats + * :class:`_ProtoStringSelection` for strings + + Other value types are not yet supported and will raise a + ValueError. The classes are created in the :mod:`_selectors` + module to avoid namespace clashes. + + Parameters + ---------- + singular: str + singular name of TopologyAttr + attrname: str + attribute name of TopologyAttr + dtype: type + type of TopologyAttr + per_object: str + level of TopologyAttr + + Returns + ------- + selection: subclass of Selection + + Raises + ------ + ValueError + If ``dtype`` is not one of the supported types + + + Example + ------- + + The function creates a class inside ``_selectors`` and returns it. + Normally it should not need to be manually called, as it is created + for each TopologyAttr:: + + >>> gen_selection_class("resname", "resnames", object, "residue") + <class 'MDAnalysis.core.selection._selectors.ResnameSelection'> + + Simply generating this selector is sufficient for the keyword to be + accessible by :meth:`~MDAnalysis.core.universe.Universe.select_atoms`, + as that is automatically handled by + :class:`~MDAnalysis.core.selections._Selectionmeta`. + + See also + -------- + :class:`MDAnalysis.core.topologyattrs._TopologyAttrMeta` + + .. versionadded:: 2.0.0 + """ + basedct = {"token": singular, "field": attrname, + # manually make modules the _selectors wrapper + "__module__": _selectors.__name__} + name = f"{singular.capitalize()}Selection" + + if dtype == 'U1': # order is important here, U1 will trip up issubclass + basecls = SingleCharSelection + elif issubclass(dtype, bool): + basecls = BoolSelection + elif np.issubdtype(dtype, np.integer): + basecls = RangeSelection + elif np.issubdtype(dtype, np.floating): + basecls = FloatRangeSelection + elif issubclass(dtype, str) or dtype == object: + basecls = _ProtoStringSelection + if per_object == "segment": + basedct["level"] = "segindices" + elif per_object == "residue": + basedct["level"] = "resindices" + else: + basedct["level"] = "ix" + else: + raise ValueError(f"No base class defined for dtype {dtype}. " + "Define a Selection class manually by " + "subclassing core.selection.Selection") + + cls = type(name, (basecls,), basedct) + setattr(_selectors, name, cls) # stick it in _selectors + return cls
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/topology.html b/2.7.0-dev0/_modules/MDAnalysis/core/topology.html new file mode 100644 index 0000000000..65a6307ae7 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/topology.html @@ -0,0 +1,784 @@ + + + + + + MDAnalysis.core.topology — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core.topology

+# -*- 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-2017 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
+#
+
+"""\
+Core Topology object --- :mod:`MDAnalysis.core.topology`
+========================================================
+
+.. versionadded:: 0.16.0
+
+:class:`Topology` is the core object that holds all topology information.
+
+TODO: Add in-depth discussion.
+
+Notes
+-----
+For developers: In MDAnalysis 0.16.0 this new topology system was
+introduced and discussed as issue `#363`_; this issue contains key
+information and discussions on the new system. The issue number *363*
+is also being used as a short-hand in discussions to refer to the new
+topology system.
+
+
+.. _`#363`: https://github.com/MDAnalysis/mdanalysis/issues/363
+
+Classes
+-------
+
+.. autoclass:: Topology
+   :members:
+.. autoclass:: TransTable
+   :members:
+
+Helper functions
+----------------
+
+.. autofunction:: make_downshift_arrays
+
+"""
+import contextlib
+
+import numpy as np
+import typing
+
+from .topologyattrs import Atomindices, Resindices, Segindices
+from ..exceptions import NoDataError
+
+
+
[docs]def make_downshift_arrays(upshift, nparents): + """From an upwards translation table, create the opposite direction + + Turns a many to one mapping (eg atoms to residues) to a one to many mapping + (residues to atoms) + + Parameters + ---------- + upshift : array_like + Array of integers describing which parent each item belongs to + nparents : integer + Total number of parents that exist. + + Returns + ------- + downshift : array_like (dtype object) + An array of arrays, each containing the indices of the children + of each parent. Length `nparents` + 1 + + Examples + -------- + + To find the residue to atom mappings for a given atom to residue mapping: + + >>> import numpy as np + >>> import MDAnalysis as mda + >>> from MDAnalysis.core.topology import make_downshift_arrays + >>> atom2res = np.array([0, 1, 0, 2, 2, 0, 2]) + >>> make_downshift_arrays(atom2res, 3) + array([array([0, 2, 5]), array([1]), array([3, 4, 6]), None], dtype=object) + + Entry 0 corresponds to residue 0 and says that this contains atoms 0, 2 & 5 + + Notes + ----- + The final entry in the return array will be ``None`` to ensure that the + dtype of the array is :class:`object`. + + .. warning:: This means negative indexing should **never** + be used with these arrays. + """ + if not len(upshift): + return np.array([], dtype=object) + + # mergesort for a stable ordered array for the same value. + order = np.argsort(upshift, kind="mergesort") + + upshift_sorted = upshift[order] + u_values, indices = np.unique(upshift_sorted, return_index=True) + + # reset nparents to the larger one between input and heuristic from data + # This is useful for creating empty Universe where default value is 1. + nparents = np.max([nparents, u_values.max()+1]) + residue_indices = np.zeros(nparents, dtype=int) + missing_resids = np.sort(np.setdiff1d(np.arange(nparents), u_values)) + indices = np.append(indices, upshift_sorted.shape[0]) + + residue_indices[u_values] = indices[1:] + + for missing_resid in missing_resids: + if missing_resid == 0: + residue_indices[missing_resid] = 0 + else: + residue_indices[missing_resid] = residue_indices[missing_resid-1] + + downshift = np.split(order, residue_indices[:-1]) + # Add None to end of array to force it to be of type Object + # Without this, a rectangular array gets squashed into a single array + downshift.append(None) + return np.array(downshift, dtype=object)
+ + +
[docs]class TransTable(object): + """Membership tables with methods to translate indices across levels. + + There are three levels; Atom, Residue and Segment. Each Atom **must** + belong in a Residue, each Residue **must** belong to a Segment. + + When translating upwards, eg finding which Segment a Residue belongs in, + a single numpy array is returned. When translating downwards, two options + are available; a concatenated result (suffix `_1`) or a list for each parent + object (suffix `_2d`). + + Parameters + ---------- + n_atoms : int + number of atoms in topology + n_residues : int + number of residues in topology + n_segments : int + number of segments in topology + atom_resindex : 1-D array + resindex for each atom in the topology; the number of unique values in + this array must be <= `n_residues`, and the array must be length + `n_atoms`; giving None defaults to placing all atoms in residue 0 + residue_segindex : 1-D array + segindex for each residue in the topology; the number of unique values + in this array must be <= `n_segments`, and the array must be length + `n_residues`; giving None defaults to placing all residues in segment 0 + + + Attributes + ---------- + n_atoms : int + number of atoms in topology + n_residues : int + number of residues in topology + n_segments : int + number of segments in topology + size : tuple + tuple ``(n_atoms, n_residues, n_segments)`` describing the shape of + the TransTable + + .. versionchanged:: 2.3.0 + Lazy building RA and SR. + """ + def __init__(self, + n_atoms, n_residues, n_segments, # Size of tables + atom_resindex=None, residue_segindex=None, # Contents of tables + ): + self.n_atoms = n_atoms + self.n_residues = n_residues + self.n_segments = n_segments + + # built atom-to-residue mapping, and vice-versa + if atom_resindex is None: + self._AR = np.zeros(n_atoms, dtype=np.intp) + else: + self._AR = np.asarray(atom_resindex, dtype=np.intp).copy() + if not len(self._AR) == n_atoms: + raise ValueError("atom_resindex must be len n_atoms") + self._RA = None + + # built residue-to-segment mapping, and vice-versa + if residue_segindex is None: + self._RS = np.zeros(n_residues, dtype=np.intp) + else: + self._RS = np.asarray(residue_segindex, dtype=np.intp).copy() + if not len(self._RS) == n_residues: + raise ValueError("residue_segindex must be len n_residues") + self._SR = None + +
[docs] def copy(self): + """Return a deepcopy of this Transtable""" + return self.__class__(self.n_atoms, self.n_residues, self.n_segments, + atom_resindex=self._AR, residue_segindex=self._RS)
+ + @property + def RA(self): + if self._RA is None: + self._RA = make_downshift_arrays(self._AR, + self.n_residues) + return self._RA + + @property + def SR(self): + if self._SR is None: + self._SR = make_downshift_arrays(self._RS, + self.n_segments) + return self._SR + + @property + def size(self): + """The shape of the table, ``(n_atoms, n_residues, n_segments)``. + + :meta private: + """ + return (self.n_atoms, self.n_residues, self.n_segments) + +
[docs] def atoms2residues(self, aix): + """Get residue indices for each atom. + + Parameters + ---------- + aix : array + atom indices + + Returns + ------- + rix : array + residue index for each atom + + """ + return self._AR[aix]
+ +
[docs] def residues2atoms_1d(self, rix): + """Get atom indices collectively represented by given residue indices. + + Parameters + ---------- + rix : array + residue indices + + Returns + ------- + aix : array + indices of atoms present in residues, collectively + + """ + RA = self.RA + try: + return np.concatenate(RA[rix]) + except ValueError: # rix is not iterable or empty + # don't accidentally return a view! + return RA[rix].astype(np.intp, copy=True)
+ +
[docs] def residues2atoms_2d(self, rix): + """Get atom indices represented by each residue index. + + Parameters + ---------- + rix : array + residue indices + + Returns + ------- + raix : list + each element corresponds to a residue index, in order given in + `rix`, with each element being an array of the atom indices present + in that residue + + """ + RA = self.RA + try: + return [RA[r].copy() for r in rix] + except TypeError: + return [RA[rix].copy()] # why would this be singular for 2d?
+ +
[docs] def residues2segments(self, rix): + """Get segment indices for each residue. + + Parameters + ---------- + rix : array + residue indices + + Returns + ------- + six : array + segment index for each residue + + """ + return self._RS[rix]
+ +
[docs] def segments2residues_1d(self, six): + """Get residue indices collectively represented by given segment indices + + Parameters + ---------- + six : array + segment indices + + Returns + ------- + rix : array + sorted indices of residues present in segments, collectively + + """ + SR = self.SR + try: + return np.concatenate(SR[six]) + except ValueError: # six is not iterable or empty + # don't accidentally return a view! + return SR[six].astype(np.intp, copy=True)
+ +
[docs] def segments2residues_2d(self, six): + """Get residue indices represented by each segment index. + + Parameters + ---------- + six : array + residue indices + + Returns + ------- + srix : list + each element corresponds to a segment index, in order given in + `six`, with each element being an array of the residue indices + present in that segment + + """ + SR = self.SR + try: + return [SR[s].copy() for s in six] + except TypeError: + return [SR[six].copy()]
+ + # Compound moves, does 2 translations +
[docs] def atoms2segments(self, aix): + """Get segment indices for each atom. + + Parameters + ---------- + aix : array + atom indices + + Returns + ------- + rix : array + segment index for each atom + + """ + rix = self.atoms2residues(aix) + return self.residues2segments(rix)
+ +
[docs] def segments2atoms_1d(self, six): + """Get atom indices collectively represented by given segment indices. + + Parameters + ---------- + six : array + segment indices + + Returns + ------- + aix : array + sorted indices of atoms present in segments, collectively + + """ + rix = self.segments2residues_1d(six) + return self.residues2atoms_1d(rix)
+ +
[docs] def segments2atoms_2d(self, six): + """Get atom indices represented by each segment index. + + Parameters + ---------- + six : array + residue indices + + Returns + ------- + saix : list + each element corresponds to a segment index, in order given in + `six`, with each element being an array of the atom indices present + in that segment + + """ + # residues in EACH + rixs = self.segments2residues_2d(six) + return [self.residues2atoms_1d(rix) for rix in rixs]
+ + # Move between different groups. +
[docs] def move_atom(self, aix, rix): + """Move aix to be in rix""" + self._AR[aix] = rix + self._RA = None
+ +
[docs] def move_residue(self, rix, six): + """Move rix to be in six""" + self._RS[rix] = six + self._SR = None
+ + def add_Residue(self, segidx): + # segidx - index of parent + self.n_residues += 1 + self._RA = None + self._RS = np.concatenate([self._RS, np.array([segidx])]) + self._SR = None + + + return self.n_residues - 1 + + def add_Segment(self): + self.n_segments += 1 + self._SR = None + return self.n_segments - 1 + + def __getstate__(self): + # don't serialize _RA and _SR for performance. + attrs = self.__dict__ + attrs['_RA'] = None + attrs['_SR'] = None + return attrs
+ + +
[docs]class Topology(object): + """In-memory, array-based topology database. + + The topology model of MDanalysis features atoms, which must each be a + member of one residue. Each residue, in turn, must be a member of one + segment. The details of maintaining this heirarchy, and mappings of atoms + to residues, residues to segments, and vice-versa, are handled internally + by this object. + + """ + + def __init__(self, n_atoms=1, n_res=1, n_seg=1, + attrs=None, + atom_resindex=None, + residue_segindex=None): + """ + Parameters + ---------- + n_atoms : int + number of atoms in topology. Must be larger then 1 at each level + n_residues : int + number of residues in topology. Must be larger then 1 at each level + n_segments : int + number of segments in topology. Must be larger then 1 at each level + attrs : TopologyAttr objects + components of the topology to be included + atom_resindex : array + 1-D array giving the resindex of each atom in the system + residue_segindex : array + 1-D array giving the segindex of each residue in the system + + """ + self.tt = TransTable(n_atoms, n_res, n_seg, + atom_resindex=atom_resindex, + residue_segindex=residue_segindex) + + if attrs is None: + attrs = [] + # add core TopologyAttrs that give access to indices + attrs.extend((Atomindices(), Resindices(), Segindices())) + + # attach the TopologyAttrs + self.attrs = [] + for topologyattr in attrs: + self.add_TopologyAttr(topologyattr) + +
[docs] def copy(self): + """Return a deepcopy of this Topology""" + new = self.__class__(1, 1, 1) + # copy the tt + new.tt = self.tt.copy() + # remove indices + for attr in self.attrs: + if isinstance(attr, (Atomindices, Resindices, Segindices)): + continue + new.add_TopologyAttr(attr.copy()) + return new
+ + @property + def n_atoms(self): + return self.tt.n_atoms + + @property + def n_residues(self): + return self.tt.n_residues + + @property + def n_segments(self): + return self.tt.n_segments + +
[docs] def add_TopologyAttr(self, topologyattr): + """Add a new TopologyAttr to the Topology. + + Parameters + ---------- + topologyattr : TopologyAttr + + """ + self.attrs.append(topologyattr) + topologyattr.top = self + self.__setattr__(topologyattr.attrname, topologyattr)
+ +
[docs] def del_TopologyAttr(self, topologyattr): + """Remove a TopologyAttr from the Topology. + + If it is not present, nothing happens. + + Parameters + ---------- + topologyattr : TopologyAttr + + + .. versionadded:: 2.0.0 + """ + self.__delattr__(topologyattr.attrname) + self.attrs.remove(topologyattr)
+ + @property + def guessed_attributes(self): + """A list of the guessed attributes in this topology""" + return filter(lambda x: x.is_guessed + if(not isinstance(x.is_guessed, typing.Container)) + else True in x.is_guessed, self.attrs) + + @property + def read_attributes(self): + """A list of the attributes read from the topology""" + return filter(lambda x: not x.is_guessed + if(not isinstance(x.is_guessed, typing.Container)) + else False in x.is_guessed, self.attrs) + +
[docs] def add_Residue(self, segment, **new_attrs): + """ + Returns + ------- + residx of the new Residue + + Raises + ------ + NoDataError + If not all data was provided. This error is raised before any changes + + + .. versionchanged:: 2.1.0 + Added use of _add_new to TopologyAttr resize + """ + # Check that all data is here before making any changes + for attr in self.attrs: + if not attr.per_object == 'residue': + continue + if attr.singular not in new_attrs: + missing = (attr.singular for attr in self.attrs + if (attr.per_object == 'residue' and + attr.singular not in new_attrs)) + raise NoDataError("Missing the following attributes for the new" + " Residue: {}".format(', '.join(missing))) + + # Resize topology table + residx = self.tt.add_Residue(segment.segindex) + + # Add new value to each attribute + for attr in self.attrs: + if not attr.per_object == 'residue': + continue + newval = new_attrs[attr.singular] + attr._add_new(newval) + + return residx
+ +
[docs] def add_Segment(self, **new_attrs): + """Adds a new Segment to the Topology + + Parameters + ---------- + new_attrs : dict + the new attributes for the new segment, eg {'segid': 'B'} + + Raises + ------- + NoDataError + if an attribute wasn't specified. + + Returns + ------- + ix : int + the idx of the new segment + + + .. versionchanged:: 2.1.0 + Added use of _add_new to resize topology attrs + """ + for attr in self.attrs: + if attr.per_object == 'segment': + if attr.singular not in new_attrs: + missing = (attr.singular for attr in self.attrs + if (attr.per_object == 'segment' and + attr.singular not in new_attrs)) + raise NoDataError("Missing the following attributes for the" + " new Segment: {}" + "".format(', '.join(missing))) + + segidx = self.tt.add_Segment() + + for attr in self.attrs: + if not attr.per_object == 'segment': + continue + newval = new_attrs[attr.singular] + attr._add_new(newval) + + return segidx
+ +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/topologyattrs.html b/2.7.0-dev0/_modules/MDAnalysis/core/topologyattrs.html new file mode 100644 index 0000000000..3af5bc99b1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/topologyattrs.html @@ -0,0 +1,3459 @@ + + + + + + MDAnalysis.core.topologyattrs — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.core.topologyattrs

+# -*- 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-2017 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
+#
+
+r"""
+Topology attribute objects --- :mod:`MDAnalysis.core.topologyattrs`
+===================================================================
+
+Common :class:`TopologyAttr` instances that are used by most topology
+parsers.
+
+TopologyAttrs are used to contain attributes such as atom names or resids.
+These are usually read by the TopologyParser.
+
+References
+----------
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    Gray1984
+
+"""
+
+from collections import defaultdict
+import copy
+import functools
+import itertools
+import numbers
+from inspect import signature as inspect_signature
+import warnings
+import textwrap
+from types import MethodType
+
+import Bio.Seq
+import Bio.SeqRecord
+import numpy as np
+
+from ..lib.util import (cached, convert_aa_code, iterable, warn_if_not_unique,
+                        unique_int_1d, check_atomgroup_not_empty)
+from ..lib import transformations, mdamath
+from ..exceptions import NoDataError, SelectionError
+from .topologyobjects import TopologyGroup
+from . import selection
+from .groups import (ComponentBase, GroupBase,
+                     Atom, Residue, Segment,
+                     AtomGroup, ResidueGroup, SegmentGroup,
+                     check_wrap_and_unwrap, _pbc_to_wrap)
+from .. import _TOPOLOGY_ATTRS, _TOPOLOGY_TRANSPLANTS, _TOPOLOGY_ATTRNAMES
+
+
+def _check_length(func):
+    """Wrapper which checks the length of inputs to set_X
+
+    Eg:
+
+    @_check_length
+    def set_X(self, group, values):
+
+    Will check the length of *values* compared to *group* before proceeding with
+    anything in the *set_X* method.
+
+    Pseudo code for the check:
+
+    if group in (Atom, Residue, Segment):
+        values must be single values, ie int, float or string
+    else:
+        values must be single value OR same length as group
+
+    """
+    _SINGLE_VALUE_ERROR = ("Setting {cls} {attrname} with wrong sized input. "
+                           "Must use single value, length of supplied values: {lenvalues}.")
+    # Eg "Setting Residue resid with wrong sized input. Must use single value, length of supplied
+    # values: 2."
+
+    _GROUP_VALUE_ERROR = ("Setting {group} {attrname} with wrong sized array. "
+                          "Length {group}: {lengroup}, length of supplied values: {lenvalues}.")
+
+    # Eg "Setting AtomGroup masses with wrong sized array. Length AtomGroup: 100, length of
+    # supplied values: 50."
+
+    def _attr_len(values):
+        # quasi len measurement
+        # strings, floats, ints are len 0, ie not iterable
+        # other iterables are just len'd
+        if iterable(values):
+            return len(values)
+        else:
+            return 0  # special case
+
+    @functools.wraps(func)
+    def wrapper(attr, group, values):
+        val_len = _attr_len(values)
+
+        if isinstance(group, ComponentBase):
+            if not val_len == 0:
+                raise ValueError(_SINGLE_VALUE_ERROR.format(
+                    cls=group.__class__.__name__, attrname=attr.singular,
+                    lenvalues=val_len))
+        else:
+            if not (val_len == 0 or val_len == len(group)):
+                raise ValueError(_GROUP_VALUE_ERROR.format(
+                    group=group.__class__.__name__, attrname=attr.attrname,
+                    lengroup=len(group), lenvalues=val_len))
+        # if everything went OK, continue with the function
+        return func(attr, group, values)
+
+    return wrapper
+
+
+def _wronglevel_error(attr, group):
+    """Generate an error for setting attr at wrong level
+
+    attr : TopologyAttr that was accessed
+    group : Offending Component/Group
+
+    Eg:
+    setting mass of residue, gets called with attr=Masses, group=residue
+
+    raises a NotImplementedError with:
+    'Cannot set masses from Residue.  Use 'Residue.atoms.masses'
+
+    Mainly used to ensure consistent and helpful error messages
+    """
+    if isinstance(group, (Atom, AtomGroup)):
+        group_level = 1
+    elif isinstance(group, (Residue, ResidueGroup)):
+        group_level = 2
+    elif isinstance(group, (Segment, SegmentGroup)):
+        group_level = 3
+
+    # What level to go to before trying to set this attr
+    if isinstance(attr, AtomAttr):
+        corr_classes = ('atoms', 'atom')
+        attr_level = 1
+    elif isinstance(attr, ResidueAttr):
+        corr_classes = ('residues', 'residue')
+        attr_level = 2
+    elif isinstance(attr, SegmentAttr):
+        corr_classes = ('segments', 'segment')
+        attr_level = 3
+
+    if isinstance(group, ComponentBase) and (attr_level > group_level):
+        # ie going downards use plurals, going upwards use singulars
+        # Residue.atom!s!.mass!es! but Atom.segment!!.segid!!
+        correct = corr_classes[1]
+        attrname = attr.singular
+    else:
+        correct = corr_classes[0]
+        attrname = attr.attrname
+
+    err_msg = "Cannot set {attr} from {cls}. Use '{cls}.{correct}.{attr} = '"
+    # eg "Cannot set masses from Residue.  'Use Residue.atoms.masses = '"
+
+    return NotImplementedError(err_msg.format(
+        attr=attrname, cls=group.__class__.__name__, correct=correct,
+    ))
+
+
+def _build_stub(method_name, method, attribute_name):
+    """
+    Build a stub for a transplanted method.
+
+    A transplanted stub is a dummy method that gets attached to a core class
+    (usually from :mod:`MDAnalysis.core.groups`) and raises a
+    :exc:`NoDataError`.
+    The stub mimics the original method for everything that has traits with the
+    documentation (docstring, name, signature). It gets overwritten by the
+    actual method when the latter is transplanted at universe creation.
+
+    Parameters
+    ----------
+    method_name: str
+        The name of the attribute in the destination class.
+    method: Callable
+        The method to be mimicked.
+    attribute_name: str
+        The name topology attribute that is required for the method to be
+        relevant (e.g. masses, charges, ...)
+
+    Returns
+    -------
+    The stub.
+    """
+    def stub_method(self, *args, **kwargs):
+        message = (
+            '{class_name}.{method_name}() '
+            'not available; this requires {attribute_name}'
+        ).format(
+            class_name=self.__class__.__name__,
+            method_name=method_name,
+            attribute_name=attribute_name,
+        )
+        raise NoDataError(message)
+
+    annotation = textwrap.dedent("""\
+        .. note::
+
+          This requires the underlying topology to have {}. Otherwise, a
+          :exc:`~MDAnalysis.exceptions.NoDataError` is raised.
+
+
+    """.format(attribute_name))
+    # The first line of the original docstring is not indented, but the
+    # subsequent lines are. We want to dedent the whole docstring.
+    first_line, other_lines = method.__doc__.split('\n', 1)
+    stub_method.__doc__ = (
+        first_line + '\n'
+        + textwrap.dedent(other_lines)
+        + '\n\n' + annotation
+    )
+    stub_method.__name__ = method_name
+    stub_method.__signature__ = inspect_signature(method)
+    return stub_method
+
+
+def _attach_transplant_stubs(attribute_name, topology_attribute_class):
+    """
+    Transplant a stub for every method that will be transplanted from a
+    topology attribute.
+
+    Parameters
+    ----------
+    attribute_name: str
+        User-facing name of the topology attribute (e.g. masses, charges, ...)
+    topology_attribute_class:
+        Topology attribute class to inspect for transplant methods.
+
+    """
+    transplants = topology_attribute_class.transplants
+    for dest_class, methods in transplants.items():
+        if dest_class == 'Universe':
+            # Cannot be imported at the top level, it creates issues with
+            # circular imports.
+            from .universe import Universe
+            dest_class = Universe
+        for method_name, method_callback in methods:
+            # Methods the name of which is prefixed by _ should not be accessed
+            # directly by a user, we do not transplant a stub as the stubs are
+            # only relevant for user-facing method and properties. Also,
+            # methods _-prefixed can be operator methods, and we do not want
+            # to overwrite these with a stub.
+            if method_name.startswith('_'):
+                continue
+
+            is_property = False
+            try:
+                method_callback = method_callback.fget
+                is_property = True
+            except AttributeError:
+                pass
+            stub = _build_stub(method_name, method_callback, attribute_name)
+            if is_property:
+                setattr(dest_class, method_name, property(stub, None, None))
+            else:
+                setattr(dest_class, method_name, stub)
+
+
+# TODO: remove bfactors in 3.0
+BFACTOR_WARNING = ("The bfactor topology attribute is only "
+                   "provided as an alias to the tempfactor "
+                   "attribute. It will be removed in "
+                   "3.0. Please use the tempfactor attribute "
+                   "instead.")
+
+
+def deprecate_bfactor_warning(func):
+
+    def wrapper(*args, **kwargs):
+        """
+        Bfactor alias with warning
+        """
+        warnings.warn(BFACTOR_WARNING, DeprecationWarning)
+        return func(*args, **kwargs)
+
+    return wrapper
+
+
+class _TopologyAttrMeta(type):
+    r"""Register TopologyAttrs on class creation
+
+    Each topology attribute is added to the top-level dictionaries
+    for various record purposes. The class itself is added to
+    :data:`_TOPOLOGY_ATTRS` and :data:`_TOPOLOGY_ATTRNAMES`. Transplanted
+    methods are also added to :data:`_TOPOLOGY_TRANSPLANTS.`
+
+    We also attempt to make the topology attribute selectable with
+    atom selection language by automatically generating a relevant
+    selection class with the singular name (``singular``) as the
+    selection token. Only certain ``dtype``\ s are supported; if a
+    selection class cannot be generated, a warning will be raised
+    but no error.
+
+    See also
+    --------
+    :func:`MDAnalysis.core.selection.gen_selection_class`
+
+    """
+
+    def __init__(cls, name, bases, classdict):
+        type.__init__(type, name, bases, classdict)
+        attrname = classdict.get('attrname')
+        singular = classdict.get('singular', attrname)
+
+        if attrname is None:
+            attrname = singular
+
+        if singular:
+            _TOPOLOGY_ATTRS[singular] = _TOPOLOGY_ATTRS[attrname] = cls
+            _singular = singular.lower().replace('_', '')
+            _attrname = attrname.lower().replace('_', '')
+            _TOPOLOGY_ATTRNAMES[_singular] = singular
+            _TOPOLOGY_ATTRNAMES[_attrname] = attrname
+
+            for clstype, transplants in cls.transplants.items():
+                for name, method in transplants:
+                    _TOPOLOGY_TRANSPLANTS[name] = [attrname, method, clstype]
+                    clean = name.lower().replace('_', '')
+                    _TOPOLOGY_ATTRNAMES[clean] = name
+
+        for attr in ['singular', 'attrname']:
+            try:
+                attrname = classdict[attr]
+            except KeyError:
+                pass
+            else:
+                _attach_transplant_stubs(attrname, cls)
+            # add each to "same attr as" class
+
+        if singular not in selection.SameSelection.prop_trans:
+            selection.SameSelection.prop_trans[singular] = attrname
+
+        # add each to the property selection class
+        if singular not in selection.PropertySelection.props:
+            selection.PropertySelection.props[singular] = attrname
+
+        # add token to selectiondict
+        if singular not in selection._SELECTIONDICT:
+            dtype = classdict.get("dtype")
+            if dtype is not None:
+                per_obj = classdict.get("per_object", bases[0].per_object)
+                try:
+                    selection.gen_selection_class(singular, attrname,
+                                                  dtype, per_obj)
+                except ValueError:
+                    msg = ("A selection keyword could not be "
+                           "automatically generated for the "
+                           f"{singular} attribute. If you need a "
+                           "selection keyword, define it manually "
+                           "by subclassing core.selection.Selection")
+                    warnings.warn(msg)
+
+        # TODO: remove in 3.0
+        if attrname == "tempfactors":
+            _TOPOLOGY_ATTRS["bfactor"] = _TOPOLOGY_ATTRS["bfactors"] = cls
+            selcls = selection.gen_selection_class("bfactor", "bfactors",
+                                                   classdict.get("dtype"),
+                                                   per_object="atom")
+            selcls.apply = deprecate_bfactor_warning(selcls.apply)
+
+
+
[docs]class TopologyAttr(object, metaclass=_TopologyAttrMeta): + """Base class for Topology attributes. + + Note + ---- + This class is intended to be subclassed, and mostly amounts to + a skeleton. The methods here should be present in all + :class:`TopologyAttr` child classes, but by default they raise + appropriate exceptions. + + + Attributes + ---------- + attrname : str + the name used for the attribute when attached to a ``Topology`` object + singular : str + name for the attribute on a singular object (Atom/Residue/Segment) + per_object : str + If there is a strict mapping between Component and Attribute + dtype : int/float/object + Type to coerce this attribute to be. For string use 'object' + top : Topology + handle for the Topology object TopologyAttr is associated with + + """ + attrname = 'topologyattrs' + singular = 'topologyattr' + per_object = None # ie Resids per_object = 'residue' + top = None # pointer to Topology object + transplants = defaultdict(list) + target_classes = [] + + groupdoc = None + singledoc = None + dtype = None + + def __init__(self, values, guessed=False): + if self.dtype is None: + self.values = values + else: + self.values = np.asarray(values, dtype=self.dtype) + self._guessed = guessed + + @staticmethod + def _gen_initial_values(n_atoms, n_residues, n_segments): + """Populate an initial empty data structure for this Attribute + + The only provided parameters are the "shape" of the Universe + + Eg for charges, provide np.zeros(n_atoms) + """ + raise NotImplementedError("No default values") + +
[docs] @classmethod + def from_blank(cls, n_atoms=None, n_residues=None, n_segments=None, + values=None): + """Create a blank version of this TopologyAttribute + + Parameters + ---------- + n_atoms : int, optional + Size of the TopologyAttribute atoms + n_residues: int, optional + Size of the TopologyAttribute residues + n_segments : int, optional + Size of the TopologyAttribute segments + values : optional + Initial values for the TopologyAttribute + """ + if values is None: + values = cls._gen_initial_values(n_atoms, n_residues, n_segments) + elif cls.dtype is not None: + # if supplied starting values and statically typed + values = np.asarray(values, dtype=cls.dtype) + return cls(values)
+ +
[docs] def copy(self): + """Return a deepcopy of this attribute""" + return self.__class__(self.values.copy(), guessed=self._guessed)
+ + def __len__(self): + """Length of the TopologyAttr at its intrinsic level.""" + return len(self.values) + + def __getitem__(self, group): + """Accepts an AtomGroup, ResidueGroup or SegmentGroup""" + if isinstance(group, (Atom, AtomGroup)): + return self.get_atoms(group) + elif isinstance(group, (Residue, ResidueGroup)): + return self.get_residues(group) + elif isinstance(group, (Segment, SegmentGroup)): + return self.get_segments(group) + + def __setitem__(self, group, values): + if isinstance(group, (Atom, AtomGroup)): + return self.set_atoms(group, values) + elif isinstance(group, (Residue, ResidueGroup)): + return self.set_residues(group, values) + elif isinstance(group, (Segment, SegmentGroup)): + return self.set_segments(group, values) + + @property + def is_guessed(self): + """Bool of if the source of this information is a guess""" + return self._guessed + + def _add_new(self, newval): + """Resize TopologyAttr to one larger, with *newval* as the new value + + .. versionadded:: 2.1.0 + """ + self.values = np.concatenate([self.values, np.array([newval])]) + +
[docs] def get_atoms(self, ag): + """Get atom attributes for a given AtomGroup""" + raise NoDataError
+ +
[docs] def set_atoms(self, ag, values): + """Set atom attributes for a given AtomGroup""" + raise NotImplementedError
+ +
[docs] def get_residues(self, rg): + """Get residue attributes for a given ResidueGroup""" + raise NoDataError
+ +
[docs] def set_residues(self, rg, values): + """Set residue attributes for a given ResidueGroup""" + raise NotImplementedError
+ +
[docs] def get_segments(self, sg): + """Get segment attributes for a given SegmentGroup""" + raise NoDataError
+ +
[docs] def set_segments(self, sg, values): + """Set segmentattributes for a given SegmentGroup""" + raise NotImplementedError
+ + +# core attributes + + +
[docs]class Atomindices(TopologyAttr): + """Globally unique indices for each atom in the group. + + If the group is an AtomGroup, then this gives the index for each atom in + the group. This is the unambiguous identifier for each atom in the + topology, and it is not alterable. + + If the group is a ResidueGroup or SegmentGroup, then this gives the indices + of each atom represented in the group in a 1-D array, in the order of the + elements in that group. + + """ + attrname = 'indices' + singular = 'index' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, Atom] + dtype = int + + def __init__(self): + self._guessed = False + +
[docs] def set_atoms(self, ag, values): + raise AttributeError("Atom indices are fixed; they cannot be reset")
+ +
[docs] def get_atoms(self, ag): + return ag.ix
+ +
[docs] def get_residues(self, rg): + return list(self.top.tt.residues2atoms_2d(rg.ix))
+ +
[docs] def get_segments(self, sg): + return list(self.top.tt.segments2atoms_2d(sg.ix))
+ + +
[docs]class Resindices(TopologyAttr): + """Globally unique resindices for each residue in the group. + + If the group is an AtomGroup, then this gives the resindex for each atom in + the group. This unambiguously determines each atom's residue membership. + Resetting these values changes the residue membership of the atoms. + + If the group is a ResidueGroup or SegmentGroup, then this gives the + resindices of each residue represented in the group in a 1-D array, in the + order of the elements in that group. + + """ + attrname = 'resindices' + singular = 'resindex' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, Atom, Residue] + dtype = int + + def __init__(self): + self._guessed = False + +
[docs] def get_atoms(self, ag): + return self.top.tt.atoms2residues(ag.ix)
+ +
[docs] def get_residues(self, rg): + return rg.ix
+ +
[docs] def set_residues(self, rg, values): + raise AttributeError("Residue indices are fixed; they cannot be reset")
+ +
[docs] def get_segments(self, sg): + return list(self.top.tt.segments2residues_2d(sg.ix))
+ + +
[docs]class Segindices(TopologyAttr): + """Globally unique segindices for each segment in the group. + + If the group is an AtomGroup, then this gives the segindex for each atom in + the group. This unambiguously determines each atom's segment membership. + It is not possible to set these, since membership in a segment is an + attribute of each atom's residue. + + If the group is a ResidueGroup or SegmentGroup, then this gives the + segindices of each segment represented in the group in a 1-D array, in the + order of the elements in that group. + + """ + attrname = 'segindices' + singular = 'segindex' + dtype = int + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, + Atom, Residue, Segment] + + def __init__(self): + self._guessed = False + +
[docs] def get_atoms(self, ag): + return self.top.tt.atoms2segments(ag.ix)
+ +
[docs] def get_residues(self, rg): + return self.top.tt.residues2segments(rg.ix)
+ +
[docs] def get_segments(self, sg): + return sg.ix
+ +
[docs] def set_segments(self, sg, values): + raise AttributeError("Segment indices are fixed; they cannot be reset")
+ + +# atom attributes + + +
[docs]class AtomAttr(TopologyAttr): + """Base class for atom attributes. + + """ + attrname = 'atomattrs' + singular = 'atomattr' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, Atom] + +
[docs] def get_atoms(self, ag): + return self.values[ag.ix]
+ +
[docs] @_check_length + def set_atoms(self, ag, values): + self.values[ag.ix] = values
+ +
[docs] def get_residues(self, rg): + """By default, the values for each atom present in the set of residues + are returned in a single array. This behavior can be overriden in child + attributes. + + """ + aixs = self.top.tt.residues2atoms_2d(rg.ix) + return [self.values[aix] for aix in aixs]
+ +
[docs] def set_residues(self, rg, values): + raise _wronglevel_error(self, rg)
+ +
[docs] def get_segments(self, sg): + """By default, the values for each atom present in the set of residues + are returned in a single array. This behavior can be overriden in child + attributes. + + """ + aixs = self.top.tt.segments2atoms_2d(sg.ix) + return [self.values[aix] for aix in aixs]
+ +
[docs] def set_segments(self, sg, values): + raise _wronglevel_error(self, sg)
+ + +# TODO: update docs to property doc +
[docs]class Atomids(AtomAttr): + """ID for each atom. + """ + attrname = 'ids' + singular = 'id' + per_object = 'atom' + dtype = int + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.arange(1, na + 1)
+ + +class _StringInternerMixin: + """String interning pattern + + Used for faster matching of strings (see _ProtoStringSelection) + + self.namedict (dict) + - maps actual string to string index (str->int) + self.namelookup (array dtype object) + - maps string index to actual string (int->str) + self.nmidx (array dtype int) + - maps atom index to string index (int->int) + self.values (array dtype object) + - the premade per-object string values + + .. versionadded:: 2.1.0 + Mashed together the different implementations to keep it DRY. + """ + + def __init__(self, vals, guessed=False): + self._guessed = guessed + + self.namedict = dict() # maps str to nmidx + name_lookup = [] # maps idx to str + # eg namedict['O'] = 5 & name_lookup[5] = 'O' + + self.nmidx = np.zeros_like(vals, dtype=int) # the lookup for each atom + # eg Atom 5 is 'C', so nmidx[5] = 7, where name_lookup[7] = 'C' + + for i, val in enumerate(vals): + try: + self.nmidx[i] = self.namedict[val] + except KeyError: + nextidx = len(self.namedict) + self.namedict[val] = nextidx + name_lookup.append(val) + + self.nmidx[i] = nextidx + + self.name_lookup = np.array(name_lookup, dtype=object) + self.values = self.name_lookup[self.nmidx] + + def _add_new(self, newval): + """Append new value to the TopologyAttr + + Parameters + ---------- + newval : str + value to append + + resizes this attr to size+1 and adds newval as the value of the new entry + for string interning this is slightly different hence the override + + .. versionadded:: 2.1.0 + """ + try: + newidx = self.namedict[newval] + except KeyError: + newidx = len(self.namedict) + self.namedict[newval] = newidx + self.name_lookup = np.concatenate([self.name_lookup, [newval]]) + + self.nmidx = np.concatenate([self.nmidx, [newidx]]) + self.values = np.concatenate([self.values, [newval]]) + + def _set_X(self, ag, values): + newnames = [] + + # two possibilities, either single value given, or one per Atom + if isinstance(values, str): + try: + newidx = self.namedict[values] + except KeyError: + newidx = len(self.namedict) + self.namedict[values] = newidx + newnames.append(values) + else: + newidx = np.zeros_like(values, dtype=int) + for i, val in enumerate(values): + try: + newidx[i] = self.namedict[val] + except KeyError: + nextidx = len(self.namedict) + self.namedict[val] = nextidx + newnames.append(val) + newidx[i] = nextidx + + self.nmidx[ag.ix] = newidx # newidx either single value or same size array + if newnames: + self.name_lookup = np.concatenate([self.name_lookup, newnames]) + self.values = self.name_lookup[self.nmidx] + + +# woe betide anyone who switches this inheritance order +# Mixin needs to be first (L to R) to get correct __init__ and set_atoms +
[docs]class AtomStringAttr(_StringInternerMixin, AtomAttr): + +
[docs] @_check_length + def set_atoms(self, ag, values): + return self._set_X(ag, values)
+ + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.full(na, '', dtype=object)
+ + +# TODO: update docs to property doc +
[docs]class Atomnames(AtomStringAttr): + """Name for each atom. + """ + attrname = 'names' + singular = 'name' + per_object = 'atom' + dtype = object + transplants = defaultdict(list) + +
[docs] def phi_selection(residue, c_name='C', n_name='N', ca_name='CA'): + """Select AtomGroup corresponding to the phi protein backbone dihedral + C'-N-CA-C. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + AtomGroup + 4-atom selection in the correct order. If no C' found in the + previous residue (by resid) then this method returns ``None``. + + .. versionchanged:: 1.0.0 + Added arguments for flexible atom names and refactored code for + faster atom matching with boolean arrays. + """ + # fnmatch is expensive. try the obv candidate first + prev = residue.universe.residues[residue.ix-1] + sid = residue.segment.segid + rid = residue.resid-1 + if not (prev.segment.segid == sid and prev.resid == rid): + sel = 'segid {} and resid {}'.format(sid, rid) + try: + prev = residue.universe.select_atoms(sel).residues[0] + except IndexError: + return None + c_ = prev.atoms[prev.atoms.names == c_name] + if not len(c_) == 1: + return None + + atnames = residue.atoms.names + ncac_names = [n_name, ca_name, c_name] + ncac = [residue.atoms[atnames == n] for n in ncac_names] + if not all(len(ag) == 1 for ag in ncac): + return None + + sel = c_+sum(ncac) + return sel
+ + transplants[Residue].append(('phi_selection', phi_selection)) + +
[docs] def phi_selections(residues, c_name='C', n_name='N', ca_name='CA'): + """Select list of AtomGroups corresponding to the phi protein + backbone dihedral C'-N-CA-C. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + list of AtomGroups + 4-atom selections in the correct order. If no C' found in the + previous residue (by resid) then corresponding item in the list + is ``None``. + + .. versionadded:: 1.0.0 + """ + + u = residues[0].universe + prev = u.residues[residues.ix-1] # obv candidates first + rsid = residues.segids + prid = residues.resids-1 + ncac_names = [n_name, ca_name, c_name] + sel = 'segid {} and resid {}' + + # replace wrong residues + wix = np.where((prev.segids != rsid) | (prev.resids != prid))[0] + invalid = [] + if len(wix): + prevls = list(prev) + for s, r, i in zip(rsid[wix], prid[wix], wix): + try: + prevls[i] = u.select_atoms(sel.format(s, r)).residues[0] + except IndexError: + invalid.append(i) + prev = sum(prevls) + + keep_prev = [sum(r.atoms.names == c_name) == 1 for r in prev] + keep_res = [all(sum(r.atoms.names == n) == 1 for n in ncac_names) + for r in residues] + keep = np.array(keep_prev) & np.array(keep_res) + keep[invalid] = False + results = np.zeros_like(residues, dtype=object) + results[~keep] = None + prev = prev[keep] + residues = residues[keep] + keepix = np.where(keep)[0] + + c_ = prev.atoms[prev.atoms.names == c_name] + n = residues.atoms[residues.atoms.names == n_name] + ca = residues.atoms[residues.atoms.names == ca_name] + c = residues.atoms[residues.atoms.names == c_name] + results[keepix] = [sum(atoms) for atoms in zip(c_, n, ca, c)] + return list(results)
+ + transplants[ResidueGroup].append(('phi_selections', phi_selections)) + +
[docs] def psi_selection(residue, c_name='C', n_name='N', ca_name='CA'): + """Select AtomGroup corresponding to the psi protein backbone dihedral + N-CA-C-N'. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + AtomGroup + 4-atom selection in the correct order. If no N' found in the + following residue (by resid) then this method returns ``None``. + + .. versionchanged:: 1.0.0 + Added arguments for flexible atom names and refactored code for + faster atom matching with boolean arrays. + """ + + # fnmatch is expensive. try the obv candidate first + _manual_sel = False + sid = residue.segment.segid + rid = residue.resid+1 + try: + nxt = residue.universe.residues[residue.ix+1] + except IndexError: + _manual_sel = True + else: + if not (nxt.segment.segid == sid and nxt.resid == rid): + _manual_sel = True + + if _manual_sel: + sel = 'segid {} and resid {}'.format(sid, rid) + try: + nxt = residue.universe.select_atoms(sel).residues[0] + except IndexError: + return None + n_ = nxt.atoms[nxt.atoms.names == n_name] + if not len(n_) == 1: + return None + + atnames = residue.atoms.names + ncac_names = [n_name, ca_name, c_name] + ncac = [residue.atoms[atnames == n] for n in ncac_names] + if not all(len(ag) == 1 for ag in ncac): + return None + + sel = sum(ncac) + n_ + return sel
+ + transplants[Residue].append(('psi_selection', psi_selection)) + + def _get_next_residues_by_resid(residues): + """Select list of Residues corresponding to the next resid for each + residue in `residues`. + + Returns + ------- + List of Residues + List of the next residues in the Universe, by resid and segid. + If not found, the corresponding item in the list is ``None``. + + .. versionadded:: 1.0.0 + """ + try: + u = residues[0].universe + except IndexError: + return residues + nxres = np.array([None]*len(residues), dtype=object) + ix = np.arange(len(residues)) + # no guarantee residues is ordered or unique + last = max(residues.ix) + if last == len(u.residues)-1: + notlast = residues.ix != last + ix = ix[notlast] + residues = residues[notlast] + + nxres[ix] = nxt = u.residues[residues.ix+1] + rsid = residues.segids + nrid = residues.resids+1 + sel = 'segid {} and resid {}' + + # replace wrong residues + wix = np.where((nxt.segids != rsid) | (nxt.resids != nrid))[0] + if len(wix): + for s, r, i in zip(rsid[wix], nrid[wix], wix): + try: + nxres[ix[i]] = u.select_atoms(sel.format(s, r)).residues[0] + except IndexError: + nxres[ix[i]] = None + return nxres + + transplants[ResidueGroup].append(('_get_next_residues_by_resid', + _get_next_residues_by_resid)) + + def _get_prev_residues_by_resid(residues): + """Select list of Residues corresponding to the previous resid for each + residue in `residues`. + + Returns + ------- + List of Residues + List of the previous residues in the Universe, by resid and segid. + If not found, the corresponding item in the list is ``None``. + + .. versionadded:: 1.0.0 + """ + try: + u = residues[0].universe + except IndexError: + return residues + pvres = np.array([None]*len(residues)) + pvres[:] = prev = u.residues[residues.ix-1] + rsid = residues.segids + prid = residues.resids-1 + sel = 'segid {} and resid {}' + + # replace wrong residues + wix = np.where((prev.segids != rsid) | (prev.resids != prid))[0] + if len(wix): + for s, r, i in zip(rsid[wix], prid[wix], wix): + try: + pvres[i] = u.select_atoms(sel.format(s, r)).residues[0] + except IndexError: + pvres[i] = None + return pvres + + transplants[ResidueGroup].append(('_get_prev_residues_by_resid', + _get_prev_residues_by_resid)) + +
[docs] def psi_selections(residues, c_name='C', n_name='N', ca_name='CA'): + """Select list of AtomGroups corresponding to the psi protein + backbone dihedral N-CA-C-N'. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + List of AtomGroups + 4-atom selections in the correct order. If no N' found in the + following residue (by resid) then the corresponding item in the + list is ``None``. + + .. versionadded:: 1.0.0 + """ + results = np.array([None]*len(residues), dtype=object) + nxtres = residues._get_next_residues_by_resid() + rix = np.where(nxtres)[0] + nxt = sum(nxtres[rix]) + residues = residues[rix] + ncac_names = [n_name, ca_name, c_name] + + keep_nxt = [sum(r.atoms.names == n_name) == 1 for r in nxt] + keep_res = [all(sum(r.atoms.names == n) == 1 for n in ncac_names) + for r in residues] + keep = np.array(keep_nxt) & np.array(keep_res) + nxt = nxt[keep] + residues = residues[keep] + keepix = np.where(keep)[0] + + n = residues.atoms[residues.atoms.names == n_name] + ca = residues.atoms[residues.atoms.names == ca_name] + c = residues.atoms[residues.atoms.names == c_name] + n_ = nxt.atoms[nxt.atoms.names == n_name] + results[rix[keepix]] = [sum(atoms) for atoms in zip(n, ca, c, n_)] + return list(results)
+ + transplants[ResidueGroup].append(('psi_selections', psi_selections)) + +
[docs] def omega_selection(residue, c_name='C', n_name='N', ca_name='CA'): + """Select AtomGroup corresponding to the omega protein backbone dihedral + CA-C-N'-CA'. + + omega describes the -C-N- peptide bond. Typically, it is trans (180 + degrees) although cis-bonds (0 degrees) are also occasionally observed + (especially near Proline). + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + AtomGroup + 4-atom selection in the correct order. If no C' found in the + previous residue (by resid) then this method returns ``None``. + + .. versionchanged:: 1.0.0 + Added arguments for flexible atom names and refactored code for + faster atom matching with boolean arrays. + """ + # fnmatch is expensive. try the obv candidate first + _manual_sel = False + sid = residue.segment.segid + rid = residue.resid+1 + try: + nxt = residue.universe.residues[residue.ix+1] + except IndexError: + _manual_sel = True + else: + if not (nxt.segment.segid == sid and nxt.resid == rid): + _manual_sel = True + + if _manual_sel: + sel = 'segid {} and resid {}'.format(sid, rid) + try: + nxt = residue.universe.select_atoms(sel).residues[0] + except IndexError: + return None + + ca = residue.atoms[residue.atoms.names == ca_name] + c = residue.atoms[residue.atoms.names == c_name] + n_ = nxt.atoms[nxt.atoms.names == n_name] + ca_ = nxt.atoms[nxt.atoms.names == ca_name] + + if not all(len(ag) == 1 for ag in [ca_, n_, ca, c]): + return None + + return ca+c+n_+ca_
+ + transplants[Residue].append(('omega_selection', omega_selection)) + +
[docs] def omega_selections(residues, c_name='C', n_name='N', ca_name='CA'): + """Select list of AtomGroups corresponding to the omega protein + backbone dihedral CA-C-N'-CA'. + + omega describes the -C-N- peptide bond. Typically, it is trans (180 + degrees) although cis-bonds (0 degrees) are also occasionally observed + (especially near Proline). + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + n_name: str (optional) + name for the backbone N atom + ca_name: str (optional) + name for the alpha-carbon atom + + Returns + ------- + List of AtomGroups + 4-atom selections in the correct order. If no C' found in the + previous residue (by resid) then the corresponding item in the + list is ``None``. + + .. versionadded:: 1.0.0 + """ + results = np.array([None]*len(residues), dtype=object) + nxtres = residues._get_next_residues_by_resid() + rix = np.where(nxtres)[0] + nxt = sum(nxtres[rix]) + residues = residues[rix] + + nxtatoms = [ca_name, n_name] + resatoms = [ca_name, c_name] + keep_nxt = [all(sum(r.atoms.names == n) == 1 for n in nxtatoms) + for r in nxt] + keep_res = [all(sum(r.atoms.names == n) == 1 for n in resatoms) + for r in residues] + keep = np.array(keep_nxt) & np.array(keep_res) + nxt = nxt[keep] + residues = residues[keep] + keepix = np.where(keep)[0] + + c = residues.atoms[residues.atoms.names == c_name] + ca = residues.atoms[residues.atoms.names == ca_name] + n_ = nxt.atoms[nxt.atoms.names == n_name] + ca_ = nxt.atoms[nxt.atoms.names == ca_name] + + results[rix[keepix]] = [sum(atoms) for atoms in zip(ca, c, n_, ca_)] + return list(results)
+ + transplants[ResidueGroup].append(('omega_selections', omega_selections)) + +
[docs] def chi1_selection(residue, n_name='N', ca_name='CA', cb_name='CB', + cg_name='CG CG1 OG OG1 SG'): + r"""Select AtomGroup corresponding to the chi1 sidechain dihedral ``N-CA-CB-*G.`` + The gamma atom is taken to be the heavy atom in the gamma position. If more than one + heavy atom is present (e.g. CG1 and CG2), the one with the lower number is used (CG1). + + .. warning:: + + This numbering of chi1 atoms here in following with the IUPAC 1970 rules. + However, it should be noted that analyses which use dihedral angles may have + different definitions. For example, the + :class:`MDAnalysis.analysis.dihedrals.Janin` class does not incorporate + amino acids where the gamma atom is not carbon, into its chi1 selections. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + ca_name: str (optional) + name for the alpha-carbon atom + cb_name: str (optional) + name for the beta-carbon atom + cg_name: str (optional) + name for the gamma-carbon atom + + Returns + ------- + AtomGroup + 4-atom selection in the correct order. If no CB and/or CG is found + then this method returns ``None``. + + + .. versionadded:: 0.7.5 + .. versionchanged:: 1.0.0 + Added arguments for flexible atom names and refactored code for + faster atom matching with boolean arrays. + """ + names = [n_name, ca_name, cb_name, cg_name] + atnames = residue.atoms.names + ags = [residue.atoms[np.in1d(atnames, n.split())] for n in names] + if any(len(ag) != 1 for ag in ags): + return None + return sum(ags)
+ + transplants[Residue].append(('chi1_selection', chi1_selection)) + +
[docs] def chi1_selections(residues, n_name='N', ca_name='CA', cb_name='CB', + cg_name='CG CG1 OG OG1 SG'): + """Select list of AtomGroups corresponding to the chi1 sidechain dihedral + N-CA-CB-CG. + + Parameters + ---------- + c_name: str (optional) + name for the backbone C atom + ca_name: str (optional) + name for the alpha-carbon atom + cb_name: str (optional) + name for the beta-carbon atom + cg_name: str (optional) + name for the gamma-carbon atom + + Returns + ------- + List of AtomGroups + 4-atom selections in the correct order. If no CB and/or CG is found + then the corresponding item in the list is ``None``. + + .. versionadded:: 1.0.0 + """ + results = np.array([None]*len(residues)) + names = [n_name, ca_name, cb_name, cg_name] + keep = [all(sum(np.in1d(r.atoms.names, n.split())) == 1 + for n in names) for r in residues] + keepix = np.where(keep)[0] + residues = residues[keep] + + atnames = residues.atoms.names + ags = [residues.atoms[np.in1d(atnames, n.split())] for n in names] + results[keepix] = [sum(atoms) for atoms in zip(*ags)] + return list(results)
+ + transplants[ResidueGroup].append(('chi1_selections', chi1_selections))
+ + +# TODO: update docs to property doc +
[docs]class Atomtypes(AtomStringAttr): + """Type for each atom""" + attrname = 'types' + singular = 'type' + per_object = 'atom' + dtype = object
+ + +# TODO: update docs to property doc +
[docs]class Elements(AtomStringAttr): + """Element for each atom""" + attrname = 'elements' + singular = 'element' + dtype = object + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.array(['' for _ in range(na)], dtype=object)
+ + +# TODO: update docs to property doc +
[docs]class Radii(AtomAttr): + """Radii for each atom""" + attrname = 'radii' + singular = 'radius' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class RecordTypes(AtomStringAttr): + """For PDB-like formats, indicates if ATOM or HETATM + + Defaults to 'ATOM' + + .. versionchanged:: 0.20.0 + Now stores array of dtype object rather than boolean mapping + """ + attrname = 'record_types' + singular = 'record_type' + per_object = 'atom' + dtype = object + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.array(['ATOM'] * na, dtype=object)
+ + +
[docs]class ChainIDs(AtomStringAttr): + """ChainID per atom + + Note + ---- + This is an attribute of the Atom, not Residue or Segment + """ + attrname = 'chainIDs' + singular = 'chainID' + per_object = 'atom' + dtype = object
+ + +
[docs]class Tempfactors(AtomAttr): + """Tempfactor for atoms""" + attrname = 'tempfactors' + singular = 'tempfactor' + per_object = 'atom' + dtype = float + transplants = defaultdict(list) + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na) + + # TODO: remove bfactors in 3.0 +
[docs] @deprecate_bfactor_warning + def bfactor(self): + """Alias for tempfactor + + The bfactor topology attribute is only + provided as an alias to the tempfactor + attribute. It will be removed in + 3.0. Please use the tempfactor attribute + instead. + + .. versionadded:: 2.0.0 + + .. deprecated:: 2.0.0 + Will be removed in 3.0.0. Use the + ``tempfactor`` attribute instead. + """ + return self.universe.atoms[self.ix].tempfactor
+ +
[docs] @deprecate_bfactor_warning + def bfactor_setter(self, value): + """Tempfactor alias property for atom + + .. versionadded:: 2.0.0 + """ + self.universe.atoms[self.ix].tempfactor = value
+ +
[docs] @deprecate_bfactor_warning + def bfactors(self): + """Alias for tempfactors + + The bfactor topology attribute is only + provided as an alias to the tempfactor + attribute. It will be removed in + 3.0. Please use the tempfactor attribute + instead. + + .. versionadded:: 2.0.0 + + .. deprecated:: 2.0.0 + Will be removed in 3.0.0. Use the + ``tempfactor`` attribute instead. + """ + return self.universe.atoms[self.atoms.ix].tempfactors
+ +
[docs] @deprecate_bfactor_warning + def bfactors_setter(self, value): + """Tempfactor alias property for groups of atoms + + .. versionadded:: 2.0.0 + """ + self.universe.atoms[self.atoms.ix].tempfactors = value
+ + transplants[Atom].append( + ('bfactor', property(bfactor, bfactor_setter, None, + bfactor.__doc__))) + + for group in (AtomGroup, Residue, ResidueGroup, Segment, SegmentGroup): + transplants[group].append( + ("bfactors", property(bfactors, bfactors_setter, None, + bfactors.__doc__)))
+ + +
[docs]class Masses(AtomAttr): + attrname = 'masses' + singular = 'mass' + per_object = 'atom' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, + Atom, Residue, Segment] + transplants = defaultdict(list) + dtype = np.float64 + + groupdoc = """Mass of each component in the Group. + + If the Group is an AtomGroup, then the masses are for each atom. If the + Group is a ResidueGroup or SegmentGroup, the masses are for each residue or + segment, respectively. These are obtained by summation of the member atoms + for each component. + """ + + singledoc = """Mass of the component.""" + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na) + +
[docs] def get_residues(self, rg): + resatoms = self.top.tt.residues2atoms_2d(rg.ix) + + if isinstance(rg._ix, numbers.Integral): + # for a single residue + masses = self.values[tuple(resatoms)].sum() + else: + # for a residuegroup + masses = np.empty(len(rg)) + for i, row in enumerate(resatoms): + masses[i] = self.values[row].sum() + + return masses
+ +
[docs] def get_segments(self, sg): + segatoms = self.top.tt.segments2atoms_2d(sg.ix) + + if isinstance(sg._ix, numbers.Integral): + # for a single segment + masses = self.values[tuple(segatoms)].sum() + else: + # for a segmentgroup + masses = np.array([self.values[row].sum() for row in segatoms]) + + return masses
+ +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + @check_atomgroup_not_empty + def center_of_mass(group, wrap=False, unwrap=False, compound='group'): + r"""Center of mass of (compounds of) the group + + .. math:: + \boldsymbol R = \frac{\sum_i m_i \boldsymbol r_i}{\sum m_i} + + where :math:`m_i` is the mass and :math:`\boldsymbol r_i` the + position of atom :math:`i` in the given + :class:`MDAnalysis.core.groups.AtomGroup`. + Centers of mass per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. If the masses of a compound sum up to zero, the + center of mass coordinates of that compound will be ``nan`` (not a + number). + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. Instead, the resulting + center-of-mass position vectors will be moved to the primary unit + cell after calculation. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'},\ + optional + If ``'group'``, the center of mass of all atoms in the group will + be returned as a single position vector. Otherwise, the centers of + mass of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. a 2d + array. + Note that, in any case, *only* the positions of :class:`Atoms<Atom>` + *belonging to the group* will be taken into account. + + Returns + ------- + center : numpy.ndarray + Position vector(s) of the center(s) of mass of the group. + If `compound` was set to ``'group'``, the output will be a single + position vector. + If `compound` was set to ``'segments'`` or ``'residues'``, the + output will be a 2d coordinate array of shape ``(n, 3)`` where ``n`` + is the number of compounds. + + Note + ---- + This method can only be accessed if the underlying topology has + information about atomic masses. + + + .. versionchanged:: 0.8 + Added `pbc` parameter + .. versionchanged:: 0.19.0 + Added `compound` parameter + .. versionchanged:: 0.20.0 + Added ``'molecules'`` and ``'fragments'`` compounds; + added `unwrap` parameter + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + """ + atoms = group.atoms + return atoms.center(weights=atoms.masses, wrap=wrap, compound=compound, + unwrap=unwrap)
+ + transplants[GroupBase].append( + ('center_of_mass', center_of_mass)) + +
[docs] @warn_if_not_unique + @check_atomgroup_not_empty + def total_mass(group, compound='group'): + r"""Total mass of (compounds of) the group. + + Computes the total mass of :class:`Atoms<Atom>` in the group. + Total masses per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Parameters + ---------- + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'},\ + optional + If ``'group'``, the total mass of all atoms in the group will be + returned as a single value. Otherwise, the total masses per + :class:`Segment`, :class:`Residue`, molecule, or fragment will be + returned as a 1d array. + Note that, in any case, *only* the masses of :class:`Atoms<Atom>` + *belonging to the group* will be taken into account. + + Returns + ------- + float or numpy.ndarray + Total mass of (compounds of) the group. + If `compound` was set to ``'group'``, the output will be a single + value. Otherwise, the output will be a 1d array of shape ``(n,)`` + where ``n`` is the number of compounds. + + + .. versionchanged:: 0.20.0 Added `compound` parameter + """ + return group.accumulate("masses", compound=compound)
+ + transplants[GroupBase].append( + ('total_mass', total_mass)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + @check_atomgroup_not_empty + def moment_of_inertia(group, wrap=False, unwrap=False, compound="group"): + r"""Moment of inertia tensor relative to center of mass. + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. Instead, the resulting + center-of-mass position vectors will be moved to the primary unit + cell after calculation. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers and tensor of inertia. + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'},\ + optional + `compound` determines the behavior of `wrap`. + Note that, in any case, *only* the positions of :class:`Atoms<Atom>` + *belonging to the group* will be taken into account. + + Returns + ------- + moment_of_inertia : numpy.ndarray + Moment of inertia tensor as a 3 x 3 numpy array. + + Notes + ----- + The moment of inertia tensor :math:`\mathsf{I}` is calculated for a group of + :math:`N` atoms with coordinates :math:`\mathbf{r}_i,\ 1 \le i \le N` + relative to its center of mass from the relative coordinates + + .. math:: + \mathbf{r}'_i = \mathbf{r}_i - \frac{1}{\sum_{i=1}^{N} m_i} \sum_{i=1}^{N} m_i \mathbf{r}_i + + as + + .. math:: + \mathsf{I} = \sum_{i=1}^{N} m_i \Big[(\mathbf{r}'_i\cdot\mathbf{r}'_i) \sum_{\alpha=1}^{3} + \hat{\mathbf{e}}_\alpha \otimes \hat{\mathbf{e}}_\alpha - \mathbf{r}'_i \otimes \mathbf{r}'_i\Big] + + where :math:`\hat{\mathbf{e}}_\alpha` are Cartesian unit vectors, or in Cartesian coordinates + + .. math:: + I_{\alpha,\beta} = \sum_{k=1}^{N} m_k + \Big(\big(\sum_{\gamma=1}^3 (x'^{(k)}_{\gamma})^2 \big)\delta_{\alpha,\beta} + - x'^{(k)}_{\alpha} x'^{(k)}_{\beta} \Big). + + where :math:`x'^{(k)}_{\alpha}` are the Cartesian coordinates of the + relative coordinates :math:`\mathbf{r}'_k`. + + + .. versionchanged:: 0.8 + Added `pbc` keyword + .. versionchanged:: 0.20.0 + Added `unwrap` parameter + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + """ + atomgroup = group.atoms + + com = atomgroup.center_of_mass( + wrap=wrap, unwrap=unwrap, compound=compound) + if compound != 'group': + com = (com * group.masses[:, None] + ).sum(axis=0) / group.masses.sum() + + if wrap: + pos = atomgroup.pack_into_box(inplace=False) - com + elif unwrap: + pos = atomgroup.unwrap(compound=compound, inplace=False) - com + else: + pos = atomgroup.positions - com + + masses = atomgroup.masses + # Create the inertia tensor + # m_i = mass of atom i + # (x_i, y_i, z_i) = pos of atom i + # Ixx = sum(m_i*(y_i^2+z_i^2)); + # Iyy = sum(m_i*(x_i^2+z_i^2)); + # Izz = sum(m_i*(x_i^2+y_i^2)) + # Ixy = Iyx = -1*sum(m_i*x_i*y_i) + # Ixz = Izx = -1*sum(m_i*x_i*z_i) + # Iyz = Izy = -1*sum(m_i*y_i*z_i) + tens = np.zeros((3, 3), dtype=np.float64) + # xx + tens[0][0] = (masses * (pos[:, 1] ** 2 + pos[:, 2] ** 2)).sum() + # xy & yx + tens[0][1] = tens[1][0] = - (masses * pos[:, 0] * pos[:, 1]).sum() + # xz & zx + tens[0][2] = tens[2][0] = - (masses * pos[:, 0] * pos[:, 2]).sum() + # yy + tens[1][1] = (masses * (pos[:, 0] ** 2 + pos[:, 2] ** 2)).sum() + # yz + zy + tens[1][2] = tens[2][1] = - (masses * pos[:, 1] * pos[:, 2]).sum() + # zz + tens[2][2] = (masses * (pos[:, 0] ** 2 + pos[:, 1] ** 2)).sum() + + return tens
+ + transplants[GroupBase].append( + ('moment_of_inertia', moment_of_inertia)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_atomgroup_not_empty + def radius_of_gyration(group, wrap=False, **kwargs): + """Radius of gyration. + + Parameters + ---------- + wrap : bool, optional + If ``True``, move all atoms within the primary unit cell before + calculation. [``False``] + + + .. versionchanged:: 0.8 + Added `pbc` keyword + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + """ + atomgroup = group.atoms + masses = atomgroup.masses + + com = atomgroup.center_of_mass(wrap=wrap) + if wrap: + recenteredpos = atomgroup.pack_into_box(inplace=False) - com + else: + recenteredpos = atomgroup.positions - com + + rog_sq = np.einsum('i,i->',masses,np.einsum('ij,ij->i', + recenteredpos,recenteredpos))/atomgroup.total_mass() + + return np.sqrt(rog_sq)
+ + transplants[GroupBase].append( + ('radius_of_gyration', radius_of_gyration)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_atomgroup_not_empty + def gyration_moments(group, wrap=False, unwrap=False, compound='group'): + r"""Moments of the gyration tensor. + + The moments are defined as the eigenvalues of the gyration + tensor. + + .. math:: + + \mathsf{T} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{r}_\mathrm{i} - + \mathbf{r}_\mathrm{COM})(\mathbf{r}_\mathrm{i} - \mathbf{r}_\mathrm{COM}) + + Where :math:`\mathbf{r}_\mathrm{COM}` is the center of mass. + + See [Dima2004a]_ for background information. + + Parameters + ---------- + wrap : bool, optional + If ``True``, move all atoms within the primary unit cell before + calculation. [``False``] + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their centers. + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'}, optional + Which type of component to keep together during unwrapping. + + Returns + ------- + principle_moments_of_gyration : numpy.ndarray + Gyration vector(s) of (compounds of) the group in :math:`Å^2`. + If `compound` was set to ``'group'``, the output will be a single + vector of length 3. Otherwise, the output will be a 2D array of shape + ``(n,3)`` where ``n`` is the number of compounds. + + + .. versionadded:: 2.5.0 + """ + + def _gyration(recenteredpos, masses): + if len(masses.shape) > 1: + masses = np.squeeze(masses) + tensor = np.einsum( "ki,kj->ij", + recenteredpos, + np.einsum("ij,i->ij", recenteredpos, masses), + ) + return np.linalg.eigvalsh(tensor/np.sum(masses)) + + atomgroup = group.atoms + masses = atomgroup.masses + + com = atomgroup.center_of_mass( + wrap=wrap, unwrap=unwrap, compound=compound) + + if compound == 'group': + if wrap: + recenteredpos = (atomgroup.pack_into_box(inplace=False) - com) + elif unwrap: + recenteredpos = (atomgroup.unwrap(inplace=False, + compound=compound, + reference=None, + ) - com) + else: + recenteredpos = (atomgroup.positions - com) + eig_vals = _gyration(recenteredpos, masses) + else: + (atom_masks, + compound_masks, + n_compounds) = atomgroup._split_by_compound_indices(compound) + + if unwrap: + coords = atomgroup.unwrap( + compound=compound, + reference=None, + inplace=False + ) + else: + coords = atomgroup.positions + + eig_vals = np.empty((n_compounds, 3), dtype=np.float64) + for compound_mask, atom_mask in zip(compound_masks, atom_masks): + eig_vals[compound_mask, :] = [_gyration( + coords[mask] - com[compound_mask][i], + masses[mask][:, None] + ) for i, mask in enumerate(atom_mask)] + + return eig_vals
+ + transplants[GroupBase].append( + ('gyration_moments', gyration_moments)) + + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_atomgroup_not_empty + def shape_parameter(group, wrap=False, unwrap=False, compound='group'): + """Shape parameter. + + See [Dima2004a]_ for background information. + + Parameters + ---------- + wrap : bool, optional + If ``True``, move all atoms within the primary unit cell before + calculation. [``False``] + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their centers. + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'}, optional + Which type of component to keep together during unwrapping. + + + .. versionadded:: 0.7.7 + .. versionchanged:: 0.8 + Added `pbc` keyword + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + Superfluous kwargs were removed. + .. versionchanged:: 2.5.0 + Added calculation for any `compound` type + """ + atomgroup = group.atoms + eig_vals = atomgroup.gyration_moments(wrap=wrap, unwrap=unwrap, compound=compound) + if len(eig_vals.shape) > 1: + shape = 27.0 * np.prod(eig_vals - np.mean(eig_vals, axis=1), axis=1 + ) / np.power(np.sum(eig_vals, axis=1), 3) + else: + shape = 27.0 * np.prod(eig_vals - np.mean(eig_vals) + ) / np.power(np.sum(eig_vals), 3) + + return shape
+ + transplants[GroupBase].append( + ('shape_parameter', shape_parameter)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + @check_atomgroup_not_empty + def asphericity(group, wrap=False, unwrap=False, compound='group'): + """Asphericity. + + See [Dima2004b]_ for background information. + + Parameters + ---------- + wrap : bool, optional + If ``True``, move all atoms within the primary unit cell before + calculation. [``False``] + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their centers. + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'}, optional + Which type of component to keep together during unwrapping. + + + .. versionadded:: 0.7.7 + .. versionchanged:: 0.8 + Added `pbc` keyword + .. versionchanged:: 0.20.0 + Added *unwrap* and *compound* parameter + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + .. versionchanged:: 2.5.0 + Added calculation for any `compound` type + """ + atomgroup = group.atoms + eig_vals = atomgroup.gyration_moments(wrap=wrap, unwrap=unwrap, compound=compound) + if len(eig_vals.shape) > 1: + shape = (3.0 / 2.0) * (np.sum((eig_vals - np.mean(eig_vals, axis=1))**2, axis=1) / + np.sum(eig_vals, axis=1)**2) + else: + shape = (3.0 / 2.0) * (np.sum((eig_vals - np.mean(eig_vals))**2) / + np.sum(eig_vals)**2) + + return shape
+ + transplants[GroupBase].append( + ('asphericity', asphericity)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_atomgroup_not_empty + def principal_axes(group, wrap=False): + """Calculate the principal axes from the moment of inertia. + + e1,e2,e3 = AtomGroup.principal_axes() + + The eigenvectors are sorted by eigenvalue, i.e. the first one + corresponds to the highest eigenvalue and is thus the first principal + axes. + + The eigenvectors form a right-handed coordinate system. + + Parameters + ---------- + wrap : bool, optional + If ``True``, move all atoms within the primary unit cell before + calculation. [``False``] + + Returns + ------- + axis_vectors : array + 3 x 3 array with ``v[0]`` as first, ``v[1]`` as second, and + ``v[2]`` as third eigenvector. + + + .. versionchanged:: 0.8 + Added `pbc` keyword + .. versionchanged:: 1.0.0 + Always return principal axes in right-hand convention. + .. versionchanged:: 2.1.0 + Renamed `pbc` kwarg to `wrap`. `pbc` is still accepted but + is deprecated and will be removed in version 3.0. + """ + atomgroup = group.atoms + e_val, e_vec = np.linalg.eig(atomgroup.moment_of_inertia(wrap=wrap)) + + # Sort + indices = np.argsort(e_val)[::-1] + # Make transposed in more logical form. See Issue 33. + e_vec = e_vec[:, indices].T + + # Make sure the right hand convention is followed + if np.dot(np.cross(e_vec[0], e_vec[1]), e_vec[2]) < 0: + e_vec *= -1 + + return e_vec
+ + transplants[GroupBase].append( + ('principal_axes', principal_axes)) + +
[docs] def align_principal_axis(group, axis, vector): + """Align principal axis with index `axis` with `vector`. + + Parameters + ---------- + axis : {0, 1, 2} + Index of the principal axis (0, 1, or 2), as produced by + :meth:`~principal_axes`. + vector : array_like + Vector to align principal axis with. + + Notes + ----- + To align the long axis of a channel (the first principal axis, i.e. + *axis* = 0) with the z-axis:: + + u.atoms.align_principal_axis(0, [0,0,1]) + u.atoms.write("aligned.pdb") + """ + p = group.principal_axes()[axis] + angle = np.degrees(mdamath.angle(p, vector)) + ax = transformations.rotaxis(p, vector) + # print "principal[%d] = %r" % (axis, p) + # print "axis = %r, angle = %f deg" % (ax, angle) + return group.rotateby(angle, ax)
+ + transplants[GroupBase].append( + ('align_principal_axis', align_principal_axis))
+ + +# TODO: update docs to property doc +
[docs]class Charges(AtomAttr): + attrname = 'charges' + singular = 'charge' + per_object = 'atom' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, + Atom, Residue, Segment] + transplants = defaultdict(list) + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na) + +
[docs] def get_residues(self, rg): + resatoms = self.top.tt.residues2atoms_2d(rg.ix) + + if isinstance(rg._ix, numbers.Integral): + charges = self.values[tuple(resatoms)].sum() + else: + charges = np.empty(len(rg)) + for i, row in enumerate(resatoms): + charges[i] = self.values[row].sum() + + return charges
+ +
[docs] def get_segments(self, sg): + segatoms = self.top.tt.segments2atoms_2d(sg.ix) + + if isinstance(sg._ix, numbers.Integral): + # for a single segment + charges = self.values[tuple(segatoms)].sum() + else: + # for a segmentgroup + charges = np.array([self.values[row].sum() for row in segatoms]) + + return charges
+ +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + @check_atomgroup_not_empty + def center_of_charge(group, wrap=False, unwrap=False, compound='group'): + r"""Center of (absolute) charge of (compounds of) the group + + .. math:: + \boldsymbol R = \frac{\sum_i \vert q_i \vert \boldsymbol r_i} + {\sum_i \vert q_i \vert} + + where :math:`q_i` is the charge and :math:`\boldsymbol r_i` the + position of atom :math:`i` in the given + :class:`MDAnalysis.core.groups.AtomGroup`. + Centers of charge per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. If the charges of a compound sum up to zero, the + center of mass coordinates of that compound will be ``nan`` (not a + number). + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. Instead, the resulting + center-of-mass position vectors will be moved to the primary unit + cell after calculation. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', \ + 'fragments'}, optional + If ``'group'``, the center of mass of all atoms in the group will + be returned as a single position vector. Otherwise, the centers of + mass of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. + a 2d array. + Note that, in any case, *only* the positions of + :class:`Atoms<Atom>` *belonging to the group* will be taken into + account. + + Returns + ------- + center : numpy.ndarray + Position vector(s) of the center(s) of charge of the group. + If `compound` was set to ``'group'``, the output will be a single + position vector. + If `compound` was set to ``'segments'`` or ``'residues'``, the + output will be a 2d coordinate array of shape ``(n, 3)`` where + ``n`` is the number of compounds. + + Note + ---- + This method can only be accessed if the underlying topology has + information about atomic charges. + + .. versionadded:: 2.2.0 + """ + atoms = group.atoms + return atoms.center(weights=atoms.charges.__abs__(), + wrap=wrap, + compound=compound, + unwrap=unwrap)
+ + + transplants[GroupBase].append( + ('center_of_charge', center_of_charge)) + +
[docs] @warn_if_not_unique + @check_atomgroup_not_empty + def total_charge(group, compound='group'): + r"""Total charge of (compounds of) the group. + + Computes the total charge of :class:`Atoms<Atom>` in the group. + Total charges per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Parameters + ---------- + compound : {'group', 'segments', 'residues', 'molecules', 'fragments'},\ + optional + If 'group', the total charge of all atoms in the group will + be returned as a single value. Otherwise, the total charges per + :class:`Segment`, :class:`Residue`, molecule, or fragment + will be returned as a 1d array. + Note that, in any case, *only* the charges of :class:`Atoms<Atom>` + *belonging to the group* will be taken into account. + + Returns + ------- + float or numpy.ndarray + Total charge of (compounds of) the group. + If `compound` was set to ``'group'``, the output will be a single + value. Otherwise, the output will be a 1d array of shape ``(n,)`` + where ``n`` is the number of compounds. + + + .. versionchanged:: 0.20.0 Added `compound` parameter + """ + return group.accumulate("charges", compound=compound)
+ + transplants[GroupBase].append( + ('total_charge', total_charge)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + def dipole_vector(group, + wrap=False, + unwrap=False, + compound='group', + center="mass"): + r"""Dipole vector of the group. + + .. math:: + \boldsymbol{\mu} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - + \mathbf{r}_{COM} ) + + Computes the dipole vector of :class:`Atoms<Atom>` in the group. + Dipole vector per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Note that the magnitude of the dipole moment is independent of the + ``center`` chosen unless the species has a net charge. In the case of + a charged group the dipole moment can be later adjusted with: + + .. math:: + \boldsymbol{\mu}_{COC} = \boldsymbol{\mu}_{COM} + + q_{ag}\mathbf{r}_{COM} - q_{ag}\boldsymbol{r}_{COC} + + Where :math:`\mathbf{r}_{COM}` is the center of mass and + :math:`\mathbf{r}_{COC}` is the center of charge. + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', \ + 'fragments'}, optional + If ``'group'``, a single dipole vector returns. Otherwise, an + array of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. + a 2d array. + Note that, in any case, *only* the positions of + :class:`Atoms<Atom>` *belonging to the group* will be taken into + account. + center : {'mass', 'charge'}, optional + Choose whether the dipole vector is calculated at the center of + "mass" or the center of "charge", default is "mass". + + Returns + ------- + numpy.ndarray + Dipole vector(s) of (compounds of) the group in :math:`eÅ`. + If `compound` was set to ``'group'``, the output will be a single + value. Otherwise, the output will be a 1d array of shape ``(n,3)`` + where ``n`` is the number of compounds. + + + .. versionadded:: 2.4.0 + """ + + compound = compound.lower() + + atomgroup = group.atoms + charges = atomgroup.charges + + if center == "mass": + masses = atomgroup.masses + ref = atomgroup.center_of_mass(wrap=wrap, + unwrap=unwrap, + compound=compound) + elif center == "charge": + ref = atomgroup.center_of_charge(wrap=wrap, + unwrap=unwrap, + compound=compound) + else: + choices = ["mass", "charge"] + raise ValueError( + f"The dipole center, {center}, is not supported. Choose" + " one of: {choices}") + + if compound == 'group': + if wrap: + recenteredpos = (atomgroup.pack_into_box(inplace=False) - ref) + elif unwrap: + recenteredpos = (atomgroup.unwrap( + inplace=False, + compound=compound, + reference=None, + ) - ref) + else: + recenteredpos = (atomgroup.positions - ref) + dipole_vector = np.einsum('ij,ij->j',recenteredpos, + charges[:, np.newaxis]) + else: + (atom_masks, compound_masks, + n_compounds) = atomgroup._split_by_compound_indices(compound) + + if unwrap: + coords = atomgroup.unwrap(compound=compound, + reference=None, + inplace=False) + else: + coords = atomgroup.positions + chgs = atomgroup.charges + + dipole_vector = np.empty((n_compounds, 3), dtype=np.float64) + for compound_mask, atom_mask in zip(compound_masks, atom_masks): + dipole_vector[compound_mask] = np.einsum('ijk,ijk->ik', + (coords[atom_mask]- + ref[compound_mask][:, None, :]), + chgs[atom_mask][:, :, None]) + + return dipole_vector
+ + transplants[GroupBase].append(('dipole_vector', dipole_vector)) + +
[docs] def dipole_moment(group, **kwargs): + r"""Dipole moment of the group or compounds in a group. + + .. math:: + \mu = |\boldsymbol{\mu}| = \sqrt{ \sum_{i=1}^{D} \mu^2 } + + Where :math:`D` is the number of dimensions, in this case 3. + + Computes the dipole moment of :class:`Atoms<Atom>` in the group. + Dipole per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Note that when there is a net charge, the magnitude of the dipole + moment is dependent on the `center` chosen. + See :meth:`~dipole_vector`. + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', \ + 'fragments'}, optional + If ``'group'``, a single dipole vector returns. Otherwise, an + array of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. + a 2d array. + Note that, in any case, *only* the positions of + :class:`Atoms<Atom>` *belonging to the group* will be taken into + account. + center : {'mass', 'charge'}, optional + Choose whether the dipole vector is calculated at the center of + "mass" or the center of "charge", default is "mass". + + Returns + ------- + numpy.ndarray + Dipole moment(s) of (compounds of) the group in :math:`eÅ`. + If `compound` was set to ``'group'``, the output will be a single + value. Otherwise, the output will be a 1d array of shape ``(n,)`` + where ``n`` is the number of compounds. + + + .. versionadded:: 2.4.0 + """ + + atomgroup = group.atoms + + dipole_vector = atomgroup.dipole_vector(**kwargs) + + if len(dipole_vector.shape) > 1: + dipole_moment = np.sqrt(np.einsum('ij,ij->i',dipole_vector,dipole_vector)) + else: + dipole_moment = np.sqrt(np.einsum('i,i->',dipole_vector,dipole_vector)) + + return dipole_moment
+ + transplants[GroupBase].append(('dipole_moment', dipole_moment)) + +
[docs] @warn_if_not_unique + @_pbc_to_wrap + @check_wrap_and_unwrap + def quadrupole_tensor(group, + wrap=False, + unwrap=False, + compound='group', + center="mass"): + r"""Traceless quadrupole tensor of the group or compounds. + + This tensor is first computed as the outer product of vectors from + a reference point to some atom, and multiplied by the atomic charge. + The tensor of each atom is then summed to produce the quadrupole + tensor of the group: + + .. math:: + \mathsf{Q} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - + \mathbf{r}_{COM} ) \otimes ( \mathbf{r}_{i} - \mathbf{r}_{COM} ) + + The traceless quadrupole tensor, :math:`\hat{\mathsf{Q}}`, is then + taken from: + + .. math:: + \hat{\mathsf{Q}} = \frac{3}{2} \mathsf{Q} - \frac{1}{2} + tr(\mathsf{Q}) + + Computes the quadrupole tensor of :class:`Atoms<Atom>` in the group. + Tensor per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Note that when there is an unsymmetrical plane in the molecule or + group, the magnitude of the quadrupole tensor is dependent on the + ``center`` (e.g., :math:`\mathbf{r}_{COM}`) chosen and cannot be translated. + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', \ + 'fragments'}, optional + If ``'group'``, a single quadrupole value returns. Otherwise, an + array of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. + a 1d array. + Note that, in any case, *only* the positions of + :class:`Atoms<Atom>` *belonging to the group* will be taken into + account. + center : {'mass', 'charge'}, optional + Choose whether the dipole vector is calculated at the center of + "mass" or the center of "charge", default is "mass". + + Returns + ------- + numpy.ndarray + Quadrupole tensor(s) of (compounds of) the group in :math:`eÅ^2`. + If `compound` was set to ``'group'``, the output will be a single + tensor of shape ``(3,3)``. Otherwise, the output will be a 1d array + of shape ``(n,3,3)`` where ``n`` is the number of compounds. + + + .. versionadded:: 2.4.0 + """ + + def __quadrupole_tensor(recenteredpos, charges): + """ Calculate the traceless quadrupole tensor + """ + if len(charges.shape) > 1: + charges = np.squeeze(charges) + tensor = np.einsum( + "ki,kj->ij", + recenteredpos, + np.einsum("ij,i->ij", recenteredpos, charges), + ) + return 3 * tensor / 2 - np.identity(3) * np.trace(tensor) / 2 + + compound = compound.lower() + + atomgroup = group.atoms + charges = atomgroup.charges + + if center == "mass": + masses = atomgroup.masses + ref = atomgroup.center_of_mass(wrap=wrap, + unwrap=unwrap, + compound=compound) + elif center == "charge": + ref = atomgroup.center_of_charge(wrap=wrap, + unwrap=unwrap, + compound=compound) + else: + choices = ["mass", "charge"] + raise ValueError( + f"The quadrupole center, {center}, is not supported. Choose" + " one of: {choices}") + + if compound == 'group': + if wrap: + recenteredpos = (atomgroup.pack_into_box(inplace=False) - ref) + elif unwrap: + recenteredpos = (atomgroup.unwrap( + inplace=False, + compound=compound, + reference=None, + ) - ref) + else: + recenteredpos = (atomgroup.positions - ref) + quad_tensor = __quadrupole_tensor(recenteredpos, charges) + else: + (atom_masks, compound_masks, + n_compounds) = atomgroup._split_by_compound_indices(compound) + + if unwrap: + coords = atomgroup.unwrap(compound=compound, + reference=None, + inplace=False) + else: + coords = atomgroup.positions + chgs = atomgroup.charges + + quad_tensor = np.empty((n_compounds, 3, 3), dtype=np.float64) + for compound_mask, atom_mask in zip(compound_masks, atom_masks): + quad_tensor[compound_mask, :, :] = [ + __quadrupole_tensor(coords[mask] - ref[compound_mask][i], + chgs[mask][:, None]) + for i, mask in enumerate(atom_mask) + ] + + return quad_tensor
+ + transplants[GroupBase].append(('quadrupole_tensor', quadrupole_tensor)) + +
[docs] def quadrupole_moment(group, **kwargs): + r"""Quadrupole moment of the group according to :cite:p:`Gray1984`. + + .. math:: + Q = \sqrt{\frac{2}{3}{\hat{\mathsf{Q}}}:{\hat{\mathsf{Q}}}} + + where the quadrupole moment is calculated from the tensor double + contraction of the traceless quadropole tensor :math:`\hat{\mathsf{Q}}` + + Computes the quadrupole moment of :class:`Atoms<Atom>` in the group. + Quadrupole per :class:`Residue`, :class:`Segment`, molecule, or + fragment can be obtained by setting the `compound` parameter + accordingly. + + Note that when there is an unsymmetrical plane in the molecule or + group, the magnitude of the quadrupole moment is dependant on the + ``center`` chosen and cannot be translated. + + Parameters + ---------- + wrap : bool, optional + If ``True`` and `compound` is ``'group'``, move all atoms to the + primary unit cell before calculation. + If ``True`` and `compound` is not ``group``, the + centers of mass of each compound will be calculated without moving + any atoms to keep the compounds intact. + unwrap : bool, optional + If ``True``, compounds will be unwrapped before computing their + centers. + compound : {'group', 'segments', 'residues', 'molecules', \ + 'fragments'}, optional + If ``'group'``, a single quadrupole value returns. Otherwise, an + array of each :class:`Segment`, :class:`Residue`, molecule, or + fragment will be returned as an array of position vectors, i.e. + a 1d array. + Note that, in any case, *only* the positions of + :class:`Atoms<Atom>` *belonging to the group* will be taken into + account. + center : {'mass', 'charge'}, optional + Choose whether the dipole vector is calculated at the center of + "mass" or the center of "charge", default is "mass". + + Returns + ------- + numpy.ndarray + Quadrupole moment(s) of (compounds of) the group in :math:`eÅ^2`. + If `compound` was set to ``'group'``, the output will be a single + value. Otherwise, the output will be a 1d array of shape ``(n,)`` + where ``n`` is the number of compounds. + + + .. versionadded:: 2.4.0 + """ + + atomgroup = group.atoms + + def __quadrupole_moment(tensor): + return np.sqrt(2 * np.tensordot(tensor, tensor) / 3) + + quad_tensor = atomgroup.quadrupole_tensor(**kwargs) + + if len(quad_tensor.shape) == 2: + quad_moment = __quadrupole_moment(quad_tensor) + else: + quad_moment = np.array([__quadrupole_moment(x) for x in quad_tensor]) + + return quad_moment
+ + transplants[GroupBase].append(('quadrupole_moment', quadrupole_moment))
+ + +
[docs]class FormalCharges(AtomAttr): + """Formal charge on each atom""" + attrname = 'formalcharges' + singular = 'formalcharge' + per_object = 'atom' + dtype = int + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +# TODO: update docs to property doc +
[docs]class Occupancies(AtomAttr): + attrname = 'occupancies' + singular = 'occupancy' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +# TODO: update docs to property doc +
[docs]class AltLocs(AtomStringAttr): + """AltLocs for each atom""" + attrname = 'altLocs' + singular = 'altLoc' + per_object = 'atom' + dtype = object + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.array(['' for _ in range(na)], dtype=object)
+ + +
[docs]class GBScreens(AtomAttr): + """Generalized Born screening factor""" + attrname = 'gbscreens' + singular = 'gbscreen' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class SolventRadii(AtomAttr): + """Intrinsic solvation radius""" + attrname = 'solventradii' + singular = 'solventradius' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class NonbondedIndices(AtomAttr): + """Nonbonded index (AMBER)""" + attrname = 'nbindices' + singular = 'nbindex' + per_object = 'atom' + dtype = int + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na, dtype=np.int32)
+ + +
[docs]class RMins(AtomAttr): + """The Rmin/2 LJ parameter""" + attrname = 'rmins' + singular = 'rmin' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class Epsilons(AtomAttr): + """The epsilon LJ parameter""" + attrname = 'epsilons' + singular = 'epsilon' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class RMin14s(AtomAttr): + """The Rmin/2 LJ parameter for 1-4 interactions""" + attrname = 'rmin14s' + singular = 'rmin14' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class Epsilon14s(AtomAttr): + """The epsilon LJ parameter for 1-4 interactions""" + attrname = 'epsilon14s' + singular = 'epsilon14' + per_object = 'atom' + dtype = float + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na)
+ + +
[docs]class Aromaticities(AtomAttr): + """Aromaticity""" + attrname = "aromaticities" + singular = "aromaticity" + per_object = "atom" + dtype = bool + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.zeros(na, dtype=bool)
+ + +
[docs]class RSChirality(AtomAttr): + """R/S chirality""" + attrname = 'chiralities' + singular= 'chirality' + dtype = 'U1'
+ + +
[docs]class ResidueAttr(TopologyAttr): + attrname = 'residueattrs' + singular = 'residueattr' + target_classes = [AtomGroup, ResidueGroup, SegmentGroup, Atom, Residue] + per_object = 'residue' + +
[docs] def get_atoms(self, ag): + rix = self.top.tt.atoms2residues(ag.ix) + return self.values[rix]
+ +
[docs] def set_atoms(self, ag, values): + raise _wronglevel_error(self, ag)
+ +
[docs] def get_residues(self, rg): + return self.values[rg.ix]
+ +
[docs] @_check_length + def set_residues(self, rg, values): + self.values[rg.ix] = values
+ +
[docs] def get_segments(self, sg): + """By default, the values for each residue present in the set of + segments are returned in a single array. This behavior can be overriden + in child attributes. + + """ + rixs = self.top.tt.segments2residues_2d(sg.ix) + return [self.values[rix] for rix in rixs]
+ +
[docs] def set_segments(self, sg, values): + raise _wronglevel_error(self, sg)
+ + +# woe betide anyone who switches this inheritance order +# Mixin needs to be first (L to R) to get correct __init__ and set_atoms +
[docs]class ResidueStringAttr(_StringInternerMixin, ResidueAttr): + +
[docs] @_check_length + def set_residues(self, ag, values): + return self._set_X(ag, values)
+ + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.full(nr, '', dtype=object)
+ + +# TODO: update docs to property doc +
[docs]class Resids(ResidueAttr): + """Residue ID""" + attrname = 'resids' + singular = 'resid' + dtype = int + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.arange(1, nr + 1)
+ + +# TODO: update docs to property doc +
[docs]class Resnames(ResidueStringAttr): + attrname = 'resnames' + singular = 'resname' + transplants = defaultdict(list) + dtype = object + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.array(['' for _ in range(nr)], dtype=object) + +
[docs] def sequence(self, **kwargs): + """Returns the amino acid sequence. + + The format of the sequence is selected with the keyword *format*: + + ============== ============================================ + *format* description + ============== ============================================ + 'SeqRecord' :class:`Bio.SeqRecord.SeqRecord` (default) + 'Seq' :class:`Bio.Seq.Seq` + 'string' string + ============== ============================================ + + The sequence is returned by default (keyword ``format = 'SeqRecord'``) + as a :class:`Bio.SeqRecord.SeqRecord` instance, which can then be + further processed. In this case, all keyword arguments (such as the + *id* string or the *name* or the *description*) are directly passed to + :class:`Bio.SeqRecord.SeqRecord`. + + If the keyword *format* is set to ``'Seq'``, all *kwargs* are ignored + and a :class:`Bio.Seq.Seq` instance is returned. The difference to the + record is that the record also contains metadata and can be directly + used as an input for other functions in :mod:`Bio`. + + If the keyword *format* is set to ``'string'``, all *kwargs* are + ignored and a Python string is returned. + + .. rubric:: Example: Write FASTA file + + Use :func:`Bio.SeqIO.write`, which takes sequence records:: + + import Bio.SeqIO + + # get the sequence record of a protein component of a Universe + protein = u.select_atoms("protein") + record = protein.sequence(id="myseq1", name="myprotein") + + Bio.SeqIO.write(record, "single.fasta", "fasta") + + A FASTA file with multiple entries can be written with :: + + Bio.SeqIO.write([record1, record2, ...], "multi.fasta", "fasta") + + Parameters + ---------- + format : string, optional + - ``"string"``: return sequence as a string of 1-letter codes + - ``"Seq"``: return a :class:`Bio.Seq.Seq` instance + - ``"SeqRecord"``: return a :class:`Bio.SeqRecord.SeqRecord` + instance + + Default is ``"SeqRecord"`` + id : optional + Sequence ID for SeqRecord (should be different for different + sequences) + name : optional + Name of the protein. + description : optional + Short description of the sequence. + kwargs : optional + Any other keyword arguments that are understood by + class:`Bio.SeqRecord.SeqRecord`. + + Raises + ------ + :exc:`ValueError` if a residue name cannot be converted to a + 1-letter IUPAC protein amino acid code; make sure to only + select protein residues. + + :exc:`TypeError` if an unknown *format* is selected. + + + .. versionadded:: 0.9.0 + """ + formats = ('string', 'Seq', 'SeqRecord') + + format = kwargs.pop("format", "SeqRecord") + if format not in formats: + raise TypeError("Unknown format='{0}': must be one of: {1}".format( + format, ", ".join(formats))) + try: + sequence = "".join([convert_aa_code(r) + for r in self.residues.resnames]) + except KeyError as err: + errmsg = (f"AtomGroup contains a residue name '{err.message}' that" + f" does not have a IUPAC protein 1-letter character") + raise ValueError(errmsg) from None + if format == "string": + return sequence + seq = Bio.Seq.Seq(sequence) + if format == "Seq": + return seq + return Bio.SeqRecord.SeqRecord(seq, **kwargs)
+ + transplants[ResidueGroup].append( + ('sequence', sequence))
+ + +# TODO: update docs to property doc +
[docs]class Resnums(ResidueAttr): + attrname = 'resnums' + singular = 'resnum' + dtype = int + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.arange(1, nr + 1)
+ + +
[docs]class ICodes(ResidueStringAttr): + """Insertion code for Atoms""" + attrname = 'icodes' + singular = 'icode' + dtype = object
+ + +
[docs]class Moltypes(ResidueStringAttr): + """Name of the molecule type + + Two molecules that share a molecule type share a common template topology. + """ + attrname = 'moltypes' + singular = 'moltype' + dtype = object
+ + +
[docs]class Molnums(ResidueAttr): + """Index of molecule from 0 + """ + attrname = 'molnums' + singular = 'molnum' + dtype = np.intp
+ + +# segment attributes + + +
[docs]class SegmentAttr(TopologyAttr): + """Base class for segment attributes. + + """ + attrname = 'segmentattrs' + singular = 'segmentattr' + target_classes = [AtomGroup, ResidueGroup, + SegmentGroup, Atom, Residue, Segment] + per_object = 'segment' + +
[docs] def get_atoms(self, ag): + six = self.top.tt.atoms2segments(ag.ix) + return self.values[six]
+ +
[docs] def set_atoms(self, ag, values): + raise _wronglevel_error(self, ag)
+ +
[docs] def get_residues(self, rg): + six = self.top.tt.residues2segments(rg.ix) + return self.values[six]
+ +
[docs] def set_residues(self, rg, values): + raise _wronglevel_error(self, rg)
+ +
[docs] def get_segments(self, sg): + return self.values[sg.ix]
+ +
[docs] @_check_length + def set_segments(self, sg, values): + self.values[sg.ix] = values
+ + +# woe betide anyone who switches this inheritance order +# Mixin needs to be first (L to R) to get correct __init__ and set_atoms +
[docs]class SegmentStringAttr(_StringInternerMixin, SegmentAttr): + +
[docs] @_check_length + def set_segments(self, ag, values): + return self._set_X(ag, values)
+ + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.full(ns, '', dtype=object)
+ + +# TODO: update docs to property doc +
[docs]class Segids(SegmentStringAttr): + attrname = 'segids' + singular = 'segid' + transplants = defaultdict(list) + dtype = object + + @staticmethod + def _gen_initial_values(na, nr, ns): + return np.array(['' for _ in range(ns)], dtype=object)
+ + +def _check_connection_values(func): + """ + Checks values passed to _Connection methods for: + - appropriate number of atom indices + - coerces them to tuples of ints (for hashing) + - ensures that first value is less than last (reversibility & hashing) + + .. versionadded:: 1.0.0 + + """ + + @functools.wraps(func) + def wrapper(self, values, *args, **kwargs): + if not all(len(x) == self._n_atoms + and all(isinstance(y, (int, np.integer)) for y in x) + for x in values): + raise ValueError(("{} must be an iterable of tuples with {}" + " atom indices").format(self.attrname, + self._n_atoms)) + clean = [] + for v in values: + if v[0] > v[-1]: + v = v[::-1] + clean.append(tuple(v)) + + return func(self, clean, *args, **kwargs) + + return wrapper + + +class _ConnectionTopologyAttrMeta(_TopologyAttrMeta): + """ + Specific metaclass for atom-connectivity topology attributes. + + This class adds an ``intra_{attrname}`` property to groups + to return only the connections within the atoms in the group. + """ + + def __init__(cls, name, bases, classdict): + super().__init__(name, bases, classdict) + + attrname = classdict.get('attrname') + + if attrname is not None: + + def intra_connection(self, ag): + """Get connections only within this AtomGroup + """ + return ag.get_connections(attrname, outside=False) + + method = MethodType(intra_connection, cls) + prop = property(method, None, None, method.__doc__) + cls.transplants[AtomGroup].append((f"intra_{attrname}", prop)) + + +class _Connection(AtomAttr, metaclass=_ConnectionTopologyAttrMeta): + """Base class for connectivity between atoms + + .. versionchanged:: 1.0.0 + Added type checking to atom index values. + """ + + @_check_connection_values + def __init__(self, values, types=None, guessed=False, order=None): + self.values = values + if types is None: + types = [None] * len(values) + self.types = types + if guessed in (True, False): + # if single value passed, multiply this across + # all bonds + guessed = [guessed] * len(values) + self._guessed = guessed + if order is None: + order = [None] * len(values) + self.order = order + self._cache = dict() + + def copy(self): + """Return a deepcopy of this attribute""" + return self.__class__(copy.copy(self.values), + copy.copy(self.types), + copy.copy(self._guessed), + copy.copy(self.order)) + + def __len__(self): + return len(self._bondDict) + + @property + @cached('bd') + def _bondDict(self): + """Lazily built mapping of atoms:bonds""" + bd = defaultdict(list) + + for b, t, g, o in zip(self.values, self.types, + self._guessed, self.order): + for a in b: + bd[a].append((b, t, g, o)) + return bd + + def set_atoms(self, ag): + return NotImplementedError("Cannot set bond information") + + def get_atoms(self, ag): + """ + Get connection values where the atom indices are in + the given atomgroup. + + Parameters + ---------- + ag : AtomGroup + + """ + try: + unique_bonds = set(itertools.chain( + *[self._bondDict[a] for a in ag.ix])) + except TypeError: + # maybe we got passed an Atom + unique_bonds = self._bondDict[ag.ix] + unique_bonds = np.array(sorted(unique_bonds), dtype=object) + bond_idx, types, guessed, order = np.hsplit(unique_bonds, 4) + bond_idx = np.array(bond_idx.ravel().tolist(), dtype=np.int32) + types = types.ravel() + guessed = guessed.ravel() + order = order.ravel() + return TopologyGroup(bond_idx, ag.universe, + self.singular[:-1], + types, + guessed, + order) + + @_check_connection_values + def _add_bonds(self, values, types=None, guessed=True, order=None): + if types is None: + types = itertools.cycle((None,)) + if guessed in (True, False): + guessed = itertools.cycle((guessed,)) + if order is None: + order = itertools.cycle((None,)) + + existing = set(self.values) + for v, t, g, o in zip(values, types, guessed, order): + if v not in existing: + self.values.append(v) + self.types.append(t) + self._guessed.append(g) + self.order.append(o) + # kill the old cache of bond Dict + try: + del self._cache['bd'] + except KeyError: + pass + + @_check_connection_values + def _delete_bonds(self, values): + """ + .. versionadded:: 1.0.0 + """ + + to_check = set(values) + self_values = set(self.values) + if not to_check.issubset(self_values): + missing = to_check-self_values + indices = ', '.join(map(str, missing)) + raise ValueError(('Cannot delete nonexistent ' + '{attrname} with atom indices:' + '{indices}').format(attrname=self.attrname, + indices=indices)) + idx = [self.values.index(v) for v in to_check] + for i in sorted(idx, reverse=True): + del self.values[i] + + for attr in ('types', '_guessed', 'order'): + arr = np.array(getattr(self, attr), dtype='object') + new = np.delete(arr, idx) + setattr(self, attr, list(new)) + # kill the old cache of bond Dict + try: + del self._cache['bd'] + except KeyError: + pass + + +
[docs]class Bonds(_Connection): + """Bonds between two atoms + + Must be initialised by a list of zero based tuples. + These indices refer to the atom indices. + E.g., ` [(0, 1), (1, 2), (2, 3)]` + + Also adds the `bonded_atoms`, `fragment` and `fragments` + attributes. + """ + attrname = 'bonds' + # Singular is the same because one Atom might have + # many bonds, so still asks for "bonds" in the plural + singular = 'bonds' + transplants = defaultdict(list) + _n_atoms = 2 + +
[docs] def bonded_atoms(self): + """An :class:`~MDAnalysis.core.groups.AtomGroup` of all + :class:`Atoms<MDAnalysis.core.groups.Atom>` bonded to this + :class:`~MDAnalysis.core.groups.Atom`.""" + idx = [b.partner(self).index for b in self.bonds] + return self.universe.atoms[idx]
+ + transplants[Atom].append( + ('bonded_atoms', property(bonded_atoms, None, None, + bonded_atoms.__doc__))) + +
[docs] def fragindex(self): + """The index (ID) of the + :class:`~MDAnalysis.core.topologyattrs.Bonds.fragment` this + :class:`~MDAnalysis.core.groups.Atom` is part of. + + + .. versionadded:: 0.20.0 + """ + return self.universe._fragdict[self.ix].ix
+ +
[docs] @cached('fragindices', universe_validation=True) + def fragindices(self): + r"""The + :class:`fragment indices<MDAnalysis.core.topologyattrs.Bonds.fragindex>` + of all :class:`Atoms<MDAnalysis.core.groups.Atom>` in this + :class:`~MDAnalysis.core.groups.AtomGroup`. + + A :class:`numpy.ndarray` with + :attr:`~numpy.ndarray.shape`\ ``=(``\ :attr:`~AtomGroup.n_atoms`\ ``,)`` + and :attr:`~numpy.ndarray.dtype`\ ``=numpy.int64``. + + + .. versionadded:: 0.20.0 + """ + fragdict = self.universe._fragdict + return np.array([fragdict[aix].ix for aix in self.ix], dtype=np.intp)
+ +
[docs] def fragment(self): + """An :class:`~MDAnalysis.core.groups.AtomGroup` representing the + fragment this :class:`~MDAnalysis.core.groups.Atom` is part of. + + A fragment is a + :class:`group of atoms<MDAnalysis.core.groups.AtomGroup>` which are + interconnected by :class:`~MDAnalysis.core.topologyattrs.Bonds`, i.e., + there exists a path along one + or more :class:`~MDAnalysis.core.topologyattrs.Bonds` between any pair + of :class:`Atoms<MDAnalysis.core.groups.Atom>` + within a fragment. Thus, a fragment typically corresponds to a molecule. + + + .. versionadded:: 0.9.0 + """ + return self.universe._fragdict[self.ix].fragment
+ +
[docs] @cached('fragments', universe_validation=True) + def fragments(self): + """Read-only :class:`tuple` of + :class:`fragments<MDAnalysis.core.topologyattrs.Bonds.fragment>`. + + Contains all fragments that + any :class:`~MDAnalysis.core.groups.Atom` in this + :class:`~MDAnalysis.core.groups.AtomGroup` is part of. + + A fragment is a + :class:`group of atoms<MDAnalysis.core.groups.AtomGroup>` which are + interconnected by :class:`~MDAnalysis.core.topologyattrs.Bonds`, i.e., + there exists a path along one + or more :class:`~MDAnalysis.core.topologyattrs.Bonds` between any pair + of :class:`Atoms<MDAnalysis.core.groups.Atom>` + within a fragment. Thus, a fragment typically corresponds to a molecule. + + Note + ---- + * The contents of the fragments may extend beyond the contents of this + :class:`~MDAnalysis.core.groups.AtomGroup`. + + + .. versionadded:: 0.9.0 + """ + fragdict = self.universe._fragdict + return tuple(sorted(set(fragdict[aix].fragment for aix in self.ix), + key=lambda x: x[0].ix))
+ +
[docs] def n_fragments(self): + """The number of unique + :class:`~MDAnalysis.core.topologyattrs.Bonds.fragments` the + :class:`Atoms<MDAnalysis.core.groups.Atom>` of this + :class:`~MDAnalysis.core.groups.AtomGroup` are part of. + + + .. versionadded:: 0.20.0 + """ + return len(unique_int_1d(self.fragindices))
+ + transplants[Atom].append( + ('fragment', property(fragment, None, None, + fragment.__doc__))) + + transplants[Atom].append( + ('fragindex', property(fragindex, None, None, + fragindex.__doc__))) + + transplants[AtomGroup].append( + ('fragments', property(fragments, None, None, + fragments.__doc__))) + + transplants[AtomGroup].append( + ('fragindices', property(fragindices, None, None, + fragindices.__doc__))) + + transplants[AtomGroup].append( + ('n_fragments', property(n_fragments, None, None, + n_fragments.__doc__)))
+ + +
[docs]class UreyBradleys(_Connection): + """Angles between two atoms + + Initialise with a list of 2 long tuples + + These indices refer to the atom indices. + + .. versionadded:: 1.0.0 + """ + attrname = 'ureybradleys' + singular = 'ureybradleys' + transplants = defaultdict(list) + _n_atoms = 2
+ + +
[docs]class Angles(_Connection): + """Angles between three atoms + + Initialise with a list of 3 long tuples + E.g., `[(0, 1, 2), (1, 2, 3), (2, 3, 4)]` + + These indices refer to the atom indices. + """ + attrname = 'angles' + singular = 'angles' + transplants = defaultdict(list) + _n_atoms = 3
+ + +
[docs]class Dihedrals(_Connection): + """A connection between four sequential atoms""" + attrname = 'dihedrals' + singular = 'dihedrals' + transplants = defaultdict(list) + _n_atoms = 4
+ + +
[docs]class Impropers(_Connection): + """An imaginary dihedral between four atoms""" + attrname = 'impropers' + singular = 'impropers' + transplants = defaultdict(list) + _n_atoms = 4
+ + +
[docs]class CMaps(_Connection): + """ + A connection between five atoms + .. versionadded:: 1.0.0 + """ + attrname = 'cmaps' + singular = 'cmaps' + transplants = defaultdict(list) + _n_atoms = 5
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/topologyobjects.html b/2.7.0-dev0/_modules/MDAnalysis/core/topologyobjects.html new file mode 100644 index 0000000000..13fd73abfa --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/topologyobjects.html @@ -0,0 +1,1138 @@ + + + + + + MDAnalysis.core.topologyobjects — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.core.topologyobjects

+# -*- 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-2017 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
+#
+
+"""
+Core Topology Objects --- :mod:`MDAnalysis.core.topologyobjects`
+================================================================
+
+The building blocks for MDAnalysis' description of topology
+
+"""
+import numbers
+import numpy as np
+import functools
+
+from ..lib import mdamath
+from ..lib.util import cached
+from ..lib import util
+from ..lib import distances
+
+
+
[docs]@functools.total_ordering +class TopologyObject(object): + + """Base class for all Topology items. + + Defines the behaviour by which Bonds/Angles/etc in MDAnalysis should + behave. + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.10.0 + All TopologyObject now keep track of if they were guessed or not + via the ``is_guessed`` managed property. + .. versionadded:: 0.11.0 + Added the `value` method to return the size of the object + .. versionchanged:: 2.6.0 + Updated Atom ID representation order to match that of AtomGroup indices + """ + __slots__ = ("_ix", "_u", "btype", "_bondtype", "_guessed", "order") + + def __init__(self, ix, universe, type=None, guessed=False, order=None): + """Create a topology object + + Parameters + ---------- + ix : numpy array + indices of the Atoms + universe : MDAnalysis.Universe + type : optional + Type of the bond + guessed : optional + If the Bond is guessed + """ + self._ix = ix + self._u = universe + self._bondtype = type + self._guessed = guessed + self.order = order + + @property + def atoms(self): + """Atoms within this Bond""" + return self._u.atoms[self._ix] + + @property + def indices(self): + """Tuple of indices describing this object + + .. versionadded:: 0.10.0 + """ + return self._ix + + @property + def universe(self): + return self._u + + @property + def type(self): + """Type of the bond as a tuple + + Note + ---- + When comparing types, it is important to consider the reverse + of the type too, i.e.:: + + a.type == b.type or a.type == b.type[::-1] + + """ + if self._bondtype is not None: + return self._bondtype + else: + return tuple(self.atoms.types) + + @property + def is_guessed(self): + return bool(self._guessed) + + def __hash__(self): + return hash((self._u, tuple(self.indices))) + + def __repr__(self): + """Return representation in same order of AtomGroup indices""" + return "<{cname} between: {conts}>".format( + cname=self.__class__.__name__, + conts=", ".join([ + "Atom {0}".format(i) + for i in self.indices])) + + def __contains__(self, other): + """Check whether an atom is in this :class:`TopologyObject`""" + return other in self.atoms + + def __eq__(self, other): + """Check whether two bonds have identical contents""" + if not self.universe == other.universe: + return False + return (np.array_equal(self.indices, other.indices) or + np.array_equal(self.indices[::-1], other.indices)) + + def __ne__(self, other): + return not self == other + + def __lt__(self, other): + return tuple(self.indices) < tuple(other.indices) + + def __getitem__(self, item): + """Can retrieve a given Atom from within""" + return self.atoms[item] + + def __iter__(self): + return iter(self.atoms) + + def __len__(self): + return len(self._ix)
+ + +
[docs]class Bond(TopologyObject): + + """A bond between two :class:`~MDAnalysis.core.groups.Atom` instances. + + Two :class:`Bond` instances can be compared with the ``==`` and + ``!=`` operators. A bond is equal to another if the same atom + numbers are connected and they have the same bond order. The + ordering of the two atom numbers is ignored as is the fact that a + bond was guessed. + + The presence of a particular atom can also be queried:: + + >>> Atom in Bond + + will return either ``True`` or ``False``. + + .. versionchanged:: 0.9.0 + Now a subclass of :class:`TopologyObject`. Changed class to use + :attr:`__slots__` and stores atoms in :attr:`atoms` attribute. + """ + btype = 'bond' + +
[docs] def partner(self, atom): + """Bond.partner(Atom) + + Returns + ------- + the other :class:`~MDAnalysis.core.groups.Atom` in this + bond + """ + if atom == self.atoms[0]: + return self.atoms[1] + elif atom == self.atoms[1]: + return self.atoms[0] + else: + raise ValueError("Unrecognised Atom")
+ +
[docs] def length(self, pbc=True): + """Length of the bond. + + .. versionchanged:: 0.11.0 + Added pbc keyword + .. versionchanged:: 0.19.0 + Changed default of pbc to True + """ + box = self.universe.dimensions if pbc else None + + return distances.calc_bonds(self[0].position, self[1].position, box)
+ + value = length
+ + +
[docs]class Angle(TopologyObject): + + """An angle between three :class:`~MDAnalysis.core.groups.Atom` instances. + Atom 2 is the apex of the angle + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Now a subclass of :class:`TopologyObject`; now uses + :attr:`__slots__` and stores atoms in :attr:`atoms` attribute + """ + btype = 'angle' + +
[docs] def angle(self, pbc=True): + """Returns the angle in degrees of this Angle. + + Angle between atoms 0 and 2 with apex at 1:: + + 2 + / + / + 1------0 + + Note + ---- + The numerical precision is typically not better than + 4 decimals (and is only tested to 3 decimals). + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.17.0 + Fixed angles close to 180 giving NaN + .. versionchanged:: 0.19.0 + Added pbc keyword, default True + """ + box = self.universe.dimensions if pbc else None + + return np.rad2deg(distances.calc_angles( + self[0].position, self[1].position, self[2].position, box))
+ + value = angle
+ + +
[docs]class Dihedral(TopologyObject): + + """Dihedral (dihedral angle) between four + :class:`~MDAnalysis.core.groups.Atom` instances. + + The dihedral is defined as the angle between the planes formed by + Atoms (1, 2, 3) and (2, 3, 4). + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Now a subclass of :class:`TopologyObject`; now uses :attr:`__slots__` + and stores atoms in :attr:`atoms` attribute. + .. versionchanged:: 0.11.0 + Renamed to Dihedral (was Torsion) + + """ + # http://cbio.bmt.tue.nl/pumma/uploads/Theory/dihedral.png + btype = 'dihedral' + +
[docs] def dihedral(self, pbc=True): + """Calculate the dihedral angle in degrees. + + Dihedral angle around axis connecting atoms 1 and 2 (i.e. the angle + between the planes spanned by atoms (0,1,2) and (1,2,3)):: + + 3 + | + 1-----2 + / + 0 + + + Note + ---- + The numerical precision is typically not better than + 4 decimals (and is only tested to 3 decimals). + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.19.0 + Added pbc keyword, default True + """ + box = self.universe.dimensions if pbc else None + A, B, C, D = self.atoms + + return np.rad2deg(distances.calc_dihedrals( + A.position, B.position, C.position, D.position, box))
+ + value = dihedral
+ + +# subclass Dihedral to inherit dihedral method +
[docs]class ImproperDihedral(Dihedral): + """ + Improper Dihedral (improper dihedral angle) between four + :class:`~MDAnalysis.core.groups.Atom` instances. + + MDAnalysis treats the improper dihedral angle as the angle between + the planes formed by Atoms (1, 2, 3) and (2, 3, 4). + + .. warning:: Definitions of Atom ordering in improper dihedrals + can change. Check the definitions here against + your software. + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.11.0 + Renamed to ImproperDihedral (was Improper_Torsion) + """ + # http://cbio.bmt.tue.nl/pumma/uploads/Theory/improper.png + btype = 'improper' + +
[docs] def improper(self): + """Improper dihedral angle in degrees. + + Note + ---- + The numerical precision is typically not better than + 4 decimals (and is only tested to 3 decimals). + """ + return self.dihedral()
+ + +
[docs]class UreyBradley(TopologyObject): + + """A Urey-Bradley angle between two :class:`~MDAnalysis.core.groups.Atom` instances. + Two :class:`UreyBradley` instances can be compared with the ``==`` and + ``!=`` operators. A UreyBradley angle is equal to another if the same atom + numbers are involved. + + .. versionadded:: 1.0.0 + """ + btype = 'ureybradley' + +
[docs] def partner(self, atom): + """UreyBradley.partner(Atom) + Returns + ------- + the other :class:`~MDAnalysis.core.groups.Atom` in this + interaction + """ + if atom == self.atoms[0]: + return self.atoms[1] + elif atom == self.atoms[1]: + return self.atoms[0] + else: + raise ValueError("Unrecognised Atom")
+ +
[docs] def distance(self, pbc=True): + """Distance between the atoms. + """ + box = self.universe.dimensions if pbc else None + return distances.calc_bonds(self[0].position, self[1].position, box)
+ + value = distance
+ + +
[docs]class CMap(TopologyObject): + """ + Coupled-torsion correction map term between five + :class:`~MDAnalysis.core.groups.Atom` instances. + + .. versionadded:: 1.0.0 + """ + btype = 'cmap'
+ + +
[docs]class TopologyDict(object): + + """A customised dictionary designed for sorting the bonds, angles and + dihedrals present in a group of atoms. + + Usage:: + + topologydict = TopologyDict(members) + + + TopologyDicts are also built lazily from a :class:`TopologyGroup.topDict` + attribute. + + The :class:`TopologyDict` collects all the selected topology type from the + atoms and categorises them according to the types of the atoms within. A + :class:`TopologyGroup` containing all of a given bond type can be made by + querying with the appropriate key. The keys to the :class:`TopologyDict` + are a tuple of the atom types that the bond represents and can be viewed + using the :meth:`keys` method. + + For example, from a system containing pure ethanol :: + + >>> td = u.bonds.topDict + >>> td.keys() + [('C', 'C'), + ('C', 'H'), + ('O', 'H'), + ('C', 'O')] + >>> td['C', 'O'] + < TopologyGroup containing 912 bonds > + + .. Note:: + + The key for a bond is taken from the type attribute of the atoms. + + Getting and setting types of bonds is done smartly, so a C-C-H + angle is considered identical to a H-C-C angle. + + Duplicate entries are automatically removed upon creation and + combination of different Dicts. This means a bond between atoms + 1 and 2 will only ever appear once in a dict despite both atoms 1 + and 2 having the bond in their :attr:`bond` attribute. + + Two :class:`TopologyDict` instances can be combined using + addition and it will not create any duplicate bonds in the process. + + Arguments + --------- + members : + A list of :class:`TopologyObject` instances + + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Changed initialisation to use a list of :class:`TopologyObject` + instances instead of list of atoms; now used from within + :class:`TopologyGroup` instead of accessed from :class:`AtomGroup`. + + """ + + def __init__(self, topologygroup): + if not isinstance(topologygroup, TopologyGroup): + raise TypeError("Can only construct from TopologyGroup") + + self.dict = dict() + self._u = topologygroup.universe + self.toptype = topologygroup.btype + + for b in topologygroup: + btype = b.type + try: + self.dict[btype] += [b] + except KeyError: + self.dict[btype] = [b] + + # Some force field types define bonds with a type + # (Ex. 1: 12 or 21), while others define with a tuple of atom types + # (Ex. 2: ("H", "O") or ("O", "H")). If the bond type is a tuple + # then the bond types in our second example are equivalent and one + # should be removed. If the bonds are defined as an integer then + # our first example would also be combined if `_removeDupes()` + # is run. + if self.dict and isinstance(list(self.dict.keys())[0], tuple): + self._removeDupes() + + def _removeDupes(self): + """Sorts through contents and makes sure that there are + no duplicate keys (through type reversal) + """ + newdict = dict() + + # Go through all keys, if the reverse of the key exists add this to + # that entry else make a new entry + for k in self.dict: + if not k[::-1] in newdict: + newdict[k] = self.dict[k] + else: + newdict[k[::-1]] += self.dict[k] + + self.dict = newdict + + @property + def universe(self): + return self._u + + def __len__(self): + """Returns the number of types of bond in the topology dictionary""" + return len(self.dict.keys()) + +
[docs] def keys(self): + """Returns a list of the different types of available bonds""" + return self.dict.keys()
+ + def __iter__(self): + """Iterator over keys in this dictionary""" + return iter(self.dict) + + def __repr__(self): + return "<TopologyDict with {num} unique {type}s>".format( + num=len(self), type=self.toptype) + + def __getitem__(self, key): + """Returns a TopologyGroup matching the criteria if possible, + otherwise returns ``None`` + """ + if key in self: + if key in self.dict: + selection = self.dict[key] + else: + selection = self.dict[key[::-1]] + + bix = np.vstack([s.indices for s in selection]) + + return TopologyGroup(bix, self._u, btype=self.toptype) + else: + raise KeyError(key) + + def __contains__(self, other): + """ + Returns boolean on whether a given type exists within this dictionary + + For topology groups the key (1,2,3) is considered the same as (3,2,1) + """ + return other in self.dict or other[::-1] in self.dict
+ + +_BTYPE_TO_SHAPE = {'bond': 2, 'ureybradley': 2, 'angle': 3, + 'dihedral': 4, 'improper': 4, 'cmap': 5} + + +
[docs]class TopologyGroup(object): + + """A container for a groups of bonds. + + All bonds of a certain types can be retrieved from within the + :class:`TopologyGroup` by querying with a tuple of types:: + + tg2 = tg.select_bonds([key]) + + Where *key* describes the desired bond as a tuple of the involved + :class:`~MDAnalysis.core.groups.Atom` types, as defined by the .type Atom + attribute). A list of available keys can be displayed using the + :meth:`types` method. + + Alternatively, all the bonds which are in a given + :class:`~MDAnalysis.core.groups.AtomGroup` can be extracted using + :meth:`atomgroup_intersection`:: + + tg2 = tg.atomgroup_intersection(ag) + + This allows the keyword *strict* to be given, which forces all members of + all bonds to be inside the AtomGroup passed to it. + + Finally, a TopologyGroup can be sliced similarly to AtomGroups:: + + tg2 = tg[5:10] + + The :meth:`bonds`, :meth:`angles` and :meth:`dihedrals` methods offer + a "shortcut" to the Cython distance calculation functions in + :class:`MDAnalysis.lib.distances`. + + TopologyGroups can be combined with TopologyGroups of the same bond + type (ie can combine two angle containing TopologyGroups). + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Overhauled completely: (1) Added internal :class:`TopologyDict` + accessible by the :attr:`topDict` attribute. (2) + :meth:`selectBonds` allows the :attr:`topDict` to be queried + with tuple of types. (3) Added :meth:`atomgroup_intersection` + to allow bonds which are in a given :class:`AtomGroup` to be retrieved. + .. versionchanged:: 0.10.0 + Added :func:`from_indices` constructor, allowing class to be created + from indices. + Can now create empty Group. + Renamed :meth:`dump_contents` to :meth:`to_indices` + .. versionchanged:: 0.11.0 + Added `values` method to return the size of each object in this group + Deprecated selectBonds method in favour of select_bonds + .. versionchanged:: 0.19.0 + Empty TopologyGroup now returns correctly shaped empty array via + indices property and to_indices() + .. versionchanged::1.0.0 + ``type``, ``guessed``, and ``order`` are no longer reshaped to arrays + with an extra dimension + """ + def __init__(self, bondidx, universe, btype=None, type=None, guessed=None, + order=None): + if btype is None: + # guess what I am + # difference between dihedral and improper + # not really important + self.btype = {2: 'bond', + 3: 'angle', + 4: 'dihedral'}[len(bondidx[0])] + elif btype in _BTYPE_TO_SHAPE: + self.btype = btype + else: + raise ValueError("Unsupported btype, use one of '{}'" + "".format(', '.join(_BTYPE_TO_SHAPE))) + + bondidx = np.asarray(bondidx) + nbonds = len(bondidx) + # remove duplicate bonds + if type is None: + type = np.repeat(None, nbonds) + if guessed is None: + guessed = np.repeat(True, nbonds) + elif guessed is True or guessed is False: + guessed = np.repeat(guessed, nbonds) + else: + guessed = np.asarray(guessed, dtype=bool) + if order is None: + order = np.repeat(None, nbonds) + + if nbonds > 0: + uniq, uniq_idx = util.unique_rows(bondidx, return_index=True) + + self._bix = uniq + self._bondtypes = type[uniq_idx] + self._guessed = guessed[uniq_idx] + self._order = order[uniq_idx] + + # Create vertical AtomGroups + self._ags = [universe.atoms[self._bix[:, i]] + for i in range(self._bix.shape[1])] + else: + # Empty TopologyGroup + self._bix = np.array([]) + self._bondtypes = np.array([]) + self._guessed = np.array([]) + self._order = np.array([]) + self._ags = [] + self._u = universe + + self._cache = dict() # used for topdict saving + + @property + def universe(self): + """The Universe that we belong to""" + return self._u + +
[docs] def select_bonds(self, selection): + """Retrieves a selection from this topology group based on types. + + .. seeAlso :meth:`types` + + .. versionadded 0.9.0 + """ + return self.topDict[selection]
+ + selectBonds = select_bonds + +
[docs] def types(self): + """Return a list of the bond types in this TopologyGroup + + .. versionadded 0.9.0 + """ + return list(self.topDict.keys())
+ + @property + @cached('dict') + def topDict(self): + """ + Returns the TopologyDict for this topology group. + + This is used for the select_bonds method when fetching a certain type + of bond. + + This is a cached property so will be generated the first time it is + accessed. + + .. versionadded 0.9.0 + """ + return TopologyDict(self) + +
[docs] def atomgroup_intersection(self, ag, **kwargs): + """Retrieve all bonds from within this TopologyGroup that are within + the AtomGroup which is passed. + + Parameters + ---------- + ag : AtomGroup + The `:class:~MDAnalysis.core.groups.AtomGroup` to intersect + with. + strict : bool + Only retrieve bonds which are completely contained within the + AtomGroup. [``False``] + + + .. versionadded:: 0.9.0 + """ + # Issue #780 - if self is empty, return self to avoid invalid mask + if not self: + return self + + # Strict requires all items in a row to be seen, + # otherwise any item in a row + func = np.all if kwargs.get('strict', False) else np.any + + atom_idx = ag.indices + # Create a list of boolean arrays, + # each representing a column of bond indices. + seen = [np.in1d(col, atom_idx) for col in self._bix.T] + + # Create final boolean mask by summing across rows + mask = func(seen, axis=0) + + return self[mask]
+ + @property + def indices(self): + """all bond indices + + See Also + -------- + to_indices : function that just returns `indices` + """ + if not self: + # empty TG + shape = _BTYPE_TO_SHAPE[self.btype] + return np.zeros((0, shape), dtype=np.int32) + else: + return self._bix + +
[docs] def to_indices(self): + """Return a data structure with atom indices describing the bonds. + + This format should be identical to the original contents of the + entries in universe._topology. + Note that because bonds are sorted as they are initialised, the order + that atoms are defined in each entry might be reversed. + + Returns + ------- + indices : tuple + A tuple of tuples which define the contents of this + TopologyGroup in terms of the atom numbers. (0 based + index within u.atoms) + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.10.0 + Renamed from "dump_contents" to "to_indices" + + """ + return self.indices
+ + dump_contents = to_indices + + def __len__(self): + """Number of bonds in the topology group""" + return self._bix.shape[0] + + def __add__(self, other): + """Combine two TopologyGroups together. + + Can combined two TopologyGroup of the same type, or add a single + TopologyObject to a TopologyGroup. + """ + # check addition is sane + if not isinstance(other, (TopologyObject, TopologyGroup)): + raise TypeError("Can only combine TopologyObject or " + "TopologyGroup to TopologyGroup, not {0}" + "".format(type(other))) + + # cases where either other or self is empty TG + if not other: # adding empty TG to me + return self + if not self: + if isinstance(other, TopologyObject): + # Reshape indices to be 2d array + return TopologyGroup(other.indices[None, :], + other.universe, + btype=other.btype, + type=np.array([other._bondtype]), + guessed=np.array([other.is_guessed]), + order=np.array([other.order]), + ) + else: + return TopologyGroup(other.indices, + other.universe, + btype=other.btype, + type=other._bondtypes, + guessed=other._guessed, + order=other._order, + ) + else: + if not other.btype == self.btype: + raise TypeError("Cannot add different types of " + "TopologyObjects together") + if isinstance(other, TopologyObject): + # add TO to me + return TopologyGroup( + np.concatenate([self.indices, other.indices[None, :]]), + self.universe, + btype=self.btype, + type=np.concatenate([self._bondtypes, + np.array([other._bondtype])]), + guessed=np.concatenate([self._guessed, + np.array([other.is_guessed])]), + order=np.concatenate([self._order, + np.array([other.order])]), + ) + else: + # add TG to me + return TopologyGroup( + np.concatenate([self.indices, other.indices]), + self.universe, + btype=self.btype, + type=np.concatenate([self._bondtypes, other._bondtypes]), + guessed=np.concatenate([self._guessed, other._guessed]), + order=np.concatenate([self._order, other._order]), + ) + + def __getitem__(self, item): + """Returns a particular bond as single object or a subset of + this TopologyGroup as another TopologyGroup + + .. versionchanged:: 0.10.0 + Allows indexing via boolean numpy array + """ + # Grab a single Item, similar to Atom/AtomGroup relationship + if isinstance(item, numbers.Integral): + outclass = {'bond': Bond, + 'angle': Angle, + 'dihedral': Dihedral, + 'improper': ImproperDihedral, + 'ureybradley': UreyBradley, + 'cmap': CMap}[self.btype] + return outclass(self._bix[item], + self._u, + type=self._bondtypes[item], + guessed=self._guessed[item], + order=self._order[item]) + else: + # Slice my index array with the item + return self.__class__(self._bix[item], + self._u, + btype=self.btype, + type=self._bondtypes[item], + guessed=self._guessed[item], + order=self._order[item],) + + def __contains__(self, item): + """Tests if this TopologyGroup contains a bond""" + return item.indices in self._bix + + def __repr__(self): + return "<TopologyGroup containing {num} {type}s>".format( + num=len(self), type=self.btype) + + def __eq__(self, other): + """Test if contents of TopologyGroups are equal""" + return np.array_equal(self.indices, other.indices) + + def __ne__(self, other): + return not self == other + + def __nonzero__(self): + return not len(self) == 0 + + @property + def atom1(self): + """The first atom in each TopologyObject in this Group""" + return self._ags[0] + + @property + def atom2(self): + """The second atom in each TopologyObject in this Group""" + return self._ags[1] + + @property + def atom3(self): + """The third atom in each TopologyObject in this Group""" + try: + return self._ags[2] + except IndexError: + nvert = _BTYPE_TO_SHAPE[self.btype] + errmsg = (f"TopologyGroup of {self.btype}s only has {nvert} " + f"vertical AtomGroups") + raise IndexError(errmsg) from None + + @property + def atom4(self): + """The fourth atom in each TopologyObject in this Group""" + try: + return self._ags[3] + except IndexError: + nvert = _BTYPE_TO_SHAPE[self.btype] + errmsg = (f"TopologyGroup of {self.btype}s only has {nvert} " + f"vertical AtomGroups") + raise IndexError(errmsg) from None + + # Distance calculation methods below + # "Slow" versions exist as a way of testing the Cython implementations +
[docs] def values(self, **kwargs): + """Return the size of each object in this Group + + :Keywords: + *pbc* + apply periodic boundary conditions when calculating distance + [``False``] + *result* + allows a predefined results array to be used, + note that this will be overwritten + + .. versionadded:: 0.11.0 + """ + if self.btype == 'bond': + return self.bonds(**kwargs) + elif self.btype == 'angle': + return self.angles(**kwargs) + elif self.btype == 'dihedral': + return self.dihedrals(**kwargs) + elif self.btype == 'improper': + return self.dihedrals(**kwargs)
+ + def _calc_connection_values(self, func, *btypes, result=None, pbc=False): + if not any(self.btype == btype for btype in btypes): + strbtype = "' or '".join(btypes) + raise TypeError(f"TopologyGroup is not of type '{strbtype}'") + if not result: + result = np.zeros(len(self), np.float64) + box = None if not pbc else self._ags[0].dimensions + positions = [ag.positions for ag in self._ags] + return func(*positions, box=box, result=result) + +
[docs] def bonds(self, pbc=False, result=None): + """Calculates the distance between all bonds in this TopologyGroup + + :Keywords: + *pbc* + apply periodic boundary conditions when calculating distance + [False] + *result* + allows a predefined results array to be used, + note that this will be overwritten + + Uses cython implementation + """ + return self._calc_connection_values(distances.calc_bonds, "bond", + pbc=pbc, result=result)
+ +
[docs] def angles(self, result=None, pbc=False): + """Calculates the angle in radians formed between a bond + between atoms 1 and 2 and a bond between atoms 2 & 3 + + Parameters + ---------- + result : array_like + allows a predefined results array to be used, note that this + will be overwritten + pbc : bool + apply periodic boundary conditions when calculating angles + [``False``] this is important when connecting vectors between + atoms might require minimum image convention + + Returns + ------- + angles : ndarray + + .. versionchanged :: 0.9.0 + Added *pbc* option (default ``False``) + + """ + return self._calc_connection_values(distances.calc_angles, "angle", + pbc=pbc, result=result)
+ +
[docs] def dihedrals(self, result=None, pbc=False): + """Calculate the dihedral angle in radians for this topology + group. + + Defined as the angle between a plane formed by atoms 1, 2 and + 3 and a plane formed by atoms 2, 3 and 4. + + Parameters + ---------- + result : array_like + allows a predefined results array to be used, note that this + will be overwritten + pbc : bool + apply periodic boundary conditions when calculating angles + [``False``] this is important when connecting vectors between + atoms might require minimum image convention + + Returns + ------- + angles : ndarray + + .. versionchanged:: 0.9.0 + Added *pbc* option (default ``False``) + """ + return self._calc_connection_values(distances.calc_dihedrals, + "dihedral", "improper", + pbc=pbc, result=result)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/core/universe.html b/2.7.0-dev0/_modules/MDAnalysis/core/universe.html new file mode 100644 index 0000000000..c748b2384d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/core/universe.html @@ -0,0 +1,1808 @@ + + + + + + MDAnalysis.core.universe — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.core.universe

+# -*- 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-2017 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
+#
+
+"""\
+=========================================================
+Core object: Universe --- :mod:`MDAnalysis.core.universe`
+=========================================================
+
+The :class:`~MDAnalysis.core.universe.Universe` class ties a topology
+and a trajectory together. Almost all code in MDAnalysis starts with a
+``Universe``.
+
+Normally, a ``Universe`` is created from files::
+
+  import MDAnalysis as mda
+  u = mda.Universe("topology.psf", "trajectory.dcd")
+
+In order to construct new simulation system it is also convenient to
+construct a ``Universe`` from existing
+:class:`~MDAnalysis.core.group.AtomGroup` instances with the
+:func:`Merge` function.
+
+
+Classes
+=======
+
+.. autoclass:: Universe
+   :members:
+
+Functions
+=========
+
+.. autofunction:: Merge
+
+"""
+import errno
+import numpy as np
+import logging
+import copy
+import warnings
+import contextlib
+import collections
+
+import MDAnalysis
+import sys
+
+# When used in an MPI environment with Infiniband, importing MDAnalysis may
+# trigger an MPI warning because importing the uuid module triggers a call to
+# os.fork(). This happens if MPI_Init() has been called prior to importing
+# MDAnalysis. The problem is actually caused by the uuid module and not by
+# MDAnalysis itself. Python 3.7 fixes the problem.
+import os
+import uuid
+
+from .. import _TOPOLOGY_ATTRS, _PARSERS
+from ..exceptions import NoDataError
+from ..lib import util
+from ..lib.log import ProgressBar
+from ..lib.util import cached, NamedStream, isstream
+from ..lib.mdamath import find_fragments
+from . import groups
+from ._get_readers import get_reader_for, get_parser_for
+from .groups import (ComponentBase, GroupBase,
+                     Atom, Residue, Segment,
+                     AtomGroup, ResidueGroup, SegmentGroup)
+from .topology import Topology
+from .topologyattrs import AtomAttr, ResidueAttr, SegmentAttr, BFACTOR_WARNING
+from .topologyobjects import TopologyObject
+
+
+logger = logging.getLogger("MDAnalysis.core.universe")
+
+
+
+def _check_file_like(topology):
+    if isstream(topology):
+        if hasattr(topology, 'name'):
+            _name = topology.name
+        else:
+            _name = None
+        return NamedStream(topology, _name)
+    return topology
+
+def _topology_from_file_like(topology_file, topology_format=None,
+                             **kwargs):
+    parser = get_parser_for(topology_file, format=topology_format)
+
+    try:
+        with parser(topology_file) as p:
+            topology = p.parse(**kwargs)
+    except (IOError, OSError) as err:
+        # There are 2 kinds of errors that might be raised here:
+        # one because the file isn't present
+        # or the permissions are bad, second when the parser fails
+        if (err.errno is not None and
+            errno.errorcode[err.errno] in ['ENOENT', 'EACCES']):
+            # Runs if the error is propagated due to no permission / file not found
+            raise sys.exc_info()[1] from err
+        else:
+            # Runs when the parser fails
+            raise IOError("Failed to load from the topology file {0}"
+                            " with parser {1}.\n"
+                            "Error: {2}".format(topology_file, parser, err))
+    except (ValueError, NotImplementedError) as err:
+        raise ValueError(
+            "Failed to construct topology from file {0}"
+            " with parser {1}.\n"
+            "Error: {2}".format(topology_file, parser, err))
+    return topology
+
+
+def _resolve_formats(*coordinates, format=None, topology_format=None):
+    if not coordinates:
+        if format is None:
+            format = topology_format
+        elif topology_format is None:
+            topology_format = format
+    return format, topology_format
+
+
+def _resolve_coordinates(filename, *coordinates, format=None,
+                         all_coordinates=False):
+    if all_coordinates or not coordinates and filename is not None:
+        try:
+            get_reader_for(filename, format=format)
+        except (ValueError, TypeError):
+            warnings.warn('No coordinate reader found for {}. Skipping '
+                            'this file.'.format(filename))
+        else:
+            coordinates = (filename,) + coordinates
+    return coordinates
+
+def _generate_from_topology(universe):
+    # generate Universe version of each class
+    # AG, RG, SG, A, R, S
+    universe._class_bases, universe._classes = groups.make_classes()
+
+    # Put Group level stuff from topology into class
+    for attr in universe._topology.attrs:
+        universe._process_attr(attr)
+
+    # Generate atoms, residues and segments.
+    # These are the first such groups generated for this universe, so
+    #  there are no cached merged classes yet. Otherwise those could be
+    #  used directly to get a (very) small speedup. (Only really pays off
+    #  the readability loss if instantiating millions of AtomGroups at
+    #  once.)
+    universe.atoms = AtomGroup(np.arange(universe._topology.n_atoms), universe)
+
+    universe.residues = ResidueGroup(
+            np.arange(universe._topology.n_residues), universe)
+
+    universe.segments = SegmentGroup(
+            np.arange(universe._topology.n_segments), universe)
+
+
+
[docs]class Universe(object): + """The MDAnalysis Universe contains all the information describing the system. + + The system always requires a *topology file* --- in the simplest case just + a list of atoms. This can be a CHARMM/NAMD PSF file or a simple coordinate + file with atom informations such as XYZ, PDB, GROMACS GRO or TPR, or CHARMM + CRD. See :ref:`Supported topology formats` for what kind of topologies can + be read. + + A *trajectory file* provides coordinates; the coordinates have to be + ordered in the same way as the list of atoms in the topology. A trajectory + can be a single frame such as a PDB, CRD, or GRO file, or it can be a MD + trajectory (in CHARMM/NAMD/LAMMPS DCD, GROMACS XTC/TRR, AMBER nc, generic + XYZ format, ...). See :ref:`Supported coordinate formats` for what can be + read as a "trajectory". + + As a special case, when the topology is a file that contains atom + information *and* coordinates (such as XYZ, PDB, GRO or CRD, see + :ref:`Supported coordinate formats`) then the coordinates are immediately + loaded from the "topology" file unless a trajectory is supplied. + + Parameters + ---------- + topology: str, stream, Topology, numpy.ndarray, None + A CHARMM/XPLOR PSF topology file, PDB file or Gromacs GRO file; used to + define the list of atoms. If the file includes bond information, + partial charges, atom masses, ... then these data will be available to + MDAnalysis. Alternatively, an existing + :class:`MDAnalysis.core.topology.Topology` instance may be given, + numpy coordinates, or ``None`` for an empty universe. + coordinates: str, stream, list of str, list of stream (optional) + Coordinates can be provided as files of + a single frame (eg a PDB, CRD, or GRO file); a list of single + frames; or a trajectory file (in CHARMM/NAMD/LAMMPS DCD, Gromacs + XTC/TRR, or generic XYZ format). The coordinates must be + ordered in the same way as the list of atoms in the topology. + See :ref:`Supported coordinate formats` for what can be read + as coordinates. Alternatively, streams can be given. + topology_format: str, ``None``, default ``None`` + Provide the file format of the topology file; ``None`` guesses it from + the file extension. Can also pass a subclass of + :class:`MDAnalysis.topology.base.TopologyReaderBase` to define a custom + reader to be used on the topology file. + format: str, ``None``, default ``None`` + Provide the file format of the coordinate or trajectory file; ``None`` + guesses it from the file extension. Note that this keyword has no + effect if a list of file names is supplied because the "chained" reader + has to guess the file format for each individual list member. + Can also pass a subclass of :class:`MDAnalysis.coordinates.base.ProtoReader` + to define a custom reader to be used on the trajectory file. + all_coordinates: bool, default ``False`` + If set to ``True`` specifies that if more than one filename is passed + they are all to be used, if possible, as coordinate files (employing a + :class:`MDAnalysis.coordinates.chain.ChainReader`). The + default behavior is to take the first file as a topology and the + remaining as coordinates. The first argument will always always be used + to infer a topology regardless of *all_coordinates*. + guess_bonds: bool, default ``False`` + Once Universe has been loaded, attempt to guess the connectivity + between atoms. This will populate the .bonds, .angles, and .dihedrals + attributes of the Universe. + vdwradii: dict, ``None``, default ``None`` + For use with *guess_bonds*. Supply a dict giving a vdwradii for each + atom type which are used in guessing bonds. + fudge_factor: float, default [0.55] + For use with *guess_bonds*. Supply the factor by which atoms must + overlap each other to be considered a bond. + lower_bound: float, default [0.1] + For use with *guess_bonds*. Supply the minimum bond length. + transformations: function or list, ``None``, default ``None`` + Provide a list of transformations that you wish to apply to the + trajectory upon reading. Transformations can be found in + :mod:`MDAnalysis.transformations`, or can be user-created. + in_memory: bool, default ``False`` + After reading in the trajectory, transfer it to an in-memory + representations, which allow for manipulation of coordinates. + in_memory_step: int, default 1 + Only read every nth frame into in-memory representation. + continuous: bool, default ``False`` + The `continuous` option is used by the + :mod:`ChainReader<MDAnalysis.coordinates.chain>`, which contains the + functionality to treat independent trajectory files as a single virtual + trajectory. + **kwargs: extra arguments are passed to the topology parser. + + Attributes + ---------- + trajectory : base.ReaderBase or base.SingleFrameReaderBase + currently loaded trajectory reader; readers are described in + :ref:`Coordinates` + dimensions : numpy.ndarray + system dimensions (simulation unit cell, if set in the + trajectory) at the *current time step* + (see :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`). + The unit cell can be set for the current time step (but the change is + not permanent unless written to a file). + atoms : AtomGroup + all particles (:class:`~MDAnalysis.core.groups.Atom`) in the system, + as read from the `topology` file + residues : ResidueGroup + all residues (:class:`~MDAnalysis.core.groups.Residue`) in the system + segments : SegmentGroup + all segments (:class:`~MDAnalysis.core.groups.Segment`) in the system + bonds : topologyattrs.Bonds + all bonds (if defined in the `topology`) as provided by + :attr:`Universe.atoms.bonds` + angles : topologyattrs.Angles + all angles (if defined in the `topology`), same as + :attr:`Universe.atoms.angles` + dihedrals : topologyattrs.Dihedrals + all dihedral angles (if defined in the `topology`), same as + :attr:`Universe.atoms.dihedrals` + impropers : topologyattrs.Impropers + all improper dihedral angles (if defined in the `topology`), same as + :attr:`Universe.atoms.impropers` + + Examples + -------- + Examples for setting up a :class:`Universe`:: + + u = Universe(topology, trajectory) # read system from file(s) + u = Universe(pdbfile) # read atoms and coordinates from PDB or GRO + u = Universe(topology, [traj1, traj2, ...]) # read from a list of trajectories + u = Universe(topology, traj1, traj2, ...) # read from multiple trajectories + + Load new data into a universe (replaces old trajectory and does *not* append):: + + u.load_new(trajectory) # read from a new trajectory file + + Selecting atoms with :meth:`~Universe.select_atoms` :: + + ag = u.select_atoms(...) + + returns an :class:`~MDAnalysis.core.groups.AtomGroup`. + + + .. versionchanged:: 1.0.0 + Universe() now raises an error. Use Universe(None) or :func:`Universe.empty()` instead. + Removed instant selectors. + + .. versionchanged:: 2.0.0 + Universe now can be (un)pickled. + ``topology`` and ``trajectory`` are reserved upon unpickle. + .. versionchanged:: 2.5.0 + Added fudge_factor and lower_bound parameters for use with + *guess_bonds*. + """ + def __init__(self, topology=None, *coordinates, all_coordinates=False, + format=None, topology_format=None, transformations=None, + guess_bonds=False, vdwradii=None, fudge_factor=0.55, + lower_bound=0.1, in_memory=False, + in_memory_step=1, **kwargs): + + self._trajectory = None # managed attribute holding Reader + self._cache = {'_valid': {}} + self.atoms = None + self.residues = None + self.segments = None + self.filename = None + + self._kwargs = { + 'transformations': transformations, + 'guess_bonds': guess_bonds, + 'vdwradii': vdwradii, + 'fudge_factor': fudge_factor, + 'lower_bound': lower_bound, + 'in_memory': in_memory, + 'in_memory_step': in_memory_step, + 'format': format, + 'topology_format': topology_format, + 'all_coordinates': all_coordinates + } + self._kwargs.update(kwargs) + + format, topology_format = _resolve_formats(*coordinates, format=format, + topology_format=topology_format) + + if not isinstance(topology, Topology) and not topology is None: + self.filename = _check_file_like(topology) + topology = _topology_from_file_like(self.filename, + topology_format=topology_format, + **kwargs) + + if topology is not None: + self._topology = topology + else: + # point to Universe.empty instead of making empty universe + raise TypeError('Topology argument required to make Universe. ' + 'Try Universe.empty(n_atoms, ...) to construct ' + 'your own Universe.') + + _generate_from_topology(self) # make real atoms, res, segments + + coordinates = _resolve_coordinates(self.filename, *coordinates, + format=format, + all_coordinates=all_coordinates) + + if coordinates: + self.load_new(coordinates, format=format, in_memory=in_memory, + in_memory_step=in_memory_step, **kwargs) + + if transformations: + if callable(transformations): + transformations = [transformations] + self._trajectory.add_transformations(*transformations) + + if guess_bonds: + self.atoms.guess_bonds(vdwradii=vdwradii, fudge_factor=fudge_factor, + lower_bound=lower_bound) + +
[docs] def copy(self): + """Return an independent copy of this Universe""" + new = self.__class__(self._topology.copy()) + new.trajectory = self.trajectory.copy() + return new
+ +
[docs] @classmethod + def empty(cls, n_atoms, n_residues=1, n_segments=1, n_frames=1, + atom_resindex=None, residue_segindex=None, + trajectory=False, velocities=False, forces=False): + """Create a blank Universe + + Useful for building a Universe without requiring existing files, + for example for system building. + + If `trajectory` is set to ``True``, a + :class:`MDAnalysis.coordinates.memory.MemoryReader` will be + attached to the Universe. + + Parameters + ---------- + n_atoms: int + number of Atoms in the Universe + n_residues: int, default 1 + number of Residues in the Universe, defaults to 1 + n_segments: int, default 1 + number of Segments in the Universe, defaults to 1 + n_frames: int, default 1 + number of Frames in the Universe, defaults to 1 + atom_resindex: array like, optional + mapping of atoms to residues, e.g. with 6 atoms, + `atom_resindex=[0, 0, 1, 1, 2, 2]` would put 2 atoms + into each of 3 residues. + residue_segindex: array like, optional + mapping of residues to segments + trajectory: bool, optional + if ``True``, attaches a + :class:`MDAnalysis.coordinates.memory.MemoryReader` allowing + coordinates to be set and written. + velocities: bool, optional + include velocities in the + :class:`MDAnalysis.coordinates.memory.MemoryReader` + forces: bool, optional + include forces in the + :class:`MDAnalysis.coordinates.memory.MemoryReader` + + Returns + ------- + Universe + :class:`~MDAnalysis.core.universe.Universe` instance with dummy + values for atoms and undefined coordinates/velocities/forces + + Examples + -------- + For example to create a new Universe with 6 atoms in 2 residues, with + positions for the atoms and a mass attribute:: + + u = mda.Universe.empty(6, 2, + atom_resindex=np.array([0, 0, 0, 1, 1, 1]), + trajectory=True, + ) + u.add_TopologyAttr('masses') + + .. versionadded:: 0.17.0 + .. versionchanged:: 0.19.0 + The attached Reader when trajectory=True is now a MemoryReader + .. versionchanged:: 1.0.0 + Universes can now be created with 0 atoms + + """ + if not n_atoms: + n_residues = 0 + n_segments = 0 + + if atom_resindex is None and n_residues > 1: + warnings.warn( + 'Residues specified but no atom_resindex given. ' + 'All atoms will be placed in first Residue.', + UserWarning) + + if residue_segindex is None and n_segments > 1: + warnings.warn( + 'Segments specified but no segment_resindex given. ' + 'All residues will be placed in first Segment', + UserWarning) + + top = Topology(n_atoms, n_residues, n_segments, + atom_resindex=atom_resindex, + residue_segindex=residue_segindex, + ) + + u = cls(top) + + if n_frames > 1 or trajectory: + coords = np.zeros((n_frames, n_atoms, 3), dtype=np.float32) + vels = np.zeros_like(coords) if velocities else None + forces = np.zeros_like(coords) if forces else None + + # grab and attach a MemoryReader + u.trajectory = get_reader_for(coords)( + coords, order='fac', n_atoms=n_atoms, + velocities=vels, forces=forces) + + return u
+ + @property + def universe(self): + # for Writer.write(universe), see Issue 49 + # Encapsulation in an accessor prevents the Universe from + # having to keep a reference to itself, + # which might be undesirable if it has a __del__ method. + # It is also cleaner than a weakref. + return self + +
[docs] def load_new(self, filename, format=None, in_memory=False, + in_memory_step=1, **kwargs): + """Load coordinates from `filename`. + + The file format of `filename` is autodetected from the file name suffix + or can be explicitly set with the `format` keyword. A sequence of files + can be read as a single virtual trajectory by providing a list of + filenames. + + + Parameters + ---------- + filename: str or list + the coordinate file (single frame or trajectory) *or* a list of + filenames, which are read one after another. + format: str or list or object (optional) + provide the file format of the coordinate or trajectory file; + ``None`` guesses it from the file extension. Note that this + keyword has no effect if a list of file names is supplied because + the "chained" reader has to guess the file format for each + individual list member [``None``]. Can also pass a subclass of + :class:`MDAnalysis.coordinates.base.ProtoReader` to define a custom + reader to be used on the trajectory file. + in_memory: bool (optional) + Directly load trajectory into memory with the + :class:`~MDAnalysis.coordinates.memory.MemoryReader` + + .. versionadded:: 0.16.0 + + **kwargs: dict + Other kwargs are passed to the trajectory reader (only for + advanced use) + + Returns + ------- + universe: Universe + + Raises + ------ + TypeError + if trajectory format can not be determined or no appropriate + trajectory reader found + + + .. versionchanged:: 0.8 + If a list or sequence that is provided for `filename` only contains + a single entry then it is treated as single coordinate file. This + has the consequence that it is not read by the + :class:`~MDAnalysis.coordinates.chain.ChainReader` but directly by + its specialized file format reader, which typically has more + features than the + :class:`~MDAnalysis.coordinates.chain.ChainReader`. + + .. versionchanged:: 0.17.0 + Now returns a :class:`Universe` instead of the tuple of file/array + and detected file type. + .. versionchanged:: 2.4.0 + Passes through kwargs if `in_memory=True`. + + """ + # filename==None happens when only a topology is provided + if filename is None: + return self + + if len(util.asiterable(filename)) == 1: + # make sure a single filename is not handed to the ChainReader + filename = util.asiterable(filename)[0] + logger.debug("Universe.load_new(): loading {0}...".format(filename)) + + try: + reader = get_reader_for(filename, format=format) + except ValueError as err: + raise TypeError( + "Cannot find an appropriate coordinate reader for file '{0}'.\n" + " {1}".format(filename, err)) + + # supply number of atoms for readers that cannot do it for themselves + kwargs['n_atoms'] = self.atoms.n_atoms + + self.trajectory = reader(filename, format=format, **kwargs) + if self.trajectory.n_atoms != len(self.atoms): + raise ValueError("The topology and {form} trajectory files don't" + " have the same number of atoms!\n" + "Topology number of atoms {top_n_atoms}\n" + "Trajectory: {fname} Number of atoms {trj_n_atoms}".format( + form=self.trajectory.format, + top_n_atoms=len(self.atoms), + fname=filename, + trj_n_atoms=self.trajectory.n_atoms)) + + if in_memory: + self.transfer_to_memory(step=in_memory_step, **kwargs) + + return self
+ +
[docs] def transfer_to_memory(self, start=None, stop=None, step=None, + verbose=False, **kwargs): + """Transfer the trajectory to in memory representation. + + Replaces the current trajectory reader object with one of type + :class:`MDAnalysis.coordinates.memory.MemoryReader` to support in-place + editing of coordinates. + + Parameters + ---------- + start: int, optional + start reading from the nth frame. + stop: int, optional + read upto and excluding the nth frame. + step: int, optional + Read in every nth frame. [1] + verbose: bool, optional + Will print the progress of loading trajectory to memory, if + set to True. Default value is False. + + + .. versionadded:: 0.16.0 + .. versionchanged:: 2.4.0 + Passes through kwargs to MemoryReader + """ + from ..coordinates.memory import MemoryReader + + if not isinstance(self.trajectory, MemoryReader): + n_frames = len(range( + *self.trajectory.check_slice_indices(start, stop, step) + )) + n_atoms = len(self.atoms) + coordinates = np.zeros((n_frames, n_atoms, 3), dtype=np.float32) + ts = self.trajectory.ts + has_vels = ts.has_velocities + has_fors = ts.has_forces + has_dims = ts.dimensions is not None + + velocities = np.zeros_like(coordinates) if has_vels else None + forces = np.zeros_like(coordinates) if has_fors else None + dimensions = (np.zeros((n_frames, 6), dtype=np.float32) + if has_dims else None) + + for i, ts in enumerate(ProgressBar(self.trajectory[start:stop:step], + verbose=verbose, + desc="Loading frames")): + np.copyto(coordinates[i], ts.positions) + if has_vels: + np.copyto(velocities[i], ts.velocities) + if has_fors: + np.copyto(forces[i], ts.forces) + if has_dims: + np.copyto(dimensions[i], ts.dimensions) + + # Overwrite trajectory in universe with an MemoryReader + # object, to provide fast access and allow coordinates + # to be manipulated + if step is None: + step = 1 + self.trajectory = MemoryReader( + coordinates, + dimensions=dimensions, + dt=self.trajectory.ts.dt * step, + filename=self.trajectory.filename, + velocities=velocities, + forces=forces, **kwargs)
+ + # python 2 doesn't allow an efficient splitting of kwargs in function + # argument signatures. + # In python3-only we'd be able to explicitly define this function with + # something like (sel, *othersels, updating=False, **selgroups) +
[docs] def select_atoms(self, *args, **kwargs): + """Select atoms. + + See Also + -------- + :meth:`MDAnalysis.core.groups.AtomGroup.select_atoms` + """ + return self.atoms.select_atoms(*args, **kwargs)
+ + @property + def bonds(self): + """Bonds between atoms. + + :meta private: + """ + return self.atoms.bonds + + @property + def angles(self): + """Angles between atoms. + + :meta private: + """ + return self.atoms.angles + + @property + def dihedrals(self): + """Dihedral angles between atoms. + + :meta private: + """ + return self.atoms.dihedrals + + @property + def impropers(self): + """Improper dihedral angles between atoms. + + :meta private: + """ + return self.atoms.impropers + + def __repr__(self): + # return "<Universe with {n_atoms} atoms{bonds}>".format( + # n_atoms=len(self.atoms), + # bonds=" and {0} bonds".format(len(self.bonds)) if self.bonds else "") + + return "<Universe with {n_atoms} atoms>".format( + n_atoms=len(self.atoms)) + + @classmethod + def _unpickle_U(cls, top, traj): + """Special method used by __reduce__ to deserialise a Universe""" + # top is a Topology obj at this point, but Universe can handle that. + u = cls(top) + u.trajectory = traj + + return u + + def __reduce__(self): + # __setstate__/__getstate__ will raise an error when Universe has a + # transformation (that has AtomGroup inside). Use __reduce__ instead. + # Universe's two "legs" of top and traj both serialise themselves. + return (self._unpickle_U, (self._topology, + self._trajectory)) + + # Properties + @property + def dimensions(self): + """Current dimensions of the unitcell. + + :meta private: + """ + return self.coord.dimensions + + @dimensions.setter + def dimensions(self, box): + """Set dimensions if the Timestep allows this + + .. versionadded:: 0.9.0 + """ + # Add fancy error handling here or use Timestep? + self.coord.dimensions = box + + @property + def coord(self): + """Reference to current timestep and coordinates of universe. + + The raw trajectory coordinates are :attr:`Universe.coord.positions`, + represented as a :class:`numpy.float32` array. + + Because :attr:`coord` is a reference to a + :class:`~MDAnalysis.coordinates.timestep.Timestep`, it changes its contents + while one is stepping through the trajectory. + + .. Note:: + + In order to access the coordinates it is better to use the + :meth:`AtomGroup.positions` method; for instance, all coordinates of + the Universe as a numpy array: :meth:`Universe.atoms.positions`. + + """ + return self.trajectory.ts + + @property + def kwargs(self): + """keyword arguments used to initialize this universe""" + return copy.deepcopy(self._kwargs) + + @property + def trajectory(self): + """Reference to trajectory reader object containing trajectory data. + + :meta private: + """ + if self._trajectory is not None: + return self._trajectory + else: + raise AttributeError("No trajectory loaded into Universe") + + @trajectory.setter + def trajectory(self, value): + del self._trajectory # guarantees that files are closed (?) + self._trajectory = value + +
[docs] def add_TopologyAttr(self, topologyattr, values=None): + """Add a new topology attribute to the Universe + + Adding a TopologyAttribute to the Universe makes it available to + all AtomGroups etc throughout the Universe. + + Parameters + ---------- + topologyattr: TopologyAttr or string + Either a MDAnalysis TopologyAttr object or the name of a possible + topology attribute. + values: np.ndarray, optional + If initiating an attribute from a string, the initial values to + use. If not supplied, the new TopologyAttribute will have empty + or zero values. + + Example + ------- + For example to add bfactors to a Universe: + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> u.add_TopologyAttr('tempfactors') + >>> u.atoms.tempfactors + array([0., 0., 0., ..., 0., 0., 0.]) + + .. versionchanged:: 0.17.0 + Can now also add TopologyAttrs with a string of the name of the + attribute to add (eg 'charges'), can also supply initial values + using values keyword. + + .. versionchanged:: 1.1.0 + Now warns when adding bfactors to a Universe with + existing tempfactors, or adding tempfactors to a + Universe with existing bfactors. + In version 2.0, MDAnalysis will stop treating + tempfactors and bfactors as separate attributes. Instead, + they will be aliases of the same attribute. + """ + if isinstance(topologyattr, str): + if topologyattr in ("bfactor", "bfactors"): + warnings.warn(BFACTOR_WARNING, DeprecationWarning) + try: + tcls = _TOPOLOGY_ATTRS[topologyattr] + except KeyError: + errmsg = ( + "Unrecognised topology attribute name: '{}'." + " Possible values: '{}'\n" + "To raise an issue go to: " + "https://github.com/MDAnalysis/mdanalysis/issues" + "".format( + topologyattr, ', '.join( + sorted(_TOPOLOGY_ATTRS.keys())))) + raise ValueError(errmsg) from None + else: + topologyattr = tcls.from_blank( + n_atoms=self._topology.n_atoms, + n_residues=self._topology.n_residues, + n_segments=self._topology.n_segments, + values=values) + self._topology.add_TopologyAttr(topologyattr) + self._process_attr(topologyattr)
+ +
[docs] def del_TopologyAttr(self, topologyattr): + """Remove a topology attribute from the Universe + + Removing a TopologyAttribute from the Universe makes it unavailable to + all AtomGroups etc throughout the Universe. + + Parameters + ---------- + topologyattr: TopologyAttr or string + Either a MDAnalysis TopologyAttr object or the name of a possible + topology attribute. + + Example + ------- + For example to remove bfactors to a Universe: + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> u.add_TopologyAttr('tempfactors') + >>> hasattr(u.atoms[:3], 'tempfactors') + True + >>> + >>> u.del_TopologyAttr('tempfactors') + >>> hasattr(u.atoms[:3], 'tempfactors') + False + + + .. versionadded:: 2.0.0 + """ + + if not isinstance(topologyattr, str): + try: + topologyattr = topologyattr.attrname + except AttributeError: + # either TopologyGroup or not valid + try: + # this may not end well + # e.g. matrix -> matrices + topologyattr = topologyattr.btype + "s" + except AttributeError: + raise ValueError("Topology attribute must be str or " + "TopologyAttr object or class. " + f"Given: {type(topologyattr)}") from None + + try: + topologyattr = _TOPOLOGY_ATTRS[topologyattr].attrname + except KeyError: + attrs = ', '.join(sorted(_TOPOLOGY_ATTRS)) + errmsg = (f"Unrecognised topology attribute: '{topologyattr}'." + f" Possible values: '{attrs}'\n" + "To raise an issue go to: " + "https://github.com/MDAnalysis/mdanalysis/issues") + raise ValueError(errmsg) from None + + try: + topattr = getattr(self._topology, topologyattr) + except AttributeError: + raise ValueError(f"Topology attribute {topologyattr} " + "not in Universe.") from None + self._topology.del_TopologyAttr(topattr) + self._unprocess_attr(topattr)
+ + def _process_attr(self, attr): + """Squeeze a topologyattr for its information + + Grabs: + - Group properties (attribute access) + - Component properties + - Transplant methods + """ + n_dict = {'atom': self._topology.n_atoms, + 'residue': self._topology.n_residues, + 'segment': self._topology.n_segments} + logger.debug("_process_attr: Adding {0} to topology".format(attr)) + if (attr.per_object is not None and len(attr) != n_dict[attr.per_object]): + raise ValueError('Length of {attr} does not' + ' match number of {obj}s.\n' + 'Expect: {n:d} Have: {m:d}'.format( + attr=attr.attrname, + obj=attr.per_object, + n=n_dict[attr.per_object], + m=len(attr))) + + for cls in attr.target_classes: + self._class_bases[cls]._add_prop(attr) + + # TODO: Try and shove this into cls._add_prop + # Group transplants + for cls in (Atom, Residue, Segment, GroupBase, + AtomGroup, ResidueGroup, SegmentGroup): + for funcname, meth in attr.transplants[cls]: + setattr(self._class_bases[cls], funcname, meth) + # Universe transplants + for funcname, meth in attr.transplants['Universe']: + setattr(self.__class__, funcname, meth) + + def _unprocess_attr(self, attr): + """ + Undo all the stuff in _process_attr. + + If the topology attribute is not present, nothing happens + (silent fail). + """ + for cls in attr.target_classes: + self._class_bases[cls]._del_prop(attr) + + # Universe transplants + for funcname, _ in attr.transplants.pop("Universe", []): + delattr(self.__class__, funcname) + # Group transplants + for cls, transplants in attr.transplants.items(): + for funcname, _ in transplants: + delattr(self._class_bases[cls], funcname) + +
[docs] def add_Residue(self, segment=None, **attrs): + """Add a new Residue to this Universe + + New Residues will not contain any Atoms, but can be assigned to Atoms + as per usual. If the Universe contains multiple segments, this must + be specified as a keyword. + + Parameters + ---------- + segment: MDAnalysis.Segment + If there are multiple segments, then the Segment that the new + Residue will belong in must be specified. + attrs: dict + For each Residue attribute, the value for the new Residue must be + specified + + Returns + ------- + A reference to the new Residue + + Raises + ------ + NoDataError + If any information was missing. This happens before any changes have + been made, ie the change is rolled back. + + + Example + ------- + + Adding a new GLY residue, then placing atoms within it: + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> newres = u.add_Residue(segment=u.segments[0], resid=42, resname='GLY', resnum=0) + >>> u.atoms[[1, 2, 3]].residues = newres + >>> u.select_atoms('resname GLY and resid 42 and resnum 0') + <AtomGroup with 3 atoms> + + """ + if len(self.segments) == 1: # if only one segment, use this + segment = self.segments[0] + if segment is None: + raise NoDataError("") + # pass this information to the topology + residx = self._topology.add_Residue(segment, **attrs) + # resize my residues + self.residues = ResidueGroup(np.arange(self._topology.n_residues), self) + + # return the new residue + return self.residues[residx]
+ +
[docs] def add_Segment(self, **attrs): + """Add a new Segment to this Universe + + Parameters + ---------- + attrs: dict + For each Segment attribute as a key, give the value in the new + Segment + + Returns + ------- + A reference to the new Segment + + Raises + ------ + NoDataError + If any attributes were not specified as a keyword. + + """ + # pass this information to the topology + segidx = self._topology.add_Segment(**attrs) + # resize my segments + self.segments = SegmentGroup(np.arange(self._topology.n_segments), self) + # return the new segment + return self.segments[segidx]
+ + def _add_topology_objects(self, object_type, values, types=None, guessed=False, + order=None): + """Add new TopologyObjects to this Universe + + Parameters + ---------- + object_type : {'bonds', 'angles', 'dihedrals', 'impropers'} + The type of TopologyObject to add. + values : TopologyGroup or iterable of tuples, AtomGroups, or TopologyObjects + An iterable of: tuples of atom indices, or AtomGroups, + or TopologyObjects. If every value is a TopologyObject, all + keywords are ignored. + If AtomGroups or TopologyObjects are passed, they *must* be from the same + Universe. + types : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + guessed : bool or iterable (optional, default False) + bool, or an iterable of hashable values with the same length as ``values`` + order : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + + + .. versionadded:: 1.0.0 + """ + if all(isinstance(x, TopologyObject) for x in values): + try: + types = [t.type for t in values] + except AttributeError: + types = None + guessed = [t.is_guessed for t in values] + order = [t.order for t in values] + + indices = [] + for x in values: + if isinstance(x, (AtomGroup, TopologyObject)): + if x.universe is not self: + err_msg = 'Cannot add {} from different Universes.' + raise ValueError(err_msg.format(object_type)) + indices.append(x.indices) + else: + indices.append(x) + + all_indices = set([i for obj in indices for i in obj]) + nonexistent = all_indices - set(self.atoms.indices) + if nonexistent: + istr = ', '.join(map(str, nonexistent)) + err_msg = 'Cannot add {} for nonexistent atom indices: {}' + raise ValueError(err_msg.format(object_type, istr)) + + try: + attr = getattr(self._topology, object_type) + except AttributeError: + self.add_TopologyAttr(object_type, []) + attr = getattr(self._topology, object_type) + + + attr._add_bonds(indices, types=types, guessed=guessed, order=order) + +
[docs] def add_bonds(self, values, types=None, guessed=False, order=None): + """Add new Bonds to this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Bonds; or TopologyGroup + An iterable of: tuples of 2 atom indices, or AtomGroups with 2 atoms, + or Bonds. If every value is a Bond, all + keywords are ignored. + If AtomGroups, Bonds, or a TopologyGroup are passed, + they *must* be from the same Universe. + types : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + guessed : bool or iterable (optional, default False) + bool, or an iterable of hashable values with the same length as ``values`` + order : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + + + Example + ------- + + Adding TIP4P water bonds with a list of AtomGroups:: + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import GRO + u = mda.Universe(GRO) + sol = u.select_atoms('resname SOL') + ow_hw1 = sol.select_atoms('name OW or name HW1').split('residue') + ow_hw2 = sol.select_atoms('name OW or name HW2').split('residue') + ow_mw = sol.select_atoms('name OW or name MW').split('residue') + u.add_bonds(ow_hw1 + ow_hw2 + ow_mw) + + You can only add bonds from the same Universe. If you would like to add + AtomGroups, Bonds, or a TopologyGroup from a different Universe, convert + them to indices first. :: + + from MDAnalysis.tests.datafiles import PSF + u2 = mda.Universe(PSF) + + # assuming you have already added bonds to u + u2.add_bonds(u.bonds.to_indices()) + + + .. versionadded:: 1.0.0 + """ + self._add_topology_objects('bonds', values, types=types, + guessed=guessed, order=order) + # Invalidate bond-related caches + self._cache.pop('fragments', None) + self._cache['_valid'].pop('fragments', None) + self._cache['_valid'].pop('fragindices', None)
+ +
[docs] def add_angles(self, values, types=None, guessed=False): + """Add new Angles to this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Angles; or TopologyGroup + An iterable of: tuples of 3 atom indices, or AtomGroups with 3 atoms, + or Angles. If every value is a Angle, all + keywords are ignored. + If AtomGroups, Angles, or a TopologyGroup are passed, + they *must* be from the same Universe. + types : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + guessed : bool or iterable (optional, default False) + bool, or an iterable of hashable values with the same length as ``values`` + + .. versionadded:: 1.0.0 + """ + self._add_topology_objects('angles', values, types=types, + guessed=guessed)
+ +
[docs] def add_dihedrals(self, values, types=None, guessed=False): + """Add new Dihedrals to this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup + An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, + or Dihedrals. If every value is a Dihedral, all + keywords are ignored. + If AtomGroups, Dihedrals, or a TopologyGroup are passed, + they *must* be from the same Universe. + types : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + guessed : bool or iterable (optional, default False) + bool, or an iterable of hashable values with the same length as ``values`` + + + .. versionadded:: 1.0.0 + """ + self._add_topology_objects('dihedrals', values, types=types, + guessed=guessed)
+ +
[docs] def add_impropers(self, values, types=None, guessed=False): + """Add new Impropers to this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Impropers; or TopologyGroup + An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, + or Impropers. If every value is an Improper, all + keywords are ignored. + If AtomGroups, Impropers, or a TopologyGroup are passed, + they *must* be from the same Universe. + types : iterable (optional, default None) + None, or an iterable of hashable values with the same length as ``values`` + guessed : bool or iterable (optional, default False) + bool, or an iterable of hashable values with the same length as ``values`` + + + .. versionadded:: 1.0.0 + """ + self._add_topology_objects('impropers', values, types=types, + guessed=guessed)
+ + def _delete_topology_objects(self, object_type, values): + """Delete TopologyObjects from this Universe + + Parameters + ---------- + object_type : {'bonds', 'angles', 'dihedrals', 'impropers'} + The type of TopologyObject to add. + values : iterable of tuples, AtomGroups, or TopologyObjects; or TopologyGroup + An iterable of: tuples of atom indices, or AtomGroups, + or TopologyObjects. + If AtomGroups, TopologyObjects, or a TopologyGroup are passed, + they *must* be from the same Universe. + + .. versionadded:: 1.0.0 + """ + indices = [] + for x in values: + if isinstance(x, (AtomGroup, TopologyObject)): + if x.universe is not self: + err_msg = 'Cannot delete {} from different Universes.' + raise ValueError(err_msg.format(object_type)) + indices.append(x.indices) + else: + indices.append(x) + + try: + attr = getattr(self._topology, object_type) + except AttributeError: + raise ValueError('There are no {} to delete'.format(object_type)) + + attr._delete_bonds(indices) + +
[docs] def delete_bonds(self, values): + """Delete Bonds from this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Bonds; or TopologyGroup + An iterable of: tuples of 2 atom indices, or AtomGroups with 2 atoms, + or Bonds. + If AtomGroups, Bonds, or a TopologyGroup are passed, + they *must* be from the same Universe. + + + Example + ------- + + Deleting bonds from a Universe:: + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF + u = mda.Universe(PSF) + + # delete first 5 bonds + u.delete_bonds(u.bonds[:5]) + + + If you are deleting bonds in the form of AtomGroups, Bonds, or a + TopologyGroup, they must come from the same Universe. If you want to + delete bonds from another Universe, convert them to indices first. :: + + from MDAnalysis.tests.datafiles import PDB + u2 = mda.Universe(PDB) + + u.delete_bonds(u2.bonds.to_indices()) + + + .. versionadded:: 1.0.0 + """ + self._delete_topology_objects('bonds', values) + # Invalidate bond-related caches + self._cache.pop('fragments', None) + self._cache['_valid'].pop('fragments', None) + self._cache['_valid'].pop('fragindices', None)
+ +
[docs] def delete_angles(self, values): + """Delete Angles from this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Angles; or TopologyGroup + An iterable of: tuples of 3 atom indices, or AtomGroups with 3 atoms, + or Angles. + If AtomGroups, Angles, or a TopologyGroup are passed, + they *must* be from the same Universe. + + + .. versionadded:: 1.0.0 + """ + self._delete_topology_objects('angles', values)
+ +
[docs] def delete_dihedrals(self, values): + """Delete Dihedrals from this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup + An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, + or Dihedrals. + If AtomGroups, Dihedrals, or a TopologyGroup are passed, + they *must* be from the same Universe. + + + .. versionadded:: 1.0.0 + """ + self._delete_topology_objects('dihedrals', values)
+ +
[docs] def delete_impropers(self, values): + """Delete Impropers from this Universe. + + Parameters + ---------- + values : iterable of tuples, AtomGroups, or Impropers; or TopologyGroup + An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, + or Impropers. + If AtomGroups, Angles, or a TopologyGroup are passed, + they *must* be from the same Universe. + + + .. versionadded:: 1.0.0 + """ + self._delete_topology_objects('impropers', values)
+ + # TODO: Maybe put this as a Bond attribute transplant + # Problems: Can we transplant onto Universe? + # Probably a smarter way to do this too, could generate + # these on demand *per atom*. + # Wouldn't then need the Universe linkage here + # + # Alternate idea: Bonds Attribute generates a Fragments + # Attribute (ie, 2 for the price of 1) + # Fragments then gets its own Class/namespace/jazz. + @property + @cached('fragments') + def _fragdict(self): + """ + .. versionadded:: 0.9.0 + .. versionchanged:: 0.16.0 + Fragment atoms are sorted by their index, and framgents are sorted + by their first atom index so their order is predictable. + .. versionchanged:: 0.19.0 + Uses faster C++ implementation + .. versionchanged:: 0.20.0 + * _fragdict keys are now atom indices instead of Atoms + * _fragdict items are now a namedtuple ``fraginfo(ix, fragment)`` + storing the fragindex ``ix`` along with the fragment. + """ + atoms = self.atoms.ix + bonds = self.atoms.bonds.to_indices() + + frag_indices = find_fragments(atoms, bonds) + frags = tuple([AtomGroup(np.sort(ix), self) for ix in frag_indices]) + + fragdict = {} + fraginfo = collections.namedtuple('fraginfo', 'ix, fragment') + for i, f in enumerate(frags): + for a in f: + fragdict[a.ix] = fraginfo(i, f) + + return fragdict + +
[docs] @classmethod + def from_smiles(cls, smiles, sanitize=True, addHs=True, + generate_coordinates=True, numConfs=1, + rdkit_kwargs={}, **kwargs): + """Create a Universe from a SMILES string with rdkit + + Parameters + ---------- + smiles : str + SMILES string + sanitize : bool (optional, default True) + Toggle the sanitization of the molecule + addHs : bool (optional, default True) + Add all necessary hydrogens to the molecule + generate_coordinates : bool (optional, default True) + Generate 3D coordinates using RDKit's + :func:`AllChem.EmbedMultipleConfs` function. Requires adding + hydrogens with the `addHs` parameter + numConfs : int (optional, default 1) + Number of frames to generate coordinates for. Ignored if + ``generate_coordinates=False`` + rdkit_kwargs : dict (optional) + Other arguments passed to the RDKit :func:`EmbedMultipleConfs` + function + kwargs : dict + Parameters passed on Universe creation + + Returns + ------- + universe : Universe + contains atom names and topology information (bonds) derived from + the input SMILES string; coordinates are included if + `generate_coordinates` was set to ``True`` + + + Examples + -------- + To create a Universe with 10 conformers of ethanol: + + >>> from rdkit.Chem import AllChem + >>> u = mda.Universe.from_smiles('CCO', numConfs=10) + >>> u + <Universe with 9 atoms> + >>> u.trajectory + <RDKitReader with 10 frames of 9 atoms> + + To use a different conformer generation algorithm, like ETKDGv3: + + >>> u = mda.Universe.from_smiles('CCO', rdkit_kwargs=dict( + ... params=AllChem.ETKDGv3())) + >>> u.trajectory + <RDKitReader with 1 frames of 9 atoms> + + + .. versionadded:: 2.0.0 + + """ + try: + from rdkit import Chem + from rdkit.Chem import AllChem + except ImportError as e: + raise ImportError( + "Creating a Universe from a SMILES string requires RDKit but " + "it does not appear to be installed") from e + + mol = Chem.MolFromSmiles(smiles, sanitize=sanitize) + if mol is None: + raise SyntaxError('Error while parsing SMILES {0}'.format(smiles)) + if addHs: + mol = Chem.AddHs(mol) + if generate_coordinates: + if not addHs: + raise ValueError("Generating coordinates requires adding " + "hydrogens with `addHs=True`") + + numConfs = rdkit_kwargs.pop("numConfs", numConfs) + if not (type(numConfs) is int and numConfs > 0): + raise SyntaxError("numConfs must be a non-zero positive " + "integer instead of {0}".format(numConfs)) + AllChem.EmbedMultipleConfs(mol, numConfs, **rdkit_kwargs) + + return cls(mol, **kwargs)
+ + +
[docs]def Merge(*args): + """Create a new new :class:`Universe` from one or more + :class:`~MDAnalysis.core.groups.AtomGroup` instances. + + Parameters + ---------- + *args: :class:`~MDAnalysis.core.groups.AtomGroup` + One or more AtomGroups. + + Returns + ------- + universe: :class:`Universe` + + Raises + ------ + ValueError + Too few arguments or an AtomGroup is empty and + TypeError + Arguments are not :class:`AtomGroup` instances. + + Notes + ----- + The resulting :class:`Universe` will only inherit the common topology + attributes that all merged universes share. + + :class:`AtomGroup` instances can come from different Universes, or can come + directly from a :meth:`~Universe.select_atoms` call. + + :class:`Merge` can also be used with a single :class:`AtomGroup` if the + user wants to, for example, re-order the atoms in the :class:`Universe`. + + If multiple :class:`AtomGroup` instances from the same :class:`Universe` + are given, the merge will first simply "add" together the + :class:`AtomGroup` instances. + + Merging does not create a full trajectory but only a single structure even + if the input consists of one or more trajectories. However, one can use + the :class:`~MDAnalysis.coordinates.memory.MemoryReader` to construct a + trajectory for the new Universe as described under + :ref:`creating-in-memory-trajectory-label`. + + Example + ------- + In this example, protein, ligand, and solvent were externally prepared in + three different PDB files. They are loaded into separate :class:`Universe` + objects (where they could be further manipulated, e.g. renumbered, + relabeled, rotated, ...) The :func:`Merge` command is used to combine all + of them together:: + + u1 = Universe("protein.pdb") + u2 = Universe("ligand.pdb") + u3 = Universe("solvent.pdb") + u = Merge(u1.select_atoms("protein"), u2.atoms, u3.atoms) + u.atoms.write("system.pdb") + + The complete system is then written out to a new PDB file. + + + .. versionchanged:: 0.9.0 + Raises exceptions instead of assertion errors. + + .. versionchanged:: 0.16.0 + The trajectory is now a + :class:`~MDAnalysis.coordinates.memory.MemoryReader`. + + """ + from ..topology.base import squash_by + + if len(args) == 0: + raise ValueError("Need at least one AtomGroup for merging") + + for a in args: + if not isinstance(a, groups.AtomGroup): + raise TypeError(repr(a) + " is not an AtomGroup") + for a in args: + if len(a) == 0: + raise ValueError("cannot merge empty AtomGroup") + + # Create a new topology using the intersection of topology attributes + blank_topology_attrs = set(dir(Topology(attrs=[]))) + common_attrs = set.intersection(*[set(dir(ag.universe._topology)) + for ag in args]) + tops = set(['bonds', 'angles', 'dihedrals', 'impropers']) + + attrs = [] + + # Create set of attributes which are array-valued and can be simply + # concatenated together + common_array_attrs = common_attrs - blank_topology_attrs - tops + # Build up array-valued topology attributes including only attributes + # that all arguments' universes have + for attrname in common_array_attrs: + for ag in args: + attr = getattr(ag, attrname) + attr_class = type(getattr(ag.universe._topology, attrname)) + if issubclass(attr_class, AtomAttr): + pass + elif issubclass(attr_class, ResidueAttr): + attr = getattr(ag.residues, attrname) + elif issubclass(attr_class, SegmentAttr): + attr = getattr(ag.segments, attrname) + else: + raise NotImplementedError("Don't know how to handle" + " TopologyAttr not subclassed" + " from AtomAttr, ResidueAttr," + " or SegmentAttr.") + if type(attr) != np.ndarray: + raise TypeError('Encountered unexpected topology ' + 'attribute of type {}'.format(type(attr))) + try: + attr_array.extend(attr) + except NameError: + attr_array = list(attr) + attrs.append(attr_class(np.array(attr_array, dtype=attr.dtype))) + del attr_array + + # Build up topology groups including only those that all arguments' + # universes have + for t in (tops & common_attrs): + offset = 0 + bondidx = [] + types = [] + for ag in args: + # create a mapping scheme for this atomgroup + mapping = {a.index: i for i, a in enumerate(ag, start=offset)} + offset += len(ag) + + tg = getattr(ag, t) + bonds_class = type(getattr(ag.universe._topology, t)) + # Create a topology group of only bonds that are within this ag + # ie we don't want bonds that extend out of the atomgroup + tg = tg.atomgroup_intersection(ag, strict=True) + + # Map them so they refer to our new indices + new_idx = [tuple([mapping[x] for x in entry]) for entry in tg.indices] + bondidx.extend(new_idx) + if hasattr(tg, '_bondtypes'): + types.extend(tg._bondtypes) + else: + types.extend([None]*len(tg)) + if any(t is None for t in types): + attrs.append(bonds_class(bondidx)) + else: + types = np.array(types, dtype='|S8') + attrs.append(bonds_class(bondidx, types)) + + # Renumber residue and segment indices + n_atoms = sum([len(ag) for ag in args]) + residx = [] + segidx = [] + res_offset = 0 + seg_offset = 0 + for ag in args: + # create a mapping scheme for this atomgroup's parents + res_mapping = {r.resindex: i for i, r in enumerate(ag.residues, + start=res_offset)} + seg_mapping = {r.segindex: i for i, r in enumerate(ag.segments, + start=seg_offset)} + res_offset += len(ag.residues) + seg_offset += len(ag.segments) + + # Map them so they refer to our new indices + residx.extend([res_mapping[x] for x in ag.resindices]) + segidx.extend([seg_mapping[x] for x in ag.segindices]) + + residx = np.array(residx, dtype=np.int32) + segidx = np.array(segidx, dtype=np.int32) + + _, _, [segidx] = squash_by(residx, segidx) + + n_residues = len(set(residx)) + n_segments = len(set(segidx)) + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + # Create and populate a universe + try: + #Create universe with coordinates if they exists in args + coords = np.vstack([a.positions for a in args]) + u = Universe(top, coords[None, :, :], + format=MDAnalysis.coordinates.memory.MemoryReader) + except AttributeError: + #Create universe without coordinates if they dont exists in args + u = Universe(top) + + return u
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/exceptions.html b/2.7.0-dev0/_modules/MDAnalysis/exceptions.html new file mode 100644 index 0000000000..8bdccd664c --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/exceptions.html @@ -0,0 +1,239 @@ + + + + + + MDAnalysis.exceptions — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.exceptions

+# -*- 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-2017 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
+#
+
+"""
+Custom exceptions and warnings --- :mod:`MDAnalysis.exceptions`
+===============================================================
+
+"""
+
+
+
[docs]class SelectionError(Exception): + """Raised when a atom selection failed."""
+ + +
[docs]class NoDataError(ValueError, AttributeError): + """Raised when empty input is not allowed or required data are missing. + + .. versionchanged:: 1.0.0 + Now a subclass of AttributeError as well as ValueError + """
+ + +
[docs]class ApplicationError(OSError): + """Raised when an external application failed. + + The error code is specific for the application. + + .. versionadded:: 0.7.7 + """
+ + +
[docs]class SelectionWarning(Warning): + """Warning indicating a possible problem with a selection."""
+ + +
[docs]class MissingDataWarning(Warning): + """Warning indicating is that required data are missing."""
+ + +
[docs]class ConversionWarning(Warning): + """Warning indicating a problem with converting between units."""
+ + +
[docs]class FileFormatWarning(Warning): + """Warning indicating possible problems with a file format."""
+ + +
[docs]class StreamWarning(Warning): + """Warning indicating a possible problem with a stream. + + :exc:`StreamWarning` is used when streams are substituted for simple access + by filename (see in particular + :class:`~MDAnalysis.lib.util.NamedStream`). This does not work everywhere + in MDAnalysis (yet). + """
+ + +
[docs]class DuplicateWarning(UserWarning): + """Warning indicating possible problems arising from an + :class:`~MDAnalysis.core.groups.AtomGroup` / + :class:`~MDAnalysis.core.groups.ResidueGroup` / + :class:`~MDAnalysis.core.groups.SegmentGroup` containing duplicate + :class:`Atoms<MDAnalysis.core.groups.Atom>` / + :class:`Residues<MDAnalysis.core.groups.Residue>` / + :class:`Segments<MDAnalysis.core.groups.Segment>`. + + + .. versionadded:: 0.19.0 + """
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.html b/2.7.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.html new file mode 100644 index 0000000000..6653de6af9 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.html @@ -0,0 +1,285 @@ + + + + + + MDAnalysis.lib.NeighborSearch — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.lib.NeighborSearch

+# -*- 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-2017 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
+#
+
+"""
+Neighbor Search wrapper for MDAnalysis --- :mod:`MDAnalysis.lib.NeighborSearch`
+===============================================================================
+
+This module contains classes that allow neighbor searches directly with
+`AtomGroup` objects from `MDAnalysis`.
+"""
+import numpy as np
+from MDAnalysis.lib.distances import capped_distance
+from MDAnalysis.lib.util import unique_int_1d
+from MDAnalysis.core.groups import AtomGroup, SegmentGroup, ResidueGroup
+import numpy.typing as npt
+from typing import Optional, Union, List
+
+
+
[docs]class AtomNeighborSearch(object): + """This class can be used to find all atoms/residues/segments within the + radius of a given query position. + + For the neighbor search, this class is a wrapper around + :class:`~MDAnalysis.lib.distances.capped_distance`. + """ + + def __init__(self, atom_group: AtomGroup, + box: Optional[npt.ArrayLike] = None) -> None: + """ + + Parameters + ---------- + atom_list : AtomGroup + list of atoms + box : array-like or ``None``, optional, default ``None`` + Simulation cell dimensions in the form of + :attr:`MDAnalysis.trajectory.timestep.Timestep.dimensions` when + periodic boundary conditions should be taken into account for + the calculation of contacts. + """ + self.atom_group = atom_group + self._u = atom_group.universe + self._box = box + +
[docs] def search(self, atoms: AtomGroup, + radius: float, + level: str = 'A' + ) -> Optional[Union[AtomGroup, ResidueGroup, SegmentGroup]]: + """ + Return all atoms/residues/segments that are within *radius* of the + atoms in *atoms*. + + Parameters + ---------- + atoms : AtomGroup, MDAnalysis.core.groups.AtomGroup + AtomGroup object + radius : float + Radius for search in Angstrom. + level : str + char (A, R, S). Return atoms(A), residues(R) or segments(S) within + *radius* of *atoms*. + + Returns + ------- + AtomGroup : :class:`~MDAnalysis.core.groups.AtomGroup` + When ``level='A'``, AtomGroup is being returned. + ResidueGroup : :class:`~MDAnalysis.core.groups.ResidueGroup` + When ``level='R'``, ResidueGroup is being returned. + SegmentGroup : :class:`~MDAnalysis.core.groups.SegmentGroup` + When ``level='S'``, SegmentGroup is being returned. + + + .. versionchanged:: 2.0.0 + Now returns :class:`AtomGroup` (when empty this is now an empty + :class:`AtomGroup` instead of an empty list), :class:`ResidueGroup`, + or a :class:`SegmentGroup` + """ + unique_idx = [] + try: + # For atom groups, take the positions attribute + position = atoms.positions + except AttributeError: + # For atom, take the position attribute + position = atoms.position + pairs = capped_distance(position, self.atom_group.positions, + radius, box=self._box, return_distances=False) + + if pairs.size > 0: + unique_idx = unique_int_1d(np.asarray(pairs[:, 1], dtype=np.intp)) + return self._index2level(unique_idx, level)
+ + def _index2level(self, + indices: List[int], + level: str + ) -> Union[AtomGroup, ResidueGroup, SegmentGroup]: + """Convert list of atom_indices in a AtomGroup to either the + Atoms or segments/residues containing these atoms. + + Parameters + ---------- + indices + list of atom indices + level : str + char (A, R, S). Return atoms(A), residues(R) or segments(S) within + *radius* of *atoms*. + """ + atomgroup = self.atom_group[indices] + if level == 'A': + return atomgroup + elif level == 'R': + return atomgroup.residues + elif level == 'S': + return atomgroup.segments + else: + raise NotImplementedError('{0}: level not implemented'.format(level))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/correlations.html b/2.7.0-dev0/_modules/MDAnalysis/lib/correlations.html new file mode 100644 index 0000000000..0478ba6c0f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/correlations.html @@ -0,0 +1,416 @@ + + + + + + MDAnalysis.lib.correlations — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.correlations

+# -*- 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-2017 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
+#
+
+"""Correlations utilities --- :mod:`MDAnalysis.lib.correlations`
+=================================================================================
+
+
+:Authors: Paul Smith & Mateusz Bieniek
+:Year: 2020
+:Copyright: GNU Public License v2
+
+.. versionadded:: 1.0.0
+
+This module is primarily for internal use by other analysis modules. It
+provides functionality for calculating the time autocorrelation function
+of a binary variable (i.e one that is either true or false at each
+frame for a given atom/molecule/set of molecules). This module includes
+functions for calculating both the time continuous autocorrelation and
+the intermittent autocorrelation. The function :func:`autocorrelation`
+calculates the continuous autocorrelation only. The data may be
+pre-processed using the function :func:`intermittency` in order to
+acount for intermittency before passing the results to
+:func:`autocorrelation`.
+
+This module is inspired by seemingly disparate analyses that rely on the same
+underlying calculation, including the survival probability of water around
+proteins :cite:p:`ArayaSecchi2014`, hydrogen bond lifetimes
+:cite:p:`Gowers2015,ArayaSecchi2014`, and the rate of cholesterol
+flip-flop in lipid bilayers :cite:p:`Gu2019`.
+
+.. seeAlso::
+
+    Analysis tools that make use of modules:
+
+        * :class:`MDAnalysis.analysis.waterdynamics.SurvivalProbability`
+            Calculates the continuous or intermittent survival probability
+            of an atom group in a region of interest.
+
+        * :class:`MDAnalysis.analysis.hbonds.hbond_analysis`
+            Calculates the continuous or intermittent hydrogen bond
+            lifetime.
+
+.. rubric:: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+
+    ArayaSecchi2014
+    Gowers2015
+    Gu2019
+
+"""
+
+import numpy as np
+from copy import deepcopy
+
+
+
[docs]def autocorrelation(list_of_sets, tau_max, window_step=1): + r"""Implementation of a discrete autocorrelation function. + + The autocorrelation of a property :math:`x` from a time :math:`t=t_0` to :math:`t=t_0 + \tau` + is given by: + + .. math:: + C(\tau) = \langle \frac{ x(t_0)x(t_0 +\tau) }{ x(t_0)x(t_0) } \rangle + + where :math:`x` may represent any property of a particle, such as velocity or + potential energy. + + This function is an implementation of a special case of the time + autocorrelation function in which the property under consideration can + be encoded with indicator variables, :math:`0` and :math:`1`, to represent the binary + state of said property. This special case is often referred to as the + survival probability (:math:`S(\tau)`). As an example, in calculating the survival + probability of water molecules within 5 Å of a protein, each water + molecule will either be within this cutoff range (:math:`1`) or not (:math:`0`). The + total number of water molecules within the cutoff at time :math:`t_0` will be + given by :math:`N(t_0)`. Other cases include the Hydrogen Bond Lifetime as + well as the translocation rate of cholesterol across a bilayer. + + The survival probability of a property of a set of particles is + given by: + + .. math:: + S(\tau) = \langle \frac{ N(t_0, t_0 + \tau )} { N(t_0) }\rangle + + where :math:`N(t0)` is the number of particles at time :math:`t_0` for which the feature + is observed, and :math:`N(t0, t_0 + \tau)` is the number of particles for which + this feature is present at every frame from :math:`t_0` to :math:`N(t0, t_0 + \tau)`. + The angular brackets represent an average over all time origins, :math:`t_0`. + + See :cite:`ArayaSecchi2014` for a description survival probability. + + Parameters + ---------- + list_of_sets : list + List of sets. Each set corresponds to data from a single frame. Each element in a set + may be, for example, an atom id or a tuple of atoms ids. In the case of calculating the + survival probability of water around a protein, these atom ids in a given set will be + those of the atoms which are within a cutoff distance of the protein at a given frame. + tau_max : int + The last tau (lag time, inclusive) for which to calculate the autocorrelation. e.g if tau_max = 20, + the survival probability will be calculated over 20 frames. + window_step : int, optional + The step size for t0 to perform autocorrelation. Ideally, window_step will be larger than + tau_max to ensure independence of each window for which the calculation is performed. + Default is 1. + + Returns + -------- + tau_timeseries : list of int + the values of tau for which the autocorrelation was calculated + timeseries : list of int + the autocorelation values for each of the tau values + timeseries_data : list of list of int + the raw data from which the autocorrelation is computed, i.e :math:`S(\tau)` at each window. + This allows the time dependant evolution of :math:`S(\tau)` to be investigated. + + .. versionadded:: 0.19.2 + """ + + # check types + if (type(list_of_sets) != list and len(list_of_sets) != 0) or type(list_of_sets[0]) != set: + raise TypeError("list_of_sets must be a one-dimensional list of sets") # pragma: no cover + + # Check dimensions of parameters + if len(list_of_sets) < tau_max: + raise ValueError("tau_max cannot be greater than the length of list_of_sets") # pragma: no cover + + tau_timeseries = list(range(1, tau_max + 1)) + timeseries_data = [[] for _ in range(tau_max)] + + # calculate autocorrelation + for t in range(0, len(list_of_sets), window_step): + Nt = len(list_of_sets[t]) + + if Nt == 0: + continue + + for tau in tau_timeseries: + if t + tau >= len(list_of_sets): + break + + # continuous: IDs that survive from t to t + tau and at every frame in between + Ntau = len(set.intersection(*list_of_sets[t:t + tau + 1])) + timeseries_data[tau - 1].append(Ntau / float(Nt)) + + timeseries = [np.mean(x) for x in timeseries_data] + + # at time 0 the value has to be one + tau_timeseries.insert(0, 0) + timeseries.insert(0, 1) + + return tau_timeseries, timeseries, timeseries_data
+ + +
[docs]def correct_intermittency(list_of_sets, intermittency): + r"""Preprocess data to allow intermittent behaviour prior to calling :func:`autocorrelation`. + + Survival probabilty may be calculated either with a strict continuous requirement or + a less strict intermittency. If calculating the survival probability water around a + protein for example, in the former case the water must be within a cutoff distance + of the protein at every frame from :math:`t_0` to :math:`t_0 + \tau` in order for it to be considered + present at :math:`t_0 + \tau`. In the intermittent case, the water molecule is allowed to + leave the region of interest for up to a specified consecutive number of frames whilst still + being considered present at :math:`t_0 + \tau`. + + This function pre-processes data, such as the atom ids of water molecules within a cutoff + distance of a protein at each frame, in order to allow for intermittent behaviour, with a + single pass over the data. + + For example, if an atom is absent for a number of frames equal or smaller than the parameter + :attr:`intermittency`, then this absence will be removed and thus the atom is considered to have + not left. + e.g 7,A,A,7 with `intermittency=2` will be replaced by 7,7,7,7, where A=absence. + + The returned data can be used as input to the function :func:`autocorrelation` in order + to calculate the survival probability with a given intermittency. + + See :cite:p:`Gowers2015` for a description of intermittency in the + calculation of hydrogen bond lifetimes. + + # TODO - is intermittency consitent with list of sets of sets? (hydrogen bonds) + + Parameters + ---------- + list_of_sets: list + In the simple case of e.g survival probability, a list of sets of atom ids present at each frame, where a + single set contains atom ids at a given frame, e.g [{0, 1}, {0}, {0}, {0, 1}] + intermittency : int + The maximum gap allowed. The default `intermittency=0` means that if the datapoint is missing at any frame, no + changes are made to the data. With the value of `intermittency=2`, all datapoints missing for up to two + consecutive frames will be instead be considered present. + + Returns + ------- + list_of_sets: list + returns a new list with the IDs with added IDs which disappeared for <= :attr:`intermittency`. + e.g If [{0, 1}, {0}, {0}, {0, 1}] is a list of sets of atom ids present at each frame and `intermittency=2`, + both atoms will be considered present throughout and thus the returned list of sets will be + [{0, 1}, {0, 1}, {0, 1}, {0, 1}]. + + """ + if intermittency == 0: + return list_of_sets + + list_of_sets = deepcopy(list_of_sets) + + # an element (a superset) takes the form of: + # - an atom pair when computing hydrogen bonds lifetime, + # - atom ID in the case of water survival probability, + for i, elements in enumerate(list_of_sets): + # initially update each frame as seen 0 ago (now) + seen_frames_ago = {i: 0 for i in elements} + for j in range(1, intermittency + 2): + for element in seen_frames_ago.keys(): + # no more frames + if i + j >= len(list_of_sets): + continue + + # if the element is absent now + if element not in list_of_sets[i + j]: + # increase its absence counter + seen_frames_ago[element] += 1 + continue + + # the element is present + if seen_frames_ago[element] == 0: + # the element was present in the last frame + continue + + # element was absent more times than allowed + if seen_frames_ago[element] > intermittency: + continue + + # The element was absent but returned, i.e. + # within <= intermittency_value. + # Add it to the frames where it was absent. + # Introduce the corrections. + for k in range(seen_frames_ago[element], 0, -1): + list_of_sets[i + j - k].add(element) + + seen_frames_ago[element] = 0 + return list_of_sets
+ +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/distances.html b/2.7.0-dev0/_modules/MDAnalysis/lib/distances.html new file mode 100644 index 0000000000..c8ea6ce2e9 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/distances.html @@ -0,0 +1,1980 @@ + + + + + + MDAnalysis.lib.distances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.distances

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- https://www.mdanalysis.org
+# Copyright (c) 2006-2017 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
+#
+#
+
+"""Fast distance array computation --- :mod:`MDAnalysis.lib.distances`
+===================================================================
+
+Fast C-routines to calculate arrays of distances or angles from coordinate
+arrays. Distance functions can accept a NumPy :class:`np.ndarray` or an
+:class:`~MDAnalysis.core.groups.AtomGroup`. Many of the functions also exist
+in parallel versions, which typically provide higher performance than the
+serial code. The boolean attribute `MDAnalysis.lib.distances.USED_OPENMP` can
+be checked to see if OpenMP was used in the compilation of MDAnalysis.
+
+Selection of acceleration ("backend")
+-------------------------------------
+
+All functions take the optional keyword `backend`, which determines the type of
+acceleration. Currently, the following choices are implemented (`backend` is
+case-insensitive):
+
+.. Table:: Available *backends* for accelerated distance functions.
+
+   ========== ========================= ======================================
+   *backend*  module                    description
+   ========== ========================= ======================================
+   "serial"   :mod:`c_distances`        serial implementation in C/Cython
+
+   "OpenMP"   :mod:`c_distances_openmp` parallel implementation in C/Cython
+                                        with OpenMP
+   ========== ========================= ======================================
+
+Use of the distopia library
+---------------------------
+
+MDAnalysis has developed a standalone library, `distopia`_ for accelerating
+the distance functions in this module using explicit SIMD vectorisation.
+This can provide many-fold speedups in calculating distances. Distopia is
+under active development and as such only a selection of functions in this
+module are covered. Consult the following table to see if the function
+you wish to use is covered by distopia. For more information see the
+`distopia documentation`_.
+
+.. Table:: Functions available using the `distopia`_ backend.
+    :align: center
+
+    +-------------------------------------+-----------------------------------+
+    | Functions                           | Notes                             |
+    +=====================================+===================================+
+    | MDAnalysis.lib.distances.calc_bonds | Doesn't support triclinic boxes   |
+    +-------------------------------------+-----------------------------------+
+
+If `distopia`_ is installed, the functions in this table will accept the key
+'distopia' for the `backend` keyword argument. If the distopia backend is
+selected the `distopia` library will be used to calculate the distances. Note
+that for functions listed in this table **distopia is not the default backend
+if and must be selected.**
+
+.. Note::
+   Distopia does not currently support triclinic simulation boxes. If you
+   specify `distopia` as the backend and your simulation box is triclinic,
+   the function will fall back to the default `serial` backend.
+
+.. Note::
+    Due to the use of Instruction Set Architecture (`ISA`_) specific SIMD
+    intrinsics in distopia via `VCL2`_, the precision of your results may
+    depend on the ISA available on your machine. However, in all tested cases
+    distopia satisfied the accuracy thresholds used to the functions in this
+    module. Please document any issues you encounter with distopia's accuracy
+    in the `relevant distopia issue`_ on the MDAnalysis GitHub repository.
+
+.. _distopia: https://github.com/MDAnalysis/distopia
+.. _distopia documentation: https://www.mdanalysis.org/distopia
+.. _ISA: https://en.wikipedia.org/wiki/Instruction_set_architecture
+.. _VCL2: https://github.com/vectorclass/version2
+.. _relevant distopia issue: https://github.com/MDAnalysis/mdanalysis/issues/3915
+
+.. versionadded:: 0.13.0
+.. versionchanged:: 2.3.0
+   Distance functions can now accept an
+   :class:`~MDAnalysis.core.groups.AtomGroup` or an :class:`np.ndarray`
+.. versionchanged:: 2.5.0
+   Interface to the `distopia`_ package added.
+
+Functions
+---------
+.. autofunction:: distance_array
+.. autofunction:: self_distance_array
+.. autofunction:: capped_distance
+.. autofunction:: self_capped_distance
+.. autofunction:: calc_bonds
+.. autofunction:: calc_angles
+.. autofunction:: calc_dihedrals
+.. autofunction:: apply_PBC
+.. autofunction:: transform_RtoS
+.. autofunction:: transform_StoR
+.. autofunction:: augment_coordinates(coordinates, box, r)
+.. autofunction:: undo_augment(results, translation, nreal)
+.. autofunction:: minimize_vectors(vectors, box)
+"""
+import numpy as np
+import numpy.typing as npt
+
+from typing import Union, Optional, Callable
+from typing import TYPE_CHECKING
+if TYPE_CHECKING:  # pragma: no cover
+    from ..core.groups import AtomGroup
+from .util import check_coords, check_box
+from .mdamath import triclinic_vectors
+from ._augment import augment_coordinates, undo_augment
+from .nsgrid import FastNS
+from .c_distances import _minimize_vectors_ortho, _minimize_vectors_triclinic
+from ._distopia import HAS_DISTOPIA
+
+
+# hack to select backend with backend=<backend> kwarg. Note that
+# the cython parallel code (prange) in parallel.distances is
+# independent from the OpenMP code
+import importlib
+_distances = {}
+_distances['serial'] = importlib.import_module(".c_distances",
+                                         package="MDAnalysis.lib")
+try:
+    _distances['openmp'] = importlib.import_module(".c_distances_openmp",
+                                          package="MDAnalysis.lib")
+except ImportError:
+    pass
+
+if HAS_DISTOPIA:
+    _distances["distopia"] = importlib.import_module("._distopia",
+                             package="MDAnalysis.lib")
+del importlib
+
+def _run(funcname: str, args: Optional[tuple] = None,
+         kwargs: Optional[dict] = None, backend: str = "serial") -> Callable:
+    """Helper function to select a backend function `funcname`."""
+    args = args if args is not None else tuple()
+    kwargs = kwargs if kwargs is not None else dict()
+    backend = backend.lower()
+    try:
+        func = getattr(_distances[backend], funcname)
+    except KeyError:
+        errmsg = (f"Function {funcname} not available with backend {backend} "
+                  f"try one of: {_distances.keys()}")
+        raise ValueError(errmsg) from None
+    return func(*args, **kwargs)
+
+# serial versions are always available (and are typically used within
+# the core and topology modules)
+from .c_distances import (_UINT64_MAX,
+                          calc_distance_array,
+                          calc_distance_array_ortho,
+                          calc_distance_array_triclinic,
+                          calc_self_distance_array,
+                          calc_self_distance_array_ortho,
+                          calc_self_distance_array_triclinic,
+                          coord_transform,
+                          calc_bond_distance,
+                          calc_bond_distance_ortho,
+                          calc_bond_distance_triclinic,
+                          calc_angle,
+                          calc_angle_ortho,
+                          calc_angle_triclinic,
+                          calc_dihedral,
+                          calc_dihedral_ortho,
+                          calc_dihedral_triclinic,
+                          ortho_pbc,
+                          triclinic_pbc)
+
+from .c_distances_openmp import OPENMP_ENABLED as USED_OPENMP
+
+
+def _check_result_array(result: Optional[npt.NDArray],
+                        shape: tuple) -> npt.NDArray:
+    """Check if the result array is ok to use.
+
+    The `result` array must meet the following requirements:
+      * Must have a shape equal to `shape`.
+      * Its dtype must be ``numpy.float64``.
+
+    Paramaters
+    ----------
+    result : numpy.ndarray or None
+        The result array to check. If `result` is `None``, a newly created
+        array of correct shape and dtype ``numpy.float64`` will be returned.
+    shape : tuple
+        The shape expected for the `result` array.
+
+    Returns
+    -------
+    result : numpy.ndarray (``dtype=numpy.float64``, ``shape=shape``)
+        The input array or a newly created array if the input was ``None``.
+
+    Raises
+    ------
+    ValueError
+        If `result` is of incorrect shape.
+    TypeError
+        If the dtype of `result` is not ``numpy.float64``.
+    """
+    if result is None:
+        return np.zeros(shape, dtype=np.float64)
+    if result.shape != shape:
+        raise ValueError("Result array has incorrect shape, should be {0}, got "
+                         "{1}.".format(shape, result.shape))
+    if result.dtype != np.float64:
+        raise TypeError("Result array must be of type numpy.float64, got {}."
+                        "".format(result.dtype))
+# The following two lines would break a lot of tests. WHY?!
+#    if not coords.flags['C_CONTIGUOUS']:
+#        raise ValueError("{0} is not C-contiguous.".format(desc))
+    return result
+
+
+
[docs]@check_coords('reference', 'configuration', reduce_result_if_single=False, + check_lengths_match=False, allow_atomgroup=True) +def distance_array(reference: Union[npt.NDArray, 'AtomGroup'], + configuration: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + result: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + """Calculate all possible distances between a reference set and another + configuration. + + If there are ``n`` positions in `reference` and ``m`` positions in + `configuration`, a distance array of shape ``(n, m)`` will be computed. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + If a 2D numpy array of dtype ``numpy.float64`` with the shape ``(n, m)`` + is provided in `result`, then this preallocated array is filled. This can + speed up calculations. + + Parameters + ---------- + reference :numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array of shape ``(3,)`` or ``(n, 3)`` (dtype is + arbitrary, will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + configuration : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Configuration coordinate array of shape ``(3,)`` or ``(m, 3)`` (dtype is + arbitrary, will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + box : array_like, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + result : numpy.ndarray, optional + Preallocated result array which must have the shape ``(n, m)`` and dtype + ``numpy.float64``. + Avoids creating the array which saves time when the function + is called repeatedly. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + d : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n, m)``) + Array containing the distances ``d[i,j]`` between reference coordinates + ``i`` and configuration coordinates ``j``. + + + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts single coordinates as input. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + confnum = configuration.shape[0] + refnum = reference.shape[0] + + # check resulting array will not overflow UINT64_MAX + if refnum * confnum > _UINT64_MAX: + raise ValueError(f"Size of resulting array {refnum * confnum} elements" + " larger than size of maximum integer") + + distances = _check_result_array(result, (refnum, confnum)) + if len(distances) == 0: + return distances + if box is not None: + boxtype, box = check_box(box) + if boxtype == 'ortho': + _run("calc_distance_array_ortho", + args=(reference, configuration, box, distances), + backend=backend) + else: + _run("calc_distance_array_triclinic", + args=(reference, configuration, box, distances), + backend=backend) + else: + _run("calc_distance_array", + args=(reference, configuration, distances), + backend=backend) + + return distances
+ + +
[docs]@check_coords('reference', reduce_result_if_single=False, allow_atomgroup=True) +def self_distance_array(reference: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + result: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + """Calculate all possible distances within a configuration `reference`. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + If a 1D numpy array of dtype ``numpy.float64`` with the shape + ``(n*(n-1)/2,)`` is provided in `result`, then this preallocated array is + filled. This can speed up calculations. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array of shape ``(3,)`` or ``(n, 3)`` (dtype is + arbitrary, will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + box : array_like, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + result : numpy.ndarray, optional + Preallocated result array which must have the shape ``(n*(n-1)/2,)`` and + dtype ``numpy.float64``. Avoids creating the array which saves time when + the function is called repeatedly. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + d : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n*(n-1)/2,)``) + Array containing the distances ``dist[i,j]`` between reference + coordinates ``i`` and ``j`` at position ``d[k]``. Loop through ``d``: + + .. code-block:: python + + for i in range(n): + for j in range(i + 1, n): + k += 1 + dist[i, j] = d[k] + + + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + refnum = reference.shape[0] + distnum = refnum * (refnum - 1) // 2 + # check resulting array will not overflow UINT64_MAX + if distnum > _UINT64_MAX: + raise ValueError(f"Size of resulting array {distnum} elements larger" + " than size of maximum integer") + + distances = _check_result_array(result, (distnum,)) + if len(distances) == 0: + return distances + if box is not None: + boxtype, box = check_box(box) + if boxtype == 'ortho': + _run("calc_self_distance_array_ortho", + args=(reference, box, distances), + backend=backend) + else: + _run("calc_self_distance_array_triclinic", + args=(reference, box, distances), + backend=backend) + else: + _run("calc_self_distance_array", + args=(reference, distances), + backend=backend) + + return distances
+ + +
[docs]@check_coords('reference', 'configuration', enforce_copy=False, + reduce_result_if_single=False, check_lengths_match=False, + allow_atomgroup=True) +def capped_distance(reference: Union[npt.NDArray, 'AtomGroup'], + configuration: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + method: Optional[str] = None, + return_distances: Optional[bool] = True): + """Calculates pairs of indices corresponding to entries in the `reference` + and `configuration` arrays which are separated by a distance lying within + the specified cutoff(s). Optionally, these distances can be returned as + well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + An automatic guessing of the optimal method to calculate the distances is + included in the function. An optional keyword for the method is also + provided. Users can enforce a particular method with this functionality. + Currently brute force, grid search, and periodic KDtree methods are + implemented. + + Parameters + ----------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)``. Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + configuration : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Configuration coordinate array with shape ``(3,)`` or ``(m, 3)``. Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between the reference and configuration. + min_cutoff : float, optional + Minimum cutoff distance between reference and configuration. + box : array_like, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + method : {'bruteforce', 'nsgrid', 'pkdtree'}, optional + Keyword to override the automatic guessing of the employed search + method. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` and + `configuration` arrays such that the distance between them lies within + the interval (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th coordinate in `reference` and the ``j``-th coordinate in + `configuration`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``), optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. code-block:: python + + pairs, distances = capped_distances(reference, configuration, + max_cutoff, return_distances=True) + for k, [i, j] in enumerate(pairs): + coord1 = reference[i] + coord2 = configuration[j] + distance = distances[k] + + See Also + -------- + distance_array + MDAnalysis.lib.pkdtree.PeriodicKDTree.search + MDAnalysis.lib.nsgrid.FastNS.search + + + .. versionchanged:: 1.0.1 + nsgrid was temporarily removed and replaced with pkdtree due to issues + relating to its reliability and accuracy (Issues #2919, #2229, #2345, + #2670, #2930) + .. versionchanged:: 1.0.2 + nsgrid enabled again + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + if box is not None: + box = np.asarray(box, dtype=np.float32) + if box.shape[0] != 6: + raise ValueError("Box Argument is of incompatible type. The " + "dimension should be either None or of the form " + "[lx, ly, lz, alpha, beta, gamma]") + + # The check_coords decorator made sure that reference and configuration + # are arrays of positions. Mypy does not know about that so we have to + # tell it. + reference_positions: npt.NDArray = reference # type: ignore + configuration_positions: npt.NDArray = configuration # type: ignore + function = _determine_method(reference_positions, configuration_positions, + max_cutoff, min_cutoff=min_cutoff, + box=box, method=method) + return function(reference, configuration, + max_cutoff, min_cutoff=min_cutoff, + box=box, return_distances=return_distances)
+ + +def _determine_method(reference: npt.NDArray, configuration: npt.NDArray, + max_cutoff: float, min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + method: Optional[str] = None) -> Callable: + """Guesses the fastest method for capped distance calculations based on the + size of the coordinate sets and the relative size of the target volume. + + Parameters + ---------- + reference : numpy.ndarray + Reference coordinate array with shape ``(3,)`` or ``(n, 3)``. + configuration : numpy.ndarray + Configuration coordinate array with shape ``(3,)`` or ``(m, 3)``. + max_cutoff : float + Maximum cutoff distance between `reference` and `configuration` + coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` and `configuration` + coordinates. + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + method : {'bruteforce', 'nsgrid', 'pkdtree'}, optional + Keyword to override the automatic guessing of the employed search + method. + + Returns + ------- + function : callable + The function implementing the guessed (or deliberatly chosen) method. + + + .. versionchanged:: 1.0.1 + nsgrid was temporarily removed and replaced with pkdtree due to issues + relating to its reliability and accuracy (Issues #2919, #2229, #2345, + #2670, #2930) + .. versionchanged:: 1.1.0 + enabled nsgrid again + """ + methods = {'bruteforce': _bruteforce_capped, + 'pkdtree': _pkdtree_capped, + 'nsgrid': _nsgrid_capped, + } + + if method is not None: + return methods[method.lower()] + + if len(reference) < 10 or len(configuration) < 10: + return methods['bruteforce'] + elif len(reference) * len(configuration) >= 1e8: + # CAUTION : for large datasets, shouldnt go into 'bruteforce' + # in any case. Arbitrary number, but can be characterized + return methods['nsgrid'] + else: + if box is None: + min_dim = np.array([reference.min(axis=0), + configuration.min(axis=0)]) + max_dim = np.array([reference.max(axis=0), + configuration.max(axis=0)]) + size = max_dim.max(axis=0) - min_dim.min(axis=0) + elif np.all(box[3:] == 90.0): + size = box[:3] + else: + tribox = triclinic_vectors(box) + size = tribox.max(axis=0) - tribox.min(axis=0) + if np.any(max_cutoff > 0.3*size): + return methods['bruteforce'] + else: + return methods['nsgrid'] + + +@check_coords('reference', 'configuration', enforce_copy=False, + reduce_result_if_single=False, check_lengths_match=False, + allow_atomgroup=True) +def _bruteforce_capped(reference: Union[npt.NDArray, 'AtomGroup'], + configuration: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a brute force method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` and `configuration` arrays which are separated by + a distance lying within the specified cutoff(s). Employs naive distance + computations (brute force) to find relevant distances. + + Optionally, these distances can be returned as well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + configuration : array or :class:`~MDAnalysis.core.groups.AtomGroup` + Configuration coordinate array with shape ``(3,)`` or ``(m, 3)`` (dtype + will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` and `configuration` + coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` and `configuration` + coordinates. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` and + `configuration` arrays such that the distance between them lies within + the interval (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th coordinate in `reference` and the ``j``-th coordinate in + `configuration`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``), optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + if len(reference) > 0 and len(configuration) > 0: + _distances = distance_array(reference, configuration, box=box) + if min_cutoff is not None: + mask = np.where((_distances <= max_cutoff) & \ + (_distances > min_cutoff)) + else: + mask = np.where((_distances <= max_cutoff)) + if mask[0].size > 0: + pairs = np.c_[mask[0], mask[1]] + if return_distances: + distances = _distances[mask] + + if return_distances: + return pairs, distances + else: + return pairs + + +@check_coords('reference', 'configuration', enforce_copy=False, + reduce_result_if_single=False, check_lengths_match=False, + allow_atomgroup=True) +def _pkdtree_capped(reference: Union[npt.NDArray, 'AtomGroup'], + configuration: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a KDtree method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` and `configuration` arrays which are separated by + a distance lying within the specified cutoff(s). Employs a (periodic) KDtree + algorithm to find relevant distances. + + Optionally, these distances can be returned as well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + configuration : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Configuration coordinate array with shape ``(3,)`` or ``(m, 3)`` (dtype + will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` and `configuration` + coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` and `configuration` + coordinates. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` and + `configuration` arrays such that the distance between them lies within + the interval (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th coordinate in `reference` and the ``j``-th coordinate in + `configuration`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``), optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + from .pkdtree import PeriodicKDTree # must be here to avoid circular import + + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + if len(reference) > 0 and len(configuration) > 0: + kdtree = PeriodicKDTree(box=box) + cut = max_cutoff if box is not None else None + kdtree.set_coords(configuration, cutoff=cut) + _pairs = kdtree.search_tree(reference, max_cutoff) + if _pairs.size > 0: + pairs = _pairs + if (return_distances or (min_cutoff is not None)): + refA, refB = pairs[:, 0], pairs[:, 1] + distances = calc_bonds(reference[refA], configuration[refB], + box=box) + if min_cutoff is not None: + mask = np.where(distances > min_cutoff) + pairs, distances = pairs[mask], distances[mask] + + if return_distances: + return pairs, distances + else: + return pairs + + +@check_coords('reference', 'configuration', enforce_copy=False, + reduce_result_if_single=False, check_lengths_match=False, + allow_atomgroup=True) +def _nsgrid_capped(reference: Union[npt.NDArray, 'AtomGroup'], + configuration: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a grid-based search method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` and `configuration` arrays which are separated by + a distance lying within the specified cutoff(s). Employs a grid-based search + algorithm to find relevant distances. + + Optionally, these distances can be returned as well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + configuration : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Configuration coordinate array with shape ``(3,)`` or ``(m, 3)`` (dtype + will be converted to ``numpy.float32`` internally). Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` and `configuration` + coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` and `configuration` + coordinates. + box : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``), optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` and + `configuration` arrays such that the distance between them lies within + the interval (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th coordinate in `reference` and the ``j``-th coordinate in + `configuration`. + distances : numpy.ndarray, optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + if len(reference) > 0 and len(configuration) > 0: + if box is None: + # create a pseudobox + # define the max range + # and supply the pseudobox + # along with only one set of coordinates + pseudobox = np.zeros(6, dtype=np.float32) + all_coords = np.concatenate([reference, configuration]) + lmax = all_coords.max(axis=0) + lmin = all_coords.min(axis=0) + # Using maximum dimension as the box size + boxsize = (lmax-lmin).max() + # to avoid failures for very close particles but with + # larger cutoff + boxsize = np.maximum(boxsize, 2 * max_cutoff) + pseudobox[:3] = boxsize + 2.2*max_cutoff + pseudobox[3:] = 90. + shiftref, shiftconf = reference.copy(), configuration.copy() + # Extra padding near the origin + shiftref -= lmin - 0.1*max_cutoff + shiftconf -= lmin - 0.1*max_cutoff + gridsearch = FastNS(max_cutoff, shiftconf, box=pseudobox, pbc=False) + results = gridsearch.search(shiftref) + else: + gridsearch = FastNS(max_cutoff, configuration, box=box) + results = gridsearch.search(reference) + + pairs = results.get_pairs() + if return_distances or (min_cutoff is not None): + distances = results.get_pair_distances() + if min_cutoff is not None: + idx = distances > min_cutoff + pairs, distances = pairs[idx], distances[idx] + + if return_distances: + return pairs, distances + else: + return pairs + + +
[docs]@check_coords('reference', enforce_copy=False, + reduce_result_if_single=False, check_lengths_match=False, + allow_atomgroup=True) +def self_capped_distance(reference: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, + min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + method: Optional[str] = None, + return_distances: Optional[bool] = True): + """Calculates pairs of indices corresponding to entries in the `reference` + array which are separated by a distance lying within the specified + cutoff(s). Optionally, these distances can be returned as well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + An automatic guessing of the optimal method to calculate the distances is + included in the function. An optional keyword for the method is also + provided. Users can enforce a particular method with this functionality. + Currently brute force, grid search, and periodic KDtree methods are + implemented. + + Parameters + ----------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)``. Also + accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` coordinates. + box : array_like, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + method : {'bruteforce', 'nsgrid', 'pkdtree'}, optional + Keyword to override the automatic guessing of the employed search + method. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` array + such that the distance between them lies within the interval + (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th and the ``j``-th coordinate in `reference`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``) + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and ``reference[pairs[k, 1]]``. + + .. code-block:: python + + pairs, distances = self_capped_distances(reference, max_cutoff, + return_distances=True) + for k, [i, j] in enumerate(pairs): + coord1 = reference[i] + coord2 = reference[j] + distance = distances[k] + + + Note + ----- + Currently supports brute force, grid-based, and periodic KDtree search + methods. + + See Also + -------- + self_distance_array + MDAnalysis.lib.pkdtree.PeriodicKDTree.search + MDAnalysis.lib.nsgrid.FastNS.self_search + + + .. versionchanged:: 0.20.0 + Added `return_distances` keyword. + .. versionchanged:: 1.0.1 + nsgrid was temporarily removed and replaced with pkdtree due to issues + relating to its reliability and accuracy (Issues #2919, #2229, #2345, + #2670, #2930) + .. versionchanged:: 1.0.2 + enabled nsgrid again + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + if box is not None: + box = np.asarray(box, dtype=np.float32) + if box.shape[0] != 6: + raise ValueError("Box Argument is of incompatible type. The " + "dimension should be either None or of the form " + "[lx, ly, lz, alpha, beta, gamma]") + # The check_coords decorator made sure that reference is an + # array of positions. Mypy does not know about that so we have to + # tell it. + reference_positions: npt.NDArray = reference # type: ignore + function = _determine_method_self(reference_positions, + max_cutoff, min_cutoff=min_cutoff, + box=box, method=method) + return function(reference, max_cutoff, min_cutoff=min_cutoff, box=box, + return_distances=return_distances)
+ + +def _determine_method_self(reference: npt.NDArray, max_cutoff: float, + min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + method: Optional[str] = None): + """Guesses the fastest method for capped distance calculations based on the + size of the `reference` coordinate set and the relative size of the target + volume. + + Parameters + ---------- + reference : numpy.ndarray + Reference coordinate array with shape ``(3,)`` or ``(n, 3)``. + max_cutoff : float + Maximum cutoff distance between `reference` coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` coordinates. + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + method : {'bruteforce', 'nsgrid', 'pkdtree'}, optional + Keyword to override the automatic guessing of the employed search + method. + + Returns + ------- + function : callable + The function implementing the guessed (or deliberatly chosen) method. + + + .. versionchanged:: 1.0.1 + nsgrid was temporarily removed and replaced with pkdtree due to issues + relating to its reliability and accuracy (Issues #2919, #2229, #2345, + #2670, #2930) + .. versionchanged:: 1.0.2 + enabled nsgrid again + """ + methods = {'bruteforce': _bruteforce_capped_self, + 'pkdtree': _pkdtree_capped_self, + 'nsgrid': _nsgrid_capped_self, + } + + if method is not None: + return methods[method.lower()] + + if len(reference) < 100: + return methods['bruteforce'] + + if box is None: + min_dim = np.array([reference.min(axis=0)]) + max_dim = np.array([reference.max(axis=0)]) + size = max_dim.max(axis=0) - min_dim.min(axis=0) + elif np.all(box[3:] == 90.0): + size = box[:3] + else: + tribox = triclinic_vectors(box) + size = tribox.max(axis=0) - tribox.min(axis=0) + + if max_cutoff < 0.03*size.min(): + return methods['pkdtree'] + else: + return methods['nsgrid'] + + +@check_coords('reference', enforce_copy=False, reduce_result_if_single=False, + allow_atomgroup=True) +def _bruteforce_capped_self(reference: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, + min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a brute force method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` array which are separated by a distance lying + within the specified cutoff(s). Employs naive distance computations (brute + force) to find relevant distances. Optionally, these distances can be + returned as well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` coordinates. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` array + such that the distance between them lies within the interval + (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th and the ``j``-th coordinate in `reference`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``), optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. versionchanged:: 0.20.0 + Added `return_distances` keyword. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + N = len(reference) + # We're searching within a single coordinate set, so we need at least two + # coordinates to find distances between them. + if N > 1: + distvec = self_distance_array(reference, box=box) + dist = np.full((N, N), np.finfo(np.float64).max, dtype=np.float64) + dist[np.triu_indices(N, 1)] = distvec + + if min_cutoff is not None: + mask = np.where((dist <= max_cutoff) & (dist > min_cutoff)) + else: + mask = np.where((dist <= max_cutoff)) + + if mask[0].size > 0: + pairs = np.c_[mask[0], mask[1]] + distances = dist[mask] + if return_distances: + return pairs, distances + return pairs + + +@check_coords('reference', enforce_copy=False, reduce_result_if_single=False, + allow_atomgroup=True) +def _pkdtree_capped_self(reference: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, + min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a KDtree method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` array which are separated by a distance lying + within the specified cutoff(s). Employs a (periodic) KDtree algorithm to + find relevant distances. Optionally, these distances can be returned as + well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` coordinates. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + return_distances : bool, optional + If set to ``True``, distances will also be returned. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` array + such that the distance between them lies within the interval + (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th and the ``j``-th coordinate in `reference`. + distances : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n_pairs,)``) + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between + the coordinates ``reference[pairs[k, 0]]`` and + ``reference[pairs[k, 1]]``. + + .. versionchanged:: 0.20.0 + Added `return_distances` keyword. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + from .pkdtree import PeriodicKDTree # must be here to avoid circular import + + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + # We're searching within a single coordinate set, so we need at least two + # coordinates to find distances between them. + if len(reference) > 1: + kdtree = PeriodicKDTree(box=box) + cut = max_cutoff if box is not None else None + kdtree.set_coords(reference, cutoff=cut) + _pairs = kdtree.search_pairs(max_cutoff) + if _pairs.size > 0: + pairs = _pairs + if (return_distances or (min_cutoff is not None)): + refA, refB = pairs[:, 0], pairs[:, 1] + distances = calc_bonds(reference[refA], reference[refB], box=box) + if min_cutoff is not None: + idx = distances > min_cutoff + pairs, distances = pairs[idx], distances[idx] + if return_distances: + return pairs, distances + return pairs + + +@check_coords('reference', enforce_copy=False, reduce_result_if_single=False, + allow_atomgroup=True) +def _nsgrid_capped_self(reference: Union[npt.NDArray, 'AtomGroup'], + max_cutoff: float, + min_cutoff: Optional[float] = None, + box: Optional[npt.NDArray] = None, + return_distances: Optional[bool] = True): + """Capped distance evaluations using a grid-based search method. + + Computes and returns an array containing pairs of indices corresponding to + entries in the `reference` array which are separated by a distance lying + within the specified cutoff(s). Employs a grid-based search algorithm to + find relevant distances. Optionally, these distances can be returned as + well. + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + Parameters + ---------- + reference : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Reference coordinate array with shape ``(3,)`` or ``(n, 3)`` (dtype will + be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + max_cutoff : float + Maximum cutoff distance between `reference` coordinates. + min_cutoff : float, optional + Minimum cutoff distance between `reference` coordinates. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + + Returns + ------- + pairs : numpy.ndarray (``dtype=numpy.int64``, ``shape=(n_pairs, 2)``) + Pairs of indices, corresponding to coordinates in the `reference` array + such that the distance between them lies within the interval + (`min_cutoff`, `max_cutoff`]. + Each row in `pairs` is an index pair ``[i, j]`` corresponding to the + ``i``-th and the ``j``-th coordinate in `reference`. + distances : numpy.ndarray, optional + Distances corresponding to each pair of indices. Only returned if + `return_distances` is ``True``. ``distances[k]`` corresponds to the + ``k``-th pair returned in `pairs` and gives the distance between the + coordinates ``reference[pairs[k, 0]]`` and + ``configuration[pairs[k, 1]]``. + + .. versionchanged:: 0.20.0 + Added `return_distances` keyword. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + # Default return values (will be overwritten only if pairs are found): + pairs = np.empty((0, 2), dtype=np.intp) + distances = np.empty((0,), dtype=np.float64) + + # We're searching within a single coordinate set, so we need at least two + # coordinates to find distances between them. + if len(reference) > 1: + if box is None: + # create a pseudobox + # define the max range + # and supply the pseudobox + # along with only one set of coordinates + pseudobox = np.zeros(6, dtype=np.float32) + lmax = reference.max(axis=0) + lmin = reference.min(axis=0) + # Using maximum dimension as the box size + boxsize = (lmax-lmin).max() + # to avoid failures of very close particles + # but with larger cutoff + if boxsize < 2*max_cutoff: + # just enough box size so that NSGrid doesnot fails + sizefactor = 2.2*max_cutoff/boxsize + else: + sizefactor = 1.2 + pseudobox[:3] = sizefactor*boxsize + pseudobox[3:] = 90. + shiftref = reference.copy() + # Extra padding near the origin + shiftref -= lmin - 0.1*boxsize + gridsearch = FastNS(max_cutoff, shiftref, box=pseudobox, pbc=False) + results = gridsearch.self_search() + else: + gridsearch = FastNS(max_cutoff, reference, box=box) + results = gridsearch.self_search() + + pairs = results.get_pairs() + if return_distances or (min_cutoff is not None): + distances = results.get_pair_distances() + if min_cutoff is not None: + idx = distances > min_cutoff + pairs, distances = pairs[idx], distances[idx] + + if return_distances: + return pairs, distances + return pairs + + +
[docs]@check_coords('coords') +def transform_RtoS(coords, box, backend="serial"): + """Transform an array of coordinates from real space to S space (a.k.a. + lambda space) + + S space represents fractional space within the unit cell for this system. + + Reciprocal operation to :meth:`transform_StoR`. + + Parameters + ---------- + coords : numpy.ndarray + A ``(3,)`` or ``(n, 3)`` array of coordinates (dtype is arbitrary, will + be converted to ``numpy.float32`` internally). + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + newcoords : numpy.ndarray (``dtype=numpy.float32``, ``shape=coords.shape``) + An array containing fractional coordiantes. + + + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts (and, likewise, returns) a single coordinate. + """ + if len(coords) == 0: + return coords + boxtype, box = check_box(box) + if boxtype == 'ortho': + box = np.diag(box) + box = box.astype(np.float64) + + # Create inverse matrix of box + # need order C here + inv = np.array(np.linalg.inv(box), order='C') + + _run("coord_transform", args=(coords, inv), backend=backend) + + return coords
+ + +
[docs]@check_coords('coords') +def transform_StoR(coords, box, backend="serial"): + """Transform an array of coordinates from S space into real space. + + S space represents fractional space within the unit cell for this system. + + Reciprocal operation to :meth:`transform_RtoS` + + Parameters + ---------- + coords : numpy.ndarray + A ``(3,)`` or ``(n, 3)`` array of coordinates (dtype is arbitrary, will + be converted to ``numpy.float32`` internally). + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + newcoords : numpy.ndarray (``dtype=numpy.float32``, ``shape=coords.shape``) + An array containing real space coordiantes. + + + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts (and, likewise, returns) a single coordinate. + """ + if len(coords) == 0: + return coords + boxtype, box = check_box(box) + if boxtype == 'ortho': + box = np.diag(box) + box = box.astype(np.float64) + + _run("coord_transform", args=(coords, box), backend=backend) + return coords
+ + +
[docs]@check_coords('coords1', 'coords2', allow_atomgroup=True) +def calc_bonds(coords1: Union[npt.NDArray, 'AtomGroup'], + coords2: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + result: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + """Calculates the bond lengths between pairs of atom positions from the two + coordinate arrays `coords1` and `coords2`, which must contain the same + number of coordinates. ``coords1[i]`` and ``coords2[i]`` represent the + positions of atoms connected by the ``i``-th bond. If single coordinates are + supplied, a single distance will be returned. + + In comparison to :meth:`distance_array` and :meth:`self_distance_array`, + which calculate distances between all possible combinations of coordinates, + :meth:`calc_bonds` only calculates distances between pairs of coordinates, + similar to:: + + numpy.linalg.norm(a - b) for a, b in zip(coords1, coords2) + + If the optional argument `box` is supplied, the minimum image convention is + applied when calculating distances. Either orthogonal or triclinic boxes are + supported. + + If a numpy array of dtype ``numpy.float64`` with shape ``(n,)`` (for ``n`` + coordinate pairs) is provided in `result`, then this preallocated array is + filled. This can speed up calculations. + + Parameters + ---------- + coords1 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` for one half of a + single or ``n`` bonds, respectively (dtype is arbitrary, will be + converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords2 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` for the other half of + a single or ``n`` bonds, respectively (dtype is arbitrary, will be + converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + result : numpy.ndarray, optional + Preallocated result array of dtype ``numpy.float64`` and shape ``(n,)`` + (for ``n`` coordinate pairs). Avoids recreating the array in repeated + function calls. + backend : {'serial', 'OpenMP', 'distopia'}, optional + Keyword selecting the type of acceleration. Defaults to 'serial'. + + Returns + ------- + bondlengths : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n,)``) or + numpy.float64 Array containing the bond lengths between each pair of + coordinates. If two single coordinates were supplied, their distance is + returned as a single number instead of an array. + + + .. versionadded:: 0.8 + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts single coordinates as input. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + .. versionchanged:: 2.5.0 + Can now optionally use the fast distance functions from distopia + """ + numatom = coords1.shape[0] + bondlengths = _check_result_array(result, (numatom,)) + + if numatom > 0: + if box is not None: + boxtype, box = check_box(box) + if boxtype == "ortho": + if backend == 'distopia': + bondlengths = bondlengths.astype(np.float32) + _run( + "calc_bond_distance_ortho", + args=(coords1, coords2, box, bondlengths), + backend=backend, + ) + else: + _run( + "calc_bond_distance_triclinic", + args=(coords1, coords2, box, bondlengths), + backend=backend, + ) + else: + if backend == 'distopia': + bondlengths = bondlengths.astype(np.float32) + _run( + "calc_bond_distance", + args=(coords1, coords2, bondlengths), + backend=backend, + ) + if backend == 'distopia': + bondlengths = bondlengths.astype(np.float64) + return bondlengths
+ + +
[docs]@check_coords('coords1', 'coords2', 'coords3', allow_atomgroup=True) +def calc_angles(coords1: Union[npt.NDArray, 'AtomGroup'], + coords2: Union[npt.NDArray, 'AtomGroup'], + coords3: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + result: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + """Calculates the angles formed between triplets of atom positions from the + three coordinate arrays `coords1`, `coords2`, and `coords3`. All coordinate + arrays must contain the same number of coordinates. + + The coordinates in `coords2` represent the apices of the angles:: + + 2---3 + / + 1 + + Configurations where the angle is undefined (e.g., when coordinates 1 or 3 + of a triplet coincide with coordinate 2) result in a value of **zero** for + that angle. + + If the optional argument `box` is supplied, periodic boundaries are taken + into account when constructing the connecting vectors between coordinates, + i.e., the minimum image convention is applied for the vectors forming the + angles. Either orthogonal or triclinic boxes are supported. + + If a numpy array of dtype ``numpy.float64`` with shape ``(n,)`` (for ``n`` + coordinate triplets) is provided in `result`, then this preallocated array + is filled. This can speed up calculations. + + Parameters + ---------- + coords1 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Array of shape ``(3,)`` or ``(n, 3)`` containing the coordinates of one + side of a single or ``n`` angles, respectively (dtype is arbitrary, will + be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords2 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Array of shape ``(3,)`` or ``(n, 3)`` containing the coordinates of the + apices of a single or ``n`` angles, respectively (dtype is arbitrary, + will be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords3 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Array of shape ``(3,)`` or ``(n, 3)`` containing the coordinates of the + other side of a single or ``n`` angles, respectively (dtype is + arbitrary, will be converted to ``numpy.float32`` internally). + Also accepts an :class:`~MDAnalysis.core.groups.AtomGroup`. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + result : numpy.ndarray, optional + Preallocated result array of dtype ``numpy.float64`` and shape ``(n,)`` + (for ``n`` coordinate triplets). Avoids recreating the array in repeated + function calls. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + angles : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n,)``) or numpy.float64 + Array containing the angles between each triplet of coordinates. Values + are returned in radians (rad). If three single coordinates were + supplied, the angle is returned as a single number instead of an array. + + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Added optional box argument to account for periodic boundaries in + calculation + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts single coordinates as input. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + numatom = coords1.shape[0] + angles = _check_result_array(result, (numatom,)) + + if numatom > 0: + if box is not None: + boxtype, box = check_box(box) + if boxtype == 'ortho': + _run("calc_angle_ortho", + args=(coords1, coords2, coords3, box, angles), + backend=backend) + else: + _run("calc_angle_triclinic", + args=(coords1, coords2, coords3, box, angles), + backend=backend) + else: + _run("calc_angle", + args=(coords1, coords2, coords3, angles), + backend=backend) + + return angles
+ + +
[docs]@check_coords('coords1', 'coords2', 'coords3', 'coords4', allow_atomgroup=True) +def calc_dihedrals(coords1: Union[npt.NDArray, 'AtomGroup'], + coords2: Union[npt.NDArray, 'AtomGroup'], + coords3: Union[npt.NDArray, 'AtomGroup'], + coords4: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + result: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + r"""Calculates the dihedral angles formed between quadruplets of positions + from the four coordinate arrays `coords1`, `coords2`, `coords3`, and + `coords4`, which must contain the same number of coordinates. + + The dihedral angle formed by a quadruplet of positions (1,2,3,4) is + calculated around the axis connecting positions 2 and 3 (i.e., the angle + between the planes spanned by positions (1,2,3) and (2,3,4)):: + + 4 + | + 2-----3 + / + 1 + + If all coordinates lie in the same plane, the cis configuration corresponds + to a dihedral angle of zero, and the trans configuration to :math:`\pi` + radians (180 degrees). Configurations where the dihedral angle is undefined + (e.g., when all coordinates lie on the same straight line) result in a value + of ``nan`` (not a number) for that dihedral. + + If the optional argument `box` is supplied, periodic boundaries are taken + into account when constructing the connecting vectors between coordinates, + i.e., the minimum image convention is applied for the vectors forming the + dihedral angles. Either orthogonal or triclinic boxes are supported. + + If a numpy array of dtype ``numpy.float64`` with shape ``(n,)`` (for ``n`` + coordinate quadruplets) is provided in `result` then this preallocated array + is filled. This can speed up calculations. + + Parameters + ---------- + coords1 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` containing the 1st + positions in dihedrals (dtype is arbitrary, will be converted to + ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords2 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` containing the 2nd + positions in dihedrals (dtype is arbitrary, will be converted to + ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords3 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` containing the 3rd + positions in dihedrals (dtype is arbitrary, will be converted to + ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + coords4 : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` containing the 4th + positions in dihedrals (dtype is arbitrary, will be converted to + ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + box : numpy.ndarray, optional + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + result : numpy.ndarray, optional + Preallocated result array of dtype ``numpy.float64`` and shape ``(n,)`` + (for ``n`` coordinate quadruplets). Avoids recreating the array in + repeated function calls. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + dihedrals : numpy.ndarray (``dtype=numpy.float64``, ``shape=(n,)``) or numpy.float64 + Array containing the dihedral angles formed by each quadruplet of + coordinates. Values are returned in radians (rad). If four single + coordinates were supplied, the dihedral angle is returned as a single + number instead of an array. The range of dihedral angle is + :math:`(-\pi, \pi)`. + + + .. versionadded:: 0.8 + .. versionchanged:: 0.9.0 + Added optional box argument to account for periodic boundaries in + calculation + .. versionchanged:: 0.11.0 + Renamed from calc_torsions to calc_dihedrals + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts single coordinates as input. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + numatom = coords1.shape[0] + dihedrals = _check_result_array(result, (numatom,)) + + if numatom > 0: + if box is not None: + boxtype, box = check_box(box) + if boxtype == 'ortho': + _run("calc_dihedral_ortho", + args=(coords1, coords2, coords3, coords4, box, dihedrals), + backend=backend) + else: + _run("calc_dihedral_triclinic", + args=(coords1, coords2, coords3, coords4, box, dihedrals), + backend=backend) + else: + _run("calc_dihedral", + args=(coords1, coords2, coords3, coords4, dihedrals), + backend=backend) + + return dihedrals
+ + +
[docs]@check_coords('coords', allow_atomgroup=True) +def apply_PBC(coords: Union[npt.NDArray, 'AtomGroup'], + box: Optional[npt.NDArray] = None, + backend: str = "serial") -> npt.NDArray: + """Moves coordinates into the primary unit cell. + + Parameters + ---------- + coords : numpy.ndarray or :class:`~MDAnalysis.core.groups.AtomGroup` + Coordinate array of shape ``(3,)`` or ``(n, 3)`` (dtype is arbitrary, + will be converted to ``numpy.float32`` internally). Also accepts an + :class:`~MDAnalysis.core.groups.AtomGroup`. + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + backend : {'serial', 'OpenMP'}, optional + Keyword selecting the type of acceleration. + + Returns + ------- + newcoords : numpy.ndarray (``dtype=numpy.float32``, ``shape=coords.shape``) + Array containing coordinates that all lie within the primary unit cell + as defined by `box`. + + + .. versionadded:: 0.8 + .. versionchanged:: 0.13.0 + Added *backend* keyword. + .. versionchanged:: 0.19.0 + Internal dtype conversion of input coordinates to ``numpy.float32``. + Now also accepts (and, likewise, returns) single coordinates. + .. versionchanged:: 2.3.0 + Can now accept an :class:`~MDAnalysis.core.groups.AtomGroup` as an + argument in any position and checks inputs using type hinting. + """ + # coords is an array, the check_coords decorator made sure of that. + # Mypy, however, is not aware of that so we have to tell it explicitly. + coords_array: npt.NDArray = coords # type: ignore + + if len(coords_array) == 0: + return coords_array + boxtype, box = check_box(box) + if boxtype == 'ortho': + _run("ortho_pbc", args=(coords_array, box), backend=backend) + else: + _run("triclinic_pbc", args=(coords_array, box), backend=backend) + + return coords_array
+ + +
[docs]@check_coords('vectors', enforce_copy=False, enforce_dtype=False) +def minimize_vectors(vectors: npt.NDArray, box: npt.NDArray) -> npt.NDArray: + """Apply minimum image convention to an array of vectors + + This function is required for calculating the correct vectors between two + points. A naive approach of ``ag1.positions - ag2.positions`` will not + provide the minimum vectors between particles, even if all particles are + within the primary unit cell (box). + + Parameters + ---------- + vectors : numpy.ndarray + Vector array of shape ``(n, 3)``, either float32 or float64. These + represent many vectors (such as between two particles). + box : numpy.ndarray + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + + Returns + ------- + minimized_vectors : numpy.ndarray + Same shape and dtype as input. The vectors from the input, but + minimized according to the size of the box. + + + .. versionadded:: 2.1.0 + """ + boxtype, box = check_box(box) + output = np.empty_like(vectors) + + # use box which is same precision as input vectors + box = box.astype(vectors.dtype) + + if boxtype == 'ortho': + _minimize_vectors_ortho(vectors, box, output) + else: + _minimize_vectors_triclinic(vectors, box.ravel(), output) + + return output
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/log.html b/2.7.0-dev0/_modules/MDAnalysis/lib/log.html new file mode 100644 index 0000000000..a337825a83 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/log.html @@ -0,0 +1,491 @@ + + + + + + MDAnalysis.lib.log — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.log

+# -*- 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-2017 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
+#
+
+
+"""Setting up logging --- :mod:`MDAnalysis.lib.log`
+====================================================
+
+Configure logging for MDAnalysis. Import this module if logging is
+desired in application code.
+
+Logging to a file and the console is set up by default as described
+under `logging to multiple destinations`_.
+
+The top level logger of the library is named *MDAnalysis* by
+convention; a simple logger that writes to the console and logfile can
+be created with the :func:`create` function. This only has to be done
+*once*. For convenience, the default MDAnalysis logger can be created
+with :func:`MDAnalysis.start_logging`::
+
+ import MDAnalysis
+ MDAnalysis.start_logging()
+
+Once this has been done, MDAnalysis will write messages to the logfile
+(named `MDAnalysis.log` by default but this can be changed with the
+optional argument to :func:`~MDAnalysis.start_logging`).
+
+Any code can log to the MDAnalysis logger by using ::
+
+ import logging
+ logger = logging.getLogger('MDAnalysis.MODULENAME')
+
+ # use the logger, for example at info level:
+ logger.info("Starting task ...")
+
+The important point is that the name of the logger begins with
+"MDAnalysis.".
+
+.. _logging to multiple destinations:
+   http://docs.python.org/library/logging.html?#logging-to-multiple-destinations
+
+Note
+----
+The :mod:`logging` module in the standard library contains in depth
+documentation about using logging.
+
+
+Convenience functions
+---------------------
+
+Two convenience functions at the top level make it easy to start and
+stop the default *MDAnalysis* logger.
+
+.. autofunction:: MDAnalysis.start_logging
+.. autofunction:: MDAnalysis.stop_logging
+
+
+Other functions and classes for logging purposes
+------------------------------------------------
+
+
+.. versionchanged:: 2.0.0
+   Deprecated :class:`MDAnalysis.lib.log.ProgressMeter` has now been removed.
+
+.. autogenerated, see Online Docs
+
+"""
+import sys
+import logging
+import re
+
+from tqdm.auto import tqdm
+
+from .. import version
+
+
+
[docs]def start_logging(logfile="MDAnalysis.log", version=version.__version__): + """Start logging of messages to file and console. + + The default logfile is named `MDAnalysis.log` and messages are + logged with the tag *MDAnalysis*. + """ + create("MDAnalysis", logfile=logfile) + logging.getLogger("MDAnalysis").info( + "MDAnalysis %s STARTED logging to %r", version, logfile)
+ + +
[docs]def stop_logging(): + """Stop logging to logfile and console.""" + logger = logging.getLogger("MDAnalysis") + logger.info("MDAnalysis STOPPED logging") + clear_handlers(logger) # this _should_ do the job...
+ + +
[docs]def create(logger_name="MDAnalysis", logfile="MDAnalysis.log"): + """Create a top level logger. + + - The file logger logs everything (including DEBUG). + - The console logger only logs INFO and above. + + Logging to a file and the console as described under `logging to + multiple destinations`_. + + The top level logger of MDAnalysis is named *MDAnalysis*. Note + that we are configuring this logger with console output. If a root + logger also does this then we will get two output lines to the + console. + + .. _logging to multiple destinations: + http://docs.python.org/library/logging.html?#logging-to-multiple-destinations + """ + + logger = logging.getLogger(logger_name) + + logger.setLevel(logging.DEBUG) + + # handler that writes to logfile + logfile_handler = logging.FileHandler(logfile) + logfile_formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s') + logfile_handler.setFormatter(logfile_formatter) + logger.addHandler(logfile_handler) + + # define a Handler which writes INFO messages or higher to the sys.stderr + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + # set a format which is simpler for console use + formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') + console_handler.setFormatter(formatter) + logger.addHandler(console_handler) + + return logger
+ + +
[docs]def clear_handlers(logger): + """clean out handlers in the library top level logger + + (only important for reload/debug cycles...) + + """ + for h in logger.handlers: + logger.removeHandler(h)
+ + +
[docs]class NullHandler(logging.Handler): + """Silent Handler. + + Useful as a default:: + + h = NullHandler() + logging.getLogger("MDAnalysis").addHandler(h) + del h + + see the advice on logging and libraries in + http://docs.python.org/library/logging.html?#configuring-logging-for-a-library + """ +
[docs] def emit(self, record): + pass
+ + +
[docs]class ProgressBar(tqdm): + r"""Display a visual progress bar and time estimate. + + The :class:`ProgressBar` decorates an iterable object, returning an + iterator which acts exactly like the original iterable, but prints a + dynamically updating progressbar every time a value is requested. See the + example below for how to use it when iterating over the frames of a + trajectory. + + + Parameters + ---------- + iterable : iterable, optional + Iterable to decorate with a progressbar. + Leave blank to manually manage the updates. + verbose : bool, optional + If ``True`` (the default) then show the progress bar, *unless* the + `disable` keyword is set to ``True`` (`disable` takes precedence over + `verbose`). If `verbose` is set to ``None`` then the progress bar is + displayed (like ``True``), *unless* this is a non-TTY output device + (see `disable`). + desc : str, optional + Prefix for the progressbar. + total : int or float, optional + The number of expected iterations. If unspecified, + ``len(iterable)`` is used if possible. If ``float("inf")`` or as a last + resort, only basic progress statistics are displayed + (no ETA, no progressbar). + leave : bool, optional + If [default: ``True``], keeps all traces of the progressbar + upon termination of iteration. + If ``None``, will leave only if `position` is 0. + file : :class:`io.TextIOWrapper` or :class:`io.StringIO`, optional + Specifies where to output the progress messages (default: + :data:`sys.stderr`). Uses :meth:`file.write` and :meth:`file.flush` + methods. For encoding, see `write_bytes`. + ncols : int, optional + The width of the entire output message. If specified, + dynamically resizes the progressbar to stay within this bound. + If unspecified, attempts to use environment width. The + fallback is a meter width of 10 and no limit for the counter and + statistics. If 0, will not print any meter (only stats). + mininterval : float, optional + Minimum progress display update interval [default: 0.1] seconds. + maxinterval : float, optional + Maximum progress display update interval [default: 10] seconds. + Automatically adjusts `miniters` to correspond to `mininterval` + after long display update lag. Only works if `dynamic_miniters` + or monitor thread is enabled. + miniters : int or float, optional + Minimum progress display update interval, in iterations. + If 0 and `dynamic_miniters`, will automatically adjust to equal + `mininterval` (more CPU efficient, good for tight loops). + If > 0, will skip display of specified number of iterations. + Tweak this and `mininterval` to get very efficient loops. + If your progress is erratic with both fast and slow iterations + (network, skipping items, etc) you should set miniters=1. + ascii : bool or str, optional + If unspecified or ``False``, use unicode (smooth blocks) to fill + the meter. The fallback is to use ASCII characters " 123456789#". + disable : bool, optional + Whether to disable the entire progressbar wrapper + [default: ``False``]. If set to None, disable on non-TTY. + unit : str, optional + String that will be used to define the unit of each iteration + [default: it]. + unit_scale : bool or int or float, optional + If 1 or True, the number of iterations will be reduced/scaled + automatically and a metric prefix following the + International System of Units standard will be added + (kilo, mega, etc.) [default: ``False``]. If any other non-zero + number, will scale `total` and `n`. + dynamic_ncols : bool, optional + If set, constantly alters `ncols` and `nrows` to the + environment (allowing for window resizes) [default: ``False``]. + smoothing : float, optional + Exponential moving average smoothing factor for speed estimates + (ignored in GUI mode). Ranges from 0 (average speed) to 1 + (current/instantaneous speed) [default: 0.3]. + bar_format : str, optional + Specify a custom bar string formatting. May impact performance. + [default: ``'{l_bar}{bar}{r_bar}'``], where ``l_bar='{desc}: + {percentage:3.0f}%|'`` and ``r_bar='| {n_fmt}/{total_fmt} + [{elapsed}<{remaining}, {rate_fmt}{postfix}]'`` + + Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, + percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, + rate, rate_fmt, rate_noinv, rate_noinv_fmt, + rate_inv, rate_inv_fmt, postfix, unit_divisor, + remaining, remaining_s. + + Note that a trailing ": " is automatically removed after {desc} + if the latter is empty. + initial : int or float, optional + The initial counter value. Useful when restarting a progress bar + [default: 0]. If using :class:`float`, consider specifying ``{n:.3f}`` + or similar in `bar_format`, or specifying `unit_scale`. + position : int, optional + Specify the line offset to print this bar (starting from 0) + Automatic if unspecified. + Useful to manage multiple bars at once (e.g., from threads). + postfix : dict or \*, optional + Specify additional stats to display at the end of the bar. + Calls ``set_postfix(**postfix)`` if possible (:class:`dict`). + unit_divisor : float, optional + [default: 1000], ignored unless `unit_scale` is ``True``. + write_bytes : bool, optional + If (default: ``None``) and `file` is unspecified, + bytes will be written in Python 2. If `True` will also write + bytes. In all other cases will default to unicode. + lock_args : tuple, optional + Passed to `refresh` for intermediate output + (initialisation, iterating, and updating). + nrows : int, optional + The screen height. If specified, hides nested bars outside this + bound. If unspecified, attempts to use environment height. + The fallback is 20. + + Returns + ------- + out : decorated iterator. + + Example + ------- + To get a progress bar when analyzing a trajectory:: + + from MDAnalysis.lib.log import ProgressBar + + ... + + for ts in ProgressBar(u.trajectory): + # perform analysis + + + will produce something similar to :: + + 30%|███████████ | 3/10 [00:13<00:30, 4.42s/it] + + in a terminal or Jupyter notebook. + + + See Also + -------- + The :class:`ProgressBar` is derived from :class:`tqdm.auto.tqdm`; see the + `tqdm documentation`_ for further details on how to use it. + + + + .. _`tqdm documentation`: https://tqdm.github.io/ + + """ + def __init__(self, *args, **kwargs): + """""" + # ^^^^ keep the empty doc string to avoid Sphinx doc errors with the + # original doc string from tqdm.auto.tqdm + verbose = kwargs.pop('verbose', True) + # disable: Whether to disable the entire progressbar wrapper [default: False]. + # If set to None, disable on non-TTY. + # disable should be the opposite of verbose unless it's None + disable = verbose if verbose is None else not verbose + # disable should take precedence over verbose if both are set + kwargs['disable'] = kwargs.pop('disable', disable) + super(ProgressBar, self).__init__(*args, **kwargs)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/mdamath.html b/2.7.0-dev0/_modules/MDAnalysis/lib/mdamath.html new file mode 100644 index 0000000000..b9996c56dc --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/mdamath.html @@ -0,0 +1,594 @@ + + + + + + MDAnalysis.lib.mdamath — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.mdamath

+# -*- 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-2017 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
+#
+
+"""
+Mathematical helper functions --- :mod:`MDAnalysis.lib.mdamath`
+===============================================================
+
+
+Helper functions for common mathematical operations. Some of these functions
+are written in C/cython for higher performance.
+
+Linear algebra
+--------------
+
+.. autofunction:: normal
+.. autofunction:: norm
+.. autofunction:: pdot
+.. autofunction:: pnorm
+.. autofunction:: angle
+.. autofunction:: dihedral
+.. autofunction:: stp
+.. autofunction:: sarrus_det
+.. autofunction:: triclinic_box
+.. autofunction:: triclinic_vectors
+.. autofunction:: box_volume
+
+
+Connectivity
+------------
+
+.. autofunction:: make_whole
+.. autofunction:: find_fragments
+
+
+.. versionadded:: 0.11.0
+.. versionchanged: 1.0.0
+   Unused function :func:`_angle()` has now been removed.
+
+"""
+import numpy as np
+
+from ..exceptions import NoDataError
+from . import util
+from ._cutil import (make_whole, find_fragments, _sarrus_det_single,
+                     _sarrus_det_multiple)
+import numpy.typing as npt
+from typing import Union
+
+# geometric functions
+
+
+
[docs]def norm(v: npt.ArrayLike) -> float: + r"""Calculate the norm of a vector v. + + .. math:: v = \sqrt{\mathbf{v}\cdot\mathbf{v}} + + This version is faster then numpy.linalg.norm because it only works for a + single vector and therefore can skip a lot of the additional fuss + linalg.norm does. + + Parameters + ---------- + v : array_like + 1D array of shape (N) for a vector of length N + + Returns + ------- + float + norm of the vector + + """ + return np.sqrt(np.dot(v, v))
+ + +
[docs]def normal(vec1: npt.ArrayLike, vec2: npt.ArrayLike) -> npt.NDArray: + r"""Returns the unit vector normal to two vectors. + + .. math:: + + \hat{\mathbf{n}} = \frac{\mathbf{v}_1 \times \mathbf{v}_2}{|\mathbf{v}_1 \times \mathbf{v}_2|} + + If the two vectors are collinear, the vector :math:`\mathbf{0}` is returned. + + .. versionchanged:: 0.11.0 + Moved into lib.mdamath + """ + # TODO: enable typing when https://github.com/python/mypy/issues/11347 done + normal: npt.NDArray = np.cross(vec1, vec2) # type: ignore + n = norm(normal) + if n == 0.0: + return normal # returns [0,0,0] instead of [nan,nan,nan] + # ... could also use numpy.nan_to_num(normal/norm(normal)) + return normal / n
+ + +
[docs]def pdot(a: npt.NDArray, b: npt.NDArray) -> npt.NDArray: + """Pairwise dot product. + + ``a`` must be the same shape as ``b``. + + Parameters + ---------- + a: :class:`numpy.ndarray` of shape (N, M) + b: :class:`numpy.ndarray` of shape (N, M) + + Returns + ------- + :class:`numpy.ndarray` of shape (N,) + """ + return np.einsum('ij,ij->i', a, b)
+ + +
[docs]def pnorm(a: npt.NDArray) -> npt.NDArray: + """Euclidean norm of each vector in a matrix + + Parameters + ---------- + a: :class:`numpy.ndarray` of shape (N, M) + + Returns + ------- + :class:`numpy.ndarray` of shape (N,) + """ + return pdot(a, a)**0.5
+ + +
[docs]def angle(a: npt.ArrayLike, b: npt.ArrayLike) -> float: + """Returns the angle between two vectors in radians + + .. versionchanged:: 0.11.0 + Moved into lib.mdamath + .. versionchanged:: 1.0.0 + Changed rounding-off code to use `np.clip()`. Values lower than + -1.0 now return `np.pi` instead of `-np.pi` + """ + x = np.dot(a, b) / (norm(a) * norm(b)) + # catch roundoffs that lead to nan otherwise + x = np.clip(x, -1.0, 1.0) + return np.arccos(x)
+ + +
[docs]def stp(vec1: npt.ArrayLike, vec2: npt.ArrayLike, vec3: npt.ArrayLike) -> float: + r"""Takes the scalar triple product of three vectors. + + Returns the volume *V* of the parallel epiped spanned by the three + vectors + + .. math:: + + V = \mathbf{v}_3 \cdot (\mathbf{v}_1 \times \mathbf{v}_2) + + .. versionchanged:: 0.11.0 + Moved into lib.mdamath + """ + # TODO: enable typing when https://github.com/python/mypy/issues/11347 done + return np.dot(vec3, np.cross(vec1, vec2)) # type: ignore
+ + +
[docs]def dihedral(ab: npt.ArrayLike, bc: npt.ArrayLike, cd: npt.ArrayLike) -> float: + r"""Returns the dihedral angle in radians between vectors connecting A,B,C,D. + + The dihedral measures the rotation around bc:: + + ab + A---->B + \ bc + _\' + C---->D + cd + + The dihedral angle is restricted to the range -π <= x <= π. + + .. versionadded:: 0.8 + .. versionchanged:: 0.11.0 + Moved into lib.mdamath + """ + x = angle(normal(ab, bc), normal(bc, cd)) + return (x if stp(ab, bc, cd) <= 0.0 else -x)
+ + +
[docs]def sarrus_det(matrix: npt.NDArray) -> Union[float, npt.NDArray]: + """Computes the determinant of a 3x3 matrix according to the + `rule of Sarrus`_. + + If an array of 3x3 matrices is supplied, determinants are computed per + matrix and returned as an appropriately shaped numpy array. + + .. _rule of Sarrus: + https://en.wikipedia.org/wiki/Rule_of_Sarrus + + Parameters + ---------- + matrix : numpy.ndarray + An array of shape ``(..., 3, 3)`` with the 3x3 matrices residing in the + last two dimensions. + + Returns + ------- + det : float or numpy.ndarray + The determinant(s) of `matrix`. + If ``matrix.shape == (3, 3)``, the determinant will be returned as a + scalar. If ``matrix.shape == (..., 3, 3)``, the determinants will be + returned as a :class:`numpy.ndarray` of shape ``(...,)`` and dtype + ``numpy.float64``. + + Raises + ------ + ValueError: + If `matrix` has less than two dimensions or its last two dimensions + are not of shape ``(3, 3)``. + + + .. versionadded:: 0.20.0 + """ + m = matrix.astype(np.float64) + shape = m.shape + ndim = m.ndim + if ndim < 2 or shape[-2:] != (3, 3): + raise ValueError("Invalid matrix shape: must be (3, 3) or (..., 3, 3), " + "got {}.".format(shape)) + if ndim == 2: + return _sarrus_det_single(m) + return _sarrus_det_multiple(m.reshape((-1, 3, 3))).reshape(shape[:-2])
+ + +
[docs]def triclinic_box(x: npt.ArrayLike, y: npt.ArrayLike, z: npt.ArrayLike) -> npt.NDArray: + """Convert the three triclinic box vectors to + ``[lx, ly, lz, alpha, beta, gamma]``. + + If the resulting box is invalid, i.e., any box length is zero or negative, + or any angle is outside the open interval ``(0, 180)``, a zero vector will + be returned. + + All angles are in degrees and defined as follows: + + * ``alpha = angle(y,z)`` + * ``beta = angle(x,z)`` + * ``gamma = angle(x,y)`` + + Parameters + ---------- + x : array_like + Array of shape ``(3,)`` representing the first box vector + y : array_like + Array of shape ``(3,)`` representing the second box vector + z : array_like + Array of shape ``(3,)`` representing the third box vector + + Returns + ------- + numpy.ndarray + A numpy array of shape ``(6,)`` and dtype ``np.float32`` providing the + unitcell dimensions in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`:\n + ``[lx, ly, lz, alpha, beta, gamma]``.\n + Invalid boxes are returned as a zero vector. + + Note + ---- + Definition of angles: http://en.wikipedia.org/wiki/Lattice_constant + + See Also + -------- + :func:`~MDAnalysis.lib.mdamath.triclinic_vectors` + + + .. versionchanged:: 0.20.0 + Calculations are performed in double precision and invalid box vectors + result in an all-zero box. + """ + x = np.asarray(x, dtype=np.float64) + y = np.asarray(y, dtype=np.float64) + z = np.asarray(z, dtype=np.float64) + lx = norm(x) + ly = norm(y) + lz = norm(z) + with np.errstate(invalid="ignore"): + alpha = np.rad2deg(np.arccos(np.dot(y, z) / (ly * lz))) + beta = np.rad2deg(np.arccos(np.dot(x, z) / (lx * lz))) + gamma = np.rad2deg(np.arccos(np.dot(x, y) / (lx * ly))) + box = np.array([lx, ly, lz, alpha, beta, gamma], dtype=np.float32) + # Only positive edge lengths and angles in (0, 180) are allowed: + if np.all(box > 0.0) and alpha < 180.0 and beta < 180.0 and gamma < 180.0: + return box + # invalid box, return zero vector: + return np.zeros(6, dtype=np.float32)
+ + +
[docs]def triclinic_vectors(dimensions: npt.ArrayLike, + dtype: npt.DTypeLike = np.float32) -> npt.NDArray: + """Convert ``[lx, ly, lz, alpha, beta, gamma]`` to a triclinic matrix + representation. + + Original `code by Tsjerk Wassenaar`_ posted on the Gromacs mailinglist. + + If `dimensions` indicates a non-periodic system (i.e., all lengths are + zero), zero vectors are returned. The same applies for invalid `dimensions`, + i.e., any box length is zero or negative, or any angle is outside the open + interval ``(0, 180)``. + + .. _code by Tsjerk Wassenaar: + http://www.mail-archive.com/gmx-users@gromacs.org/msg28032.html + + Parameters + ---------- + dimensions : array_like + Unitcell dimensions provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`:\n + ``[lx, ly, lz, alpha, beta, gamma]``. + dtype: numpy.dtype + The data type of the returned box matrix. + + Returns + ------- + box_matrix : numpy.ndarray + A numpy array of shape ``(3, 3)`` and dtype `dtype`, + with ``box_matrix[0]`` containing the first, ``box_matrix[1]`` the + second, and ``box_matrix[2]`` the third box vector. + + Notes + ----- + * The first vector is guaranteed to point along the x-axis, i.e., it has the + form ``(lx, 0, 0)``. + * The second vector is guaranteed to lie in the x/y-plane, i.e., its + z-component is guaranteed to be zero. + * If any box length is negative or zero, or if any box angle is zero, the + box is treated as invalid and an all-zero-matrix is returned. + + + .. versionchanged:: 0.7.6 + Null-vectors are returned for non-periodic (or missing) unit cell. + .. versionchanged:: 0.20.0 + * Calculations are performed in double precision and zero vectors are + also returned for invalid boxes. + * Added optional output dtype parameter. + """ + dim = np.asarray(dimensions, dtype=np.float64) + lx, ly, lz, alpha, beta, gamma = dim + # Only positive edge lengths and angles in (0, 180) are allowed: + if not (np.all(dim > 0.0) and + alpha < 180.0 and beta < 180.0 and gamma < 180.0): + # invalid box, return zero vectors: + box_matrix = np.zeros((3, 3), dtype=dtype) + # detect orthogonal boxes: + elif alpha == beta == gamma == 90.0: + # box is orthogonal, return a diagonal matrix: + box_matrix = np.diag(dim[:3].astype(dtype, copy=False)) + # we have a triclinic box: + else: + box_matrix = np.zeros((3, 3), dtype=np.float64) + box_matrix[0, 0] = lx + # Use exact trigonometric values for right angles: + if alpha == 90.0: + cos_alpha = 0.0 + else: + cos_alpha = np.cos(np.deg2rad(alpha)) + if beta == 90.0: + cos_beta = 0.0 + else: + cos_beta = np.cos(np.deg2rad(beta)) + if gamma == 90.0: + cos_gamma = 0.0 + sin_gamma = 1.0 + else: + gamma = np.deg2rad(gamma) + cos_gamma = np.cos(gamma) + sin_gamma = np.sin(gamma) + box_matrix[1, 0] = ly * cos_gamma + box_matrix[1, 1] = ly * sin_gamma + box_matrix[2, 0] = lz * cos_beta + box_matrix[2, 1] = lz * (cos_alpha - cos_beta * cos_gamma) / sin_gamma + box_matrix[2, 2] = np.sqrt(lz * lz - box_matrix[2, 0] ** 2 - + box_matrix[2, 1] ** 2) + # The discriminant of the above square root is only negative or zero for + # triplets of box angles that lead to an invalid box (i.e., the sum of + # any two angles is less than or equal to the third). + # We don't need to explicitly test for np.nan here since checking for a + # positive value already covers that. + if box_matrix[2, 2] > 0.0: + # all good, convert to correct dtype: + box_matrix = box_matrix.astype(dtype, copy=False) + else: + # invalid box, return zero vectors: + box_matrix = np.zeros((3, 3), dtype=dtype) + return box_matrix
+ + +
[docs]def box_volume(dimensions: npt.ArrayLike) -> float: + """Return the volume of the unitcell described by `dimensions`. + + The volume is computed as the product of the box matrix trace, with the + matrix obtained from :func:`triclinic_vectors`. + If the box is invalid, i.e., any box length is zero or negative, or any + angle is outside the open interval ``(0, 180)``, the resulting volume will + be zero. + + Parameters + ---------- + dimensions : array_like + Unitcell dimensions provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`:\n + ``[lx, ly, lz, alpha, beta, gamma]``. + + Returns + ------- + volume : float + The volume of the unitcell. Will be zero for invalid boxes. + + + .. versionchanged:: 0.20.0 + Calculations are performed in double precision and zero is returned + for invalid dimensions. + """ + dim = np.asarray(dimensions, dtype=np.float64) + lx, ly, lz, alpha, beta, gamma = dim + if alpha == beta == gamma == 90.0 and lx > 0 and ly > 0 and lz > 0: + # valid orthogonal box, volume is the product of edge lengths: + volume = lx * ly * lz + else: + # triclinic or invalid box, volume is trace product of box matrix + # (invalid boxes are set to all zeros by triclinic_vectors): + tri_vecs = triclinic_vectors(dim, dtype=np.float64) + volume = tri_vecs[0, 0] * tri_vecs[1, 1] * tri_vecs[2, 2] + return volume
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.html b/2.7.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.html new file mode 100644 index 0000000000..6c1dfe6c36 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.html @@ -0,0 +1,704 @@ + + + + + + MDAnalysis.lib.picklable_file_io — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.lib.picklable_file_io

+# -*- 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-2017 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
+#
+"""
+Picklable read-only I/O classes --- :mod:`MDAnalysis.lib.picklable_file_io`
+===========================================================================
+
+Provide with an interface for pickling read-only IO file object.
+These classes are used for further pickling :class:`MDAnalysis.core.universe`
+in a object composition approach.
+
+.. autoclass:: FileIOPicklable
+   :members:
+
+.. autoclass:: BufferIOPicklable
+   :members:
+
+.. autoclass:: TextIOPicklable
+   :members:
+
+.. autoclass:: BZ2Picklable
+   :members:
+
+.. autoclass:: GzipPicklable
+   :members:
+
+.. autofunction:: pickle_open
+
+.. autofunction:: bz2_pickle_open
+
+.. autofunction:: gzip_pickle_open
+
+
+.. versionadded:: 2.0.0
+"""
+import io
+import os
+
+import bz2
+import gzip
+
+
+
[docs]class FileIOPicklable(io.FileIO): + """File object (read-only) that can be pickled. + + This class provides a file-like object (as returned by :func:`open`, + namely :class:`io.FileIO`) that, unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename and position of the open file handle in + the file are saved. On unpickling, the file is opened by filename, + and the file is seeked to the saved position. + This means that for a successful unpickle, the original file still has to + be accessible with its filename. + + Note + ---- + This class only supports reading files in binary mode. If you need to open + a file in text mode, use the :func:`pickle_open`. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode : str + only reading ('r') mode works. It exists to be consistent + with a wider API. + + Example + ------- + :: + + >>> file = FileIOPicklable(PDB) + >>> file.readline() + >>> file_pickled = pickle.loads(pickle.dumps(file)) + >>> print(file.tell(), file_pickled.tell()) + 55 55 + + See Also + --------- + TextIOPicklable + BufferIOPicklable + + + .. versionadded:: 2.0.0 + """ + def __init__(self, name, mode='r'): + self._mode = mode + super().__init__(name, mode) + + def __getstate__(self): + if self._mode != 'r': + raise RuntimeError("Can only pickle files that were opened " + "in read mode, not {}".format(self._mode)) + return self.name, self.tell() + + def __setstate__(self, args): + name = args[0] + super().__init__(name, mode='r') + self.seek(args[1])
+ + +
[docs]class BufferIOPicklable(io.BufferedReader): + """A picklable buffer object for read-only FileIO object. + + This class provides a buffered :class:`io.BufferedReader` + that can be pickled. + Note that this only works in read mode. + + Parameters + ---------- + raw : FileIO object + + Example + ------- + :: + + file = FileIOPicklable('filename') + buffer_wrapped = BufferIOPicklable(file) + + See Also + --------- + FileIOPicklable + TextIOPicklable + + + .. versionadded:: 2.0.0 + """ + def __init__(self, raw): + super().__init__(raw) + self.raw_class = raw.__class__ + + def __getstate__(self): + return self.raw_class, self.name, self.tell() + + def __setstate__(self, args): + raw_class = args[0] + name = args[1] + raw = raw_class(name) + super().__init__(raw) + self.seek(args[2])
+ + +
[docs]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 + + Example + ------- + :: + + file = FileIOPicklable('filename') + text_wrapped = TextIOPicklable(file) + + See Also + --------- + FileIOPicklable + BufferIOPicklable + + + .. versionadded:: 2.0.0 + """ + def __init__(self, raw): + super().__init__(raw) + self.raw_class = raw.__class__ + + def __getstate__(self): + try: + name = self.name + except AttributeError: + # This is kind of ugly--BZ2File does not save its name. + name = self.buffer._fp.name + return self.raw_class, name + + def __setstate__(self, args): + raw_class = args[0] + name = args[1] + # 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)
+ + +
[docs]class BZ2Picklable(bz2.BZ2File): + """File object (read-only) for bzip2 (de)compression that can be pickled. + + This class provides a file-like object (as returned by :func:`bz2.open`, + namely :class:`bz2.BZ2File`) that, unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename and position of the open file handle in + the file are saved. On unpickling, the file is opened by filename, + and the file is seeked to the saved position. + This means that for a successful unpickle, the original file still has to + be accessible with its filename. + + Note + ---- + This class only supports reading files in binary mode. If you need to open + to open a compressed file in text mode, use :func:`bz2_pickle_open`. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode : str + can only be 'r', 'rb' to make pickle work. + + Example + ------- + :: + + >>> file = BZ2Picklable(XYZ_bz2) + >>> file.readline() + >>> file_pickled = pickle.loads(pickle.dumps(file)) + >>> print(file.tell(), file_pickled.tell()) + 5 5 + + See Also + --------- + FileIOPicklable + BufferIOPicklable + TextIOPicklable + GzipPicklable + + + .. versionadded:: 2.0.0 + """ + def __init__(self, name, mode='rb'): + self._bz_mode = mode + super().__init__(name, mode) + + def __getstate__(self): + if not self._bz_mode.startswith('r'): + raise RuntimeError("Can only pickle files that were opened " + "in read mode, not {}".format(self._bz_mode)) + return self._fp.name, self.tell() + + def __setstate__(self, args): + super().__init__(args[0]) + self.seek(args[1])
+ + +
[docs]class GzipPicklable(gzip.GzipFile): + """Gzip file object (read-only) that can be pickled. + + This class provides a file-like object (as returned by :func:`gzip.open`, + namely :class:`gzip.GzipFile`) that, unlike standard Python file objects, + can be pickled. Only read mode is supported. + + When the file is pickled, filename and position of the open file handle in + the file are saved. On unpickling, the file is opened by filename, + and the file is seeked to the saved position. + This means that for a successful unpickle, the original file still has to + be accessible with its filename. + + Note + ---- + This class only supports reading files in binary mode. If you need to open + to open a compressed file in text mode, use the :func:`gzip_pickle_open`. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode : str + can only be 'r', 'rb' to make pickle work. + + Example + ------- + :: + + >>> file = GzipPicklable(MMTF_gz) + >>> file.readline() + >>> file_pickled = pickle.loads(pickle.dumps(file)) + >>> print(file.tell(), file_pickled.tell()) + 1218 1218 + + See Also + --------- + FileIOPicklable + BufferIOPicklable + TextIOPicklable + BZ2Picklable + + + .. versionadded:: 2.0.0 + """ + def __init__(self, name, mode='rb'): + self._gz_mode = mode + super().__init__(name, mode) + + def __getstate__(self): + if not self._gz_mode.startswith('r'): + raise RuntimeError("Can only pickle files that were opened " + "in read mode, not {}".format(self._gz_mode)) + return self.name, self.tell() + + def __setstate__(self, args): + super().__init__(args[0]) + self.seek(args[1])
+ + +
[docs]def pickle_open(name, mode='rt'): + """Open file and return a stream with pickle function implemented. + + This function returns a FileIOPicklable object wrapped in a + BufferIOPicklable class when given the "rb" reading mode, + or a FileIOPicklable object wrapped in a TextIOPicklable class with the "r" + or "rt" reading mode. It can be used as a context manager, and replace the + built-in :func:`open` function in read mode that only returns an + unpicklable file object. + In order to serialize a :class:`MDAnalysis.core.Universe`, this function + can used to open trajectory/topology files. This object composition is more + flexible and easier than class inheritance to implement pickling + for new readers. + + Note + ---- + Can be only used with read mode. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode: {'r', 'rt', 'rb'} (optional) + 'r': open for reading in text mode; + 'rt': read in text mode (default); + 'rb': read in binary mode; + + Returns + ------- + stream-like object: BufferIOPicklable or TextIOPicklable + when mode is 'r' or 'rt', returns TextIOPicklable; + when mode is 'rb', returns BufferIOPicklable + + Raises + ------ + ValueError + if `mode` is not one of the allowed read modes + + Examples + ------- + open as context manager:: + + with pickle_open('filename') as f: + line = f.readline() + + open as function:: + + f = pickle_open('filename') + line = f.readline() + f.close() + + See Also + -------- + :func:`MDAnalysis.lib.util.anyopen` + :func:`io.open` + + + .. versionadded:: 2.0.0 + """ + if mode not in {'r', 'rt', 'rb'}: + raise ValueError("Only read mode ('r', 'rt', 'rb') " + "files can be pickled.") + name = os.fspath(name) + raw = FileIOPicklable(name) + if mode == 'rb': + return BufferIOPicklable(raw) + elif mode in {'r', 'rt'}: + return TextIOPicklable(raw)
+ + +
[docs]def bz2_pickle_open(name, mode='rb'): + """Open a bzip2-compressed file in binary or text mode + with pickle function implemented. + + This function returns a BZ2Picklable object when given the "rb" or "r" + reading mode, or a BZ2Picklable object wrapped in a TextIOPicklable class + with the "rt" reading mode. + It can be used as a context manager, and replace the built-in + :func:`bz2.open` function in read mode that only returns an + unpicklable file object. + + Note + ---- + Can be only used with read mode. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode: {'r', 'rt', 'rb'} (optional) + 'r': open for reading in binary mode; + 'rt': read in text mode; + 'rb': read in binary mode; (default) + + Returns + ------- + stream-like object: BZ2Picklable or TextIOPicklable + when mode is 'rt', returns TextIOPicklable; + when mode is 'r' or 'rb', returns BZ2Picklable + + Raises + ------ + ValueError + if `mode` is not one of the allowed read modes + + Examples + ------- + open as context manager:: + + with bz2_pickle_open('filename') as f: + line = f.readline() + + open as function:: + + f = bz2_pickle_open('filename') + line = f.readline() + f.close() + + See Also + -------- + :func:`io.open` + :func:`bz2.open` + :func:`MDAnalysis.lib.util.anyopen` + :func:`MDAnalysis.lib.picklable_file_io.pickle_open` + :func:`MDAnalysis.lib.picklable_file_io.gzip_pickle_open` + + + .. versionadded:: 2.0.0 + """ + if mode not in {'r', 'rt', 'rb'}: + raise ValueError("Only read mode ('r', 'rt', 'rb') " + "files can be pickled.") + bz_mode = mode.replace("t", "") + binary_file = BZ2Picklable(name, bz_mode) + if "t" in mode: + return TextIOPicklable(binary_file) + else: + return binary_file
+ + +
[docs]def gzip_pickle_open(name, mode='rb'): + """Open a gzip-compressed file in binary or text mode + with pickle function implemented. + + This function returns a GzipPicklable object when given the "rb" or "r" + reading mode, or a GzipPicklable object wrapped in a TextIOPicklable class + with the "rt" reading mode. + It can be used as a context manager, and replace the built-in + :func:`gzip.open` function in read mode that only returns an + unpicklable file object. + + Note + ---- + Can be only used with read mode. + + Parameters + ---------- + name : str + either a text or byte string giving the name (and the path + if the file isn't in the current working directory) of the file to + be opened. + mode: {'r', 'rt', 'rb'} (optional) + 'r': open for reading in binary mode; + 'rt': read in text mode; + 'rb': read in binary mode; (default) + + Returns + ------- + stream-like object: GzipPicklable or TextIOPicklable + when mode is 'rt', returns TextIOPicklable; + when mode is 'r' or 'rb', returns GzipPicklable + + Raises + ------ + ValueError + if `mode` is not one of the allowed read modes + + Examples + ------- + open as context manager:: + + with gzip_pickle_open('filename') as f: + line = f.readline() + + open as function:: + + f = gzip_pickle_open('filename') + line = f.readline() + f.close() + + See Also + -------- + :func:`io.open` + :func:`gzip.open` + :func:`MDAnalysis.lib.util.anyopen` + :func:`MDAnalysis.lib.picklable_file_io.pickle_open` + :func:`MDAnalysis.lib.picklable_file_io.bz2_pickle_open` + + + .. versionadded:: 2.0.0 + """ + if mode not in {'r', 'rt', 'rb'}: + raise ValueError("Only read mode ('r', 'rt', 'rb') " + "files can be pickled.") + gz_mode = mode.replace("t", "") + binary_file = GzipPicklable(name, gz_mode) + if "t" in mode: + return TextIOPicklable(binary_file) + else: + return binary_file
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/pkdtree.html b/2.7.0-dev0/_modules/MDAnalysis/lib/pkdtree.html new file mode 100644 index 0000000000..56bb9972ef --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/pkdtree.html @@ -0,0 +1,470 @@ + + + + + + MDAnalysis.lib.pkdtree — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.pkdtree

+# -*- 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-2017 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
+#
+"""
+PeriodicKDTree --- :mod:`MDAnalysis.lib.pkdtree`
+================================================
+
+This module contains a class to allow searches on a KDTree involving periodic
+boundary conditions.
+"""
+
+import itertools
+import numpy as np
+from scipy.spatial import cKDTree
+
+from ._cutil import unique_int_1d
+from ._augment import augment_coordinates, undo_augment
+from .util import unique_rows
+
+from MDAnalysis.lib.distances import apply_PBC
+import numpy.typing as npt
+from typing import Optional, ClassVar
+
+__all__ = [
+    'PeriodicKDTree'
+]
+
+
+
[docs]class PeriodicKDTree(object): + """Wrapper around :class:`scipy.spatial.cKDTree` + + Creates an object which can handle periodic as well as + non periodic boundary condtions depending on the parameters + provided while constructing the tree. + + To enable periodic boundary conditions, box dimensions must be + provided. Periodic Boundary conditions are implemented by creating + duplicates of the particles which are within the specified cutoff + distance from the boundary. These duplicates along with the + original particle coordinates are used with the cKDTree without + any special treatment due to PBC beyond this point. The final + results after any operation with duplicate particle indices can be + traced back to the original particle using the + :func:`MDAnalysis.lib.distances.undo_augment` function. + + """ + + def __init__(self, box: Optional[npt.ArrayLike] = None, leafsize: int = 10) -> None: + """ + + Parameters + ---------- + box : array-like or ``None``, optional, default ``None`` + Simulation cell dimensions in the form of + :attr:`MDAnalysis.trajectory.timestep.Timestep.dimensions` when + periodic boundary conditions should be taken into account for + the calculation of contacts. + leafsize : int (optional) + Number of entries in leafs of the KDTree. If you suffer poor + performance you can play around with this number. Increasing the + `leafsize` will speed up the construction of the KDTree but + slow down the search. + + """ + self.leafsize = leafsize + self.dim = 3 # 3D systems + self.box = box + self._built = False + self.cutoff: Optional[float] = None + + @property + def pbc(self): + """Flag to indicate the presence of periodic boundaries. + + - ``True`` if PBC are taken into account + - ``False`` if no unitcell dimension is available. + + This is a managed attribute and can only be read. + """ + return self.box is not None + +
[docs] def set_coords(self, coords: npt.ArrayLike, cutoff: Optional[float] = None) -> None: + """Constructs KDTree from the coordinates + + Wrapping of coordinates to the primary unit cell is enforced + before any distance evaluations. If periodic boundary conditions + are enabled, then duplicate particles are generated in the + vicinity of the box. An additional array `mapping` is also + generated which can be later used to trace the origin of + duplicate particle coordinates. + + For non-periodic calculations, cutoff should not be provided + the parameter is only required for periodic calculations. + + Parameters + ---------- + coords: array_like + Coordinate array of shape ``(N, 3)`` for N atoms. + cutoff: float + Specified cutoff distance to create duplicate images + Typically equivalent to the desired search radius + or the maximum of the desired cutoff radius. Relevant images + corresponding to every atom which lies + within ``cutoff`` distance from either of the box boundary + will be generated. + + + See Also + -------- + MDAnalysis.lib.distances.augment_coordinates + + """ + + # set coords dtype to float32 + # augment coordinates will work only with float32 + coords = np.asarray(coords, dtype=np.float32) + + # If no cutoff distance is provided but PBC aware + if self.pbc: + self.cutoff = cutoff + if cutoff is None: + raise RuntimeError('Provide a cutoff distance' + ' with tree.set_coords(...)') + + # Bring the coordinates in the central cell + self.coords = apply_PBC(coords, self.box) + # generate duplicate images + self.aug, self.mapping = augment_coordinates(self.coords, + self.box, + cutoff) + # Images + coords + self.all_coords = np.concatenate([self.coords, self.aug]) + self.ckdt = cKDTree(self.all_coords, leafsize=self.leafsize) + else: + # if cutoff distance is provided for non PBC calculations + if cutoff is not None: + raise RuntimeError('Donot provide cutoff distance for' + ' non PBC aware calculations') + self.coords = coords + self.ckdt = cKDTree(self.coords, self.leafsize) + self._built = True
+ +
[docs] def search(self, centers: npt.ArrayLike, radius: float) -> npt.NDArray: + """Search all points within radius from centers and their periodic images. + + All the centers coordinates are wrapped around the central cell + to enable distance evaluations from points in the tree + and their images. + + Parameters + ---------- + centers: array_like (N,3) + coordinate array to search for neighbors + radius: float + maximum distance to search for neighbors. + """ + + if not self._built: + raise RuntimeError('Unbuilt tree. Run tree.set_coords(...)') + + centers = np.asarray(centers) + if centers.shape == (self.dim, ): + centers = centers.reshape((1, self.dim)) + + # Sanity check + if self.pbc: + if self.cutoff is None: + raise ValueError( + "Cutoff needs to be provided when working with PBC.") + if self.cutoff < radius: + raise RuntimeError('Set cutoff greater or equal to the radius.') + # Bring all query points to the central cell + wrapped_centers = apply_PBC(centers, self.box) + indices = list(self.ckdt.query_ball_point(wrapped_centers, + radius)) + self._indices = np.array(list( + itertools.chain.from_iterable(indices)), + dtype=np.intp) + if self._indices.size > 0: + self._indices = undo_augment(self._indices, + self.mapping, + len(self.coords)) + else: + wrapped_centers = np.asarray(centers) + indices = list(self.ckdt.query_ball_point(wrapped_centers, + radius)) + self._indices = np.array(list( + itertools.chain.from_iterable(indices)), + dtype=np.intp) + self._indices = np.asarray(unique_int_1d(self._indices)) + return self._indices
+ +
[docs] def get_indices(self) -> npt.NDArray: + """Return the neighbors from the last query. + + Returns + ------ + indices : NDArray + neighbors for the last query points and search radius + """ + return self._indices
+ +
[docs] def search_pairs(self, radius: float) -> npt.NDArray: + """Search all the pairs within a specified radius + + Parameters + ---------- + radius : float + Maximum distance between pairs of coordinates + + Returns + ------- + pairs : array + Indices of all the pairs which are within the specified radius + """ + if not self._built: + raise RuntimeError(' Unbuilt Tree. Run tree.set_coords(...)') + + if self.pbc: + if self.cutoff is None: + raise ValueError( + "Cutoff needs to be provided when working with PBC.") + if self.cutoff < radius: + raise RuntimeError('Set cutoff greater or equal to the radius.') + + pairs = np.array(list(self.ckdt.query_pairs(radius)), dtype=np.intp) + if self.pbc: + if len(pairs) > 1: + pairs[:, 0] = undo_augment(pairs[:, 0], self.mapping, + len(self.coords)) + pairs[:, 1] = undo_augment(pairs[:, 1], self.mapping, + len(self.coords)) + if pairs.size > 0: + # First sort the pairs then pick the unique pairs + pairs = np.sort(pairs, axis=1) + pairs = unique_rows(pairs) + return pairs
+ +
[docs] def search_tree(self, centers: npt.ArrayLike, radius: float) -> np.ndarray: + """ + Searches all the pairs within `radius` between `centers` + and ``coords`` + + ``coords`` are the already initialized coordinates in the tree + during :meth:`set_coords`. + ``centers`` are wrapped around the primary unit cell + if PBC is desired. Minimum image convention (PBC) is + activated if the `box` argument is provided during + class initialization + + Parameters + ---------- + centers: array_like (N,3) + coordinate array to search for neighbors + radius: float + maximum distance to search for neighbors. + + Returns + ------- + pairs : array + all the pairs between ``coords`` and ``centers`` + + Note + ---- + This method constructs another tree from the ``centers`` + and queries the previously built tree (built in + :meth:`set_coords`) + """ + + if not self._built: + raise RuntimeError('Unbuilt tree. Run tree.set_coords(...)') + + centers = np.asarray(centers) + if centers.shape == (self.dim, ): + centers = centers.reshape((1, self.dim)) + + # Sanity check + if self.pbc: + if self.cutoff is None: + raise ValueError( + "Cutoff needs to be provided when working with PBC.") + if self.cutoff < radius: + raise RuntimeError('Set cutoff greater or equal to the radius.') + # Bring all query points to the central cell + wrapped_centers = apply_PBC(centers, self.box) + other_tree = cKDTree(wrapped_centers, leafsize=self.leafsize) + pairs = other_tree.query_ball_tree(self.ckdt, radius) + pairs = np.array([[i, j] for i, lst in enumerate(pairs) for j in lst], + dtype=np.intp) + if pairs.size > 0: + pairs[:, 1] = undo_augment(pairs[:, 1], + self.mapping, + len(self.coords)) + else: + other_tree = cKDTree(centers, leafsize=self.leafsize) + pairs = other_tree.query_ball_tree(self.ckdt, radius) + pairs = np.array([[i, j] for i, lst in enumerate(pairs) for j in lst], + dtype=np.intp) + if pairs.size > 0: + pairs = unique_rows(pairs) + return pairs
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/transformations.html b/2.7.0-dev0/_modules/MDAnalysis/lib/transformations.html new file mode 100644 index 0000000000..4774319eff --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/transformations.html @@ -0,0 +1,2093 @@ + + + + + + MDAnalysis.lib.transformations — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.lib.transformations

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding: utf-8 -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+
+# transformations.py
+
+# Copyright (c) 2006, Christoph Gohlke
+# Copyright (c) 2006-2010, The Regents of the University of California
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of the copyright holders nor the names of any
+#   contributors may be used to endorse or promote products derived
+#   from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+"""
+Homogeneous Transformation Matrices and Quaternions --- :mod:`MDAnalysis.lib.transformations`
+==============================================================================================
+
+A library for calculating 4x4 matrices for translating, rotating, reflecting,
+scaling, shearing, projecting, orthogonalizing, and superimposing arrays of
+3D homogeneous coordinates as well as for converting between rotation matrices,
+Euler angles, and quaternions. Also includes an Arcball control object and
+functions to decompose transformation matrices.
+
+:Authors:
+  `Christoph Gohlke <http://www.lfd.uci.edu/~gohlke/>`__,
+  Laboratory for Fluorescence Dynamics, University of California, Irvine
+:Version: 2010.05.10
+:Licence: BSD 3-clause
+
+Requirements
+------------
+
+* `Python 2.6 or 3.1 <http://www.python.org>`__
+* `Numpy 1.4 <http://numpy.scipy.org>`__
+* `transformations.c 2010.04.10 <http://www.lfd.uci.edu/~gohlke/>`__
+  (optional implementation of some functions in C)
+
+Notes
+-----
+
+The API is not stable yet and is expected to change between revisions.
+
+This Python code is not optimized for speed. Refer to the transformations.c
+module for a faster implementation of some functions.
+
+Documentation in HTML format can be generated with epydoc.
+
+Matrices (M) can be inverted using ``numpy.linalg.inv(M)``, concatenated using
+``numpy.dot(M0, M1)``, or used to transform homogeneous coordinates (v) using
+``numpy.dot(M, v)`` for shape ``(4, *)`` "point of arrays", respectively
+``numpy.dot(v, M.T)`` for shape ``(*, 4)`` "array of points".
+
+Use the transpose of transformation matrices for OpenGL ``glMultMatrixd()``.
+
+Calculations are carried out with ``numpy.float64`` precision.
+
+Vector, point, quaternion, and matrix function arguments are expected to be
+"array like", i.e. tuple, list, or numpy arrays.
+
+Return types are numpy arrays unless specified otherwise.
+
+Angles are in radians unless specified otherwise.
+
+Quaternions w+ix+jy+kz are represented as ``[w, x, y, z]``.
+
+A triple of Euler angles can be applied/interpreted in 24 ways, which can
+be specified using a 4 character string or encoded 4-tuple:
+
+  - *Axes 4-string*: e.g. 'sxyz' or 'ryxy'
+
+    - first character : rotations are applied to 's'tatic or 'r'otating frame
+    - remaining characters : successive rotation axis 'x', 'y', or 'z'
+
+  - *Axes 4-tuple*: e.g. (0, 0, 0, 0) or (1, 1, 1, 1)
+
+    - inner axis: code of axis ('x':0, 'y':1, 'z':2) of rightmost matrix.
+    - parity : even (0) if inner axis 'x' is followed by 'y', 'y' is followed
+      by 'z', or 'z' is followed by 'x'. Otherwise odd (1).
+    - repetition : first and last axis are same (1) or different (0).
+    - frame : rotations are applied to static (0) or rotating (1) frame.
+
+.. rubric:: References
+
+.. bibliography::
+    :list: enumerated
+    :style: MDA
+    :filter: id % "transformations"
+
+Examples
+--------
+
+>>> from MDAnalysis.lib.transformations import *
+>>> import numpy as np
+>>> alpha, beta, gamma = 0.123, -1.234, 2.345
+>>> origin, xaxis, yaxis, zaxis = (0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)
+>>> I = identity_matrix()
+>>> Rx = rotation_matrix(alpha, xaxis)
+>>> Ry = rotation_matrix(beta, yaxis)
+>>> Rz = rotation_matrix(gamma, zaxis)
+>>> R = concatenate_matrices(Rx, Ry, Rz)
+>>> euler = euler_from_matrix(R, 'rxyz')
+>>> np.allclose([alpha, beta, gamma], euler)
+True
+>>> Re = euler_matrix(alpha, beta, gamma, 'rxyz')
+>>> is_same_transform(R, Re)
+True
+>>> al, be, ga = euler_from_matrix(Re, 'rxyz')
+>>> is_same_transform(Re, euler_matrix(al, be, ga, 'rxyz'))
+True
+>>> qx = quaternion_about_axis(alpha, xaxis)
+>>> qy = quaternion_about_axis(beta, yaxis)
+>>> qz = quaternion_about_axis(gamma, zaxis)
+>>> q = quaternion_multiply(qx, qy)
+>>> q = quaternion_multiply(q, qz)
+>>> Rq = quaternion_matrix(q)
+>>> is_same_transform(R, Rq)
+True
+>>> S = scale_matrix(1.23, origin)
+>>> T = translation_matrix((1, 2, 3))
+>>> Z = shear_matrix(beta, xaxis, origin, zaxis)
+>>> R = random_rotation_matrix(np.random.rand(3))
+>>> M = concatenate_matrices(T, R, Z, S)
+>>> scale, shear, angles, trans, persp = decompose_matrix(M)
+>>> np.allclose(scale, 1.23)
+True
+>>> np.allclose(trans, (1, 2, 3))
+True
+>>> np.allclose(shear, (0, math.tan(beta), 0))
+True
+>>> is_same_transform(R, euler_matrix(axes='sxyz', *angles))
+True
+>>> M1 = compose_matrix(scale, shear, angles, trans, persp)
+>>> is_same_transform(M, M1)
+True
+
+Functions
+---------
+
+.. See `help(MDAnalysis.lib.transformations)` for a listing of functions or
+.. the online help.
+
+
+.. versionchanged:: 0.11.0
+   Transformations library moved from MDAnalysis.core.transformations to
+   MDAnalysis.lib.transformations
+"""
+
+import sys
+import os
+import warnings
+import math
+import numpy as np
+from numpy.linalg import norm
+
+from .mdamath import angle as vecangle
+
+def identity_matrix():
+    """Return 4x4 identity/unit matrix.
+
+    >>> from MDAnalysis.lib.transformations import identity_matrix
+    >>> import numpy as np
+    >>> I = identity_matrix()
+    >>> np.allclose(I, np.dot(I, I))
+    True
+    >>> np.sum(I), np.trace(I)
+    (4.0, 4.0)
+    >>> np.allclose(I, np.identity(4, dtype=np.float64))
+    True
+
+    """
+    return np.identity(4, dtype=np.float64)
+
+
+def translation_matrix(direction):
+    """Return matrix to translate by direction vector.
+
+    >>> from MDAnalysis.lib.transformations import translation_matrix
+    >>> import numpy as np
+    >>> v = np.random.random(3) - 0.5
+    >>> np.allclose(v, translation_matrix(v)[:3, 3])
+    True
+
+    """
+    M = np.identity(4)
+    M[:3, 3] = direction[:3]
+    return M
+
+
+
[docs]def translation_from_matrix(matrix): + """Return translation vector from translation matrix. + + >>> from MDAnalysis.lib.transformations import (translation_matrix, + ... translation_from_matrix) + >>> import numpy as np + >>> v0 = np.random.random(3) - 0.5 + >>> v1 = translation_from_matrix(translation_matrix(v0)) + >>> np.allclose(v0, v1) + True + + """ + return np.array(matrix, copy=False)[:3, 3].copy()
+ + +def reflection_matrix(point, normal): + """Return matrix to mirror at plane defined by point and normal vector. + + >>> from MDAnalysis.lib.transformations import reflection_matrix + >>> import numpy as np + >>> v0 = np.random.random(4) - 0.5 + >>> v0[3] = 1.0 + >>> v1 = np.random.random(3) - 0.5 + >>> R = reflection_matrix(v0, v1) + >>> np.allclose(2., np.trace(R)) + True + >>> np.allclose(v0, np.dot(R, v0)) + True + >>> v2 = v0.copy() + >>> v2[:3] += v1 + >>> v3 = v0.copy() + >>> v2[:3] -= v1 + >>> np.allclose(v2, np.dot(R, v3)) + True + + """ + normal = unit_vector(normal[:3]) + M = np.identity(4) + M[:3, :3] -= 2.0 * np.outer(normal, normal) + M[:3, 3] = (2.0 * np.dot(point[:3], normal)) * normal + return M + + +
[docs]def reflection_from_matrix(matrix): + """Return mirror plane point and normal vector from reflection matrix. + + >>> from MDAnalysis.lib.transformations import (reflection_matrix, + ... reflection_from_matrix, is_same_transform) + >>> import numpy as np + >>> v0 = np.random.random(3) - 0.5 + >>> v1 = np.random.random(3) - 0.5 + >>> M0 = reflection_matrix(v0, v1) + >>> point, normal = reflection_from_matrix(M0) + >>> M1 = reflection_matrix(point, normal) + >>> is_same_transform(M0, M1) + True + + """ + M = np.array(matrix, dtype=np.float64, copy=False) + # normal: unit eigenvector corresponding to eigenvalue -1 + l, V = np.linalg.eig(M[:3, :3]) + i = np.where(abs(np.real(l) + 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no unit eigenvector corresponding to eigenvalue -1") + normal = np.real(V[:, i[0]]).squeeze() + # point: any unit eigenvector corresponding to eigenvalue 1 + l, V = np.linalg.eig(M) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no unit eigenvector corresponding to eigenvalue 1") + point = np.real(V[:, i[-1]]).squeeze() + point /= point[3] + return point, normal
+ + +def rotation_matrix(angle, direction, point=None): + """Return matrix to rotate about axis defined by point and direction. + + >>> from MDAnalysis.lib.transformations import (rotation_matrix, + ... is_same_transform) + >>> import random, math + >>> import numpy as np + >>> R = rotation_matrix(math.pi/2.0, [0, 0, 1], [1, 0, 0]) + >>> np.allclose(np.dot(R, [0, 0, 0, 1]), [ 1., -1., 0., 1.]) + True + >>> angle = (random.random() - 0.5) * (2*math.pi) + >>> direc = np.random.random(3) - 0.5 + >>> point = np.random.random(3) - 0.5 + >>> R0 = rotation_matrix(angle, direc, point) + >>> R1 = rotation_matrix(angle-2*math.pi, direc, point) + >>> is_same_transform(R0, R1) + True + >>> R0 = rotation_matrix(angle, direc, point) + >>> R1 = rotation_matrix(-angle, -direc, point) + >>> is_same_transform(R0, R1) + True + >>> I = np.identity(4, np.float64) + >>> np.allclose(I, rotation_matrix(math.pi*2, direc)) + True + >>> np.allclose(2., np.trace(rotation_matrix(math.pi/2, + ... direc, point))) + True + + """ + sina = math.sin(angle) + cosa = math.cos(angle) + direction = unit_vector(direction[:3]) + # rotation matrix around unit vector + R = np.array( + ( + (cosa, 0.0, 0.0), + (0.0, cosa, 0.0), + (0.0, 0.0, cosa)), dtype=np.float64) + R += np.outer(direction, direction) * (1.0 - cosa) + direction *= sina + R += np.array( + ((0.0, -direction[2], direction[1]), + (direction[2], 0.0, -direction[0]), + (-direction[1], direction[0], 0.0)), dtype=np.float64) + M = np.identity(4) + M[:3, :3] = R + if point is not None: + # rotation not around origin + point = np.array(point[:3], dtype=np.float64, copy=False) + M[:3, 3] = point - np.dot(R, point) + return M + + +
[docs]def rotation_from_matrix(matrix): + """Return rotation angle and axis from rotation matrix. + + >>> from MDAnalysis.lib.transformations import (rotation_matrix, + ... is_same_transform, rotation_from_matrix) + >>> import random, math + >>> import numpy as np + >>> angle = (random.random() - 0.5) * (2*math.pi) + >>> direc = np.random.random(3) - 0.5 + >>> point = np.random.random(3) - 0.5 + >>> R0 = rotation_matrix(angle, direc, point) + >>> angle, direc, point = rotation_from_matrix(R0) + >>> R1 = rotation_matrix(angle, direc, point) + >>> is_same_transform(R0, R1) + True + + """ + R = np.array(matrix, dtype=np.float64, copy=False) + R33 = R[:3, :3] + # direction: unit eigenvector of R33 corresponding to eigenvalue of 1 + l, W = np.linalg.eig(R33.T) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no unit eigenvector corresponding to eigenvalue 1") + direction = np.real(W[:, i[-1]]).squeeze() + # point: unit eigenvector of R33 corresponding to eigenvalue of 1 + l, Q = np.linalg.eig(R) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no unit eigenvector corresponding to eigenvalue 1") + point = np.real(Q[:, i[-1]]).squeeze() + point /= point[3] + # rotation angle depending on direction + cosa = (np.trace(R33) - 1.0) / 2.0 + if abs(direction[2]) > 1e-8: + sina = (R[1, 0] + (cosa - 1.0) * direction[0] * direction[1]) / direction[2] + elif abs(direction[1]) > 1e-8: + sina = (R[0, 2] + (cosa - 1.0) * direction[0] * direction[2]) / direction[1] + else: + sina = (R[2, 1] + (cosa - 1.0) * direction[1] * direction[2]) / direction[0] + angle = math.atan2(sina, cosa) + return angle, direction, point
+ + +def scale_matrix(factor, origin=None, direction=None): + """Return matrix to scale by factor around origin in direction. + + Use factor -1 for point symmetry. + + >>> from MDAnalysis.lib.transformations import scale_matrix + >>> import random + >>> import numpy as np + >>> v = (np.random.rand(4, 5) - 0.5) * 20.0 + >>> v[3] = 1.0 + >>> S = scale_matrix(-1.234) + >>> np.allclose(np.dot(S, v)[:3], -1.234*v[:3]) + True + >>> factor = random.random() * 10 - 5 + >>> origin = np.random.random(3) - 0.5 + >>> direct = np.random.random(3) - 0.5 + >>> S = scale_matrix(factor, origin) + >>> S = scale_matrix(factor, origin, direct) + + """ + if direction is None: + # uniform scaling + M = np.array( + ((factor, 0.0, 0.0, 0.0), + (0.0, factor, 0.0, 0.0), + (0.0, 0.0, factor, 0.0), + (0.0, 0.0, 0.0, 1.0)), dtype=np.float64) + if origin is not None: + M[:3, 3] = origin[:3] + M[:3, 3] *= 1.0 - factor + else: + # nonuniform scaling + direction = unit_vector(direction[:3]) + factor = 1.0 - factor + M = np.identity(4) + M[:3, :3] -= factor * np.outer(direction, direction) + if origin is not None: + M[:3, 3] = (factor * np.dot(origin[:3], direction)) * direction + return M + + +
[docs]def scale_from_matrix(matrix): + """Return scaling factor, origin and direction from scaling matrix. + + >>> from MDAnalysis.lib.transformations import (scale_matrix, + ... scale_from_matrix, is_same_transform) + >>> import random + >>> import numpy as np + >>> factor = random.random() * 10 - 5 + >>> origin = np.random.random(3) - 0.5 + >>> direct = np.random.random(3) - 0.5 + >>> S0 = scale_matrix(factor, origin) + >>> factor, origin, direction = scale_from_matrix(S0) + >>> S1 = scale_matrix(factor, origin, direction) + >>> is_same_transform(S0, S1) + True + >>> S0 = scale_matrix(factor, origin, direct) + >>> factor, origin, direction = scale_from_matrix(S0) + >>> S1 = scale_matrix(factor, origin, direction) + >>> is_same_transform(S0, S1) + True + + """ + M = np.array(matrix, dtype=np.float64, copy=False) + M33 = M[:3, :3] + factor = np.trace(M33) - 2.0 + try: + # direction: unit eigenvector corresponding to eigenvalue factor + l, V = np.linalg.eig(M33) + i = np.where(abs(np.real(l) - factor) < 1e-8)[0][0] + direction = np.real(V[:, i]).squeeze() + direction /= vector_norm(direction) + except IndexError: + # uniform scaling + factor = (factor + 2.0) / 3.0 + direction = None + # origin: any eigenvector corresponding to eigenvalue 1 + l, V = np.linalg.eig(M) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no eigenvector corresponding to eigenvalue 1") + origin = np.real(V[:, i[-1]]).squeeze() + origin /= origin[3] + return factor, origin, direction
+ + +def projection_matrix(point, normal, direction=None, + perspective=None, pseudo=False): + """Return matrix to project onto plane defined by point and normal. + + Using either perspective point, projection direction, or none of both. + + If pseudo is True, perspective projections will preserve relative depth + such that Perspective = dot(Orthogonal, PseudoPerspective). + + >>> from MDAnalysis.lib.transformations import (projection_matrix, + ... is_same_transform) + >>> import numpy as np + >>> P = projection_matrix((0, 0, 0), (1, 0, 0)) + >>> np.allclose(P[1:, 1:], np.identity(4)[1:, 1:]) + True + >>> point = np.random.random(3) - 0.5 + >>> normal = np.random.random(3) - 0.5 + >>> direct = np.random.random(3) - 0.5 + >>> persp = np.random.random(3) - 0.5 + >>> P0 = projection_matrix(point, normal) + >>> P1 = projection_matrix(point, normal, direction=direct) + >>> P2 = projection_matrix(point, normal, perspective=persp) + >>> P3 = projection_matrix(point, normal, perspective=persp, pseudo=True) + >>> is_same_transform(P2, np.dot(P0, P3)) + True + >>> P = projection_matrix((3, 0, 0), (1, 1, 0), (1, 0, 0)) + >>> v0 = (np.random.rand(4, 5) - 0.5) * 20.0 + >>> v0[3] = 1.0 + >>> v1 = np.dot(P, v0) + >>> np.allclose(v1[1], v0[1]) + True + >>> np.allclose(v1[0], 3.0-v1[1]) + True + + """ + M = np.identity(4) + point = np.array(point[:3], dtype=np.float64, copy=False) + normal = unit_vector(normal[:3]) + if perspective is not None: + # perspective projection + perspective = np.array(perspective[:3], dtype=np.float64, + copy=False) + M[0, 0] = M[1, 1] = M[2, 2] = np.dot(perspective - point, normal) + M[:3, :3] -= np.outer(perspective, normal) + if pseudo: + # preserve relative depth + M[:3, :3] -= np.outer(normal, normal) + M[:3, 3] = np.dot(point, normal) * (perspective + normal) + else: + M[:3, 3] = np.dot(point, normal) * perspective + M[3, :3] = -normal + M[3, 3] = np.dot(perspective, normal) + elif direction is not None: + # parallel projection + direction = np.array(direction[:3], dtype=np.float64, copy=False) + scale = np.dot(direction, normal) + M[:3, :3] -= np.outer(direction, normal) / scale + M[:3, 3] = direction * (np.dot(point, normal) / scale) + else: + # orthogonal projection + M[:3, :3] -= np.outer(normal, normal) + M[:3, 3] = np.dot(point, normal) * normal + return M + + +
[docs]def projection_from_matrix(matrix, pseudo=False): + """Return projection plane and perspective point from projection matrix. + + Return values are same as arguments for projection_matrix function: + point, normal, direction, perspective, and pseudo. + + >>> from MDAnalysis.lib.transformations import (projection_matrix, + ... projection_from_matrix, is_same_transform) + >>> import numpy as np + >>> point = np.random.random(3) - 0.5 + >>> normal = np.random.random(3) - 0.5 + >>> direct = np.random.random(3) - 0.5 + >>> persp = np.random.random(3) - 0.5 + >>> P0 = projection_matrix(point, normal) + >>> result = projection_from_matrix(P0) + >>> P1 = projection_matrix(*result) + >>> is_same_transform(P0, P1) + True + >>> P0 = projection_matrix(point, normal, direct) + >>> result = projection_from_matrix(P0) + >>> P1 = projection_matrix(*result) + >>> is_same_transform(P0, P1) + True + >>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=False) + >>> result = projection_from_matrix(P0, pseudo=False) + >>> P1 = projection_matrix(*result) + >>> is_same_transform(P0, P1) + True + >>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=True) + >>> result = projection_from_matrix(P0, pseudo=True) + >>> P1 = projection_matrix(*result) + >>> is_same_transform(P0, P1) + True + + """ + M = np.array(matrix, dtype=np.float64, copy=False) + M33 = M[:3, :3] + l, V = np.linalg.eig(M) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not pseudo and len(i): + # point: any eigenvector corresponding to eigenvalue 1 + point = np.real(V[:, i[-1]]).squeeze() + point /= point[3] + # direction: unit eigenvector corresponding to eigenvalue 0 + l, V = np.linalg.eig(M33) + i = np.where(abs(np.real(l)) < 1e-8)[0] + if not len(i): + raise ValueError("no eigenvector corresponding to eigenvalue 0") + direction = np.real(V[:, i[0]]).squeeze() + direction /= vector_norm(direction) + # normal: unit eigenvector of M33.T corresponding to eigenvalue 0 + l, V = np.linalg.eig(M33.T) + i = np.where(abs(np.real(l)) < 1e-8)[0] + if len(i): + # parallel projection + normal = np.real(V[:, i[0]]).squeeze() + normal /= vector_norm(normal) + return point, normal, direction, None, False + else: + # orthogonal projection, where normal equals direction vector + return point, direction, None, None, False + else: + # perspective projection + i = np.where(abs(np.real(l)) > 1e-8)[0] + if not len(i): + raise ValueError( + "no eigenvector not corresponding to eigenvalue 0") + point = np.real(V[:, i[-1]]).squeeze() + point /= point[3] + normal = - M[3, :3] + perspective = M[:3, 3] / np.dot(point[:3], normal) + if pseudo: + perspective -= normal + return point, normal, None, perspective, pseudo
+ + +def clip_matrix(left, right, bottom, top, near, far, perspective=False): + """Return matrix to obtain normalized device coordinates from frustrum. + + The frustrum bounds are axis-aligned along x (left, right), + y (bottom, top) and z (near, far). + + Normalized device coordinates are in range [-1, 1] if coordinates are + inside the frustrum. + + If perspective is True the frustrum is a truncated pyramid with the + perspective point at origin and direction along z axis, otherwise an + orthographic canonical view volume (a box). + + Homogeneous coordinates transformed by the perspective clip matrix + need to be dehomogenized (devided by w coordinate). + + >>> from MDAnalysis.lib.transformations import clip_matrix + >>> import numpy as np + >>> frustrum = np.random.rand(6) + >>> frustrum[1] += frustrum[0] + >>> frustrum[3] += frustrum[2] + >>> frustrum[5] += frustrum[4] + >>> M = clip_matrix(perspective=False, *frustrum) + >>> np.dot(M, [frustrum[0], frustrum[2], frustrum[4], 1.0]) + array([-1., -1., -1., 1.]) + >>> np.dot(M, [frustrum[1], frustrum[3], frustrum[5], 1.0]) + array([ 1., 1., 1., 1.]) + >>> M = clip_matrix(perspective=True, *frustrum) + >>> v = np.dot(M, [frustrum[0], frustrum[2], frustrum[4], 1.0]) + >>> v / v[3] + array([-1., -1., -1., 1.]) + >>> v = np.dot(M, [frustrum[1], frustrum[3], frustrum[4], 1.0]) + >>> v / v[3] + array([ 1., 1., -1., 1.]) + + """ + if left >= right or bottom >= top or near >= far: + raise ValueError("invalid frustrum") + if perspective: + if near <= _EPS: + raise ValueError("invalid frustrum: near <= 0") + t = 2.0 * near + M = ( + (-t / (right - left), 0.0, (right + left) / (right - left), 0.0), + (0.0, -t / (top - bottom), (top + bottom) / (top - bottom), 0.0), + (0.0, 0.0, -(far + near) / (far - near), t * far / (far - near)), + (0.0, 0.0, -1.0, 0.0)) + else: + M = ( + (2.0 / (right - left), 0.0, 0.0, (right + left) / (left - right)), + (0.0, 2.0 / (top - bottom), 0.0, (top + bottom) / (bottom - top)), + (0.0, 0.0, 2.0 / (far - near), (far + near) / (near - far)), + (0.0, 0.0, 0.0, 1.0)) + return np.array(M, dtype=np.float64) + + +def shear_matrix(angle, direction, point, normal): + """Return matrix to shear by angle along direction vector on shear plane. + + The shear plane is defined by a point and normal vector. The direction + vector must be orthogonal to the plane's normal vector. + + A point P is transformed by the shear matrix into P" such that + the vector P-P" is parallel to the direction vector and its extent is + given by the angle of P-P'-P", where P' is the orthogonal projection + of P onto the shear plane. + + >>> from MDAnalysis.lib.transformations import shear_matrix + >>> import random, math + >>> import numpy as np + >>> angle = (random.random() - 0.5) * 4*math.pi + >>> direct = np.random.random(3) - 0.5 + >>> point = np.random.random(3) - 0.5 + >>> normal = np.cross(direct, np.random.random(3)) + >>> S = shear_matrix(angle, direct, point, normal) + >>> np.allclose(1.0, np.linalg.det(S)) + True + + """ + normal = unit_vector(normal[:3]) + direction = unit_vector(direction[:3]) + if abs(np.dot(normal, direction)) > 1e-6: + raise ValueError("direction and normal vectors are not orthogonal") + angle = math.tan(angle) + M = np.identity(4) + M[:3, :3] += angle * np.outer(direction, normal) + M[:3, 3] = -angle * np.dot(point[:3], normal) * direction + return M + + +
[docs]def shear_from_matrix(matrix): + """Return shear angle, direction and plane from shear matrix. + + >>> from MDAnalysis.lib.transformations import (shear_matrix, + ... shear_from_matrix, is_same_transform) + >>> import random, math + >>> import numpy as np + >>> angle = (random.random() - 0.5) * 4*math.pi + >>> direct = np.random.random(3) - 0.5 + >>> point = np.random.random(3) - 0.5 + >>> normal = np.cross(direct, np.random.random(3)) + >>> S0 = shear_matrix(angle, direct, point, normal) + >>> angle, direct, point, normal = shear_from_matrix(S0) + >>> S1 = shear_matrix(angle, direct, point, normal) + >>> is_same_transform(S0, S1) + True + + """ + M = np.array(matrix, dtype=np.float64, copy=False) + M33 = M[:3, :3] + # normal: cross independent eigenvectors corresponding to the eigenvalue 1 + l, V = np.linalg.eig(M33) + i = np.where(abs(np.real(l) - 1.0) < 1e-4)[0] + if len(i) < 2: + raise ValueError("no two linear independent eigenvectors found {0!s}".format(l)) + V = np.real(V[:, i]).squeeze().T + lenorm = -1.0 + for i0, i1 in ((0, 1), (0, 2), (1, 2)): + n = np.cross(V[i0], V[i1]) + l = vector_norm(n) + if l > lenorm: + lenorm = l + normal = n + normal /= lenorm + # direction and angle + direction = np.dot(M33 - np.identity(3), normal) + angle = vector_norm(direction) + direction /= angle + angle = math.atan(angle) + # point: eigenvector corresponding to eigenvalue 1 + l, V = np.linalg.eig(M) + i = np.where(abs(np.real(l) - 1.0) < 1e-8)[0] + if not len(i): + raise ValueError("no eigenvector corresponding to eigenvalue 1") + point = np.real(V[:, i[-1]]).squeeze() + point /= point[3] + return angle, direction, point, normal
+ + +
[docs]def decompose_matrix(matrix): + """Return sequence of transformations from transformation matrix. + + matrix : array_like + Non-degenerative homogeneous transformation matrix + + Return tuple of: + scale : vector of 3 scaling factors + shear : list of shear factors for x-y, x-z, y-z axes + angles : list of Euler angles about static x, y, z axes + translate : translation vector along x, y, z axes + perspective : perspective partition of matrix + + Raise ValueError if matrix is of wrong type or degenerative. + + >>> from MDAnalysis.lib.transformations import (translation_matrix, + ... decompose_matrix, scale_matrix, euler_matrix) + >>> import numpy as np + >>> T0 = translation_matrix((1, 2, 3)) + >>> scale, shear, angles, trans, persp = decompose_matrix(T0) + >>> T1 = translation_matrix(trans) + >>> np.allclose(T0, T1) + True + >>> S = scale_matrix(0.123) + >>> scale, shear, angles, trans, persp = decompose_matrix(S) + >>> scale[0] + 0.123 + >>> R0 = euler_matrix(1, 2, 3) + >>> scale, shear, angles, trans, persp = decompose_matrix(R0) + >>> R1 = euler_matrix(*angles) + >>> np.allclose(R0, R1) + True + + """ + # pylint: disable=unsubscriptable-object + M = np.array(matrix, dtype=np.float64, copy=True).T + if abs(M[3, 3]) < _EPS: + raise ValueError("M[3, 3] is zero") + M /= M[3, 3] + P = M.copy() + P[:, 3] = 0, 0, 0, 1 + if not np.linalg.det(P): + raise ValueError("matrix is singular") + + scale = np.zeros((3, ), dtype=np.float64) + shear = [0, 0, 0] + angles = [0, 0, 0] + + if any(abs(M[:3, 3]) > _EPS): + perspective = np.dot(M[:, 3], np.linalg.inv(P.T)) + M[:, 3] = 0, 0, 0, 1 + else: + perspective = np.array((0, 0, 0, 1), dtype=np.float64) + + translate = M[3, :3].copy() + M[3, :3] = 0 + + row = M[:3, :3].copy() + scale[0] = vector_norm(row[0]) + row[0] /= scale[0] + shear[0] = np.dot(row[0], row[1]) + row[1] -= row[0] * shear[0] + scale[1] = vector_norm(row[1]) + row[1] /= scale[1] + shear[0] /= scale[1] + shear[1] = np.dot(row[0], row[2]) + row[2] -= row[0] * shear[1] + shear[2] = np.dot(row[1], row[2]) + row[2] -= row[1] * shear[2] + scale[2] = vector_norm(row[2]) + row[2] /= scale[2] + shear[1:] /= scale[2] + + if np.dot(row[0], np.cross(row[1], row[2])) < 0: + scale *= -1 + row *= -1 + + angles[1] = math.asin(-row[0, 2]) + if math.cos(angles[1]): + angles[0] = math.atan2(row[1, 2], row[2, 2]) + angles[2] = math.atan2(row[0, 1], row[0, 0]) + else: + #angles[0] = math.atan2(row[1, 0], row[1, 1]) + angles[0] = math.atan2(-row[2, 1], row[1, 1]) + angles[2] = 0.0 + + return scale, shear, angles, translate, perspective
+ + +
[docs]def compose_matrix(scale=None, shear=None, angles=None, translate=None, + perspective=None): + """Return transformation matrix from sequence of transformations. + + This is the inverse of the decompose_matrix function. + + Sequence of transformations: + scale : vector of 3 scaling factors + shear : list of shear factors for x-y, x-z, y-z axes + angles : list of Euler angles about static x, y, z axes + translate : translation vector along x, y, z axes + perspective : perspective partition of matrix + + >>> from MDAnalysis.lib.transformations import (compose_matrix, + ... decompose_matrix, is_same_transform) + >>> import math + >>> import numpy as np + >>> scale = np.random.random(3) - 0.5 + >>> shear = np.random.random(3) - 0.5 + >>> angles = (np.random.random(3) - 0.5) * (2*math.pi) + >>> trans = np.random.random(3) - 0.5 + >>> persp = np.random.random(4) - 0.5 + >>> M0 = compose_matrix(scale, shear, angles, trans, persp) + >>> result = decompose_matrix(M0) + >>> M1 = compose_matrix(*result) + >>> is_same_transform(M0, M1) + True + + """ + M = np.identity(4) + if perspective is not None: + P = np.identity(4) + P[3, :] = perspective[:4] + M = np.dot(M, P) + if translate is not None: + T = np.identity(4) + T[:3, 3] = translate[:3] + M = np.dot(M, T) + if angles is not None: + R = euler_matrix(angles[0], angles[1], angles[2], 'sxyz') + M = np.dot(M, R) + if shear is not None: + Z = np.identity(4) + Z[1, 2] = shear[2] + Z[0, 2] = shear[1] + Z[0, 1] = shear[0] + M = np.dot(M, Z) + if scale is not None: + S = np.identity(4) + S[0, 0] = scale[0] + S[1, 1] = scale[1] + S[2, 2] = scale[2] + M = np.dot(M, S) + M /= M[3, 3] + return M
+ + +def orthogonalization_matrix(lengths, angles): + """Return orthogonalization matrix for crystallographic cell coordinates. + + Angles are expected in degrees. + + The de-orthogonalization matrix is the inverse. + + >>> from MDAnalysis.lib.transformations import orthogonalization_matrix + >>> import numpy as np + >>> O = orthogonalization_matrix((10., 10., 10.), (90., 90., 90.)) + >>> np.allclose(O[:3, :3], np.identity(3, float) * 10) + True + >>> O = orthogonalization_matrix([9.8, 12.0, 15.5], [87.2, 80.7, 69.7]) + >>> np.allclose(np.sum(O), 43.063229) + True + + """ + a, b, c = lengths + angles = np.radians(angles) + sina, sinb, _ = np.sin(angles) + cosa, cosb, cosg = np.cos(angles) + co = (cosa * cosb - cosg) / (sina * sinb) + return np.array( + ( + (a * sinb * math.sqrt(1.0 - co * co), 0.0, 0.0, 0.0), + (-a * sinb * co, b * sina, 0.0, 0.0), + (a * cosb, b * cosa, c, 0.0), + (0.0, 0.0, 0.0, 1.0)), + dtype=np.float64) + + +def superimposition_matrix(v0, v1, scaling=False, usesvd=True): + """Return matrix to transform given vector set into second vector set. + + `v0` and `v1` are shape `(3, *)` or `(4, *)` arrays of at least 3 vectors. + + If `usesvd` is ``True``, the weighted sum of squared deviations (RMSD) is + minimized according to the algorithm by W. Kabsch [8]. Otherwise the + quaternion based algorithm by B. Horn [9] is used (slower when using + this Python implementation). + + The returned matrix performs rotation, translation and uniform scaling + (if specified). + + >>> from MDAnalysis.lib.transformations import (superimposition_matrix, + ... random_rotation_matrix, scale_matrix, translation_matrix, + ... concatenate_matrices) + >>> import random + >>> import numpy as np + >>> v0 = np.random.rand(3, 10) + >>> M = superimposition_matrix(v0, v0) + >>> np.allclose(M, np.identity(4)) + True + >>> R = random_rotation_matrix(np.random.random(3)) + >>> v0 = ((1,0,0), (0,1,0), (0,0,1), (1,1,1)) + >>> v1 = np.dot(R, v0) + >>> M = superimposition_matrix(v0, v1) + >>> np.allclose(v1, np.dot(M, v0)) + True + >>> v0 = (np.random.rand(4, 100) - 0.5) * 20.0 + >>> v0[3] = 1.0 + >>> v1 = np.dot(R, v0) + >>> M = superimposition_matrix(v0, v1) + >>> np.allclose(v1, np.dot(M, v0)) + True + >>> S = scale_matrix(random.random()) + >>> T = translation_matrix(np.random.random(3)-0.5) + >>> M = concatenate_matrices(T, R, S) + >>> v1 = np.dot(M, v0) + >>> v0[:3] += np.random.normal(0.0, 1e-9, 300).reshape(3, -1) + >>> M = superimposition_matrix(v0, v1, scaling=True) + >>> np.allclose(v1, np.dot(M, v0)) + True + >>> M = superimposition_matrix(v0, v1, scaling=True, usesvd=False) + >>> np.allclose(v1, np.dot(M, v0)) + True + >>> v = np.empty((4, 100, 3), dtype=np.float64) + >>> v[:, :, 0] = v0 + >>> M = superimposition_matrix(v0, v1, scaling=True, usesvd=False) + >>> np.allclose(v1, np.dot(M, v[:, :, 0])) + True + + """ + v0 = np.array(v0, dtype=np.float64, copy=False)[:3] + v1 = np.array(v1, dtype=np.float64, copy=False)[:3] + + if v0.shape != v1.shape or v0.shape[1] < 3: + raise ValueError("vector sets are of wrong shape or type") + + # move centroids to origin + t0 = np.mean(v0, axis=1) + t1 = np.mean(v1, axis=1) + v0 = v0 - t0.reshape(3, 1) + v1 = v1 - t1.reshape(3, 1) + + if usesvd: + # Singular Value Decomposition of covariance matrix + u, s, vh = np.linalg.svd(np.dot(v1, v0.T)) + # rotation matrix from SVD orthonormal bases + R = np.dot(u, vh) + if np.linalg.det(R) < 0.0: + # R does not constitute right handed system + R -= np.outer(u[:, 2], vh[2, :] * 2.0) + s[-1] *= -1.0 + # homogeneous transformation matrix + M = np.identity(4) + M[:3, :3] = R + else: + # compute symmetric matrix N + xx, yy, zz = np.einsum('ij,ij->i', v0 , v1) + xy, yz, zx = np.einsum('ij,ij->i', v0, np.roll(v1, -1, axis=0)) + xz, yx, zy = np.einsum('ij,ij->i', v0, np.roll(v1, -2, axis=0)) + N = ( + (xx + yy + zz, 0.0, 0.0, 0.0), + (yz - zy, xx - yy - zz, 0.0, 0.0), + (zx - xz, xy + yx, -xx + yy - zz, 0.0), + (xy - yx, zx + xz, yz + zy, -xx - yy + zz)) + # quaternion: eigenvector corresponding to most positive eigenvalue + l, V = np.linalg.eigh(N) + q = V[:, np.argmax(l)] + q /= vector_norm(q) # unit quaternion + # homogeneous transformation matrix + M = quaternion_matrix(q) + + # scale: ratio of rms deviations from centroid + if scaling: + M[:3, :3] *= math.sqrt(np.einsum('ij,ij->',v1,v1) / + np.einsum('ij,ij->',v0,v0)) + + + # translation + M[:3, 3] = t1 + T = np.identity(4) + T[:3, 3] = -t0 + M = np.dot(M, T) + return M + + +def euler_matrix(ai, aj, ak, axes='sxyz'): + """Return homogeneous rotation matrix from Euler angles and axis sequence. + + ai, aj, ak : Euler's roll, pitch and yaw angles + axes : One of 24 axis sequences as string or encoded tuple + + >>> from MDAnalysis.lib.transformations import (euler_matrix + ... _AXES2TUPLE, _TUPLE2AXES) + >>> import math + >>> import numpy as np + >>> R = euler_matrix(1, 2, 3, 'syxz') + >>> np.allclose(np.sum(R[0]), -1.34786452) + True + >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1)) + >>> np.allclose(np.sum(R[0]), -0.383436184) + True + >>> ai, aj, ak = (4.0*math.pi) * (np.random.random(3) - 0.5) + >>> for axes in _AXES2TUPLE.keys(): + ... R = euler_matrix(ai, aj, ak, axes) + >>> for axes in _TUPLE2AXES.keys(): + ... R = euler_matrix(ai, aj, ak, axes) + + """ + try: + firstaxis, parity, repetition, frame = _AXES2TUPLE[axes] + except (AttributeError, KeyError): + _ = _TUPLE2AXES[axes] + firstaxis, parity, repetition, frame = axes + + i = firstaxis + j = _NEXT_AXIS[i + parity] + k = _NEXT_AXIS[i - parity + 1] + + if frame: + ai, ak = ak, ai + if parity: + ai, aj, ak = -ai, -aj, -ak + + si, sj, sk = math.sin(ai), math.sin(aj), math.sin(ak) + ci, cj, ck = math.cos(ai), math.cos(aj), math.cos(ak) + cc, cs = ci * ck, ci * sk + sc, ss = si * ck, si * sk + + M = np.identity(4) + if repetition: + M[i, i] = cj + M[i, j] = sj * si + M[i, k] = sj * ci + M[j, i] = sj * sk + M[j, j] = -cj * ss + cc + M[j, k] = -cj * cs - sc + M[k, i] = -sj * ck + M[k, j] = cj * sc + cs + M[k, k] = cj * cc - ss + else: + M[i, i] = cj * ck + M[i, j] = sj * sc - cs + M[i, k] = sj * cc + ss + M[j, i] = cj * sk + M[j, j] = sj * ss + cc + M[j, k] = sj * cs - sc + M[k, i] = -sj + M[k, j] = cj * si + M[k, k] = cj * ci + return M + + +def euler_from_matrix(matrix, axes='sxyz'): + """Return Euler angles from rotation matrix for specified axis sequence. + + axes : One of 24 axis sequences as string or encoded tuple + + Note that many Euler angle triplets can describe one matrix. + + >>> from MDAnalysis.lib.transformations import (euler_matrix, + ... euler_from_matrix, _AXES2TUPLE) + >>> import math + >>> import numpy as np + >>> R0 = euler_matrix(1, 2, 3, 'syxz') + >>> al, be, ga = euler_from_matrix(R0, 'syxz') + >>> R1 = euler_matrix(al, be, ga, 'syxz') + >>> np.allclose(R0, R1) + True + >>> angles = (4.0*math.pi) * (np.random.random(3) - 0.5) + >>> for axes in _AXES2TUPLE.keys(): + ... R0 = euler_matrix(axes=axes, *angles) + ... R1 = euler_matrix(axes=axes, *euler_from_matrix(R0, axes)) + ... if not np.allclose(R0, R1): print(axes, "failed") + + """ + try: + firstaxis, parity, repetition, frame = _AXES2TUPLE[axes.lower()] + except (AttributeError, KeyError): + _ = _TUPLE2AXES[axes] + firstaxis, parity, repetition, frame = axes + + i = firstaxis + j = _NEXT_AXIS[i + parity] + k = _NEXT_AXIS[i - parity + 1] + + M = np.array(matrix, dtype=np.float64, copy=False)[:3, :3] + if repetition: + sy = math.sqrt(M[i, j] * M[i, j] + M[i, k] * M[i, k]) + if sy > _EPS: + ax = math.atan2(M[i, j], M[i, k]) + ay = math.atan2(sy, M[i, i]) + az = math.atan2(M[j, i], -M[k, i]) + else: + ax = math.atan2(-M[j, k], M[j, j]) + ay = math.atan2(sy, M[i, i]) + az = 0.0 + else: + cy = math.sqrt(M[i, i] * M[i, i] + M[j, i] * M[j, i]) + if cy > _EPS: + ax = math.atan2(M[k, j], M[k, k]) + ay = math.atan2(-M[k, i], cy) + az = math.atan2(M[j, i], M[i, i]) + else: + ax = math.atan2(-M[j, k], M[j, j]) + ay = math.atan2(-M[k, i], cy) + az = 0.0 + + if parity: + ax, ay, az = -ax, -ay, -az + if frame: + ax, az = az, ax + return ax, ay, az + + +
[docs]def euler_from_quaternion(quaternion, axes='sxyz'): + """Return Euler angles from quaternion for specified axis sequence. + + >>> from MDAnalysis.lib.transformations import euler_from_quaternion + >>> import numpy as np + >>> angles = euler_from_quaternion([0.99810947, 0.06146124, 0, 0]) + >>> np.allclose(angles, [0.123, 0, 0]) + True + + """ + return euler_from_matrix(quaternion_matrix(quaternion), axes)
+ + +def quaternion_from_euler(ai, aj, ak, axes='sxyz'): + """Return quaternion from Euler angles and axis sequence. + + ai, aj, ak : Euler's roll, pitch and yaw angles + axes : One of 24 axis sequences as string or encoded tuple + + >>> from MDAnalysis.lib.transformations import quaternion_from_euler + >>> q = quaternion_from_euler(1, 2, 3, 'ryxz') + >>> np.allclose(q, [0.435953, 0.310622, -0.718287, 0.444435]) + True + + """ + try: + firstaxis, parity, repetition, frame = _AXES2TUPLE[axes.lower()] + except (AttributeError, KeyError): + _ = _TUPLE2AXES[axes] + firstaxis, parity, repetition, frame = axes + + i = firstaxis + 1 + j = _NEXT_AXIS[i + parity - 1] + 1 + k = _NEXT_AXIS[i - parity] + 1 + + if frame: + ai, ak = ak, ai + if parity: + aj = -aj + + ai /= 2.0 + aj /= 2.0 + ak /= 2.0 + ci = math.cos(ai) + si = math.sin(ai) + cj = math.cos(aj) + sj = math.sin(aj) + ck = math.cos(ak) + sk = math.sin(ak) + cc = ci * ck + cs = ci * sk + sc = si * ck + ss = si * sk + + quaternion = np.empty((4, ), dtype=np.float64) + if repetition: + quaternion[0] = cj * (cc - ss) + quaternion[i] = cj * (cs + sc) + quaternion[j] = sj * (cc + ss) + quaternion[k] = sj * (cs - sc) + else: + quaternion[0] = cj * cc + sj * ss + quaternion[i] = cj * sc - sj * cs + quaternion[j] = cj * ss + sj * cc + quaternion[k] = cj * cs - sj * sc + if parity: + quaternion[j] *= -1 + + return quaternion + + +def quaternion_about_axis(angle, axis): + """Return quaternion for rotation about axis. + + >>> from MDAnalysis.lib.transformations import quaternion_about_axis + >>> import numpy as np + >>> q = quaternion_about_axis(0.123, (1, 0, 0)) + >>> np.allclose(q, [0.99810947, 0.06146124, 0, 0]) + True + + """ + quaternion = np.zeros((4, ), dtype=np.float64) + quaternion[1] = axis[0] + quaternion[2] = axis[1] + quaternion[3] = axis[2] + qlen = vector_norm(quaternion) + if qlen > _EPS: + quaternion *= math.sin(angle / 2.0) / qlen + quaternion[0] = math.cos(angle / 2.0) + return quaternion + + +def quaternion_matrix(quaternion): + """Return homogeneous rotation matrix from quaternion. + + >>> from MDAnalysis.lib.transformations import (identity_matrix, + ... quaternion_matrix, rotation_matrix) + >>> import numpy as np + >>> M = quaternion_matrix([0.99810947, 0.06146124, 0, 0]) + >>> np.allclose(M, rotation_matrix(0.123, (1, 0, 0))) + True + >>> M = quaternion_matrix([1, 0, 0, 0]) + >>> np.allclose(M, identity_matrix()) + True + >>> M = quaternion_matrix([0, 1, 0, 0]) + >>> np.allclose(M, np.diag([1, -1, -1, 1])) + True + + """ + q = np.array(quaternion[:4], dtype=np.float64, copy=True) + nq = np.dot(q, q) + if nq < _EPS: + return np.identity(4) + q *= math.sqrt(2.0 / nq) + q = np.outer(q, q) + return np.array( + ( + (1.0 - q[2, 2] - q[3, 3], q[1, 2] - q[3, 0], q[1, 3] + q[2, 0], 0.0), + (q[1, 2] + q[3, 0], 1.0 - q[1, 1] - q[3, 3], q[2, 3] - q[1, 0], 0.0), + (q[1, 3] - q[2, 0], q[2, 3] + q[1, 0], 1.0 - q[1, 1] - q[2, 2], 0.0), + (0.0, 0.0, 0.0, 1.0) + ), dtype=np.float64) + + +def quaternion_from_matrix(matrix, isprecise=False): + """Return quaternion from rotation matrix. + + If isprecise=True, the input matrix is assumed to be a precise rotation + matrix and a faster algorithm is used. + + >>> from MDAnalysis.lib.transformations import (identity_matrix, + ... quaternion_from_matrix, rotation_matrix, random_rotation_matrix, + ... is_same_transform, quaternion_matrix) + >>> import numpy as np + >>> q = quaternion_from_matrix(identity_matrix(), True) + >>> np.allclose(q, [1., 0., 0., 0.]) + True + >>> q = quaternion_from_matrix(np.diag([1., -1., -1., 1.])) + >>> np.allclose(q, [0, 1, 0, 0]) or np.allclose(q, [0, -1, 0, 0]) + True + >>> R = rotation_matrix(0.123, (1, 2, 3)) + >>> q = quaternion_from_matrix(R, True) + >>> np.allclose(q, [0.9981095, 0.0164262, 0.0328524, 0.0492786]) + True + >>> R = [[-0.545, 0.797, 0.260, 0], [0.733, 0.603, -0.313, 0], + ... [-0.407, 0.021, -0.913, 0], [0, 0, 0, 1]] + >>> q = quaternion_from_matrix(R) + >>> np.allclose(q, [0.19069, 0.43736, 0.87485, -0.083611]) + True + >>> R = [[0.395, 0.362, 0.843, 0], [-0.626, 0.796, -0.056, 0], + ... [-0.677, -0.498, 0.529, 0], [0, 0, 0, 1]] + >>> q = quaternion_from_matrix(R) + >>> np.allclose(q, [0.82336615, -0.13610694, 0.46344705, -0.29792603]) + True + >>> R = random_rotation_matrix() + >>> q = quaternion_from_matrix(R) + >>> is_same_transform(R, quaternion_matrix(q)) + True + + """ + M = np.array(matrix, dtype=np.float64, copy=False)[:4, :4] + if isprecise: + q = np.empty((4, ), dtype=np.float64) + t = np.trace(M) + if t > M[3, 3]: + q[0] = t + q[3] = M[1, 0] - M[0, 1] + q[2] = M[0, 2] - M[2, 0] + q[1] = M[2, 1] - M[1, 2] + else: + i, j, k = 1, 2, 3 + if M[1, 1] > M[0, 0]: + i, j, k = 2, 3, 1 + if M[2, 2] > M[i, i]: + i, j, k = 3, 1, 2 + t = M[i, i] - (M[j, j] + M[k, k]) + M[3, 3] + q[i] = t + q[j] = M[i, j] + M[j, i] + q[k] = M[k, i] + M[i, k] + q[3] = M[k, j] - M[j, k] + q *= 0.5 / math.sqrt(t * M[3, 3]) + else: + m00 = M[0, 0] + m01 = M[0, 1] + m02 = M[0, 2] + m10 = M[1, 0] + m11 = M[1, 1] + m12 = M[1, 2] + m20 = M[2, 0] + m21 = M[2, 1] + m22 = M[2, 2] + # symmetric matrix K + K = np.array(( + (m00 - m11 - m22, 0.0, 0.0, 0.0), + (m01 + m10, m11 - m00 - m22, 0.0, 0.0), + (m02 + m20, m12 + m21, m22 - m00 - m11, 0.0), + (m21 - m12, m02 - m20, m10 - m01, m00 + m11 + m22))) + K /= 3.0 + # quaternion is eigenvector of K that corresponds to largest eigenvalue + l, V = np.linalg.eigh(K) + q = V[[3, 0, 1, 2], np.argmax(l)] + + if q[0] < 0.0: + q *= -1.0 + return q + + +def quaternion_multiply(quaternion1, quaternion0): + """Return multiplication of two quaternions. + + >>> from MDAnalysis.lib.transformations import quaternion_multiply + >>> import numpy as np + >>> q = quaternion_multiply([4, 1, -2, 3], [8, -5, 6, 7]) + >>> np.allclose(q, [28, -44, -14, 48]) + True + + """ + w0, x0, y0, z0 = quaternion0 + w1, x1, y1, z1 = quaternion1 + return np.array( + ( + -x1 * x0 - y1 * y0 - z1 * z0 + w1 * w0, + x1 * w0 + y1 * z0 - z1 * y0 + w1 * x0, + -x1 * z0 + y1 * w0 + z1 * x0 + w1 * y0, + x1 * y0 - y1 * x0 + z1 * w0 + w1 * z0), dtype=np.float64) + + +def quaternion_conjugate(quaternion): + """Return conjugate of quaternion. + + >>> from MDAnalysis.lib.transformations import (random_quaternion, + ... quaternion_conjugate) + >>> import numpy as np + >>> q0 = random_quaternion() + >>> q1 = quaternion_conjugate(q0) + >>> q1[0] == q0[0] and all(q1[1:] == -q0[1:]) + True + + """ + return np.array( + ( + quaternion[0], -quaternion[1], + -quaternion[2], -quaternion[3]), dtype=np.float64) + + +def quaternion_inverse(quaternion): + """Return inverse of quaternion. + + >>> from MDAnalysis.lib.transformations import (random_quaternion, + ... quaternion_inverse) + >>> import numpy as np + >>> q0 = random_quaternion() + >>> q1 = quaternion_inverse(q0) + >>> np.allclose(quaternion_multiply(q0, q1), [1, 0, 0, 0]) + True + + """ + return quaternion_conjugate(quaternion) / np.dot(quaternion, quaternion) + + +
[docs]def quaternion_real(quaternion): + """Return real part of quaternion. + + >>> from MDAnalysis.lib.transformations import quaternion_real + >>> quaternion_real([3.0, 0.0, 1.0, 2.0]) + 3.0 + + """ + return quaternion[0]
+ + +
[docs]def quaternion_imag(quaternion): + """Return imaginary part of quaternion. + + >>> from MDAnalysis.lib.transformations import quaternion_imag + >>> quaternion_imag([3.0, 0.0, 1.0, 2.0]) + [0.0, 1.0, 2.0] + + """ + return quaternion[1:4]
+ + +def quaternion_slerp(quat0, quat1, fraction, spin=0, shortestpath=True): + r"""Return spherical linear interpolation between two quaternions. + + >>> from MDAnalysis.lib.transformations import (random_quaternion, + ... quaternion_slerp) + >>> import math + >>> import numpy as np + >>> q0 = random_quaternion() + >>> q1 = random_quaternion() + >>> q = quaternion_slerp(q0, q1, 0.0) + >>> np.allclose(q, q0) + True + >>> q = quaternion_slerp(q0, q1, 1.0, 1) + >>> np.allclose(q, q1) + True + >>> q = quaternion_slerp(q0, q1, 0.5) + >>> angle = math.acos(np.dot(q0, q)) + >>> np.allclose(2.0, math.acos(np.dot(q0, q1)) / angle) or \ + np.allclose(2.0, math.acos(-np.dot(q0, q1)) / angle) + True + + """ + q0 = unit_vector(quat0[:4]) + q1 = unit_vector(quat1[:4]) + if fraction == 0.0: + return q0 + elif fraction == 1.0: + return q1 + d = np.dot(q0, q1) + if abs(abs(d) - 1.0) < _EPS: + return q0 + if shortestpath and d < 0.0: + # invert rotation + d = -d + q1 *= -1.0 + angle = math.acos(d) + spin * math.pi + if abs(angle) < _EPS: + return q0 + isin = 1.0 / math.sin(angle) + q0 *= math.sin((1.0 - fraction) * angle) * isin + q1 *= math.sin(fraction * angle) * isin + q0 += q1 + return q0 + + +def random_quaternion(rand=None): + """Return uniform random unit quaternion. + + rand: array like or None + Three independent random variables that are uniformly distributed + between 0 and 1. + + >>> from MDAnalysis.lib.transformations import (random_quaternion, + ... vector_norm) + >>> import numpy as np + >>> q = random_quaternion() + >>> np.allclose(1.0, vector_norm(q)) + True + >>> q = random_quaternion(np.random.random(3)) + >>> len(q.shape), q.shape[0]==4 + (1, True) + + """ + if rand is None: + rand = np.random.rand(3) + else: + assert len(rand) == 3 + r1 = np.sqrt(1.0 - rand[0]) + r2 = np.sqrt(rand[0]) + pi2 = math.pi * 2.0 + t1 = pi2 * rand[1] + t2 = pi2 * rand[2] + return np.array( + ( + np.cos(t2) * r2, + np.sin(t1) * r1, + np.cos(t1) * r1, + np.sin(t2) * r2), dtype=np.float64) + + +def random_rotation_matrix(rand=None): + """Return uniform random rotation matrix. + + rnd: array like + Three independent random variables that are uniformly distributed + between 0 and 1 for each returned quaternion. + + >>> from MDAnalysis.lib.transformations import random_rotation_matrix + >>> import numpy as np + >>> R = random_rotation_matrix() + >>> np.allclose(np.dot(R.T, R), np.identity(4)) + True + + """ + return quaternion_matrix(random_quaternion(rand)) + + +
[docs]class Arcball(object): + """Virtual Trackball Control. + + >>> from MDAnalysis.lib.transformations import Arcball + >>> import numpy as np + >>> ball = Arcball() + >>> ball = Arcball(initial=np.identity(4)) + >>> ball.place([320, 320], 320) + >>> ball.down([500, 250]) + >>> ball.drag([475, 275]) + >>> R = ball.matrix() + >>> np.allclose(np.sum(R), 3.90583455) + True + >>> ball = Arcball(initial=[1, 0, 0, 0]) + >>> ball.place([320, 320], 320) + >>> ball.setaxes([1,1,0], [-1, 1, 0]) + >>> ball.setconstrain(True) + >>> ball.down([400, 200]) + >>> ball.drag([200, 400]) + >>> R = ball.matrix() + >>> np.allclose(np.sum(R), 0.2055924) + True + >>> ball.next() + + """ + + def __init__(self, initial=None): + """Initialize virtual trackball control. + + initial : quaternion or rotation matrix + + """ + self._axis = None + self._axes = None + self._radius = 1.0 + self._center = [0.0, 0.0] + self._vdown = np.array([0, 0, 1], dtype=np.float64) + self._constrain = False + + if initial is None: + self._qdown = np.array([1, 0, 0, 0], dtype=np.float64) + else: + initial = np.array(initial, dtype=np.float64) + if initial.shape == (4, 4): + self._qdown = quaternion_from_matrix(initial) + elif initial.shape == (4, ): + initial /= vector_norm(initial) + self._qdown = initial + else: + raise ValueError("initial not a quaternion or matrix") + + self._qnow = self._qpre = self._qdown + +
[docs] def place(self, center, radius): + """Place Arcball, e.g. when window size changes. + + center : sequence[2] + Window coordinates of trackball center. + radius : float + Radius of trackball in window coordinates. + + """ + self._radius = float(radius) + self._center[0] = center[0] + self._center[1] = center[1]
+ +
[docs] def setaxes(self, *axes): + """Set axes to constrain rotations.""" + if axes is None: + self._axes = None + else: + self._axes = [unit_vector(axis) for axis in axes]
+ +
[docs] def setconstrain(self, constrain): + """Set state of constrain to axis mode.""" + self._constrain = constrain is True
+ +
[docs] def getconstrain(self): + """Return state of constrain to axis mode.""" + return self._constrain
+ +
[docs] def down(self, point): + """Set initial cursor window coordinates and pick constrain-axis.""" + self._vdown = arcball_map_to_sphere(point, self._center, self._radius) + self._qdown = self._qpre = self._qnow + + if self._constrain and self._axes is not None: + self._axis = arcball_nearest_axis(self._vdown, self._axes) + self._vdown = arcball_constrain_to_axis(self._vdown, self._axis) + else: + self._axis = None
+ +
[docs] def drag(self, point): + """Update current cursor window coordinates.""" + vnow = arcball_map_to_sphere(point, self._center, self._radius) + + if self._axis is not None: + vnow = arcball_constrain_to_axis(vnow, self._axis) + + self._qpre = self._qnow + + t = np.cross(self._vdown, vnow) + if np.dot(t, t) < _EPS: + self._qnow = self._qdown + else: + q = [np.dot(self._vdown, vnow), t[0], t[1], t[2]] + self._qnow = quaternion_multiply(q, self._qdown)
+ +
[docs] def next(self, acceleration=0.0): + """Continue rotation in direction of last drag.""" + q = quaternion_slerp(self._qpre, self._qnow, 2.0 + acceleration, False) + self._qpre, self._qnow = self._qnow, q
+ +
[docs] def matrix(self): + """Return homogeneous rotation matrix.""" + return quaternion_matrix(self._qnow)
+ + +def arcball_map_to_sphere(point, center, radius): + """Return unit sphere coordinates from window coordinates.""" + v = np.array( + ( + (point[0] - center[0]) / radius, + (center[1] - point[1]) / radius, + 0.0 + ), dtype=np.float64 + ) + n = v[0] * v[0] + v[1] * v[1] + if n > 1.0: + v /= math.sqrt(n) # position outside of sphere + else: + v[2] = math.sqrt(1.0 - n) + return v + + +def arcball_constrain_to_axis(point, axis): + """Return sphere point perpendicular to axis.""" + v = np.array(point, dtype=np.float64, copy=True) + a = np.array(axis, dtype=np.float64, copy=True) + v -= a * np.dot(a, v) # on plane + n = vector_norm(v) + if n > _EPS: + if v[2] < 0.0: + v *= -1.0 + v /= n + return v + if a[2] == 1.0: + return np.array([1, 0, 0], dtype=np.float64) + return unit_vector([-a[1], a[0], 0]) + + +
[docs]def arcball_nearest_axis(point, axes): + """Return axis, which arc is nearest to point.""" + point = np.array(point, dtype=np.float64, copy=False) + nearest = None + mx = -1.0 + for axis in axes: + t = np.dot(arcball_constrain_to_axis(point, axis), point) + if t > mx: + nearest = axis + mx = t + return nearest
+ + +# epsilon for testing whether a number is close to zero +_EPS = np.finfo(float).eps * 4.0 + +# axis sequences for Euler angles +_NEXT_AXIS = [1, 2, 0, 1] + +# map axes strings to/from tuples of inner axis, parity, repetition, frame +_AXES2TUPLE = { + 'sxyz': (0, 0, 0, 0), 'sxyx': (0, 0, 1, 0), 'sxzy': (0, 1, 0, 0), + 'sxzx': (0, 1, 1, 0), 'syzx': (1, 0, 0, 0), 'syzy': (1, 0, 1, 0), + 'syxz': (1, 1, 0, 0), 'syxy': (1, 1, 1, 0), 'szxy': (2, 0, 0, 0), + 'szxz': (2, 0, 1, 0), 'szyx': (2, 1, 0, 0), 'szyz': (2, 1, 1, 0), + 'rzyx': (0, 0, 0, 1), 'rxyx': (0, 0, 1, 1), 'ryzx': (0, 1, 0, 1), + 'rxzx': (0, 1, 1, 1), 'rxzy': (1, 0, 0, 1), 'ryzy': (1, 0, 1, 1), + 'rzxy': (1, 1, 0, 1), 'ryxy': (1, 1, 1, 1), 'ryxz': (2, 0, 0, 1), + 'rzxz': (2, 0, 1, 1), 'rxyz': (2, 1, 0, 1), 'rzyz': (2, 1, 1, 1)} + +_TUPLE2AXES = dict((v, k) for k, v in _AXES2TUPLE.items()) + + +def vector_norm(data, axis=None, out=None): + """Return length, i.e. eucledian norm, of ndarray along axis. + + >>> from MDAnalysis.lib.transformations import vector_norm + >>> import numpy as np + >>> v = np.random.random(3) + >>> n = vector_norm(v) + >>> np.allclose(n, np.linalg.norm(v)) + True + >>> v = np.random.rand(6, 5, 3) + >>> n = vector_norm(v, axis=-1) + >>> np.allclose(n, np.sqrt(np.sum(v*v, axis=2))) + True + >>> n = vector_norm(v, axis=1) + >>> np.allclose(n, np.sqrt(np.sum(v*v, axis=1))) + True + >>> v = np.random.rand(5, 4, 3) + >>> n = np.empty((5, 3), dtype=np.float64) + >>> vector_norm(v, axis=1, out=n) + >>> np.allclose(n, np.sqrt(np.sum(v*v, axis=1))) + True + >>> vector_norm([]) + 0.0 + >>> vector_norm([1.0]) + 1.0 + + """ + data = np.array(data, dtype=np.float64, copy=True) + if out is None: + if data.ndim == 1: + return math.sqrt(np.dot(data, data)) + data *= data + out = np.atleast_1d(np.sum(data, axis=axis)) + np.sqrt(out, out) + return out + else: + data *= data + np.sum(data, axis=axis, out=out) + np.sqrt(out, out) + + +def unit_vector(data, axis=None, out=None): + """Return ndarray normalized by length, i.e. eucledian norm, along axis. + + >>> from MDAnalysis.lib.transformations import unit_vector + >>> import numpy as np + >>> v0 = np.random.random(3) + >>> v1 = unit_vector(v0) + >>> np.allclose(v1, v0 / np.linalg.norm(v0)) + True + >>> v0 = np.random.rand(5, 4, 3) + >>> v1 = unit_vector(v0, axis=-1) + >>> v2 = v0 / np.expand_dims(np.sqrt(np.sum(v0*v0, axis=2)), 2) + >>> np.allclose(v1, v2) + True + >>> v1 = unit_vector(v0, axis=1) + >>> v2 = v0 / np.expand_dims(np.sqrt(np.sum(v0*v0, axis=1)), 1) + >>> np.allclose(v1, v2) + True + >>> v1 = np.empty((5, 4, 3), dtype=np.float64) + >>> unit_vector(v0, axis=1, out=v1) + >>> np.allclose(v1, v2) + True + >>> list(unit_vector([])) + [] + >>> list(unit_vector([1.0])) + [1.0] + + """ + if out is None: + data = np.array(data, dtype=np.float64, copy=True) + if data.ndim == 1: + data /= math.sqrt(np.dot(data, data)) + return data + else: + if out is not data: + out[:] = np.array(data, copy=False) + data = out + length = np.atleast_1d(np.sum(data * data, axis)) + np.sqrt(length, length) + if axis is not None: + length = np.expand_dims(length, axis) + data /= length + if out is None: + return data + + +def random_vector(size): + """Return array of random doubles in the half-open interval [0.0, 1.0). + + >>> from MDAnalysis.lib.transformations import random_vector + >>> import numpy as np + >>> v = random_vector(10000) + >>> np.all(v >= 0.0) and np.all(v < 1.0) + True + >>> v0 = random_vector(10) + >>> v1 = random_vector(10) + >>> np.any(v0 == v1) + False + + """ + return np.random.random(size) + + +def inverse_matrix(matrix): + """Return inverse of square transformation matrix. + + >>> from MDAnalysis.lib.transformations import (random_rotation_matrix, + ... inverse_matrix) + >>> import numpy as np + >>> M0 = random_rotation_matrix() + >>> M1 = inverse_matrix(M0.T) + >>> np.allclose(M1, np.linalg.inv(M0.T)) + True + >>> for size in range(1, 7): + ... M0 = np.random.rand(size, size) + ... M1 = inverse_matrix(M0) + ... if not np.allclose(M1, np.linalg.inv(M0)): print(size) + + """ + return np.linalg.inv(matrix) + + +
[docs]def concatenate_matrices(*matrices): + """Return concatenation of series of transformation matrices. + + >>> from MDAnalysis.lib.transformations import concatenate_matrices + >>> import numpy as np + >>> M = np.random.rand(16).reshape((4, 4)) - 0.5 + >>> np.allclose(M, concatenate_matrices(M)) + True + >>> np.allclose(np.dot(M, M.T), concatenate_matrices(M, M.T)) + True + + """ + M = np.identity(4) + for i in matrices: + M = np.dot(M, i) + return M
+ + +def is_same_transform(matrix0, matrix1): + """Return True if two matrices perform same transformation. + + >>> from MDAnalysis.lib.transformations import (is_same_transform, + ... random_rotation_matrix) + >>> import numpy as np + >>> is_same_transform(np.identity(4), np.identity(4)) + True + >>> is_same_transform(np.identity(4), random_rotation_matrix()) + False + + """ + matrix0 = np.array(matrix0, dtype=np.float64, copy=True) + matrix0 /= matrix0[3, 3] + matrix1 = np.array(matrix1, dtype=np.float64, copy=True) + matrix1 /= matrix1[3, 3] + return np.allclose(matrix0, matrix1) + + +def _import_module(module_name, warn=True, prefix='_py_', ignore='_'): + """Try import all public attributes from module into global namespace. + + Existing attributes with name clashes are renamed with prefix. + Attributes starting with underscore are ignored by default. + + Return True on successful import. + + """ + sys.path.append(os.path.dirname(__file__)) + try: + module = __import__(module_name) + except ImportError: + sys.path.pop() + if warn: + warnings.warn("failed to import module " + module_name) + else: + sys.path.pop() + for attr in dir(module): + if ignore and attr.startswith(ignore): + continue + if prefix: + if attr in globals(): + globals()[prefix + attr] = globals()[attr] + elif warn: + warnings.warn("no Python implementation of " + attr) + globals()[attr] = getattr(module, attr) + return True + + +# orbeckst --- some simple geometry + +
[docs]def rotaxis(a, b): + """Return the rotation axis to rotate vector a into b. + + Parameters + ---------- + a, b : array_like + two vectors + + Returns + ------- + c : np.ndarray + vector to rotate a into b + + + Note + ---- + If a == b this will always return [1, 0, 0] + + """ + if np.allclose(a, b): + return np.array([1, 0, 0]) + c = np.cross(a, b) + return c / np.linalg.norm(c)
+ + +_import_module('_transformations') + +# Documentation in HTML format can be generated with Epydoc +__docformat__ = "restructuredtext en" +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/lib/util.html b/2.7.0-dev0/_modules/MDAnalysis/lib/util.html new file mode 100644 index 0000000000..41de5f25c3 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/lib/util.html @@ -0,0 +1,2695 @@ + + + + + + MDAnalysis.lib.util — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.lib.util

+# -*- 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-2017 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
+#
+r"""
+Helper functions --- :mod:`MDAnalysis.lib.util`
+====================================================
+
+Small helper functions that don't fit anywhere else.
+
+.. versionchanged:: 0.11.0
+   Moved mathematical functions into lib.mdamath
+
+.. versionchanged::2.0.0
+   The following aliases, that existed for compatibility with python versions
+   older than 3.6, were removed: `callable` for the built-in of the same name,
+   `PathLike` for :class:`os.PathLike`, and `bz_open` for :func:`bz2.open`.
+
+
+Files and directories
+---------------------
+
+.. autofunction:: filename
+.. autofunction:: openany
+.. autofunction:: anyopen
+.. autofunction:: greedy_splitext
+.. autofunction:: which
+.. autofunction:: realpath
+.. autofunction:: get_ext
+.. autofunction:: check_compressed_format
+.. autofunction:: format_from_filename_extension
+.. autofunction:: guess_format
+
+Streams
+-------
+
+Many of the readers are not restricted to just reading files. They can
+also use gzip-compressed or bzip2-compressed files (through the
+internal use of :func:`openany`). It is also possible to provide more
+general streams as inputs, such as a :class:`io.StringIO`
+instances (essentially, a memory buffer) by wrapping these instances
+into a :class:`NamedStream`. This :class:`NamedStream` can then be
+used in place of an ordinary file name (typically, with a
+class:`~MDAnalysis.core.universe.Universe` but it is also possible to
+*write* to such a stream using :func:`MDAnalysis.Writer`).
+
+.. rubric: Examples
+
+In the following example, we use a PDB stored as a string ``pdb_s``::
+
+   import MDAnalysis
+   from MDAnalysis.lib.util import NamedStream
+   from io import StringIO
+
+   pdb_s = "TITLE     Lonely Ion\\nATOM      1  NA  NA+     1      81.260  64.982  10.926  1.00  0.00\\n"
+   u = MDAnalysis.Universe(NamedStream(StringIO(pdb_s), "ion.pdb"))
+   print(u)
+   #  <Universe with 1 atoms>
+   print(u.atoms.positions)
+   # [[ 81.26000214  64.98200226  10.92599964]]
+
+It is important to provide a proper pseudo file name with the correct extension
+(".pdb") to :class:`NamedStream` because the file type recognition uses the
+extension of the file name to determine the file format or alternatively
+provide the ``format="pdb"`` keyword argument to the
+:class:`~MDAnalysis.core.universe.Universe`.
+
+The use of streams becomes more interesting when MDAnalysis is used as glue
+between different analysis packages and when one can arrange things so that
+intermediate frames (typically in the PDB format) are not written to disk but
+remain in memory via e.g. :class:`io.StringIO` buffers.
+
+
+.. The following does *not* work because most readers need to
+.. reopen files, which is not possible with http streams. Might
+.. need to implement a buffer.
+..
+.. Read a test LAMMPS data file from the MDAnalysis repository::
+..
+..   import MDAnalysis
+..   from MDAnalysis.lib.util import NamedStream
+..   import urllib2
+..   URI = "https://mdanalysis.googlecode.com/git-history/develop/testsuite/MDAnalysisTests/data/mini.data"
+..   urldata = NamedStream(urllib2.urlopen(URI), "mini.data")
+..   u = MDAnalysis.Universe(urldata)
+
+.. Note::  A remote connection created by :func:`urllib2.urlopen` is not seekable
+           and therefore will often not work as an input. But try it...
+
+.. autoclass:: NamedStream
+   :members:
+
+.. autofunction:: isstream
+
+Containers and lists
+--------------------
+
+.. autofunction:: iterable
+.. autofunction:: asiterable
+.. autofunction:: hasmethod
+.. autoclass:: Namespace
+
+Arrays
+------
+
+.. autofunction:: unique_int_1d(values)
+.. autofunction:: unique_rows
+.. autofunction:: blocks_of
+.. autofunction:: group_same_or_consecutive_integers
+
+File parsing
+------------
+
+.. autoclass:: FORTRANReader
+   :members:
+.. autodata:: FORTRAN_format_regex
+
+Data manipulation and handling
+------------------------------
+
+.. autofunction:: fixedwidth_bins
+.. autofunction:: get_weights
+.. autofunction:: ltruncate_int
+.. autofunction:: flatten_dict
+
+Strings
+-------
+
+.. autofunction:: convert_aa_code
+.. autofunction:: parse_residue
+.. autofunction:: conv_float
+
+Class decorators
+----------------
+
+.. autofunction:: cached
+.. autofunction:: store_init_arguments
+
+Function decorators
+-------------------
+
+.. autofunction:: static_variables
+.. autofunction:: warn_if_not_unique
+.. autofunction:: check_coords
+.. autofunction:: check_atomgroup_not_empty
+
+Code management
+---------------
+
+.. autofunction:: deprecate
+.. autoclass:: _Deprecate
+.. autofunction:: dedent_docstring
+
+Data format checks
+------------------
+
+.. autofunction:: check_box
+
+.. Rubric:: Footnotes
+
+.. [#NamedStreamClose] The reason why :meth:`NamedStream.close` does
+   not close a stream by default (but just rewinds it to the
+   beginning) is so that one can use the class :class:`NamedStream` as
+   a drop-in replacement for file names, which are often re-opened
+   (e.g. when the same file is used as a topology and coordinate file
+   or when repeatedly iterating through a trajectory in some
+   implementations). The ``close=True`` keyword can be supplied in
+   order to make :meth:`NamedStream.close` actually close the
+   underlying stream and ``NamedStream.close(force=True)`` will also
+   close it.
+"""
+import sys
+
+__docformat__ = "restructuredtext en"
+
+
+import os
+import os.path
+import errno
+from contextlib import contextmanager
+import bz2
+import gzip
+import re
+import io
+import warnings
+import functools
+from functools import wraps
+import textwrap
+import weakref
+
+import mmtf
+import numpy as np
+
+from numpy.testing import assert_equal
+import inspect
+
+from .picklable_file_io import pickle_open, bz2_pickle_open, gzip_pickle_open
+
+from ..exceptions import StreamWarning, DuplicateWarning
+
+try:
+    from ._cutil import unique_int_1d
+except ImportError:
+    raise ImportError("MDAnalysis not installed properly. "
+                      "This can happen if your C extensions "
+                      "have not been built.")
+
+
+def int_array_is_sorted(array):
+    mask = array[:-1] <= array[1:]
+    try:
+        return mask[0] and mask.argmin() == 0
+    except IndexError:
+        # Empty arrays are sorted, I guess...
+        return True
+
+
+def unique_int_1d_unsorted(array):
+    values, indices = np.unique(array, return_index=True)
+    return array[np.sort(indices)]
+
+
+
[docs]def filename(name, ext=None, keep=False): + """Return a new name that has suffix attached; replaces other extensions. + + Parameters + ---------- + name : str or NamedStream + filename; extension is replaced unless ``keep=True``; + `name` can also be a :class:`NamedStream` (and its + :attr:`NamedStream.name` will be changed accordingly) + ext : None or str + extension to use in the new filename + keep : bool + - ``False``: replace existing extension with `ext`; + - ``True``: keep old extension if one existed + + + .. versionchanged:: 0.9.0 + Also permits :class:`NamedStream` to pass through. + """ + if ext is not None: + ext = ext.lower() + if not ext.startswith(os.path.extsep): + ext = os.path.extsep + ext + root, origext = os.path.splitext(name) + if not keep or len(origext) == 0: + newname = root + ext + if isstream(name): + name.name = newname + else: + name = newname + return name if isstream(name) else str(name)
+ + +
[docs]@contextmanager +def openany(datasource, mode='rt', reset=True): + """Context manager for :func:`anyopen`. + + Open the `datasource` and close it when the context of the :keyword:`with` + statement exits. + + `datasource` can be a filename or a stream (see :func:`isstream`). A stream + is reset to its start if possible (via :meth:`~io.IOBase.seek` or + :meth:`~cString.StringIO.reset`). + + The advantage of this function is that very different input sources + ("streams") can be used for a "file", ranging from files on disk (including + compressed files) to open file objects to sockets and strings---as long as + they have a file-like interface. + + Parameters + ---------- + datasource : a file or a stream + mode : {'r', 'w'} (optional) + open in r(ead) or w(rite) mode + reset : bool (optional) + try to read (`mode` 'r') the stream from the start [``True``] + + Examples + -------- + Open a gzipped file and process it line by line:: + + with openany("input.pdb.gz") as pdb: + for line in pdb: + if line.startswith('ATOM'): + print(line) + + Open a URL and read it:: + + import urllib2 + with openany(urllib2.urlopen("https://www.mdanalysis.org/")) as html: + print(html.read()) + + + See Also + -------- + :func:`anyopen` + """ + stream = anyopen(datasource, mode=mode, reset=reset) + try: + yield stream + finally: + stream.close()
+ + +
[docs]def anyopen(datasource, mode='rt', reset=True): + """Open datasource (gzipped, bzipped, uncompressed) and return a stream. + + `datasource` can be a filename or a stream (see :func:`isstream`). By + default, a stream is reset to its start if possible (via + :meth:`~io.IOBase.seek` or :meth:`~cString.StringIO.reset`). + + If possible, the attribute ``stream.name`` is set to the filename or + "<stream>" if no filename could be associated with the *datasource*. + + Parameters + ---------- + datasource + a file (from :class:`file` or :func:`open`) or a stream (e.g. from + :func:`urllib2.urlopen` or :class:`io.StringIO`) + mode: {'r', 'w', 'a'} (optional) + Open in r(ead), w(rite) or a(ppend) mode. This string is directly + passed to the file opening handler (either Python's openfe, bz2, or + gzip). More complex modes are supported if the file opening handler + supports it. + reset: bool (optional) + try to read (`mode` 'r') the stream from the start + + Returns + ------- + file-like object + + See Also + -------- + :func:`openany` + to be used with the :keyword:`with` statement. + + + .. versionchanged:: 0.9.0 + Only returns the ``stream`` and tries to set ``stream.name = filename`` instead of the previous + behavior to return a tuple ``(stream, filename)``. + + .. versionchanged:: 2.0.0 + New read handlers support pickle functionality + if `datasource` is a filename. + They return a custom picklable file stream in + :class:`MDAnalysis.lib.picklable_file_io`. + + """ + read_handlers = {'bz2': bz2_pickle_open, + 'gz': gzip_pickle_open, + '': pickle_open} + write_handlers = {'bz2': bz2.open, + 'gz': gzip.open, + '': open} + + if mode.startswith('r'): + if isstream(datasource): + stream = datasource + try: + filename = str(stream.name) # maybe that does not always work? + except AttributeError: + filename = "<stream>" + if reset: + try: + stream.reset() + except (AttributeError, IOError): + try: + stream.seek(0) + except (AttributeError, IOError): + warnings.warn("Stream {0}: not guaranteed to be at the beginning." + "".format(filename), + category=StreamWarning) + else: + stream = None + filename = datasource + for ext in ('bz2', 'gz', ''): # file == '' should be last + openfunc = read_handlers[ext] + stream = _get_stream(datasource, openfunc, mode=mode) + if stream is not None: + break + if stream is None: + raise IOError(errno.EIO, "Cannot open file or stream in mode={mode!r}.".format(**vars()), repr(filename)) + elif mode.startswith('w') or mode.startswith('a'): # append 'a' not tested... + if isstream(datasource): + stream = datasource + try: + filename = str(stream.name) # maybe that does not always work? + except AttributeError: + filename = "<stream>" + else: + stream = None + filename = datasource + name, ext = os.path.splitext(filename) + if ext.startswith('.'): + ext = ext[1:] + if not ext in ('bz2', 'gz'): + ext = '' # anything else but bz2 or gz is just a normal file + openfunc = write_handlers[ext] + stream = openfunc(datasource, mode=mode) + if stream is None: + raise IOError(errno.EIO, "Cannot open file or stream in mode={mode!r}.".format(**vars()), repr(filename)) + else: + raise NotImplementedError("Sorry, mode={mode!r} is not implemented for {datasource!r}".format(**vars())) + try: + stream.name = filename + except (AttributeError, TypeError): + pass # can't set name (e.g. io.StringIO) + return stream
+ + +def _get_stream(filename, openfunction=open, mode='r'): + """Return open stream if *filename* can be opened with *openfunction* or else ``None``.""" + try: + stream = openfunction(filename, mode=mode) + except (IOError, OSError) as err: + # An exception might be raised due to two reasons, first the openfunction is unable to open the file, in this + # case we have to ignore the error and return None. Second is when openfunction can't open the file because + # either the file isn't there or the permissions don't allow access. + if errno.errorcode[err.errno] in ['ENOENT', 'EACCES']: + raise sys.exc_info()[1] from err + return None + if mode.startswith('r'): + # additional check for reading (eg can we uncompress) --- is this needed? + try: + stream.readline() + except IOError: + stream.close() + stream = None + except: + stream.close() + raise + else: + stream.close() + stream = openfunction(filename, mode=mode) + return stream + + +
[docs]def greedy_splitext(p): + """Split extension in path *p* at the left-most separator. + + Extensions are taken to be separated from the filename with the + separator :data:`os.extsep` (as used by :func:`os.path.splitext`). + + Arguments + --------- + p : str + path + + Returns + ------- + (root, extension) : tuple + where ``root`` is the full path and filename with all + extensions removed whereas ``extension`` is the string of + all extensions. + + Example + ------- + + >>> from MDAnalysis.lib.util import greedy_splitext + >>> greedy_splitext("/home/joe/protein.pdb.bz2") + ('/home/joe/protein', '.pdb.bz2') + + """ + path, root = os.path.split(p) + extension = '' + while True: + root, ext = os.path.splitext(root) + extension = ext + extension + if not ext: + break + return os.path.join(path, root), extension
+ + +
[docs]def hasmethod(obj, m): + """Return ``True`` if object *obj* contains the method *m*.""" + return hasattr(obj, m) and callable(getattr(obj, m))
+ + +
[docs]def isstream(obj): + """Detect if `obj` is a stream. + + We consider anything a stream that has the methods + + - ``close()`` + + and either set of the following + + - ``read()``, ``readline()``, ``readlines()`` + - ``write()``, ``writeline()``, ``writelines()`` + + Parameters + ---------- + obj : stream or str + + Returns + ------- + bool + ``True`` if `obj` is a stream, ``False`` otherwise + + See Also + -------- + :mod:`io` + + + .. versionadded:: 0.9.0 + """ + signature_methods = ("close",) + alternative_methods = ( + ("read", "readline", "readlines"), + ("write", "writeline", "writelines")) + + # Must have ALL the signature methods + for m in signature_methods: + if not hasmethod(obj, m): + return False + # Must have at least one complete set of alternative_methods + alternative_results = [ + np.all([hasmethod(obj, m) for m in alternatives]) + for alternatives in alternative_methods] + return np.any(alternative_results)
+ + +
[docs]def which(program): + """Determine full path of executable `program` on :envvar:`PATH`. + + (Jay at http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python) + + Parameters + ---------- + programe : str + name of the executable + + Returns + ------- + path : str or None + absolute path to the executable if it can be found, else ``None`` + + """ + + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + real_program = realpath(program) + if is_exe(real_program): + return real_program + else: + for path in os.environ["PATH"].split(os.pathsep): + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + return None
+ + +
[docs]@functools.total_ordering +class NamedStream(io.IOBase, os.PathLike): + """Stream that also provides a (fake) name. + + By wrapping a stream `stream` in this class, it can be passed to + code that uses inspection of the filename to make decisions. For + instance. :func:`os.path.split` will work correctly on a + :class:`NamedStream`. + + The class can be used as a context manager. + + :class:`NamedStream` is derived from :class:`io.IOBase` (to indicate that + it is a stream). Many operations that normally expect a string will also + work with a :class:`NamedStream`; for instance, most of the functions in + :mod:`os.path` will work with the exception of :func:`os.path.expandvars` + and :func:`os.path.expanduser`, which will return the :class:`NamedStream` + itself instead of a string if no substitutions were made. + + Example + ------- + Wrap a :class:`io.StringIO` instance to write to:: + + from io import StringIO + import os.path + stream = StringIO() + f = NamedStream(stream, "output.pdb") + print(os.path.splitext(f)) + + Wrap a :class:`file` instance to read from:: + + stream = open("input.pdb") + f = NamedStream(stream, stream.name) + + Use as a context manager (closes stream automatically when the + :keyword:`with` block is left):: + + with NamedStream(open("input.pdb"), "input.pdb") as f: + # use f + print f.closed # --> False + # ... + print f.closed # --> True + + Note + ---- + This class uses its own :meth:`__getitem__` method so if `stream` + implements :meth:`stream.__getitem__` then that will be masked and + this class should not be used. + + Warning + ------- + By default, :meth:`NamedStream.close` will **not close the + stream** but instead :meth:`~NamedStream.reset` it to the + beginning. [#NamedStreamClose]_ Provide the ``force=True`` keyword + to :meth:`NamedStream.close` to always close the stream. + + """ + + def __init__(self, stream, filename, reset=True, close=False): + """Initialize the :class:`NamedStream` from a `stream` and give it a `name`. + + The constructor attempts to rewind the stream to the beginning unless + the keyword `reset` is set to ``False``. If rewinding fails, a + :class:`MDAnalysis.StreamWarning` is issued. + + Parameters + ---------- + stream : stream + an open stream (e.g. :class:`file` or :class:`io.StringIO`) + filename : str + the filename that should be associated with the stream + reset : bool (optional) + start the stream from the beginning (either :meth:`reset` or :meth:`seek`) + when the class instance is constructed + close : bool (optional) + close the stream when a :keyword:`with` block exits or when + :meth:`close` is called; note that the default is **not to close + the stream** + + Notes + ----- + By default, this stream will *not* be closed by :keyword:`with` and + :meth:`close` (see there) unless the `close` keyword is set to + ``True``. + + + .. versionadded:: 0.9.0 + """ + # constructing the class from an instance of itself has weird behavior + # on __del__ and super on python 3. Let's warn the user and ensure the + # class works normally. + if isinstance(stream, NamedStream): + warnings.warn("Constructed NamedStream from a NamedStream", + RuntimeWarning) + stream = stream.stream + self.stream = stream + self.name = filename + self.close_stream = close + if reset: + self.reset() + +
[docs] def reset(self): + """Move to the beginning of the stream""" + # try to rewind + try: + self.stream.reset() # e.g. StreamIO + except (AttributeError, IOError): + try: + self.stream.seek(0) # typical file objects + except (AttributeError, IOError): + warnings.warn("NamedStream {0}: not guaranteed to be at the beginning." + "".format(self.name), + category=StreamWarning)
+ + # access the stream + def __getattr__(self, x): + try: + return getattr(self.stream, x) + except AttributeError: + return getattr(self.name, x) + + def __iter__(self): + return iter(self.stream) + + def __next__(self): + return self.stream.__next__() + + def __enter__(self): + # do not call the stream's __enter__ because the stream is already open + return self + + def __exit__(self, *args): + # NOTE: By default (close=False) we only reset the stream and NOT close it; this makes + # it easier to use it as a drop-in replacement for a filename that might + # be opened repeatedly (at least in MDAnalysis) + #try: + # return self.stream.__exit__(*args) + #except AttributeError: + # super(NamedStream, self).__exit__(*args) + self.close() + + def __fspath__(self): + return self.name + + # override more IOBase methods, as these are provided by IOBase and are not + # caught with __getattr__ (ugly...) +
[docs] def close(self, force=False): + """Reset or close the stream. + + If :attr:`NamedStream.close_stream` is set to ``False`` (the default) + then this method will *not close the stream* and only :meth:`reset` it. + + If the *force* = ``True`` keyword is provided, the stream will be + closed. + + .. Note:: This ``close()`` method is non-standard. ``del NamedStream`` + always closes the underlying stream. + + """ + if self.closed: + return + + if self.close_stream or force: + try: + return self.stream.close() + except AttributeError: + return super(NamedStream, self).close() + else: + self.flush() + self.reset()
+ + def __del__(self): + """Always closes the stream.""" + self.close(force=True) + + @property + def closed(self): + """``True`` if stream is closed.""" + try: + return self.stream.closed + except AttributeError: + return super(NamedStream, self).closed + +
[docs] def seek(self, offset, whence=os.SEEK_SET): + """Change the stream position to the given byte `offset` . + + Parameters + ---------- + offset : int + `offset` is interpreted relative to the position + indicated by `whence`. + whence : {0, 1, 2} (optional) + Values for `whence` are: + + - :data:`io.SEEK_SET` or 0 – start of the stream (the default); `offset` + should be zero or positive + - :data:`io.SEEK_CUR` or 1 – current stream position; `offset` may be + negative + - :data:`io.SEEK_END` or 2 – end of the stream; `offset` is usually + negative + + Returns + ------- + int + the new absolute position in bytes. + + """ + try: + return self.stream.seek(offset, whence) # file.seek: no kw + except AttributeError: + return super(NamedStream, self).seek(offset, whence)
+ +
[docs] def tell(self): + """Return the current stream position.""" + try: + return self.stream.tell() + except AttributeError: + return super(NamedStream, self).tell()
+ +
[docs] def truncate(self, *size): + """Truncate the stream's size to `size`. + + Parameters + ---------- + size : int (optional) + The `size` defaults to the current position (if no `size` argument + is supplied). The current file position is not changed. + + """ + try: + return self.stream.truncate(*size) + except AttributeError: + return super(NamedStream, self).truncate(*size)
+ +
[docs] def seekable(self): + """Return ``True`` if the stream supports random access. + + If ``False``, :meth:`seek`, :meth:`tell` and :meth:`truncate` will + raise :exc:`IOError`. + + """ + try: + return self.stream.seekable() + except AttributeError: + return super(NamedStream, self).seekable()
+ +
[docs] def readable(self): + """Return ``True`` if the stream can be read from. + + If ``False``, :meth:`read` will raise :exc:`IOError`. + """ + try: + return self.stream.readable() + except AttributeError: + return super(NamedStream, self).readable()
+ +
[docs] def writable(self): + """Return ``True`` if the stream can be written to. + + If ``False``, :meth:`write` will raise :exc:`IOError`. + """ + try: + return self.stream.writable() + except AttributeError: + return super(NamedStream, self).writable()
+ +
[docs] def flush(self): + """Flush the write buffers of the stream if applicable. + + This does nothing for read-only and non-blocking streams. For file + objects one also needs to call :func:`os.fsync` to write contents to + disk. + """ + try: + return self.stream.flush() + except AttributeError: + return super(NamedStream, self).flush()
+ +
[docs] def fileno(self): + """Return the underlying file descriptor (an integer) of the stream if it exists. + + An :exc:`IOError` is raised if the IO object does not use a file descriptor. + """ + try: + return self.stream.fileno() + except AttributeError: + # IOBase.fileno does not raise IOError as advertised so we do this here + errmsg = "This NamedStream does not use a file descriptor." + raise IOError(errmsg) from None
+ +
[docs] def readline(self): + try: + return self.stream.readline() + except AttributeError: + return super(NamedStream, self).readline()
+ + # fake the important parts of the string API + # (other methods such as rfind() are automatically dealt with via __getattr__) + def __getitem__(self, x): + return self.name[x] + + def __eq__(self, x): + return self.name == x + + def __ne__(self, x): + return not self == x + + def __lt__(self, x): + return self.name < x + + def __len__(self): + return len(self.name) + + def __add__(self, x): + return self.name + x + + def __radd__(self, x): + return x + self.name + + def __mul__(self, x): + return self.name * x + + __rmul__ = __mul__ + + def __format__(self, format_spec): + return self.name.format(format_spec) + + def __str__(self): + return self.name + + def __repr__(self): + return "<NamedStream({0}, {1})>".format(self.stream, self.name)
+ + +
[docs]def realpath(*args): + """Join all args and return the real path, rooted at ``/``. + + Expands '~', '~user', and environment variables such as :envvar:`$HOME`. + + Returns ``None`` if any of the args is ``None``. + """ + if None in args: + return None + return os.path.realpath(os.path.expanduser(os.path.expandvars(os.path.join(*args))))
+ + +
[docs]def get_ext(filename): + """Return the lower-cased extension of `filename` without a leading dot. + + Parameters + ---------- + filename : str + + Returns + ------- + root : str + ext : str + """ + root, ext = os.path.splitext(filename) + + if ext.startswith(os.extsep): + ext = ext[1:] + + return root, ext.lower()
+ + +
[docs]def check_compressed_format(root, ext): + """Check if this is a supported gzipped/bzip2ed file format and return UPPERCASE format. + + Parameters + ---------- + root : str + path of a file, without extension `ext` + ext : str + extension (currently only "bz2" and "gz" are recognized as compressed formats) + + Returns + ------- + format : str + upper case format extension *if* the compression can be handled by + :func:`openany` + + See Also + -------- + openany : function that is used to open and decompress formats on the fly; only + compression formats implemented in :func:`openany` are recognized + + """ + # XYZReader&others are setup to handle both plain and compressed (bzip2, gz) files + # ..so if the first file extension is bzip2 or gz, look at the one to the left of it + if ext.lower() in ("bz2", "gz"): + try: + root, ext = get_ext(root) + except Exception: + errmsg = f"Cannot determine coordinate format for '{root}.{ext}'" + raise TypeError(errmsg) from None + + return ext.upper()
+ + +
[docs]def format_from_filename_extension(filename): + """Guess file format from the file extension. + + Parameters + ---------- + filename : str + + Returns + ------- + format : str + + Raises + ------ + TypeError + if the file format cannot be determined + """ + try: + root, ext = get_ext(filename) + except Exception: + errmsg = (f"Cannot determine file format for file '{filename}'.\n" + f" You can set the format explicitly with " + f"'Universe(..., format=FORMAT)'.") + raise TypeError(errmsg) from None + format = check_compressed_format(root, ext) + return format
+ + +
[docs]def guess_format(filename): + """Return the format of `filename` + + The current heuristic simply looks at the filename extension and can work + around compressed format extensions. + + Parameters + ---------- + filename : str or stream + path to the file or a stream, in which case ``filename.name`` is looked + at for a hint to the format + + Returns + ------- + format : str + format specifier (upper case) + + Raises + ------ + ValueError + if the heuristics are insufficient to guess a supported format + + + .. versionadded:: 0.11.0 + Moved into lib.util + + """ + if isstream(filename): + # perhaps StringIO or open stream + try: + format = format_from_filename_extension(filename.name) + except AttributeError: + # format is None so we need to complain: + errmsg = (f"guess_format requires an explicit format specifier " + f"for stream {filename}") + raise ValueError(errmsg) from None + else: + # iterator, list, filename: simple extension checking... something more + # complicated is left for the ambitious. + # Note: at the moment the upper-case extension *is* the format specifier + # and list of filenames is handled by ChainReader + format = (format_from_filename_extension(filename) + if not iterable(filename) else 'CHAIN') + + return format.upper()
+ + +
[docs]def iterable(obj): + """Returns ``True`` if `obj` can be iterated over and is *not* a string + nor a :class:`NamedStream`""" + if isinstance(obj, (str, NamedStream)): + return False # avoid iterating over characters of a string + + if hasattr(obj, 'next'): + return True # any iterator will do + try: + len(obj) # anything else that might work + except (TypeError, AttributeError): + return False + return True
+ + +
[docs]def asiterable(obj): + """Returns `obj` so that it can be iterated over. + + A string is *not* detected as and iterable and is wrapped into a :class:`list` + with a single element. + + See Also + -------- + iterable + + """ + if not iterable(obj): + obj = [obj] + return obj
+ + +#: Regular expresssion (see :mod:`re`) to parse a simple `FORTRAN edit descriptor`_. +#: ``(?P<repeat>\d?)(?P<format>[IFELAX])(?P<numfmt>(?P<length>\d+)(\.(?P<decimals>\d+))?)?`` +#: +#: .. _FORTRAN edit descriptor: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html +FORTRAN_format_regex = (r"(?P<repeat>\d+?)(?P<format>[IFEAX])" + r"(?P<numfmt>(?P<length>\d+)(\.(?P<decimals>\d+))?)?") +_FORTRAN_format_pattern = re.compile(FORTRAN_format_regex) + + +def strip(s): + """Convert `s` to a string and return it white-space stripped.""" + return str(s).strip() + + +class FixedcolumnEntry(object): + """Represent an entry at specific fixed columns. + + Reads from line[start:stop] and converts according to + typespecifier. + """ + convertors = {'I': int, 'F': float, 'E': float, 'A': strip} + + def __init__(self, start, stop, typespecifier): + """ + Parameters + ---------- + start : int + first column + stop : int + last column + 1 + typespecifier : str + 'I': int, 'F': float, 'E': float, 'A': stripped string + + The start/stop arguments follow standard Python convention in that + they are 0-based and that the *stop* argument is not included. + """ + self.start = start + self.stop = stop + self.typespecifier = typespecifier + self.convertor = self.convertors[typespecifier] + + def read(self, line): + """Read the entry from `line` and convert to appropriate type.""" + try: + return self.convertor(line[self.start:self.stop]) + except ValueError: + errmsg = (f"{self}: Failed to read&convert " + f"{line[self.start:self.stop]}") + raise ValueError(errmsg) from None + + def __len__(self): + """Length of the field in columns (stop - start)""" + return self.stop - self.start + + def __repr__(self): + return "FixedcolumnEntry({0:d},{1:d},{2!r})".format(self.start, self.stop, self.typespecifier) + + +
[docs]class FORTRANReader(object): + """FORTRANReader provides a method to parse FORTRAN formatted lines in a file. + + The contents of lines in a file can be parsed according to FORTRAN format + edit descriptors (see `Fortran Formats`_ for the syntax). + + Only simple one-character specifiers supported here: *I F E A X* (see + :data:`FORTRAN_format_regex`). + + Strings are stripped of leading and trailing white space. + + .. _`Fortran Formats`: http://www.webcitation.org/5xbaWMV2x + .. _`Fortran Formats (URL)`: + http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html + + """ + + def __init__(self, fmt): + """Set up the reader with the FORTRAN format string. + + The string `fmt` should look like '2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10'. + + Parameters + ---------- + fmt : str + FORTRAN format edit descriptor for a line as described in `Fortran + Formats`_ + + Example + ------- + Parsing of a standard CRD file:: + + atomformat = FORTRANReader('2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10') + for line in open('coordinates.crd'): + serial,TotRes,resName,name,x,y,z,chainID,resSeq,tempFactor = atomformat.read(line) + + """ + self.fmt = fmt.split(',') + descriptors = [self.parse_FORTRAN_format(descriptor) for descriptor in self.fmt] + start = 0 + self.entries = [] + for d in descriptors: + if d['format'] != 'X': + for x in range(d['repeat']): + stop = start + d['length'] + self.entries.append(FixedcolumnEntry(start, stop, d['format'])) + start = stop + else: + start += d['totallength'] + +
[docs] def read(self, line): + """Parse `line` according to the format string and return list of values. + + Values are converted to Python types according to the format specifier. + + Parameters + ---------- + line : str + + Returns + ------- + list + list of entries with appropriate types + + Raises + ------ + ValueError + Any of the conversions cannot be made (e.g. space for an int) + + See Also + -------- + :meth:`FORTRANReader.number_of_matches` + """ + return [e.read(line) for e in self.entries]
+ +
[docs] def number_of_matches(self, line): + """Return how many format entries could be populated with legal values.""" + # not optimal, I suppose... + matches = 0 + for e in self.entries: + try: + e.read(line) + matches += 1 + except ValueError: + pass + return matches
+ +
[docs] def parse_FORTRAN_format(self, edit_descriptor): + """Parse the descriptor. + + + Parameters + ---------- + edit_descriptor : str + FORTRAN format edit descriptor + + Returns + ------- + dict + dict with totallength (in chars), repeat, length, format, decimals + + Raises + ------ + ValueError + The `edit_descriptor` is not recognized and cannot be parsed + + Note + ---- + Specifiers: *L ES EN T TL TR / r S SP SS BN BZ* are *not* supported, + and neither are the scientific notation *Ew.dEe* forms. + + """ + + m = _FORTRAN_format_pattern.match(edit_descriptor.upper()) + if m is None: + try: + m = _FORTRAN_format_pattern.match("1" + edit_descriptor.upper()) + if m is None: + raise ValueError # really no idea what the descriptor is supposed to mean + except: + raise ValueError("unrecognized FORTRAN format {0!r}".format(edit_descriptor)) + d = m.groupdict() + if d['repeat'] == '': + d['repeat'] = 1 + if d['format'] == 'X': + d['length'] = 1 + for k in ('repeat', 'length', 'decimals'): + try: + d[k] = int(d[k]) + except ValueError: # catches '' + d[k] = 0 + except TypeError: # keep None + pass + d['totallength'] = d['repeat'] * d['length'] + return d
+ + def __len__(self): + """Returns number of entries.""" + return len(self.entries) + + def __repr__(self): + return self.__class__.__name__ + "(" + ",".join(self.fmt) + ")"
+ + +
[docs]def fixedwidth_bins(delta, xmin, xmax): + """Return bins of width `delta` that cover `xmin`, `xmax` (or a larger range). + + The bin parameters are computed such that the bin size `delta` is + guaranteed. In order to achieve this, the range `[xmin, xmax]` can be + increased. + + Bins can be calculated for 1D data (then all parameters are simple floats) + or nD data (then parameters are supplied as arrays, with each entry + correpsonding to one dimension). + + Parameters + ---------- + delta : float or array_like + desired spacing of the bins + xmin : float or array_like + lower bound (left boundary of first bin) + xmax : float or array_like + upper bound (right boundary of last bin) + + Returns + ------- + dict + The dict contains 'Nbins', 'delta', 'min', and 'max'; these are either + floats or arrays, depending on the input. + + Example + ------- + Use with :func:`numpy.histogram`:: + + B = fixedwidth_bins(delta, xmin, xmax) + h, e = np.histogram(data, bins=B['Nbins'], range=(B['min'], B['max'])) + + """ + if not np.all(xmin < xmax): + raise ValueError('Boundaries are not sane: should be xmin < xmax.') + _delta = np.asarray(delta, dtype=np.float_) + _xmin = np.asarray(xmin, dtype=np.float_) + _xmax = np.asarray(xmax, dtype=np.float_) + _length = _xmax - _xmin + N = np.ceil(_length / _delta).astype(np.int_) # number of bins + dx = 0.5 * (N * _delta - _length) # add half of the excess to each end + return {'Nbins': N, 'delta': _delta, 'min': _xmin - dx, 'max': _xmax + dx}
+ +
[docs]def get_weights(atoms, weights): + """Check that a `weights` argument is compatible with `atoms`. + + Parameters + ---------- + atoms : AtomGroup or array_like + The atoms that the `weights` should be applied to. Typically this + is a :class:`AtomGroup` but because only the length is compared, + any sequence for which ``len(atoms)`` is defined is acceptable. + weights : {"mass", None} or array_like + All MDAnalysis functions or classes understand "mass" and will then + use ``atoms.masses``. ``None`` indicates equal weights for all atoms. + Using an ``array_like`` assigns a custom weight to each element of + `atoms`. + + Returns + ------- + weights : array_like or None + If "mass" was selected, ``atoms.masses`` is returned, otherwise the + value of `weights` (which can be ``None``). + + Raises + ------ + TypeError + If `weights` is not one of the allowed values or if "mass" is + selected but ``atoms.masses`` is not available. + ValueError + If `weights` is not a 1D array with the same length as + `atoms`, then the exception is raised. :exc:`TypeError` is + also raised if ``atoms.masses`` is not defined. + + """ + if not iterable(weights) and weights == "mass": + try: + weights = atoms.masses + except AttributeError: + errmsg = "weights='mass' selected but atoms.masses is missing" + raise TypeError(errmsg) from None + + if iterable(weights): + if len(np.asarray(weights, dtype=object).shape) != 1: + raise ValueError("weights must be a 1D array, not with shape " + "{0}".format(np.asarray(weights, + dtype=object).shape)) + elif len(weights) != len(atoms): + raise ValueError("weights (length {0}) must be of same length as " + "the atoms ({1})".format( + len(weights), len(atoms))) + elif weights is not None: + raise ValueError("weights must be {'mass', None} or an iterable of the " + "same size as the atomgroup.") + + return weights
+ + +# String functions +# ---------------- + +#: translation table for 3-letter codes --> 1-letter codes +#: .. SeeAlso:: :data:`alternative_inverse_aa_codes` +canonical_inverse_aa_codes = { + 'ALA': 'A', 'CYS': 'C', 'ASP': 'D', 'GLU': 'E', + 'PHE': 'F', 'GLY': 'G', 'HIS': 'H', 'ILE': 'I', + 'LYS': 'K', 'LEU': 'L', 'MET': 'M', 'ASN': 'N', + 'PRO': 'P', 'GLN': 'Q', 'ARG': 'R', 'SER': 'S', + 'THR': 'T', 'VAL': 'V', 'TRP': 'W', 'TYR': 'Y'} +#: translation table for 1-letter codes --> *canonical* 3-letter codes. +#: The table is used for :func:`convert_aa_code`. +amino_acid_codes = {one: three for three, + one in canonical_inverse_aa_codes.items()} +#: non-default charge state amino acids or special charge state descriptions +#: (Not fully synchronized with :class:`MDAnalysis.core.selection.ProteinSelection`.) +alternative_inverse_aa_codes = { + 'HISA': 'H', 'HISB': 'H', 'HSE': 'H', 'HSD': 'H', 'HID': 'H', 'HIE': 'H', 'HIS1': 'H', + 'HIS2': 'H', + 'ASPH': 'D', 'ASH': 'D', + 'GLUH': 'E', 'GLH': 'E', + 'LYSH': 'K', 'LYN': 'K', + 'ARGN': 'R', + 'CYSH': 'C', 'CYS1': 'C', 'CYS2': 'C'} +#: lookup table from 3/4 letter resnames to 1-letter codes. Note that non-standard residue names +#: for tautomers or different protonation states such as HSE are converted to canonical 1-letter codes ("H"). +#: The table is used for :func:`convert_aa_code`. +#: .. SeeAlso:: :data:`canonical_inverse_aa_codes` and :data:`alternative_inverse_aa_codes` +inverse_aa_codes = {} +inverse_aa_codes.update(canonical_inverse_aa_codes) +inverse_aa_codes.update(alternative_inverse_aa_codes) + + +
[docs]def convert_aa_code(x): + """Converts between 3-letter and 1-letter amino acid codes. + + Parameters + ---------- + x : str + 1-letter or 3-letter amino acid code + + Returns + ------- + str + 3-letter or 1-letter amino acid code + + Raises + ------ + ValueError + No conversion can be made; the amino acid code is not defined. + + Note + ---- + Data are defined in :data:`amino_acid_codes` and :data:`inverse_aa_codes`. + """ + if len(x) == 1: + d = amino_acid_codes + else: + d = inverse_aa_codes + + try: + return d[x.upper()] + except KeyError: + errmsg = (f"No conversion for {x} found (1 letter -> 3 letter or 3/4 " + f"letter -> 1 letter)") + raise ValueError(errmsg) from None
+ + +#: Regular expression to match and parse a residue-atom selection; will match +#: "LYS300:HZ1" or "K300:HZ1" or "K300" or "4GB300:H6O" or "4GB300" or "YaA300". +RESIDUE = re.compile(r""" + (?P<aa>([ACDEFGHIKLMNPQRSTVWY]) # 1-letter amino acid + | # or + ([0-9A-Z][a-zA-Z][A-Z][A-Z]?) # 3-letter or 4-letter residue name + ) + \s* # white space allowed + (?P<resid>\d+) # resid + \s* + (: # separator ':' + \s* + (?P<atom>\w+) # atom name + )? # possibly one + """, re.VERBOSE | re.IGNORECASE) + + +# from GromacsWrapper cbook.IndexBuilder +
[docs]def parse_residue(residue): + """Process residue string. + + Parameters + ---------- + residue: str + The *residue* must contain a 1-letter or 3-letter or + 4-letter residue string, a number (the resid) and + optionally an atom identifier, which must be separate + from the residue with a colon (":"). White space is + allowed in between. + + Returns + ------- + tuple + `(3-letter aa string, resid, atomname)`; known 1-letter + aa codes are converted to 3-letter codes + + Examples + -------- + - "LYS300:HZ1" --> ("LYS", 300, "HZ1") + - "K300:HZ1" --> ("LYS", 300, "HZ1") + - "K300" --> ("LYS", 300, None) + - "4GB300:H6O" --> ("4GB", 300, "H6O") + - "4GB300" --> ("4GB", 300, None) + + """ + + # XXX: use _translate_residue() .... + m = RESIDUE.match(residue) + if not m: + raise ValueError("Selection {residue!r} is not valid (only 1/3/4 letter resnames, resid required).".format(**vars())) + resid = int(m.group('resid')) + residue = m.group('aa') + if len(residue) == 1: + resname = convert_aa_code(residue) # only works for AA + else: + resname = residue # use 3-letter for any resname + atomname = m.group('atom') + return (resname, resid, atomname)
+ + +
[docs]def conv_float(s): + """Convert an object `s` to float if possible. + + Function to be passed into :func:`map` or a list comprehension. If + the argument can be interpreted as a float it is converted, + otherwise the original object is passed back. + """ + try: + return float(s) + except ValueError: + return s
+ + +# A dummy, empty, cheaply-hashable object class to use with weakref caching. +# (class object doesn't allow weakrefs to its instances, but user-defined +# classes do) +class _CacheKey: + pass + + +
[docs]def cached(key, universe_validation=False): + """Cache a property within a class. + + Requires the Class to have a cache dict :attr:`_cache` and, with + `universe_validation`, a :attr:`universe` with a cache dict :attr:`_cache`. + + Example + ------- + How to add a cache for a variable to a class by using the `@cached` + decorator:: + + class A(object): + def__init__(self): + self._cache = dict() + + @property + @cached('keyname') + def size(self): + # This code gets run only if the lookup of keyname fails + # After this code has been run once, the result is stored in + # _cache with the key: 'keyname' + return 10.0 + + @property + @cached('keyname', universe_validation=True) + def othersize(self): + # This code gets run only if the lookup + # id(self) is not in the validation set under + # self.universe._cache['_valid']['keyname'] + # After this code has been run once, id(self) is added to that + # set. The validation set can be centrally invalidated at the + # universe level (say, if a topology change invalidates specific + # caches). + return 20.0 + + + .. versionadded:: 0.9.0 + + .. versionchanged::2.0.0 + Added the `universe_validation` keyword. + """ + + def cached_lookup(func): + @wraps(func) + def wrapper(self, *args, **kwargs): + try: + if universe_validation: # Universe-level cache validation + u_cache = self.universe._cache.setdefault('_valid', dict()) + # A WeakSet is used so that keys from out-of-scope/deleted + # objects don't clutter it. + valid_caches = u_cache.setdefault(key, weakref.WeakSet()) + try: + if self._cache_key not in valid_caches: + raise KeyError + except AttributeError: # No _cache_key yet + # Must create a reference key for the validation set. + # self could be used itself as a weakref but set() + # requires hashing it, which can be slow for AGs. Using + # id(self) fails because ints can't be weak-referenced. + self._cache_key = _CacheKey() + raise KeyError + return self._cache[key] + except KeyError: + self._cache[key] = ret = func(self, *args, **kwargs) + if universe_validation: + valid_caches.add(self._cache_key) + return ret + + return wrapper + + return cached_lookup
+ + +
[docs]def unique_rows(arr, return_index=False): + """Return the unique rows of an array. + + Arguments + --------- + arr : numpy.ndarray + Array of shape ``(n1, m)``. + return_index : bool, optional + If ``True``, returns indices of array that formed answer (see + :func:`numpy.unique`) + + Returns + ------- + unique_rows : numpy.ndarray + Array of shape ``(n2, m)`` containing only the unique rows of `arr`. + r_idx : numpy.ndarray (optional) + Array containing the corresponding row indices (if `return_index` + is ``True``). + + Examples + -------- + Remove dupicate rows from an array: + + >>> import numpy as np + >>> from MDAnalysis.lib.util import unique_rows + >>> a = np.array([[0, 1], [1, 2], [1, 2], [0, 1], [2, 3]]) + >>> b = unique_rows(a) + >>> b + array([[0, 1], + [1, 2], + [2, 3]]) + + See Also + -------- + numpy.unique + + """ + # From here, but adapted to handle any size rows + # https://mail.scipy.org/pipermail/scipy-user/2011-December/031200.html + + # This seems to fail if arr.flags['OWNDATA'] is False + # this can occur when second dimension was created through broadcasting + # eg: idx = np.array([1, 2])[None, :] + if not arr.flags['OWNDATA']: + arr = arr.copy() + + m = arr.shape[1] + + if return_index: + u, r_idx = np.unique(arr.view(dtype=np.dtype([(str(i), arr.dtype) + for i in range(m)])), + return_index=True) + return u.view(arr.dtype).reshape(-1, m), r_idx + else: + u = np.unique(arr.view( + dtype=np.dtype([(str(i), arr.dtype) for i in range(m)]) + )) + return u.view(arr.dtype).reshape(-1, m)
+ + +
[docs]def blocks_of(a, n, m): + """Extract a view of ``(n, m)`` blocks along the diagonal of the array `a`. + + Parameters + ---------- + a : numpy.ndarray + Input array, must be C contiguous and at least 2D. + n : int + Size of block in first dimension. + m : int + Size of block in second dimension. + + Returns + ------- + view : numpy.ndarray + A view of the original array with shape ``(nblocks, n, m)``, where + ``nblocks`` is the number of times the miniblocks of shape ``(n, m)`` + fit in the original. + + Raises + ------ + ValueError + If the supplied `n` and `m` don't divide `a` into an integer number + of blocks or if `a` is not C contiguous. + + Examples + -------- + >>> import numpy as np + >>> from MDAnalysis.lib.util import blocks_of + >>> arr = np.arange(16).reshape(4, 4) + >>> view = blocks_of(arr, 2, 2) + >>> view[:] = 100 + >>> arr + array([[100, 100, 2, 3], + [100, 100, 6, 7], + [ 8, 9, 100, 100], + [ 12, 13, 100, 100]]) + + Notes + ----- + `n`, `m` must divide `a` into an identical integer number of blocks. Please + note that if the block size is larger than the input array, this number will + be zero, resulting in an empty view! + + Uses strides and therefore requires that the array is C contiguous. + + Returns a view, so editing this modifies the original array. + + + .. versionadded:: 0.12.0 + + """ + # based on: + # http://stackoverflow.com/a/10862636 + # but generalised to handle non square blocks. + if not a.flags['C_CONTIGUOUS']: + raise ValueError("Input array is not C contiguous.") + + nblocks = a.shape[0] // n + nblocks2 = a.shape[1] // m + + if not nblocks == nblocks2: + raise ValueError("Must divide into same number of blocks in both" + " directions. Got {} by {}" + "".format(nblocks, nblocks2)) + + new_shape = (nblocks, n, m) + new_strides = (n * a.strides[0] + m * a.strides[1], + a.strides[0], a.strides[1]) + + return np.lib.stride_tricks.as_strided(a, new_shape, new_strides)
+ + +
[docs]def group_same_or_consecutive_integers(arr): + """Split an array of integers into a list of same or consecutive + sequences. + + Parameters + ---------- + arr: :class:`numpy.ndarray` + + Returns + ------- + list of :class:`numpy.ndarray` + + Examples + >>> import numpy as np + >>> arr = np.array([ 2, 3, 4, 7, 8, 9, 10, 11, 15, 16]) + >>> group_same_or_consecutive_integers(arr) + [array([2, 3, 4]), array([ 7, 8, 9, 10, 11]), array([15, 16])] + """ + return np.split(arr, np.where(np.ediff1d(arr)-1 > 0)[0] + 1)
+ + +
[docs]class Namespace(dict): + """Class to allow storing attributes in new namespace. """ + + def __getattr__(self, key): + # a.this causes a __getattr__ call for key = 'this' + try: + return dict.__getitem__(self, key) + except KeyError: + errmsg = f'"{key}" is not known in the namespace.' + raise AttributeError(errmsg) from None + + def __setattr__(self, key, value): + dict.__setitem__(self, key, value) + + def __delattr__(self, key): + try: + dict.__delitem__(self, key) + except KeyError: + errmsg = f'"{key}" is not known in the namespace.' + raise AttributeError(errmsg) from None + + def __eq__(self, other): + try: + # this'll allow us to compare if we're storing arrays + assert_equal(self, other) + except AssertionError: + return False + return True
+ + +
[docs]def ltruncate_int(value, ndigits): + """Truncate an integer, retaining least significant digits + + Parameters + ---------- + value : int + value to truncate + ndigits : int + number of digits to keep + + Returns + ------- + truncated : int + only the `ndigits` least significant digits from `value` + + Examples + -------- + >>> from MDAnalysis.lib.util import ltruncate_int + >>> ltruncate_int(123, 2) + 23 + >>> ltruncate_int(1234, 5) + 1234 + """ + return int(str(value)[-ndigits:])
+ + +
[docs]def flatten_dict(d, parent_key=tuple()): + """Flatten a nested dict `d` into a shallow dict with tuples as keys. + + Parameters + ---------- + d : dict + + Returns + ------- + dict + + Note + ----- + Based on https://stackoverflow.com/a/6027615/ + by user https://stackoverflow.com/users/1897/imran + + .. versionadded:: 0.18.0 + """ + + items = [] + for k, v in d.items(): + if type(k) != tuple: + new_key = parent_key + (k, ) + else: + new_key = parent_key + k + if isinstance(v, dict): + items.extend(flatten_dict(v, new_key).items()) + else: + items.append((new_key, v)) + return dict(items)
+ + +
[docs]def static_variables(**kwargs): + """Decorator equipping functions or methods with static variables. + + Static variables are declared and initialized by supplying keyword arguments + and initial values to the decorator. + + Example + ------- + + >>> from MDAnalysis.lib.util import static_variables + >>> @static_variables(msg='foo calls', calls=0) + ... def foo(): + ... foo.calls += 1 + ... print("{}: {}".format(foo.msg, foo.calls)) + ... + >>> foo() + foo calls: 1 + >>> foo() + foo calls: 2 + + + .. note:: Based on https://stackoverflow.com/a/279586 + by `Claudiu <https://stackoverflow.com/users/15055/claudiu>`_ + + .. versionadded:: 0.19.0 + """ + def static_decorator(func): + for kwarg in kwargs: + setattr(func, kwarg, kwargs[kwarg]) + return func + return static_decorator
+ + +# In a lot of Atom/Residue/SegmentGroup methods such as center_of_geometry() and +# the like, results are biased if the calling group is not unique, i.e., if it +# contains duplicates. +# We therefore raise a `DuplicateWarning` whenever an affected method is called +# from a non-unique group. Since several of the affected methods involve calls +# to other affected methods, simply raising a warning in every affected method +# would potentially lead to a massive amount of warnings. This is exactly where +# the `warn_if_unique` decorator below comes into play. It ensures that a +# warning is only raised once for a method using this decorator, and suppresses +# all such warnings that would potentially be raised in methods called by that +# method. Of course, as it is generally the case with Python warnings, this is +# *not threadsafe*. + +
[docs]@static_variables(warned=False) +def warn_if_not_unique(groupmethod): + """Decorator triggering a :class:`~MDAnalysis.exceptions.DuplicateWarning` + if the underlying group is not unique. + + Assures that during execution of the decorated method only the first of + potentially multiple warnings concerning the uniqueness of groups is shown. + + Raises + ------ + :class:`~MDAnalysis.exceptions.DuplicateWarning` + If the :class:`~MDAnalysis.core.groups.AtomGroup`, + :class:`~MDAnalysis.core.groups.ResidueGroup`, or + :class:`~MDAnalysis.core.groups.SegmentGroup` of which the decorated + method is a member contains duplicates. + + + .. versionadded:: 0.19.0 + """ + @wraps(groupmethod) + def wrapper(group, *args, **kwargs): + # Proceed as usual if the calling group is unique or a DuplicateWarning + # has already been thrown: + if group.isunique or warn_if_not_unique.warned: + return groupmethod(group, *args, **kwargs) + # Otherwise, throw a DuplicateWarning and execute the method. + method_name = ".".join( + (group.__class__.__name__, groupmethod.__name__)) + # Try to get the group's variable name(s): + caller_locals = inspect.currentframe().f_back.f_locals.items() + group_names = [] + for name, obj in caller_locals: + try: + if obj is group: + group_names.append("'{}'".format(name)) + except: + pass + if not group_names: + group_name = "'unnamed {}'".format(group.__class__.__name__) + elif len(group_names) == 1: + group_name = group_names[0] + else: + group_name = " a.k.a. ".join(sorted(group_names)) + group_repr = repr(group) + msg = ("{}(): {} {} contains duplicates. Results might be biased!" + "".format(method_name, group_name, group_repr)) + warnings.warn(message=msg, category=DuplicateWarning, stacklevel=2) + warn_if_not_unique.warned = True + try: + result = groupmethod(group, *args, **kwargs) + finally: + warn_if_not_unique.warned = False + return result + return wrapper
+ + +
[docs]def check_coords(*coord_names, **options): + """Decorator for automated coordinate array checking. + + This decorator is intended for use especially in + :mod:`MDAnalysis.lib.distances`. + It takes an arbitrary number of positional arguments which must correspond + to names of positional arguments of the decorated function. + It then checks if the corresponding values are valid coordinate arrays or + an :class:`~MDAnalysis.core.groups.AtomGroup`. + If the input is an array and all these arrays are single coordinates + (i.e., their shape is ``(3,)``), the decorated function can optionally + return a single coordinate (or angle) instead of an array of coordinates + (or angles). This can be used to enable computations of single observables + using functions originally designed to accept only 2-d coordinate arrays. + + If the input is an :class:`~MDAnalysis.core.groups.AtomGroup` it is + converted into its corresponding position array via a call to + `AtomGroup.positions`. + + The checks performed on each individual coordinate array are: + + * Check that coordinate arrays are of type :class:`numpy.ndarray`. + * Check that coordinate arrays have a shape of ``(n, 3)`` (or ``(3,)`` if + single coordinates are allowed; see keyword argument `allow_single`). + * Automatic dtype conversion to ``numpy.float32``. + * Optional replacement by a copy; see keyword argument `enforce_copy` . + * If coordinate arrays aren't C-contiguous, they will be automatically + replaced by a C-contiguous copy. + * Optional check for equal length of all coordinate arrays; see optional + keyword argument `check_lengths_match`. + + Parameters + ---------- + *coord_names : tuple + Arbitrary number of strings corresponding to names of positional + arguments of the decorated function. + **options : dict, optional + * **enforce_copy** (:class:`bool`, optional) -- Enforce working on a + copy of the coordinate arrays. This is useful to ensure that the input + arrays are left unchanged. Default: ``True`` + * **enforce_dtype** (:class:`bool`, optional) -- Enforce a conversion + to float32. Default: ``True`` + * **allow_single** (:class:`bool`, optional) -- Allow the input + coordinate array to be a single coordinate with shape ``(3,)``. + * **convert_single** (:class:`bool`, optional) -- If ``True``, single + coordinate arrays will be converted to have a shape of ``(1, 3)``. + Only has an effect if `allow_single` is ``True``. Default: ``True`` + * **reduce_result_if_single** (:class:`bool`, optional) -- If ``True`` + and *all* input coordinates are single, a decorated function ``func`` + will return ``func()[0]`` instead of ``func()``. Only has an effect if + `allow_single` is ``True``. Default: ``True`` + * **check_lengths_match** (:class:`bool`, optional) -- If ``True``, a + :class:`ValueError` is raised if not all coordinate arrays contain the + same number of coordinates. Default: ``True`` + * **allow_atomgroup** (:class:`bool`, optional) -- If ``False``, a + :class:`TypeError` is raised if an :class:`AtomGroup` is supplied + Default: ``False`` + + Raises + ------ + ValueError + If the decorator is used without positional arguments (for development + purposes only). + + If any of the positional arguments supplied to the decorator doesn't + correspond to a name of any of the decorated function's positional + arguments. + + If any of the coordinate arrays has a wrong shape. + TypeError + If any of the coordinate arrays is not a :class:`numpy.ndarray` or an + :class:`~MDAnalysis.core.groups.AtomGroup`. + + If the dtype of any of the coordinate arrays is not convertible to + ``numpy.float32``. + + Example + ------- + + >>> import numpy as np + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> from MDAnalysis.lib.util import check_coords + >>> @check_coords('coords1', 'coords2', allow_atomgroup=True) + ... def coordsum(coords1, coords2): + ... assert coords1.dtype == np.float32 + ... assert coords2.flags['C_CONTIGUOUS'] + ... return coords1 + coords2 + ... + >>> # automatic dtype conversion: + >>> coordsum(np.zeros(3, dtype=np.int64), np.ones(3)) + array([1., 1., 1.], dtype=float32) + >>> + >>> # automatic handling of non-contiguous arrays: + >>> coordsum(np.zeros(3), np.ones(6)[::2]) + array([1., 1., 1.], dtype=float32) + >>> + >>> # automatic handling of AtomGroups + >>> u = mda.Universe(PSF, DCD) + >>> try: + ... coordsum(u.atoms, u.select_atoms("index 1 to 10")) + ... except ValueError as err: + ... err + ValueError('coordsum(): coords1, coords2 must contain the same number of coordinates, got [3341, 10].') + >>> + >>> # automatic shape checking: + >>> try: + ... coordsum(np.zeros(3), np.ones(6)) + ... except ValueError as err: + ... err + ValueError('coordsum(): coords2.shape must be (3,) or (n, 3), got (6,)') + + + .. versionadded:: 0.19.0 + .. versionchanged:: 2.3.0 + Can now accept an :class:`AtomGroup` as input, and added option + allow_atomgroup with default False to retain old behaviour + """ + enforce_copy = options.get('enforce_copy', True) + enforce_dtype = options.get('enforce_dtype', True) + allow_single = options.get('allow_single', True) + convert_single = options.get('convert_single', True) + reduce_result_if_single = options.get('reduce_result_if_single', True) + check_lengths_match = options.get('check_lengths_match', + len(coord_names) > 1) + allow_atomgroup = options.get('allow_atomgroup', False) + if not coord_names: + raise ValueError("Decorator check_coords() cannot be used without " + "positional arguments.") + + def check_coords_decorator(func): + fname = func.__name__ + code = func.__code__ + argnames = code.co_varnames + nargs = len(code.co_varnames) + ndefaults = len(func.__defaults__) if func.__defaults__ else 0 + # Create a tuple of positional argument names: + nposargs = code.co_argcount - ndefaults + posargnames = argnames[:nposargs] + # The check_coords() decorator is designed to work only for positional + # arguments: + for name in coord_names: + if name not in posargnames: + raise ValueError("In decorator check_coords(): Name '{}' " + "doesn't correspond to any positional " + "argument of the decorated function {}()." + "".format(name, func.__name__)) + + def _check_coords(coords, argname): + is_single = False + if isinstance(coords, np.ndarray): + if allow_single: + if (coords.ndim not in (1, 2)) or (coords.shape[-1] != 3): + errmsg = (f"{fname}(): {argname}.shape must be (3,) or " + f"(n, 3), got {coords.shape}") + raise ValueError(errmsg) + if coords.ndim == 1: + is_single = True + if convert_single: + coords = coords[None, :] + else: + if (coords.ndim != 2) or (coords.shape[1] != 3): + errmsg = (f"{fname}(): {argname}.shape must be (n, 3) " + f"got {coords.shape}") + raise ValueError(errmsg) + if enforce_dtype: + try: + coords = coords.astype( + np.float32, order='C', copy=enforce_copy) + except ValueError: + errmsg = (f"{fname}(): {argname}.dtype must be" + f"convertible to float32, got" + f" {coords.dtype}.") + raise TypeError(errmsg) from None + # coordinates should now be the right shape + ncoord = coords.shape[0] + else: + try: + coords = coords.positions # homogenise to a numpy array + ncoord = coords.shape[0] + if not allow_atomgroup: + err = TypeError("AtomGroup or other class with a" + "`.positions` method supplied as an" + "argument, but allow_atomgroup is" + " False") + raise err + except AttributeError: + raise TypeError(f"{fname}(): Parameter '{argname}' must be" + f" a numpy.ndarray or an AtomGroup," + f" got {type(coords)}.") + + return coords, is_single, ncoord + + @wraps(func) + def wrapper(*args, **kwargs): + # Check for invalid function call: + if len(args) != nposargs: + # set marker for testing purposes: + wrapper._invalid_call = True + if len(args) > nargs: + # too many arguments, invoke call: + return func(*args, **kwargs) + for name in posargnames[:len(args)]: + if name in kwargs: + # duplicate argument, invoke call: + return func(*args, **kwargs) + for name in posargnames[len(args):]: + if name not in kwargs: + # missing argument, invoke call: + return func(*args, **kwargs) + for name in kwargs: + if name not in argnames: + # unexpected kwarg, invoke call: + return func(*args, **kwargs) + # call is valid, unset test marker: + wrapper._invalid_call = False + args = list(args) + ncoords = [] + all_single = allow_single + for name in coord_names: + idx = posargnames.index(name) + if idx < len(args): + args[idx], is_single, ncoord = _check_coords(args[idx], + name) + all_single &= is_single + ncoords.append(ncoord) + else: + kwargs[name], is_single, ncoord = _check_coords(kwargs[name], + name) + all_single &= is_single + ncoords.append(ncoord) + if check_lengths_match and ncoords: + if ncoords.count(ncoords[0]) != len(ncoords): + raise ValueError("{}(): {} must contain the same number of " + "coordinates, got {}." + "".format(fname, ", ".join(coord_names), + ncoords)) + # If all input coordinate arrays were 1-d, so should be the output: + if all_single and reduce_result_if_single: + return func(*args, **kwargs)[0] + return func(*args, **kwargs) + return wrapper + return check_coords_decorator
+ + +
[docs]def check_atomgroup_not_empty(groupmethod): + """Decorator triggering a ``ValueError`` if the underlying group is empty. + + Avoids downstream errors in computing properties of empty atomgroups. + + Raises + ------ + ValueError + If the input :class:`~MDAnalysis.core.groups.AtomGroup`, + of a decorated method is empty. + + + .. versionadded:: 2.4.0 + """ + @wraps(groupmethod) + def wrapper(group, *args, **kwargs): + # Throw error if the group is empty. + if not group.atoms: + raise ValueError("AtomGroup is empty.") + # Proceed as usual if the calling group is not empty. + else: + result = groupmethod(group, *args, **kwargs) + return result + return wrapper
+ + +# ------------------------------------------------------------------ +# +# our own deprecate function, derived from numpy (see +# https://github.com/MDAnalysis/mdanalysis/pull/1763#issuecomment-403231136) +# +# From numpy/lib/utils.py 1.14.5 (used under the BSD 3-clause licence, +# https://www.numpy.org/license.html#license) and modified + +def _set_function_name(func, name): + func.__name__ = name + return func + + +
[docs]class _Deprecate(object): + """ + Decorator class to deprecate old functions. + + Refer to `deprecate` for details. + + See Also + -------- + deprecate + + + .. versionadded:: 0.19.0 + """ + + def __init__(self, old_name=None, new_name=None, + release=None, remove=None, message=None): + self.old_name = old_name + self.new_name = new_name + if release is None: + raise ValueError("deprecate: provide release in which " + "feature was deprecated.") + self.release = str(release) + self.remove = str(remove) if remove is not None else remove + self.message = message + + def __call__(self, func, *args, **kwargs): + """ + Decorator call. Refer to ``decorate``. + + """ + old_name = self.old_name + new_name = self.new_name + message = self.message + release = self.release + remove = self.remove + + if old_name is None: + try: + old_name = func.__name__ + except AttributeError: + old_name = func.__name__ + if new_name is None: + depdoc = "`{0}` is deprecated!".format(old_name) + else: + depdoc = "`{0}` is deprecated, use `{1}` instead!".format( + old_name, new_name) + + warn_message = depdoc + + remove_text = "" + if remove is not None: + remove_text = "`{0}` will be removed in release {1}.".format( + old_name, remove) + warn_message += "\n" + remove_text + if message is not None: + warn_message += "\n" + message + + def newfunc(*args, **kwds): + """This function is deprecated.""" + warnings.warn(warn_message, DeprecationWarning, stacklevel=2) + return func(*args, **kwds) + + newfunc = _set_function_name(newfunc, old_name) + + # Build the doc string + # First line: func is deprecated, use newfunc instead! + # Normal docs follows. + # Last: .. deprecated:: + + # make sure that we do not mess up indentation, otherwise sphinx + # docs do not build properly + try: + doc = dedent_docstring(func.__doc__) + except TypeError: + doc = "" + + deprecation_text = dedent_docstring("""\n\n + .. deprecated:: {0} + {1} + {2} + """.format(release, + message if message else depdoc, + remove_text)) + + doc = "{0}\n\n{1}\n{2}\n".format(depdoc, doc, deprecation_text) + + newfunc.__doc__ = doc + try: + d = func.__dict__ + except AttributeError: + pass + else: + newfunc.__dict__.update(d) + return newfunc
+ + +
[docs]def deprecate(*args, **kwargs): + r"""Issues a DeprecationWarning, adds warning to `old_name`'s + docstring, rebinds ``old_name.__name__`` and returns the new + function object. + + This function may also be used as a decorator. + + It adds a restructured text ``.. deprecated:: release`` block with + the sphinx deprecated role to the end of the docs. The `message` + is added under the deprecation block and contains the `release` in + which the function was deprecated. + + Parameters + ---------- + func : function + The function to be deprecated. + old_name : str, optional + The name of the function to be deprecated. Default is None, in + which case the name of `func` is used. + new_name : str, optional + The new name for the function. Default is None, in which case the + deprecation message is that `old_name` is deprecated. If given, the + deprecation message is that `old_name` is deprecated and `new_name` + should be used instead. + release : str + Release in which the function was deprecated. This is given as + a keyword argument for technical reasons but is required; a + :exc:`ValueError` is raised if it is missing. + remove : str, optional + Release for which removal of the feature is planned. + message : str, optional + Additional explanation of the deprecation. Displayed in the + docstring after the warning. + + Returns + ------- + old_func : function + The deprecated function. + + Examples + -------- + When :func:`deprecate` is used as a function as in the following + example, + + .. code-block:: python + + oldfunc = deprecate(func, release="0.19.0", remove="1.0", + message="Do it yourself instead.") + + then ``oldfunc`` will return a value after printing + :exc:`DeprecationWarning`; ``func`` is still available as it was + before. + + When used as a decorator, ``func`` will be changed and issue the + warning and contain the deprecation note in the do string. + + .. code-block:: python + + @deprecate(release="0.19.0", remove="1.0", + message="Do it yourself instead.") + def func(): + \"\"\"Just pass\"\"\" + pass + + The resulting doc string (``help(func)``) will look like: + + .. code-block:: reST + + `func` is deprecated! + + Just pass. + + .. deprecated:: 0.19.0 + Do it yourself instead. + `func` will be removed in 1.0. + + (It is possible but confusing to change the name of ``func`` with + the decorator so it is not recommended to use the `new_func` + keyword argument with the decorator.) + + .. versionadded:: 0.19.0 + + """ + # Deprecate may be run as a function or as a decorator + # If run as a function, we initialise the decorator class + # and execute its __call__ method. + + if args: + fn = args[0] + args = args[1:] + return _Deprecate(*args, **kwargs)(fn) + else: + return _Deprecate(*args, **kwargs)
+# +# ------------------------------------------------------------------ + + +
[docs]def dedent_docstring(text): + """Dedent typical python doc string. + + Parameters + ---------- + text : str + string, typically something like ``func.__doc__``. + + Returns + ------- + str + string with the leading common whitespace removed from each + line + + See Also + -------- + textwrap.dedent + + + .. versionadded:: 0.19.0 + """ + lines = text.splitlines() + if len(lines) < 2: + return text.lstrip() + + # treat first line as special (typically no leading whitespace!) which messes up dedent + return lines[0].lstrip() + "\n" + textwrap.dedent("\n".join(lines[1:]))
+ + +
[docs]def check_box(box): + """Take a box input and deduce what type of system it represents based on + the shape of the array and whether all angles are 90 degrees. + + Parameters + ---------- + box : array_like + The unitcell dimensions of the system, which can be orthogonal or + triclinic and must be provided in the same format as returned by + :attr:`MDAnalysis.coordinates.timestep.Timestep.dimensions`: + ``[lx, ly, lz, alpha, beta, gamma]``. + + Returns + ------- + boxtype : {``'ortho'``, ``'tri_vecs'``} + String indicating the box type (orthogonal or triclinic). + checked_box : numpy.ndarray + Array of dtype ``numpy.float32`` containing box information: + * If `boxtype` is ``'ortho'``, `cecked_box` will have the shape ``(3,)`` + containing the x-, y-, and z-dimensions of the orthogonal box. + * If `boxtype` is ``'tri_vecs'``, `cecked_box` will have the shape + ``(3, 3)`` containing the triclinic box vectors in a lower triangular + matrix as returned by + :meth:`~MDAnalysis.lib.mdamath.triclinic_vectors`. + + Raises + ------ + ValueError + If `box` is not of the form ``[lx, ly, lz, alpha, beta, gamma]`` + or contains data that is not convertible to ``numpy.float32``. + + See Also + -------- + MDAnalysis.lib.mdamath.triclinic_vectors + + + .. versionchanged: 0.19.0 + * Enforced correspondence of `box` with specified format. + * Added automatic conversion of input to :class:`numpy.ndarray` with + dtype ``numpy.float32``. + * Now also returns the box in the format expected by low-level functions + in :mod:`~MDAnalysis.lib.c_distances`. + * Removed obsolete box types ``tri_box`` and ``tri_vecs_bad``. + """ + if box is None: + raise ValueError("Box is None") + from .mdamath import triclinic_vectors # avoid circular import + box = np.asarray(box, dtype=np.float32, order='C') + if box.shape != (6,): + raise ValueError("Invalid box information. Must be of the form " + "[lx, ly, lz, alpha, beta, gamma].") + if np.all(box[3:] == 90.): + return 'ortho', box[:3] + return 'tri_vecs', triclinic_vectors(box)
+ + +
[docs]def store_init_arguments(func): + """Decorator to store arguments passed to the init method of a class. + + Arguments are stored as a dictionary in ``cls._kwargs``. + + Notes + ----- + * Only does a shallow copy, if the arguments are changed + by the class after passing through the decorator this will be + reflected in the stored arguments. + * If not empty, ``args`` is not unpacked and stored as-is in the + dictionary. If no ``args`` are passed, then no ``arg`` entry will be + stored in the dictionary. + + + .. versionadded:: 2.2.0 + """ + sig = inspect.signature(func) + + @functools.wraps(func) + def wrapper(self, *args, **kwargs): + if not hasattr(self, "_kwargs"): + arg_values = sig.bind(self, *args, **kwargs) + arg_values.apply_defaults() + self._kwargs = {} + for key, arg in arg_values.arguments.items(): + if key != "self": + if key == "kwargs": + for k, v in arg.items(): + self._kwargs[k] = v + elif key == "args": + if len(arg) > 0: + self._kwargs[key] = arg + else: + self._kwargs[key] = arg + return func(self, *args, **kwargs) + return wrapper
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections.html b/2.7.0-dev0/_modules/MDAnalysis/selections.html new file mode 100644 index 0000000000..c700e3ad83 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections.html @@ -0,0 +1,239 @@ + + + + + + MDAnalysis.selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections

+# -*- 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-2017 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
+#
+
+
+"""
+Selection exporters
+===================
+
+Functions to write a :class:`MDAnalysis.core.groups.AtomGroup` selection
+to a file so that it can be used in another programme.
+
+:mod:`MDAnalysis.selections.vmd`
+    VMD_ selections
+:mod:`MDAnalysis.selections.pymol`
+    PyMol_ selections
+:mod:`MDAnalysis.selections.gromacs`
+    Gromacs_ selections
+:mod:`MDAnalysis.selections.charmm`
+    CHARMM_ selections
+
+The :class:`MDAnalysis.selections.base.SelectionWriterBase` base class and
+helper functions are in :mod:`MDAnalysis.selections.base`, with the
+exception of `:func:get_writer`:
+
+.. autofunction:: get_writer
+"""
+import os.path
+
+from .. import _SELECTION_WRITERS
+
+from . import base
+from . import vmd
+from . import pymol
+from . import gromacs
+from . import charmm
+from . import jmol
+
+
+
[docs]def get_writer(filename: str, defaultformat: str) -> base.SelectionWriterBase: + """Return a SelectionWriter for `filename` or a `defaultformat`. + + Parameters + ---------- + filename : str + name of the output file; the extension is used to guess the file format + defaultformat : str + if `filename` does not have an extension, use `defaultformat` instead + + Returns + ------- + SelectionWriterBase : `type` + the writer *class* for the detected format + + Raises + ------ + :exc:`NotImplementedError` + for any format that is not defined + """ + format = None + if filename: + format = os.path.splitext(filename)[1][1:] # strip initial dot! + format = format or defaultformat # use default if no fmt from fn + format = format.strip().upper() # canonical for lookup + try: + return _SELECTION_WRITERS[format] + except KeyError: + errmsg = (f"Writing as {format} is not implemented; only " + f"{ _SELECTION_WRITERS.keys()} will work.") + raise NotImplementedError(errmsg) from None
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/base.html b/2.7.0-dev0/_modules/MDAnalysis/selections/base.html new file mode 100644 index 0000000000..a9f6ec3afd --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/base.html @@ -0,0 +1,400 @@ + + + + + + MDAnalysis.selections.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.base

+# -*- 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-2017 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
+#
+
+
+"""
+Base classes for the selection writers
+======================================
+
+Specialized SelectionWriters are derived from
+:class:`SelectionWriterBase`. Override the :meth:`~SelectionWriterBase._write_head`,
+:meth:`~SelectionWriterBase._translate`, and :meth:`~SelectionWriterBase._write_tail`
+methods.
+
+.. autoclass:: SelectionWriterBase
+   :members: __init__, write, _translate, _write_head, _write_tail, comment
+
+.. autofunction:: join
+
+"""
+import os.path
+
+from ..lib import util
+from . import _SELECTION_WRITERS
+
+
+
[docs]def join(seq, string="", func=None): + """Create a list from sequence. + + *string* is appended to each element but the last. + + *func* is applied to every element before appending *string*. + """ + if func is None: + func = lambda x: x + return [func(x) + string for x in seq[:-1]] + [func(seq[-1])]
+ + +class _Selectionmeta(type): + # Auto register upon class creation + def __init__(cls, name, bases, classdict): + type.__init__(type, name, bases, classdict) + try: + fmt = util.asiterable(classdict['format']) + except KeyError: + pass + else: + for f in fmt: + if f is None: + continue + f = f.upper() + _SELECTION_WRITERS[f] = cls + + +
[docs]class SelectionWriterBase(metaclass=_Selectionmeta): + """Export a selection in MDAnalysis to a format usable in an external package. + + The :class:`SelectionWriterBase` writes a selection string to a file + that can be used in another package such as `VMD`_, `PyMOL`_, + `Gromacs`_ or `CHARMM`_. In this way, analysis and visualization + can be done with the best or most convenient tools at hand. + + :class:`SelectionWriterBase` is a base class and child classes are + derived with the appropriate customizations for the package file + format. + + .. _VMD: http://www.ks.uiuc.edu/Research/vmd/ + .. _PyMol: http://www.pymol.org/ + .. _CHARMM: http://www.charmm.org/ + .. _Gromacs: http://www.gromacs.org/ + + .. versionchanged:: 0.11.0 + Can now also write to a :class:`~MDAnalysis.lib.util.NamedStream` instead + of a normal file (using :class:`~MDAnalysis.lib.util.openany`). + + .. versionchanged:: 0.16.0 + Remove the `wa` mode. The file is now open when the instance is created + and closed with the :meth:`close` method or when exiting the `with` + statement. + """ + #: Name of the format. + format = None + #: Extension of output files. + ext = None + #: Special character to continue a line across a newline. + continuation = '' + #: Comment format string; should contain '%s' or ``None`` for no comments. + commentfmt = None + default_numterms = 8 + +
[docs] def __init__(self, filename, mode="w", numterms=None, preamble=None, **kwargs): + """Set up for writing to *filename*. + + Parameters + ---------- + filename: + output file + mode: + create a new file ("w"), or append ("a") to existing file ["w"] + numterms: + number of individual index numbers per line for output + formats that write multiple entries in one line. If set + to 0 or ``False`` then no special formatting is done [8] + preamble: + string that is written as a comment at the top of the file [] + kwargs: + use as defaults for :meth:`write` + """ + self.filename = util.filename(filename, ext=self.ext) + if not mode in ('a', 'w'): + raise ValueError("mode must be one of 'w', 'a', not {0!r}".format(mode)) + self.mode = mode + self._current_mode = mode[0] + if numterms is None or numterms < 0: + self.numterms = self.default_numterms + elif numterms is False: + self.numterms = 0 + else: + self.numterms = numterms + self.preamble = preamble + self.otherargs = kwargs # hack + self.number = 0 + + self._outfile = util.anyopen(self.filename, mode=self._current_mode) + + self.write_preamble()
+ +
[docs] def comment(self, s): + """Return string *s* interpolated into the comment format string. + + If no :attr:`SelectionWriterBase.commentfmt` is defined (None) then the + empty string is returned because presumably there is no way to enter + comments into the file. + + A newline is appended to non-empty strings. + """ + if self.commentfmt is None: + return '' + return self.commentfmt % s + '\n'
+ + def write_preamble(self): + """Write a header, depending on the file format.""" + if self.preamble is None: + return + self._outfile.write(self.comment(self.preamble)) + +
[docs] def write(self, selection, number=None, name=None, frame=None, mode=None): + """Write selection to the output file. + + Parameters + ---------- + selection: + a :class:`MDAnalysis.core.groups.AtomGroup` + number: + selection will be named "mdanalysis<number>" + (``None`` auto increments between writes; useful + when appending) [``None``] + name: + selection will be named *name* (instead of numbered) [``None``] + frame: + write selection of this frame (or the current one if + ``None`` [``None``] + """ + u = selection.universe + if frame is not None: + u.trajectory[frame] # advance to frame + else: + try: + frame = u.trajectory.ts.frame + except AttributeError: + frame = 1 # should catch cases when we are analyzing a single PDB (?) + name = name or self.otherargs.get('name', None) + if name is None: + if number is None: + self.number += 1 + number = self.number + name = "mdanalysis{number:03d}".format(**vars()) + # build whole selection in one go (cleaner way to deal with + # to deal with line breaks after self.numterms entries) + # selection_list must contain entries to be joined with spaces or linebreaks + selection_terms = self._translate(selection.atoms) + step = self.numterms or len(selection.atoms) + + out = self._outfile + self._write_head(out, name=name) + for iatom in range(0, len(selection.atoms), step): + line = selection_terms[iatom:iatom + step] + out.write(" ".join(line)) + if len(line) == step and not iatom + step == len(selection.atoms): + out.write(' ' + self.continuation + '\n') + out.write(' ') # safe so that we don't have to put a space at the start of tail + self._write_tail(out) + out.write('\n') # always terminate with newline
+ + def close(self): + """Close the file + + .. versionadded:: 0.16.0 + """ + self._outfile.close() + +
[docs] def _translate(self, atoms, **kwargs): + """Translate atoms into a list of native selection terms. + + - build list of ALL selection terms as if this was a single line, e.g. + ``['index 12 |', 'index 22 |', 'index 33']`` + - only one term per atom!! + - terms *must* be strings + - something like:: + " ".join(terms) + + must work + """ + raise NotImplementedError
+ +
[docs] def _write_head(self, out, **kwargs): + """Initial output to open file object *out*.""" + pass # pylint: disable=unnecessary-pass
+ +
[docs] def _write_tail(self, out, **kwargs): + """Last output to open file object *out*.""" + pass # pylint: disable=unnecessary-pass
+ + # Context manager support to match Coordinate writers + # all file handles use a with block in their write method, so these do nothing special + def __enter__(self): + return self + + def __exit__(self, *exc): + self.close()
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/charmm.html b/2.7.0-dev0/_modules/MDAnalysis/selections/charmm.html new file mode 100644 index 0000000000..67bbbdaa68 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/charmm.html @@ -0,0 +1,215 @@ + + + + + + MDAnalysis.selections.charmm — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.charmm

+# -*- 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-2017 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
+#
+
+
+"""
+CHARMM selections
+=================
+
+Write :class:`MDAnalysis.core.groups.AtomGroup` selection to a `str` file
+that defines a `CHARMM selection`_. To be used in CHARMM_ like this::
+
+  stream macro.str
+
+The selection is named *mdanalysis001*.
+
+.. autoclass:: SelectionWriter
+   :inherited-members:
+
+.. _CHARMM: http://www.charmm.org
+.. _CHARMM selection: http://www.charmm.org/documentation/c34b1/select.html
+"""
+from . import base
+
+
+
[docs]class SelectionWriter(base.SelectionWriterBase): + format = ["CHARMM", "str"] + ext = "str" + continuation = '-' + commentfmt = "! %s" + default_numterms = 4 # be conservative because CHARMM only reads 72 columns + + def _translate(self, atoms, **kwargs): + # CHARMM index is 1-based + def _index(atom): + return "BYNUM {0:d}".format((atom.index + 1)) + + return base.join(atoms, ' .or.', _index) + + def _write_head(self, out, **kwargs): + out.write(self.comment("MDAnalysis CHARMM selection")) + out.write("DEFINE {name!s} SELECT ".format(**kwargs) + self.continuation + '\n') + + def _write_tail(self, out, **kwargs): + out.write("END")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/gromacs.html b/2.7.0-dev0/_modules/MDAnalysis/selections/gromacs.html new file mode 100644 index 0000000000..0311ef7efd --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/gromacs.html @@ -0,0 +1,206 @@ + + + + + + MDAnalysis.selections.gromacs — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.gromacs

+# -*- 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-2017 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
+#
+
+
+"""
+Gromacs selections
+==================
+
+Write :class:`MDAnalysis.core.groups.AtomGroup` selection to a `ndx`_ file
+that defines a Gromacs_ index group. To be used in Gromacs like this::
+
+  <GROMACS_COMMAND> -n macro.ndx
+
+The index groups are named *mdanalysis001*, *mdanalysis002*, etc.
+
+.. _Gromacs: http://www.gromacs.org
+.. _ndx: http://www.gromacs.org/Documentation/File_Formats/Index_File
+
+.. autoclass:: SelectionWriter
+   :inherited-members:
+"""
+from . import base
+
+
+
[docs]class SelectionWriter(base.SelectionWriterBase): + format = ["Gromacs", "ndx"] + ext = "ndx" + default_numterms = 12 + + def _translate(self, atoms, **kwargs): + # Gromacs index is 1-based; MDAnalysis is 0-based + return [str(atom.index + 1) for atom in atoms] + + def _write_head(self, out, **kwargs): + out.write("[ {name!s} ]\n".format(**kwargs))
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/jmol.html b/2.7.0-dev0/_modules/MDAnalysis/selections/jmol.html new file mode 100644 index 0000000000..e11d5f5a4d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/jmol.html @@ -0,0 +1,213 @@ + + + + + + MDAnalysis.selections.jmol — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.jmol

+# -*- 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-2017 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
+#
+
+"""
+Jmol selections
+=================
+
+Write :class:`MDAnalysis.core.groups.AtomGroup` selection to a `str` file
+that defines a `Jmol selection`_. To be used in Jmol_ like this::
+
+  script macro.spt
+  select ~selection
+
+The selection is named *mdanalysis001*.TODO
+
+.. autoclass:: SelectionWriter
+   :inherited-members:
+
+.. _Jmol: http://wiki.jmol.org/index.php/Main_Page
+.. _Jmol selection: http://chemapps.stolaf.edu/jmol/docs/#define
+"""
+from . import base
+
+
+
[docs]class SelectionWriter(base.SelectionWriterBase): + format = ["Jmol", "spt"] + ext = "spt" + default_numterms = None + commentfmt = '#' + + def _translate(self, atoms, **kwargs): + # Jmol indexing is 0 based when using atom bitsets + def _index(atom): + return str(atom.index) + + return base.join(atoms, ' ', _index) + + def _write_head(self, out, **kwargs): + out.write("@~{name!s} ({{".format(**kwargs)) + + def _write_tail(self, out, **kwargs): + out.write("});")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/pymol.html b/2.7.0-dev0/_modules/MDAnalysis/selections/pymol.html new file mode 100644 index 0000000000..6b8451c5cd --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/pymol.html @@ -0,0 +1,213 @@ + + + + + + MDAnalysis.selections.pymol — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.pymol

+# -*- 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-2017 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
+#
+
+
+"""
+PyMOL selections
+=================
+
+Write :class:`MDAnalysis.core.groups.AtomGroup` selection to a
+script `pml`_ file that defines PyMOL_ atomselect macros. To be used
+in PyMOL like this::
+
+  @macros.pml
+
+The selections should appear in the user interface.
+
+.. _PyMOL: http://www.pymol.org
+.. _pml: http://pymol.sourceforge.net/newman/user/S0210start_cmds.html#6_5_1
+
+.. autoclass:: SelectionWriter
+   :inherited-members:
+"""
+from . import base
+
+
+
[docs]class SelectionWriter(base.SelectionWriterBase): + format = ["PyMol", "pml"] + ext = "pml" + continuation = '\\' # quoted backslash! + commentfmt = "# %s" + default_numterms = 6 + + def _translate(self, atoms, **kwargs): + # PyMol index is 1-based + def _index(atom): + return "index {0:d}".format((atom.index + 1)) + + return base.join(atoms, ' |', _index) + + def _write_head(self, out, **kwargs): + out.write(self.comment("MDAnalysis PyMol selection")) + out.write("select {name!s}, ".format(**kwargs) + self.continuation + '\n')
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/selections/vmd.html b/2.7.0-dev0/_modules/MDAnalysis/selections/vmd.html new file mode 100644 index 0000000000..ee9073ad45 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/selections/vmd.html @@ -0,0 +1,219 @@ + + + + + + MDAnalysis.selections.vmd — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.selections.vmd

+# -*- 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-2017 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
+#
+
+
+"""
+VMD selections
+==============
+
+Write :class:`MDAnalysis.core.groups.AtomGroup` selection to a VMD_ `tcl` file
+(for example, "macros.vmd") that defines `atomselect macros`_. To be used in
+VMD like this (assuming the default macro name "mdanalysis001"):
+
+.. code-block:: tcl
+
+   source macros.vmd
+   set sel [atomselect top mdanalysis001]
+
+In the VMD_ GUI the macro "mdanalysis001" appears in the
+:menuselection:`Graphics --> Representations` window under
+:guilabel:`Selections: Singlewords`.
+
+
+.. _VMD: http://www.ks.uiuc.edu/Research/vmd/
+.. _atomselect macros: http://www.ks.uiuc.edu/Research/vmd/current/ug/node120.html
+
+.. autoclass:: SelectionWriter
+   :inherited-members:
+
+"""
+from . import base
+
+
+
[docs]class SelectionWriter(base.SelectionWriterBase): + format = "VMD" + ext = "vmd" + continuation = '\\' + commentfmt = "# %s" + + def _write_head(self, out, **kwargs): + out.write(self.comment("MDAnalysis VMD selection")) + out.write("atomselect macro {name!s} {{index ".format(**kwargs)) + + def _translate(self, atoms, **kwargs): + # VMD index is 0-based (as is MDAnalysis) + return [str(atom.index) for atom in atoms] + + def _write_tail(self, out, **kwargs): + out.write("}")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/CRDParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/CRDParser.html new file mode 100644 index 0000000000..c615cd792f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/CRDParser.html @@ -0,0 +1,318 @@ + + + + + + MDAnalysis.topology.CRDParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.CRDParser

+# -*- 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-2017 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
+#
+
+"""
+CRD topology parser
+===================
+
+Read a list of atoms from a CHARMM CARD coordinate file (CRD_)
+to build a basic topology.  Reads atom ids (ATOMNO), atom names (TYPES),
+resids (RESID), residue numbers (RESNO), residue names (RESNames), segment ids
+(SEGID) and tempfactor (Weighting).  Atom element and mass are guessed based on
+the name of the atom.
+
+Residues are detected through a change is either resid or resname
+while segments are detected according to changes in segid.
+
+.. _CRD: https://www.charmmtutorial.org/index.php/CHARMM:The_Basics
+
+
+Classes
+-------
+
+.. autoclass:: CRDParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+
+from ..lib.util import openany, FORTRANReader
+from .base import TopologyReaderBase, change_squash
+from . import guessers
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Masses,
+    Resids,
+    Resnames,
+    Resnums,
+    Segids,
+    Tempfactors,
+)
+
+
+
[docs]class CRDParser(TopologyReaderBase): + """Parse a CHARMM CARD coordinate file for topology information. + + Reads the following Attributes: + - Atomids + - Atomnames + - Tempfactors + - Resids + - Resnames + - Resnums + - Segids + + Guesses the following attributes: + - Atomtypes + - Masses + """ + format = 'CRD' + +
[docs] def parse(self, **kwargs): + """Create the Topology object + + Returns + ------- + MDAnalysis Topology object + + Todo + ---- + Could use the resnum and temp factor better + """ + extformat = FORTRANReader('2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10') + stdformat = FORTRANReader('2I5,1X,A4,1X,A4,3F10.5,1X,A4,1X,A4,F10.5') + + atomids = [] + atomnames = [] + tempfactors = [] + resids = [] + resnames = [] + resnums = [] + segids = [] + + with openany(self.filename) as crd: + for linenum, line in enumerate(crd): + # reading header + if line.split()[0] == '*': + continue + elif line.split()[-1] == 'EXT' and int(line.split()[0]): + r = extformat + continue + elif line.split()[0] == line.split()[-1] and line.split()[0] != '*': + r = stdformat + continue + # anything else should be an atom + try: + (serial, resnum, resName, name, + x, y, z, segid, resid, tempFactor) = r.read(line) + except Exception: + errmsg = (f"Check CRD format at line {linenum + 1}: " + f"{line.rstrip()}") + raise ValueError(errmsg) from None + + atomids.append(serial) + atomnames.append(name) + tempfactors.append(tempFactor) + resids.append(resid) + resnames.append(resName) + resnums.append(resnum) + segids.append(segid) + + # Convert to np arrays + atomids = np.array(atomids, dtype=np.int32) + atomnames = np.array(atomnames, dtype=object) + tempfactors = np.array(tempfactors, dtype=np.float32) + resids = np.array(resids, dtype=np.int32) + resnames = np.array(resnames, dtype=object) + resnums = np.array(resnums, dtype=np.int32) + segids = np.array(segids, dtype=object) + + # Guess some attributes + atomtypes = guessers.guess_types(atomnames) + masses = guessers.guess_masses(atomtypes) + + atom_residx, (res_resids, res_resnames, res_resnums, res_segids) = change_squash( + (resids, resnames), (resids, resnames, resnums, segids)) + res_segidx, (seg_segids,) = change_squash( + (res_segids,), (res_segids,)) + + top = Topology(len(atomids), len(res_resids), len(seg_segids), + attrs=[ + Atomids(atomids), + Atomnames(atomnames), + Atomtypes(atomtypes, guessed=True), + Masses(masses, guessed=True), + Tempfactors(tempfactors), + Resids(res_resids), + Resnames(res_resnames), + Resnums(res_resnums), + Segids(seg_segids), + ], + atom_resindex=atom_residx, + residue_segindex=res_segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/DMSParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/DMSParser.html new file mode 100644 index 0000000000..d002c377e6 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/DMSParser.html @@ -0,0 +1,370 @@ + + + + + + MDAnalysis.topology.DMSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.DMSParser

+# -*- 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-2017 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
+#
+
+"""
+DESRES Molecular Structure file format topology parser
+======================================================
+
+Classes to read a topology from a DESRES_ Molecular Structure file
+format (DMS_) coordinate files (as used by the Desmond_ MD package).
+
+.. _DESRES: http://www.deshawresearch.com
+.. _Desmond: http://www.deshawresearch.com/resources_desmond.html
+.. _DMS: http://www.deshawresearch.com/Desmond_Users_Guide-0.7.pdf
+
+Classes
+-------
+
+.. autoclass:: DMSParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+import sqlite3
+import os
+
+from . import guessers
+from .base import TopologyReaderBase, change_squash
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Bonds,
+    Charges,
+    ChainIDs,
+    Atomtypes,
+    Masses,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+    AtomAttr,  # for custom Attributes
+)
+
+
+class Atomnums(AtomAttr):
+    """The number for each Atom"""
+    attrname = 'atomnums'
+    singular = 'atomnum'
+
+
+
[docs]class DMSParser(TopologyReaderBase): + """Read a topology from a DESRES_ Molecular Structure file. + + Format (DMS_) coordinate files (as used by the Desmond_ MD package). + + Reads the following attributes: + Atom: + - Atomids + - Atomnums + - Atomnames + - Masses + - Charges + - Chainids + Residue: + - Resnames + - Resids + Segment: + - Segids + Guesses the following attributes + - Atomtypes + + .. _DESRES: http://www.deshawresearch.com + .. _Desmond: http://www.deshawresearch.com/resources_desmond.html + .. _DMS: http://www.deshawresearch.com/Desmond_Users_Guide-0.7.pdf + """ + format = 'DMS' + +
[docs] def parse(self, **kwargs): + """Parse DMS file *filename* and return the Topology object""" + # Fix by SB: Needed because sqlite3.connect does not raise anything + # if file is not there + if not os.path.isfile(self.filename): + raise IOError("No such file: {0}".format(self.filename)) + + def dict_factory(cursor, row): + """ + Fetch SQL records as dictionaries, rather than the default tuples. + """ + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + + attrs = {} + + # Row factories for different data types + facs = {np.int32: lambda c, r: r[0], + np.float32: lambda c, r: r[0], + object: lambda c, r: str(r[0].strip())} + + with sqlite3.connect(self.filename) as con: + # Selecting single column, so just strip tuple + for attrname, dt in [ + ('id', np.int32), + ('anum', np.int32), + ('mass', np.float32), + ('charge', np.float32), + ('name', object), + ('resname', object), + ('resid', np.int32), + ('chain', object), + ('segid', object), + ]: + try: + cur = con.cursor() + cur.row_factory = facs[dt] + cur.execute('SELECT {} FROM particle' + ''.format(attrname)) + vals = cur.fetchall() + except sqlite3.DatabaseError: + errmsg = "Failed reading the atoms from DMS Database" + raise IOError(errmsg) from None + else: + attrs[attrname] = np.array(vals, dtype=dt) + + try: + cur.row_factory = dict_factory + cur.execute('SELECT * FROM bond') + bonds = cur.fetchall() + except sqlite3.DatabaseError: + errmsg = "Failed reading the bonds from DMS Database" + raise IOError(errmsg) from None + else: + bondlist = [] + bondorder = {} + for b in bonds: + desc = tuple(sorted([b['p0'], b['p1']])) + bondlist.append(desc) + bondorder[desc] = b['order'] + attrs['bond'] = bondlist + attrs['bondorder'] = bondorder + + atomtypes = guessers.guess_types(attrs['name']) + topattrs = [] + # Bundle in Atom level objects + for attr, cls in [ + ('id', Atomids), + ('anum', Atomnums), + ('mass', Masses), + ('charge', Charges), + ('name', Atomnames), + ('chain', ChainIDs), + ]: + topattrs.append(cls(attrs[attr])) + topattrs.append(Atomtypes(atomtypes, guessed=True)) + + # Residues + atom_residx, (res_resids, + res_resnums, + res_resnames, + res_segids) = change_squash( + (attrs['resid'], attrs['resname'], attrs['segid']), + (attrs['resid'], + attrs['resid'].copy(), + attrs['resname'], + attrs['segid']), + ) + + n_residues = len(res_resids) + topattrs.append(Resids(res_resids)) + topattrs.append(Resnums(res_resnums)) + topattrs.append(Resnames(res_resnames)) + + if any(res_segids) and not any(val is None for val in res_segids): + res_segidx, (res_segids,) = change_squash((res_segids,), + (res_segids,)) + + uniq_seg = np.unique(res_segids) + idx2seg = {idx: res_segids[idx] for idx in res_segidx} + res_segids = uniq_seg + nidx = {segid: nidx for nidx, segid in enumerate(uniq_seg)} + + res_segidx = np.array([nidx[idx2seg[idx]] for idx in res_segidx]) + + n_segments = len(res_segids) + topattrs.append(Segids(res_segids)) + else: + n_segments = 1 + topattrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + res_segidx = None + + topattrs.append(Bonds(attrs['bond'])) + + top = Topology(len(attrs['id']), n_residues, n_segments, + attrs=topattrs, + atom_resindex=atom_residx, + residue_segindex=res_segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.html new file mode 100644 index 0000000000..787054342d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.html @@ -0,0 +1,240 @@ + + + + + + MDAnalysis.topology.ExtendedPDBParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.ExtendedPDBParser

+# -*- 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-2017 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
+#
+
+"""
+Extended PDB topology parser
+============================
+
+.. versionadded:: 0.8
+
+This topology parser uses a PDB file to build a minimum internal structure
+representation (list of atoms). The only difference from
+:mod:`~MDAnalysis.topology.PDBParser` is that this parser reads a
+non-standard PDB-like format in which residue numbers can be five digits
+instead of four.
+
+The topology reader reads a PDB file line by line and ignores atom numbers but
+reads residue numbers up to 99,999 correctly. If you have systems containing at
+least 100,000 residues then you need to use a different file format that can
+handle such residue numbers.
+
+See Also
+--------
+* :mod:`MDAnalysis.topology.PDBParser`
+* :class:`MDAnalysis.coordinates.PDB.ExtendedPDBReader`
+* :class:`MDAnalysis.core.universe.Universe`
+
+
+Classes
+-------
+
+.. autoclass:: ExtendedPDBParser
+   :members:
+   :inherited-members:
+
+"""
+
+from . import PDBParser
+
+
+
[docs]class ExtendedPDBParser(PDBParser.PDBParser): + """Parser that handles non-standard "extended" PDB file. + + Extended PDB files (MDAnalysis format specifier *XPDB*) may contain residue + sequence numbers up to 99,999 by utilizing the insertion character field of + the PDB standard. + + Creates a Topology with the following Attributes (if present): + - serials + - names + - altLocs + - chainids + - tempfactors + - occupancies + - resids + - resnames + - segids + - elements + - bonds + - formalcharges + + Guesses the following Attributes: + - masses + + See Also + -------- + :class:`MDAnalysis.coordinates.PDB.ExtendedPDBReader` + + .. versionadded:: 0.8 + """ + format = 'XPDB'
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.html new file mode 100644 index 0000000000..02c8ecbf1b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.html @@ -0,0 +1,269 @@ + + + + + + MDAnalysis.topology.FHIAIMSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.FHIAIMSParser

+# -*- 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-2017 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
+#
+
+"""
+FHI-AIMS Topology Parser --- :mod:`MDAnalysis.topolgy.FHIAIMSParser`
+====================================================================
+
+Reads an `FHI-AIMS`_ ``.in`` file and pulls the atom information from it.
+Because an FHI-AIMS input file only has atom name information, any
+information about residues and segments will not be populated.
+
+.. _`FHI-AIMS`: https://aimsclub.fhi-berlin.mpg.de/
+
+
+See Also
+--------
+:mod:`MDAnalysis.coordinates.FHIAIMS`
+
+
+Classes
+-------
+
+.. autoclass:: FHIAIMSParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomids,
+    Atomtypes,
+    Masses,
+    Resids,
+    Resnums,
+    Segids,
+    Elements,
+)
+
+
+
[docs]class FHIAIMSParser(TopologyReaderBase): + """Parse a list of atoms from an FHI-AIMS file + + Creates the following attributes: + - Atomnames + + Guesses the following attributes: + - Atomtypes + - Masses + + """ + format = ['IN', 'FHIAIMS'] + +
[docs] def parse(self, **kwargs): + """Read the file and return the structure. + + Returns + ------- + MDAnalysis Topology object + """ + # FHIAIMS geometry files are only single frames + names = [] + skip_tags = ["#", "lattice_vector", "initial_moment", "velocity"] + with openany(self.filename) as inf: + for line in inf: + line = line.strip() + if line.startswith("atom"): + names.append(line.split()[-1]) + continue + if any([line.startswith(tag) for tag in skip_tags]): + continue + # we are now seeing something that's neither atom nor lattice + raise ValueError( + 'Non-conforming line: ({0})in FHI-AIMS input file {0}'.format(line, self.filename)) + names = np.asarray(names) + natoms = len(names) + + # Guessing time + atomtypes = guessers.guess_types(names) + masses = guessers.guess_masses(names) + + attrs = [Atomnames(names), + Atomids(np.arange(natoms) + 1), + Atomtypes(atomtypes, guessed=True), + Masses(masses, guessed=True), + Resids(np.array([1])), + Resnums(np.array([1])), + Segids(np.array(['SYSTEM'], dtype=object)), + Elements(names)] + + top = Topology(natoms, 1, 1, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/GMSParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/GMSParser.html new file mode 100644 index 0000000000..1238c08cb0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/GMSParser.html @@ -0,0 +1,281 @@ + + + + + + MDAnalysis.topology.GMSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.GMSParser

+# -*- 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-2017 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
+#
+
+"""
+GAMESS Topology Parser
+======================
+
+.. versionadded:: 0.9.1
+
+Reads a GAMESS_ output file (also Firefly_ and `GAMESS-UK`_) and pulls
+element information from it.  Symmetrical assembly is read (not
+symmetry element!).  Atom names are read from the GAMESS section.  Any
+information about residues or segments will not be populated.
+
+.. _GAMESS: http://www.msg.ameslab.gov/gamess/
+.. _Firefly: http://classic.chem.msu.su/gran/gamess/index.html
+.. _`GAMESS-UK`: http://www.cfs.dl.ac.uk/
+
+
+Classes
+-------
+
+.. autoclass:: GMSParser
+   :members:
+   :inherited-members:
+
+"""
+import re
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Masses,
+    Resids,
+    Resnums,
+    Segids,
+    AtomAttr,
+)
+
+class AtomicCharges(AtomAttr):
+    attrname = 'atomiccharges'
+    singular = 'atomiccharge'
+    per_object = 'atom'
+
+
+
[docs]class GMSParser(TopologyReaderBase): + """GAMESS_ topology parser. + + Creates the following Attributes: + - names + - atomic charges + Guesses: + - types + - masses + + .. versionadded:: 0.9.1 + """ + format = 'GMS' + +
[docs] def parse(self, **kwargs): + """Read list of atoms from a GAMESS file.""" + names = [] + at_charges = [] + + with openany(self.filename) as inf: + while True: + line = inf.readline() + if not line: + raise EOFError + if re.match(r'^\s+ATOM\s+ATOMIC\s+COORDINATES\s*\(BOHR\).*',\ + line): + break + line = inf.readline() # skip + + while True: + line = inf.readline() + _m = re.match(\ +r'^\s*([A-Za-z_][A-Za-z_0-9]*)\s+([0-9]+\.[0-9]+)\s+(\-?[0-9]+\.[0-9]+)\s+(\-?[0-9]+\.[0-9]+)\s+(\-?[0-9]+\.[0-9]+).*', + line) + if _m is None: + break + name = _m.group(1) + at_charge = int(float(_m.group(2))) + + names.append(name) + at_charges.append(at_charge) + #TODO: may be use coordinates info from _m.group(3-5) ?? + + atomtypes = guessers.guess_types(names) + masses = guessers.guess_masses(atomtypes) + n_atoms = len(names) + attrs = [ + Atomids(np.arange(n_atoms) + 1), + Atomnames(np.array(names, dtype=object)), + AtomicCharges(np.array(at_charges, dtype=np.int32)), + Atomtypes(atomtypes, guessed=True), + Masses(masses, guessed=True), + Resids(np.array([1])), + Resnums(np.array([1])), + Segids(np.array(['SYSTEM'], dtype=object)), + ] + top = Topology(n_atoms, 1, 1, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/GROParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/GROParser.html new file mode 100644 index 0000000000..9daf6c2cd3 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/GROParser.html @@ -0,0 +1,307 @@ + + + + + + MDAnalysis.topology.GROParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.GROParser

+# -*- 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-2017 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
+#
+
+"""
+GRO topology parser
+===================
+
+Read a list of atoms from a GROMOS/Gromacs GRO coordinate file to
+build a basic topology.
+
+Atom types and masses are guessed.
+
+See Also
+--------
+:mod:`MDAnalysis.coordinates.GRO`
+
+
+
+Classes
+-------
+
+.. autoclass:: GROParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+
+from ..lib.util import openany
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomtypes,
+    Atomids,
+    Masses,
+    Resids,
+    Resnames,
+    Resnums,
+    Segids,
+)
+from ..core.topology import Topology
+from .base import TopologyReaderBase, change_squash
+from . import guessers
+
+
+
[docs]class GROParser(TopologyReaderBase): + """Reads a Gromacs GRO file + + Reads the following attributes: + - resids + - resnames + - atomids + - atomnames + + Guesses the following attributes + - atomtypes + - masses + """ + format = 'GRO' + +
[docs] def parse(self, **kwargs): + """Return the *Topology* object for this file""" + # Gro has the following columns + # resid, resname, name, index, (x,y,z) + with openany(self.filename) as inf: + next(inf) + n_atoms = int(next(inf)) + + # Allocate shizznizz + resids = np.zeros(n_atoms, dtype=np.int32) + resnames = np.zeros(n_atoms, dtype=object) + names = np.zeros(n_atoms, dtype=object) + indices = np.zeros(n_atoms, dtype=np.int32) + + for i, line in enumerate(inf): + if i == n_atoms: + break + try: + resids[i] = int(line[:5]) + resnames[i] = line[5:10].strip() + names[i] = line[10:15].strip() + indices[i] = int(line[15:20]) + except (ValueError, TypeError): + errmsg = ( + f"Couldn't read the following line of the .gro file:\n" + f"{line}") + raise IOError(errmsg) from None + # Check all lines had names + if not np.all(names): + missing = np.where(names == '') + raise IOError("Missing atom name on line: {0}" + "".format(missing[0][0] + 3)) # 2 header, 1 based + + # Fix wrapping of resids (if we ever saw a wrap) + if np.any(resids == 0): + # find places where resid hit zero again + wraps = np.where(resids == 0)[0] + # group these places together: + # find indices of first 0 in each block of zeroes + # 1) find large changes in index, (ie non sequential blocks) + diff = np.diff(wraps) != 1 + # 2) make array of where 0-blocks start + starts = np.hstack([wraps[0], wraps[1:][diff]]) + + # remove 0 in starts, ie the first residue **can** be 0 + if starts[0] == 0: + starts = starts[1:] + + # for each resid after a wrap, add 100k (5 digit wrap) + for s in starts: + resids[s:] += 100000 + + # Guess types and masses + atomtypes = guessers.guess_types(names) + masses = guessers.guess_masses(atomtypes) + + residx, (new_resids, new_resnames) = change_squash( + (resids, resnames), (resids, resnames)) + + # new_resids is len(residues) + # so resindex 0 has resid new_resids[0] + attrs = [ + Atomnames(names), + Atomids(indices), + Atomtypes(atomtypes, guessed=True), + Resids(new_resids), + Resnums(new_resids.copy()), + Resnames(new_resnames), + Masses(masses, guessed=True), + Segids(np.array(['SYSTEM'], dtype=object)) + ] + + top = Topology(n_atoms=n_atoms, n_res=len(new_resids), n_seg=1, + attrs=attrs, + atom_resindex=residx, + residue_segindex=None) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/GSDParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/GSDParser.html new file mode 100644 index 0000000000..ee8d35e772 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/GSDParser.html @@ -0,0 +1,331 @@ + + + + + + MDAnalysis.topology.GSDParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.GSDParser

+# -*- 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-2017 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
+#
+
+"""GSD topology parser
+=========================
+
+.. versionadded:: 0.17.0
+
+The :class:`GSDParser` generates a topology from HOOMD_ GSD topology/trajectory
+files. The GSD file stores information on both the topology and the trajectory
+in the same file, and allows for varying atom numbers/identities and topologies
+during the course of the simulation. At the moment MDAnalysis can deal only
+with the case in which there is no variation. The trajectory data are read with
+the :class:`~MDAnalysis.coordinates.GSD.GSDReader` class.
+
+.. _HOOMD: http://codeblue.umich.edu/hoomd-blue/index.html
+.. _HOOMD GSD: https://github.com/glotzerlab/gsd
+
+
+To load a GSD HOOMD file::
+
+   import MDAnalysis as mda
+   u = mda.Universe("example.gsd")
+
+
+Classes
+-------
+
+.. autoclass:: GSDParser
+   :members:
+   :inherited-members:
+
+"""
+import os
+import numpy as np
+
+from . import guessers
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomtypes,
+    Atomnames,
+    Atomids,
+    Angles,
+    Bonds,
+    Charges,
+    Dihedrals,
+    Impropers,
+    Masses,
+    Radii,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+)
+
+try:
+    import gsd.hoomd
+except ImportError:
+    HAS_GSD = False
+else:
+    HAS_GSD = True
+
+
+
[docs]class GSDParser(TopologyReaderBase): + """Parses a Hoomd GSD file to create a Topology + + Reads the following Attributes: + - Atomtypes + - Bonds + - Angles + - Dihedrals + - Impropers + - Radii + - Masses + + The GSD file also stores a `body` property in the particles, and the parser + uses this information to set the residue names and indices. + + NOTE: if the `body` index of any particle is negative, the parser will add + an integer number (the absolute value of the minimum of all the body + indices) to all the body indices. This is because MDAnalysis cannot handle + negative residue indices. This means that in that case the residue index in + the MDAnalysis.Universe will not correspond to the body index stored in the + GSD file. + + """ + format = 'GSD' + + def __init__(self, filename): + + if not HAS_GSD: + errmsg = ("GSDParser: To read a Topology from a Hoomd GSD " + "file, please install gsd") + raise ImportError(errmsg) + super(GSDParser, self).__init__(filename) + +
[docs] def parse(self, **kwargs): + """Parse Hoomd GSD file + + .. versionadded:: 0.17.0 + """ + attrs = {} + + with gsd.hoomd.open(self.filename, mode='r') as t : + # Here it is assumed that the particle data does not change in the + # trajectory. + snap = t[0] + + natoms = snap.particles.N + + + ptypes = snap.particles.types + atypes = [ptypes[idx] for idx in snap.particles.typeid] + if len(atypes) != natoms: + raise IOError("Number of types does not equal natoms.") + attrs['types'] = Atomtypes(np.array(atypes, dtype=object)) + + # set radii, masses, charges + p = snap.particles + attrs['diameter'] = Radii(np.array(p.diameter / 2.,dtype=np.float32)) + attrs['mass'] = Masses(np.array(p.mass,dtype=np.float64)) + attrs['charge'] = Charges(np.array(p.charge,dtype=np.float32)) + + # set bonds, angles, dihedrals, impropers + for attrname, attr, in ( + ('bonds', Bonds), + ('angles', Angles), + ('dihedrals', Dihedrals), + ('impropers', Impropers), + ): + try: + val = getattr(snap,attrname) + vals = [tuple(b_instance) for b_instance in val.group] + except: + vals = [] + attrs[attrname] = attr(vals) + + # get body ids to set residue number and ids + blist = snap.particles.body.astype(np.int64) + bodies = np.unique(blist).astype(np.int32) + # this fixes the fact that the Topology constructor gets stuck in an + # infinite loop if any resid is negative. + if (blist<0).any() : + m = blist.min() + blist += abs(m) + bodies = np.unique(blist).astype(np.int32) + nbodies = bodies.size + + attrs = list(attrs.values()) + attrs.append(Atomnames(np.array(atypes, dtype=object))) + attrs.append(Atomids(np.arange(natoms) + 1)) + attrs.append(Resids(bodies)) + attrs.append(Resnums(bodies)) + attrs.append(Resnames(bodies)) + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + + top = Topology(natoms, nbodies, 1, + attrs=attrs, atom_resindex=blist) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.html new file mode 100644 index 0000000000..bf3a2d755d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.html @@ -0,0 +1,309 @@ + + + + + + MDAnalysis.topology.HoomdXMLParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.HoomdXMLParser

+# -*- 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-2017 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
+#
+
+"""
+HOOMD XML topology parser
+=========================
+
+.. versionadded:: 0.11.0
+
+The :class:`HoomdXMLParser` generates a topology from files for the HOOMD_ code.
+
+Read a list of atoms from a `HOOMD XML`_ file to build a basic topology.
+Masses and charges are set to zero if not present in the XML file.
+Hoomd XML does not identify molecules or residues, so placeholder values
+are used for residue numbers.
+Bonds and angles are read if present.
+
+.. _HOOMD: http://codeblue.umich.edu/hoomd-blue/index.html
+.. _HOOMD XML: http://codeblue.umich.edu/hoomd-blue/doc/page_xml_file_format.html
+
+Classes
+-------
+
+.. autoclass:: HoomdXMLParser
+   :members:
+   :inherited-members:
+
+"""
+import xml.etree.ElementTree as ET
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomtypes,
+    Atomids,
+    Angles,
+    Bonds,
+    Charges,
+    Dihedrals,
+    Impropers,
+    Masses,
+    Radii,
+    Resids,
+    Resnums,
+    Segids,
+)
+
+
+
[docs]class HoomdXMLParser(TopologyReaderBase): + """Parses a Hoomd XML file to create a Topology + + Reads the following Attributes: + - Atomtypes + - Bonds + - Angles + - Dihedrals + - Impropers + - Radii + - Masses + + """ + format = 'XML' + +
[docs] def parse(self, **kwargs): + """Parse Hoomd XML file + + Hoomd XML format does not contain a node for names. The parser will + look for a name node anyway, and if it doesn't find one, it will use + the atom types as names. If the Hoomd XML file doesn't contain a type + node (it should), then all atom types will be \'none\'. Similar to the + names, the parser will try to read atom type, mass, and charge from the XML + file, but it will use placeholder values if they are not present. + + Because Hoomd uses unitless mass, charge, etc., if they are not present + they will not be guessed - they will be set to zero. + + + .. versionadded:: 0.11.0 + """ + with openany(self.filename) as stream: + tree = ET.parse(stream) + root = tree.getroot() + configuration = root.find('configuration') + natoms = int(configuration.get('natoms')) + + attrs = {} + + atype = configuration.find('type') + atypes = atype.text.strip().split('\n') + if len(atypes) != natoms: + raise IOError("Number of types does not equal natoms.") + attrs['types'] = Atomtypes(np.array(atypes, dtype=object)) + + for attrname, attr, mapper, dtype in ( + ('diameter', Radii, lambda x: float(x) / 2., np.float32), + ('mass', Masses, float, np.float64), + ('charge', Charges, float, np.float32), + ): + try: + val = configuration.find(attrname) + vals = [mapper(el) for el in val.text.strip().split()] + except: + pass + else: + attrs[attrname] = attr(np.array(vals, dtype=dtype)) + for attrname, attr, in ( + ('bond', Bonds), + ('angle', Angles), + ('dihedral', Dihedrals), + ('improper', Impropers), + ): + try: + val = configuration.find(attrname) + vals = [tuple(int(el) for el in line.split()[1:]) + for line in val.text.strip().split('\n') + if line.strip()] + except: + vals = [] + attrs[attrname] = attr(vals) + + if 'mass' not in attrs: + attrs['mass'] = Masses(np.zeros(natoms)) + if 'charge' not in attrs: + attrs['charge'] = Charges(np.zeros(natoms, dtype=np.float32)) + + attrs = list(attrs.values()) + + attrs.append(Atomids(np.arange(natoms) + 1)) + attrs.append(Resids(np.array([1]))) + attrs.append(Resnums(np.array([1]))) + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + + top = Topology(natoms, 1, 1, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/ITPParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/ITPParser.html new file mode 100644 index 0000000000..2d3f576f33 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/ITPParser.html @@ -0,0 +1,847 @@ + + + + + + MDAnalysis.topology.ITPParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.ITPParser

+# -*- 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-2017 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
+#
+
+r"""
+ITP topology parser
+===================
+
+Reads a GROMACS ITP_ or TOP_ file to build the system. The topology will
+contain atom IDs, segids, residue IDs, residue names, atom names, atom types,
+charges, chargegroups, masses (guessed if not found), moltypes, and molnums. 
+Bonds, angles, dihedrals and impropers are also read from the file.
+
+If an ITP file is passed without a ``[ molecules ]`` directive, passing 
+``infer_system=True`` (the default option) will create a Universe with 
+1 molecule of each defined ``moleculetype``. 
+If a ``[ molecules ]`` section is present, ``infer_system`` is ignored.
+
+If files are included with the `#include` directive, they will also be read.
+If they are not in the working directory, ITPParser will look for them in the
+``include_dir`` directory. By default, this is set to
+``include_dir="/usr/local/gromacs/share/gromacs/top/"``.
+Variables can be defined with the `#define` directive in files, or by passing
+in :ref:`keyword arguments <itp-define-kwargs>`.
+
+Examples
+--------
+
+    ::
+        import MDAnalysis as mda
+        from MDAnalysis.tests.datafiles import ITP_tip5p
+
+        #  override charge of HW2 atom (defined in file as HW2_CHARGE)
+        u = mda.Universe(ITP_tip5p, HW2_CHARGE=2, infer_system=True)
+
+    .. note::
+
+        AMBER also uses topology files with the .top extension. To use ITPParser
+        to read GROMACS top files, pass ``topology_format='ITP'``.
+
+        ::
+
+            import MDAnalysis as mda
+            u = mda.Universe('topol.top', topology_format='ITP')
+
+
+.. _itp-define-kwargs:
+
+Preprocessor variables
+----------------------
+
+ITP files are often defined with lines that depend on 
+whether a keyword flag is given. For example, this modified TIP5P water file:
+
+    .. code-block:: none
+
+        [ moleculetype ]
+        ; molname       nrexcl
+        SOL             2
+
+        #ifndef HW1_CHARGE
+            #define HW1_CHARGE 0.241
+        #endif
+
+        #define HW2_CHARGE 0.241
+
+        [ atoms ]
+        ; id    at type res nr  residu name     at name         cg nr   charge
+        1       opls_118     1       SOL              OW             1       0
+        2       opls_119     1       SOL             HW1             1       HW1_CHARGE
+        3       opls_119     1       SOL             HW2             1       HW2_CHARGE
+        4       opls_120     1       SOL             LP1             1      -0.241
+        5       opls_120     1       SOL             LP2             1      -0.241
+        #ifdef EXTRA_ATOMS  ; added for keyword tests
+        6       opls_120     1       SOL             LP3             1      -0.241
+        7       opls_120     1       SOL             LP4             1       0.241
+        #endif
+
+
+Define these preprocessor variables by passing keyword arguments. Any arguments that you 
+pass in *override* any variables defined in the file. For example, the universe below 
+will have charges of 3 for the HW1 and HW2 atoms::
+
+    import MDAnalysis as mda
+    from MDAnalysis.tests.datafiles import ITP_tip5p
+
+    u = mda.Universe(ITP_tip5p, EXTRA_ATOMS=True, HW1_CHARGE=3, HW2_CHARGE=3)
+
+These keyword variables are **case-sensitive**. Note that if you set keywords to 
+``False`` or ``None``, they will be treated as if they are not defined in #ifdef conditions.
+
+For example, the universe below will only have 5 atoms. ::
+
+    u = mda.Universe(ITP_tip5p, EXTRA_ATOMS=False)
+
+
+.. _ITP: http://manual.gromacs.org/current/reference-manual/topologies/topology-file-formats.html#molecule-itp-file
+
+.. _TOP: http://manual.gromacs.org/current/reference-manual/file-formats.html#top
+
+Classes
+-------
+
+.. autoclass:: ITPParser
+   :members:
+   :inherited-members:
+
+"""
+from collections import defaultdict
+import os
+
+import logging
+import numpy as np
+
+from ..lib.util import openany
+from . import guessers
+from .base import TopologyReaderBase, change_squash, reduce_singular
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Masses,
+    Moltypes,
+    Molnums,
+    Charges,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+    Bonds,
+    Angles,
+    Dihedrals,
+    Impropers,
+    AtomAttr,
+)
+from ..core.topology import Topology
+
+
+class Chargegroups(AtomAttr):
+    """The charge group for each Atom"""
+    attrname = 'chargegroups'
+    singular = 'chargegroup'
+
+
+class GmxTopIterator:
+    """
+    Iterate over the lines of a TOP/ITP file and its included files
+
+    The iterator strips comments, deals with #ifdef and #ifndef conditions,
+    and substitutes defined variables.
+
+    Defined variables passed into ``__init__`` *override* anything defined in the file.
+    """
+
+    def __init__(self, path, include_dir, defines):
+        self._original_defines = defines
+        self.defines = dict(**defines)  # copy
+        self.include_dir = include_dir
+        self.file_stack = [path]
+        self.starting_file = path
+
+    @property
+    def current_file(self):
+        return self.file_stack[-1]
+
+    def __iter__(self):
+        for line in self.iter_from_file(self.starting_file):
+            yield line
+
+    def iter_from_file(self, path):
+        found_path = self.find_path(path)
+        with openany(found_path) as infile:
+            self.file_stack.append(infile)
+
+            for line in self.clean_file_lines(infile):
+                if line.startswith('#include'):
+                    inc = line.split(None, 1)[1][1:-1]
+                    for line in self.iter_from_file(inc):
+                        yield line
+                elif line.startswith('#define'):
+                    self.define(line)
+                elif line.startswith('#if'):
+                    self.do_if(line, infile)
+                elif line.startswith('#else'):
+                    self.skip_until_endif(infile)
+                elif line.startswith('#'):  # ignore #if and others
+                    pass
+                elif line:
+                    line = self.substitute_defined(line)
+                    yield line
+            self.file_stack.pop()
+
+    def define(self, line):
+        try:
+            _, variable, value = line.split(None, 2)
+        except ValueError:
+            _, variable = line.split()
+            value = True
+        
+        # kwargs overrides files
+        if variable not in self._original_defines:
+            self.defines[variable] = value
+
+    def substitute_defined(self, line):
+        split = line.split()
+        for k, v in self.defines.items():
+            if k in split:
+                split[split.index(k)] = str(v)
+        line = ' '.join(split)
+        return line
+
+    def clean_file_lines(self, infile):
+        for line in infile:
+            line = line.split(';')[0].strip()  # ; is for comments
+            yield line
+
+    def do_if(self, line, infile):
+        ifdef, variable = line.split()
+        if ifdef == '#ifdef':
+            if self.defines.get(variable) in (False, None):
+                self.skip_until_else(infile)
+        elif ifdef == '#ifndef':
+            if self.defines.get(variable) not in (False, None):
+                self.skip_until_else(infile)
+
+    def skip_until_else(self, infile):
+        """Skip lines until #if condition ends"""
+        for line in self.clean_file_lines(infile):
+            if line.startswith('#if'):
+                self.skip_until_endif(infile)
+            elif line.startswith('#endif') or line.startswith('#else'):
+                break
+        else:
+            raise IOError('Missing #endif in {}'.format(self.current_file))
+    
+    def skip_until_endif(self, infile):
+        """Skip lines until #endif"""
+        for line in self.clean_file_lines(infile):
+            if line.startswith('#if'):
+                self.skip_until_endif(infile)
+            elif line.startswith('#endif'):
+                break
+        else:
+            raise IOError('Missing #endif in {}'.format(self.current_file))
+
+    def find_path(self, path):
+        try:
+            # in case of TextIOWrapper
+            current_file = self.current_file.name
+        except AttributeError:
+            current_file = self.current_file
+
+        try:
+            path = os.path.abspath(path.name)
+        except AttributeError:
+            pass
+        current_dir = os.path.dirname(current_file)
+        dir_path = os.path.join(current_dir, path)
+        if os.path.exists(dir_path):
+            return dir_path
+        include_path = os.path.join(self.include_dir, path)
+        if os.path.exists(include_path):
+            return include_path
+        raise IOError('Could not find {}'.format(path))
+
+
+class Molecule:
+    """Store moleculetype-specific attributes"""
+
+    def __init__(self, name):
+        self.name = name
+        self.ids = []
+        self.types = []
+        self.resids = []
+        self.resnames = []
+        self.names = []
+        self.chargegroups = []
+        self.charges = []
+        self.masses = []
+
+        self.bonds = defaultdict(list)
+        self.angles = defaultdict(list)
+        self.dihedrals = defaultdict(list)
+        self.impropers = defaultdict(list)
+
+        self.parsers = {
+            'atoms': self.parse_atoms,
+            'bonds': self.parse_bonds,
+            'angles': self.parse_angles,
+            'dihedrals': self.parse_dihedrals,
+            'constraints': self.parse_constraints,
+            'settles': self.parse_settles
+        }
+
+        self.resolved_residue_attrs = False
+
+    @property
+    def atom_order(self):
+        return [self.ids, self.types, self.resids, self.resnames, 
+                self.names, self.chargegroups, self.charges, 
+                self.masses]
+
+    @property
+    def params(self):
+        return [self.bonds, self.angles, self.dihedrals, self.impropers]
+    
+    def parse_atoms(self, line):
+        values = line.split()
+        for lst in self.atom_order:
+            try:
+                lst.append(values.pop(0))
+            except IndexError:  # ran out of values
+                lst.append('')
+    
+    def parse_bonds(self, line):
+        self.add_param(line, self.bonds, n_funct=2, 
+                       funct_values=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
+    
+    def parse_angles(self, line):
+        self.add_param(line, self.angles, n_funct=3, 
+                       funct_values=(1, 2, 3, 4, 5, 6, 8, 10))
+    
+    def parse_dihedrals(self, line):
+        dih = self.add_param(line, self.dihedrals, n_funct=4, 
+                             funct_values=(1, 3, 5, 8, 9, 10, 11))
+        if not dih:
+            self.add_param(line, self.impropers, n_funct=4,
+                           funct_values=(2, 4))
+
+    def parse_constraints(self, line):
+        self.add_param(line, self.bonds, n_funct=2, funct_values=(1, 2))
+
+    def parse_settles(self, line):
+        # [ settles ] is a triangular constraint for 
+        # water molecules.
+        # In ITP files this is defined with only the 
+        # oxygen atom index. The next two atoms are 
+        # assumed to be hydrogens. Unlike TPRParser,  
+        # the manual only lists this format (as of 2019).
+        # These are treated as 2 bonds.
+        # No angle component is included to avoid discrepancies
+        # with water molecules loaded from different MD engines.
+        oxygen, funct, doh, dhh = line.split()
+        try:
+            base = self.index_ids([oxygen])[0]
+        except ValueError:
+            pass
+        else:
+            self.bonds[(base, base+1)].append("settles")
+            self.bonds[(base, base+2)].append("settles")
+
+    def resolve_residue_attrs(self):
+        """Figure out residue borders and assign moltypes and molnums"""
+        resids = np.array(self.resids, dtype=np.int32)
+        resnames = np.array(self.resnames, dtype=object)
+        self.residx, (self.resids, resnames) = change_squash((resids,), (resids, resnames))
+        self.resnames = list(resnames)
+        self.moltypes = [self.name] * len(self.resids)
+        self.molnums = np.array([1] * len(self.resids))
+
+        self.resolved_residue_attrs = True
+
+    def shift_indices(self, atomid=0, resid=0, molnum=0, cgnr=0, n_res=0, n_atoms=0):
+        """
+        Get attributes ready for adding onto a larger topology.
+
+        Shifts atom indices, residue indices, molnums, and chargegroup numbers.
+
+        Returns
+        -------
+        atom_attrs: list of lists
+            attributes in the [ atoms ] section
+
+        new_params: list of dicts
+            Bonds, angles, dihedrals, impropers as dicts of shape {indices: parameters}
+
+        molnums: list
+        moltypes: list
+        residx: list
+        """
+        if not self.resolved_residue_attrs:
+            self.resolve_residue_attrs()
+
+        resids = list(np.array(self.resids)+resid)
+        residx = list(np.array(self.residx)+n_res)
+        molnums = list(np.array(self.molnums) + molnum)
+        ids = list(np.array(self.ids, dtype=int) + atomid)
+
+        try:
+            cg = np.array(self.chargegroups, dtype=int)
+        except ValueError:
+            cg = np.arange(1, len(self.chargegroups)+1)
+        chargegroups = list(cg+cgnr)
+
+        atom_order = [ids, self.types, resids, self.resnames, 
+                      self.names, chargegroups, self.charges, 
+                      self.masses]
+
+        new_params = []
+        for p in self.params:
+            new = {}
+            for indices, values in p.items():
+                new[tuple(np.array(indices)+n_atoms)] = values
+            new_params.append(new)
+
+        return atom_order, new_params, molnums, self.moltypes, residx
+
+    def add_param(self, line, container, n_funct=2, funct_values=[]):
+        """Add defined GROMACS directive lines, only if the funct is in ``funct_values``"""
+        values = line.split()
+        funct = int(values[n_funct])
+        if funct in funct_values:
+            try:
+                ids = self.index_ids(values[:n_funct])
+                container[ids].append(funct)
+            except ValueError:
+                pass
+            return True
+        else:
+            return False
+
+    def index_ids(self, values):
+        """
+        Get indices of atom ids (list of strings)
+        """
+        return tuple(map(self.ids.index, values))
+
+
+
[docs]class ITPParser(TopologyReaderBase): + """Read topology information from a GROMACS ITP_ or TOP_ file. + + Creates a Topology with the following Attributes: + - ids + - names + - types + - masses + - charges + - chargegroups + - resids + - resnames + - segids + - moltypes + - molnums + - bonds + - angles + - dihedrals + - impropers + + .. _ITP: http://manual.gromacs.org/current/reference-manual/topologies/topology-file-formats.html#molecule-itp-file + .. _TOP: http://manual.gromacs.org/current/reference-manual/file-formats.html#top + + .. versionchanged:: 2.2.0 + no longer adds angles for water molecules with SETTLE constraint + """ + format = 'ITP' + +
[docs] def parse(self, include_dir='/usr/local/gromacs/share/gromacs/top/', + infer_system=True, + **kwargs): + """Parse ITP file into Topology + + Parameters + ---------- + include_dir: str, optional + A directory in which to look for other files included + from the original file, if the files are not first found + in the current directory. + Default: "/usr/local/gromacs/share/gromacs/top/" + + infer_system: bool, optional (default True) + If a ``[ molecules ]`` directive is not found within the the + topology file, create a Topology with one of every + ``[ moleculetype ]`` defined. If a ``[ molecules ]`` directive is + found, this keyword is ignored. + + Returns + ------- + MDAnalysis *Topology* object + """ + + self.atomtypes = {} + self.molecules = {} + self._molecules = [] # for order + self.current_mol = None + self.parser = self._pass + self.system_molecules = [] + + # Open and check itp validity + with openany(self.filename) as itpfile: + self.lines = GmxTopIterator(itpfile, include_dir, kwargs) + for line in self.lines: + if '[' in line and ']' in line: + section = line.split('[')[1].split(']')[0].strip() + + if section == 'atomtypes': + self.parser = self.parse_atomtypes + + elif section == 'moleculetype': + self.parser = self.parse_moleculetype + + elif section == 'molecules': + self.parser = self.parse_molecules + + elif self.current_mol: + self.parser = self.current_mol.parsers.get(section, self._pass) + + else: + self.parser = self._pass + + else: + self.parser(line) + + if not self.system_molecules and infer_system: + self.system_molecules = [x.name for x in self._molecules] + + self.build_system() + + self.types = np.array(self.types) + self.charges = np.array(self.charges, dtype=object) + self.masses = np.array(self.masses, dtype=object) + + if not all(self.charges): + empty = self.charges == '' + self.charges[empty] = [ + ( + self.atomtypes.get(x)["charge"] + if x in self.atomtypes.keys() + else '' + ) + for x in self.types[empty] + ] + + if not all(self.masses): + empty = self.masses == '' + self.masses[empty] = [ + ( + self.atomtypes.get(x)["mass"] + if x in self.atomtypes.keys() + else '' + ) + for x in self.types[empty] + ] + + attrs = [] + # atom stuff + for vals, Attr, dtype in ( + (self.ids, Atomids, np.int32), + (self.types, Atomtypes, object), + (self.names, Atomnames, object), + (self.chargegroups, Chargegroups, np.int32), + (self.charges, Charges, np.float32), + ): + if all(vals): + attrs.append(Attr(np.array(vals, dtype=dtype))) + + if not all(self.masses): + empty = self.masses == '' + self.masses[empty] = guessers.guess_masses( + guessers.guess_types(self.types)[empty]) + attrs.append(Masses(np.array(self.masses, dtype=np.float64), + guessed=True)) + else: + attrs.append(Masses(np.array(self.masses, dtype=np.float64), + guessed=False)) + + # residue stuff + resids = np.array(self.resids, dtype=np.int32) + resnames = np.array(self.resnames, dtype=object) + molnums = np.array(self.molnums, dtype=np.int32) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(Resnames(resnames)) + attrs.append(Moltypes(np.array(self.moltypes, dtype=object))) + attrs.append(Molnums(molnums)) + + n_atoms = len(self.ids) + n_residues = len(self.resids) + n_segments = len(self.system_molecules) + attrs.append(Segids(np.array(self.system_molecules, dtype=object))) + segidx = molnums-1 + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=self.residx, + residue_segindex=segidx) + + # connectivity stuff + for dct, Attr, attrname in ( + (self.bonds, Bonds, 'bonds'), + (self.angles, Angles, 'angles'), + (self.dihedrals, Dihedrals, 'dihedrals'), + (self.impropers, Impropers, 'impropers') + ): + if dct: + indices, types = zip(*list(dct.items())) + else: + indices, types = [], [] + + types = [reduce_singular(t) for t in types] + + tattr = Attr(indices, types=types) + top.add_TopologyAttr(tattr) + + return top
+ + def _pass(self, line): + pass + + def parse_atomtypes(self, line): + keys = ['type_bonded', 'atomic_number', 'mass', 'charge', 'p_type'] + fields = line.split() + if len(fields[5]) == 1 and fields[5].isalpha(): + values = fields[1:6] + elif len(fields[3]) == 1 and fields[3].isalpha(): + values = '', '', fields[1], fields[2], fields[3] + elif len(fields[4]) == 1 and fields[4].isalpha(): + if fields[1][0].isalpha(): + values = fields[1], '', fields[2], fields[3], fields[4] + else: + values = '', fields[1], fields[2], fields[3], fields[4] + self.atomtypes[fields[0]] = dict(zip(keys, values)) + + def parse_moleculetype(self, line): + name = line.split()[0] + self.current_mol = self.molecules[name] = Molecule(name) + self._molecules.append(self.current_mol) + + def parse_molecules(self, line): + name, n_mol = line.split() + self.system_molecules.extend([name]*int(n_mol)) + + def build_system(self): + self.ids = [] + self.types = [] + self.resids = [] + self.resnames = [] + self.names = [] + self.chargegroups = [] + self.charges = [] + self.masses = [] + self.moltypes = [] + self.molnums = [] + self.residx = [] + + self.atom_order = [self.ids, self.types, self.resids, self.resnames, + self.names, self.chargegroups, self.charges, + self.masses] + + self.bonds = defaultdict(list) + self.angles = defaultdict(list) + self.dihedrals = defaultdict(list) + self.impropers = defaultdict(list) + + self.params = [self.bonds, self.angles, self.dihedrals, self.impropers] + + for i, moltype in enumerate(self.system_molecules): + mol = self.molecules[moltype] + + atomid = self.ids[-1] if self.ids else 0 + resid = self.resids[-1] if self.resids else 0 + cgnr = self.chargegroups[-1] if self.chargegroups else 0 + n_res = len(self.resids) + n_atoms = len(self.ids) + + shifted = mol.shift_indices(atomid=atomid, resid=resid, + n_res=n_res, cgnr=cgnr, molnum=i, + n_atoms=n_atoms) + atom_order, params, molnums, moltypes, residx = shifted + + for system_attr, mol_attr in zip(self.atom_order, atom_order): + system_attr.extend(mol_attr) + + self.moltypes.extend(moltypes) + self.molnums.extend(molnums) + self.residx.extend(residx) + + for system_param, mol_param in zip(self.params, params): + system_param.update(mol_param)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.html new file mode 100644 index 0000000000..b45c444823 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.html @@ -0,0 +1,824 @@ + + + + + + MDAnalysis.topology.LAMMPSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.LAMMPSParser

+# -*- 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-2017 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
+#
+
+"""
+LAMMPSParser
+============
+
+Parses data_ or dump_ files produced by LAMMPS_.
+
+.. _LAMMPS: http://lammps.sandia.gov/
+.. _data: DATA file format: :http://lammps.sandia.gov/doc/2001/data_format.html
+.. _dump: http://lammps.sandia.gov/doc/dump.html
+
+.. versionchanged:: 1.0.0
+   Deprecated :class:`LAMMPSDataConverter` has now been removed.
+
+
+.. _atom_style_kwarg:
+
+Atom styles
+-----------
+
+By default parsers and readers for Lammps data files expect either an
+*atomic* or *full* `atom_style`_.  This can be customised by passing
+the `atom_style` keyword argument.  This should be a space separated
+string indicating the position of the `id`, `type`, `resid`, `charge`,
+`x`, `y` and `z` fields.  The `resid` and `charge` fields are optional
+and any other specified field will be ignored.
+
+For example to read a file with the following format, where there is no resid::
+
+  Atoms # atomic
+
+  1 1 3.7151744275286681e+01 1.8684434743140471e+01 1.9285127961842125e+01 0 0 0
+
+
+The following code could be used::
+
+  >>> import MDAnalysis as mda
+  >>>
+  >>> u = mda.Universe('myfile.data', atom_style='id type x y z')
+
+
+.. _`atom_style`: http://lammps.sandia.gov/doc/atom_style.html
+
+Classes
+-------
+
+.. autoclass:: DATAParser
+   :members:
+   :inherited-members:
+
+.. autoclass:: LammpsDumpParser
+   :members:
+
+
+"""
+import numpy as np
+import logging
+import string
+import functools
+import warnings
+
+from . import guessers
+from ..lib.util import openany, conv_float
+from ..lib.mdamath import triclinic_box
+from .base import TopologyReaderBase, squash_by
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomtypes,
+    Atomids,
+    Angles,
+    Bonds,
+    Charges,
+    Dihedrals,
+    Impropers,
+    Masses,
+    Resids,
+    Resnums,
+    Segids,
+)
+
+logger = logging.getLogger("MDAnalysis.topology.LAMMPS")
+
+
+# Sections will all start with one of these words
+# and run until the next section title
+SECTIONS = set([
+    'Atoms',  # Molecular topology sections
+    'Velocities',
+    'Masses',
+    'Ellipsoids',
+    'Lines',
+    'Triangles',
+    'Bodies',
+    'Bonds',  # Forcefield sections
+    'Angles',
+    'Dihedrals',
+    'Impropers',
+    'Pair',
+    'Pair LJCoeffs',
+    'PairIJ Coeffs',
+    'Bond Coeffs',
+    'Angle Coeffs',
+    'Dihedral Coeffs',
+    'Improper Coeffs',
+    'BondBond Coeffs',  # Class 2 FF sections
+    'BondAngle Coeffs',
+    'MiddleBondTorsion Coeffs',
+    'EndBondTorsion Coeffs',
+    'AngleTorsion Coeffs',
+    'AngleAngleTorsion Coeffs',
+    'BondBond13 Coeffs',
+    'AngleAngle Coeffs',
+])
+# We usually check by splitting around whitespace, so check
+# if any SECTION keywords will trip up on this
+# and add them
+for val in list(SECTIONS):
+    if len(val.split()) > 1:
+        SECTIONS.add(val.split()[0])
+
+
+HEADERS = set([
+    'atoms',
+    'bonds',
+    'angles',
+    'dihedrals',
+    'impropers',
+    'atom types',
+    'bond types',
+    'angle types',
+    'dihedral types',
+    'improper types',
+    'extra bond per atom',
+    'extra angle per atom',
+    'extra dihedral per atom',
+    'extra improper per atom',
+    'extra special per atom',
+    'ellipsoids',
+    'lines',
+    'triangles',
+    'bodies',
+    'xlo xhi',
+    'ylo yhi',
+    'zlo zhi',
+    'xy xz yz',
+])
+
+
+
[docs]class DATAParser(TopologyReaderBase): + """Parse a LAMMPS DATA file for topology and coordinates. + + Note that LAMMPS DATA files can be used standalone. + + Both topology and coordinate parsing functionality is kept in this + class as the topology and coordinate reader share many common + functions + + By default the parser expects either *atomic* or *full* `atom_style` + however this can be by passing an `atom_style` keyword argument, + see :ref:`atom_style_kwarg`. + + .. versionadded:: 0.9.0 + """ + format = 'DATA' + + def iterdata(self): + with openany(self.filename) as f: + for line in f: + line = line.partition('#')[0].strip() + if line: + yield line + +
[docs] def grab_datafile(self): + """Split a data file into dict of header and sections + + Returns + ------- + header - dict of header section: value + sections - dict of section name: content + """ + f = list(self.iterdata()) + + starts = [i for i, line in enumerate(f) + if line.split()[0] in SECTIONS] + starts += [None] + + header = {} + for line in f[:starts[0]]: + for token in HEADERS: + if line.endswith(token): + header[token] = line.split(token)[0] + continue + + sects = {f[l]:f[l+1:starts[i+1]] + for i, l in enumerate(starts[:-1])} + + return header, sects
+ + @staticmethod + def _interpret_atom_style(atom_style): + """Transform a string description of atom style into a dict + + Required fields: id, type, x, y, z + Optional fields: resid, charge + + eg: "id resid type charge x y z" + {'id': 0, + 'resid': 1, + 'type': 2, + 'charge': 3, + 'x': 4, + 'y': 5, + 'z': 6, + } + """ + style_dict = {} + + atom_style = atom_style.split() + + for attr in ['id', 'type', 'resid', 'charge', 'x', 'y', 'z']: + try: + location = atom_style.index(attr) + except ValueError: + pass + else: + style_dict[attr] = location + + reqd_attrs = ['id', 'type', 'x', 'y', 'z'] + missing_attrs = [attr for attr in reqd_attrs if attr not in style_dict] + if missing_attrs: + raise ValueError("atom_style string missing required field(s): {}" + "".format(', '.join(missing_attrs))) + + return style_dict + +
[docs] def parse(self, **kwargs): + """Parses a LAMMPS_ DATA file. + + Returns + ------- + MDAnalysis Topology object. + """ + # Can pass atom_style to help parsing + try: + self.style_dict = self._interpret_atom_style(kwargs['atom_style']) + except KeyError: + self.style_dict = None + + head, sects = self.grab_datafile() + + try: + masses = self._parse_masses(sects['Masses']) + except KeyError: + masses = None + + if 'Atoms' not in sects: + raise ValueError("Data file was missing Atoms section") + + try: + top = self._parse_atoms(sects['Atoms'], masses) + except Exception: + errmsg = ( + "Failed to parse atoms section. You can supply a description " + "of the atom_style as a keyword argument, " + "eg mda.Universe(..., atom_style='id resid x y z')") + raise ValueError(errmsg) from None + + # create mapping of id to index (ie atom id 10 might be the 0th atom) + mapping = {atom_id: i for i, atom_id in enumerate(top.ids.values)} + + for attr, L, nentries in [ + (Bonds, 'Bonds', 2), + (Angles, 'Angles', 3), + (Dihedrals, 'Dihedrals', 4), + (Impropers, 'Impropers', 4) + ]: + try: + type, sect = self._parse_bond_section(sects[L], nentries, mapping) + except KeyError: + type, sect = [], [] + + top.add_TopologyAttr(attr(sect, type)) + + return top
+ +
[docs] def read_DATA_timestep(self, n_atoms, TS_class, TS_kwargs, + atom_style=None): + """Read a DATA file and try and extract x, v, box. + + - positions + - velocities (optional) + - box information + + Fills this into the Timestep object and returns it + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.18.0 + Added atom_style kwarg + """ + if atom_style is None: + self.style_dict = None + else: + self.style_dict = self._interpret_atom_style(atom_style) + + header, sects = self.grab_datafile() + + unitcell = self._parse_box(header) + + try: + positions, ordering = self._parse_pos(sects['Atoms']) + except KeyError as err: + errmsg = f"Position information not found: {err}" + raise IOError(errmsg) from None + + if 'Velocities' in sects: + velocities = self._parse_vel(sects['Velocities'], ordering) + else: + velocities = None + + ts = TS_class.from_coordinates(positions, + velocities=velocities, + **TS_kwargs) + ts.dimensions = unitcell + + return ts
+ + def _parse_pos(self, datalines): + """Strip coordinate info into np array""" + pos = np.zeros((len(datalines), 3), dtype=np.float32) + # TODO: could maybe store this from topology parsing? + # Or try to reach into Universe? + # but ugly because assumes lots of things, and Reader should be standalone + ids = np.zeros(len(pos), dtype=np.int32) + + if self.style_dict is None: + if len(datalines[0].split()) in (7, 10): + style_dict = {'id': 0, 'x': 4, 'y': 5, 'z': 6} + else: + style_dict = {'id': 0, 'x': 3, 'y': 4, 'z': 5} + else: + style_dict = self.style_dict + + for i, line in enumerate(datalines): + line = line.split() + + ids[i] = line[style_dict['id']] + + pos[i, :] = [line[style_dict['x']], + line[style_dict['y']], + line[style_dict['z']]] + + order = np.argsort(ids) + pos = pos[order] + + # return order for velocities + return pos, order + + def _parse_vel(self, datalines, order): + """Strip velocity info into np array + + Parameters + ---------- + datalines : list + list of strings from file + order : np.array + array which rearranges the velocities into correct order + (from argsort on atom ids) + + Returns + ------- + velocities : np.ndarray + """ + vel = np.zeros((len(datalines), 3), dtype=np.float32) + + for i, line in enumerate(datalines): + line = line.split() + vel[i] = line[1:4] + + vel = vel[order] + + return vel + + def _parse_bond_section(self, datalines, nentries, mapping): + """Read lines and strip information + + Arguments + --------- + datalines : list + the raw lines from the data file + nentries : int + number of integers per line + mapping : dict + converts atom_ids to index within topology + + Returns + ------- + types : tuple of strings + type of the bond/angle/dihedral/improper + indices : tuple of ints + indices of atoms involved + """ + section = [] + type = [] + for line in datalines: + line = line.split() + # map to 0 based int + section.append(tuple([mapping[int(x)] for x in line[2:2 + nentries]])) + type.append(line[1]) + return tuple(type), tuple(section) + + def _parse_atoms(self, datalines, massdict=None): + """Creates a Topology object + + Adds the following attributes + - resid + - type + - masses (optional) + - charge (optional) + + Lammps atoms can have lots of different formats, + and even custom formats + + http://lammps.sandia.gov/doc/atom_style.html + + Treated here are + - atoms with 7 fields (with charge) "full" + - atoms with 6 fields (no charge) "molecular" + + Arguments + --------- + datalines - the relevent lines from the data file + massdict - dictionary relating type to mass + + Returns + ------- + top - Topology object + """ + logger.info("Doing Atoms section") + + n_atoms = len(datalines) + + if self.style_dict is None: + sd = {'id': 0, + 'resid': 1, + 'type': 2} + # Fields per line + n = len(datalines[0].split()) + if n in (7, 10): + sd['charge'] = 3 + else: + sd = self.style_dict + + has_charge = 'charge' in sd + has_resid = 'resid' in sd + + # atom ids aren't necessarily sequential + atom_ids = np.zeros(n_atoms, dtype=np.int32) + types = np.zeros(n_atoms, dtype=object) + if has_resid: + resids = np.zeros(n_atoms, dtype=np.int32) + else: + resids = np.ones(n_atoms, dtype=np.int32) + if has_charge: + charges = np.zeros(n_atoms, dtype=np.float32) + + for i, line in enumerate(datalines): + line = line.split() + + # these numpy array are already typed correctly, + # so just pass the raw strings + # and let numpy handle the conversion + atom_ids[i] = line[sd['id']] + if has_resid: + resids[i] = line[sd['resid']] + types[i] = line[sd['type']] + if has_charge: + charges[i] = line[sd['charge']] + + # at this point, we've read the atoms section, + # but it's still (potentially) unordered + # TODO: Maybe we can optimise by checking if we need to sort + # ie `if np.any(np.diff(atom_ids) > 1)` but we want to search + # in a generatorish way, np.any() would check everything at once + order = np.argsort(atom_ids) + atom_ids = atom_ids[order] + types = types[order] + if has_resid: + resids = resids[order] + if has_charge: + charges = charges[order] + + attrs = [] + attrs.append(Atomtypes(types)) + if has_charge: + attrs.append(Charges(charges)) + if massdict is not None: + masses = np.zeros(n_atoms, dtype=np.float64) + for i, at in enumerate(types): + masses[i] = massdict[at] + attrs.append(Masses(masses)) + else: + # Guess them + masses = guessers.guess_masses(types) + attrs.append(Masses(masses, guessed=True)) + + residx, resids = squash_by(resids)[:2] + n_residues = len(resids) + + attrs.append(Atomids(atom_ids)) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + + top = Topology(n_atoms, n_residues, 1, + attrs=attrs, + atom_resindex=residx) + + return top + + def _parse_masses(self, datalines): + """Lammps defines mass on a per atom type basis. + + This reads mass for each type and stores in dict + """ + logger.info("Doing Masses section") + + masses = {} + for line in datalines: + line = line.split() + masses[line[0]] = float(line[1]) + + return masses + + def _parse_box(self, header): + x1, x2 = np.float32(header['xlo xhi'].split()) + x = x2 - x1 + y1, y2 = np.float32(header['ylo yhi'].split()) + y = y2 - y1 + z1, z2 = np.float32(header['zlo zhi'].split()) + z = z2 - z1 + + if 'xy xz yz' in header: + # Triclinic + unitcell = np.zeros((3, 3), dtype=np.float32) + + xy, xz, yz = np.float32(header['xy xz yz'].split()) + + unitcell[0][0] = x + unitcell[1][0] = xy + unitcell[1][1] = y + unitcell[2][0] = xz + unitcell[2][1] = yz + unitcell[2][2] = z + + unitcell = triclinic_box(*unitcell) + else: + # Orthogonal + unitcell = np.zeros(6, dtype=np.float32) + unitcell[:3] = x, y, z + unitcell[3:] = 90., 90., 90. + + return unitcell
+ + +
[docs]class LammpsDumpParser(TopologyReaderBase): + """Parses Lammps ascii dump files in 'atom' format. + + Sets all masses to 1.0. + + + .. versionchanged:: 2.0.0 + .. versionadded:: 0.19.0 + """ + format = 'LAMMPSDUMP' + + def parse(self, **kwargs): + with openany(self.filename) as fin: + fin.readline() # ITEM TIMESTEP + fin.readline() # 0 + + fin.readline() # ITEM NUMBER OF ATOMS + natoms = int(fin.readline()) + + fin.readline() # ITEM BOX + fin.readline() # x + fin.readline() # y + fin.readline() # z + + indices = np.zeros(natoms, dtype=int) + types = np.zeros(natoms, dtype=object) + + atomline = fin.readline() # ITEM ATOMS + attrs = atomline.split()[2:] # attributes on coordinate line + col_ids = {attr: i for i, attr in enumerate(attrs)} # column ids + + for i in range(natoms): + fields = fin.readline().split() + + indices[i] = fields[col_ids["id"]] + types[i] = fields[col_ids["type"]] + + order = np.argsort(indices) + indices = indices[order] + types = types[order] + + attrs = [] + attrs.append(Atomids(indices)) + attrs.append(Atomtypes(types)) + attrs.append(Masses(np.ones(natoms, dtype=np.float64), guessed=True)) + warnings.warn('Guessed all Masses to 1.0') + attrs.append(Resids(np.array([1], dtype=int))) + attrs.append(Resnums(np.array([1], dtype=int))) + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + + return Topology(natoms, 1, 1, attrs=attrs)
+ + +@functools.total_ordering +class LAMMPSAtom(object): # pragma: no cover + __slots__ = ("index", "name", "type", "chainid", "charge", "mass", "_positions") + + def __init__(self, index, name, type, chain_id, charge=0, mass=1): + self.index = index + self.name = repr(type) + self.type = type + self.chainid = chain_id + self.charge = charge + self.mass = mass + + def __repr__(self): + return "<LAMMPSAtom " + repr(self.index + 1) + ": name " + repr(self.type) + " of chain " + repr( + self.chainid) + ">" + + def __lt__(self, other): + return self.index < other.index + + def __eq__(self, other): + return self.index == other.index + + def __hash__(self): + return hash(self.index) + + def __getattr__(self, attr): + if attr == 'pos': + return self._positions[self.index] + else: + super(LAMMPSAtom, self).__getattribute__(attr) + + def __iter__(self): + pos = self.pos + return iter((self.index + 1, self.chainid, self.type, self.charge, + self.mass, pos[0], pos[1], pos[2])) +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/MMTFParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/MMTFParser.html new file mode 100644 index 0000000000..0631968ce3 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/MMTFParser.html @@ -0,0 +1,430 @@ + + + + + + MDAnalysis.topology.MMTFParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.MMTFParser

+# -*- 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-2017 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
+#
+
+"""
+MMTF Topology Parser
+====================
+
+Reads topology data from the `Macromolecular Transmission Format
+(MMTF) format`_.  This should generally be a quicker alternative to PDB.
+
+Makes individual models within the MMTF file available via the `models`
+attribute on Universe.
+
+.. versionadded:: 0.16.0
+.. versionchanged:: 0.20.0
+   Can now read files with optional fields missing/empty
+
+.. versionchanged:: 2.0.0
+   Aliased ``bfactors`` topologyattribute to ``tempfactors``.
+   ``tempfactors`` is deprecated and will be removed in 3.0 (Issue #1901)
+
+Reads the following topology attributes:
+
+Atoms:
+ - altLoc
+ - atom ID
+ - tempfactor
+ - bonds
+ - charge
+ - masses (guessed)
+ - name
+ - occupancy
+ - type
+
+Residues:
+ - icode
+ - resname
+ - resid
+ - resnum
+
+Segments:
+ - segid
+ - model
+
+Classes
+-------
+
+.. autoclass:: MMTFParser
+   :members:
+
+.. _Macromolecular Transmission Format (MMTF) format: https://mmtf.rcsb.org/
+"""
+from collections import defaultdict
+import mmtf
+import numpy as np
+
+
+from . import base
+from . import guessers
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    AltLocs,
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Tempfactors,
+    Bonds,
+    Charges,
+    ICodes,
+    Masses,
+    Occupancies,
+    Resids,
+    Resnames,
+    Resnums,
+    Segids,
+    SegmentAttr,  # for model
+)
+from ..core.selection import RangeSelection
+from ..due import due, Doi
+
+
+def _parse_mmtf(fn):
+    if fn.endswith('gz'):
+        return mmtf.parse_gzip(fn)
+    else:
+        return mmtf.parse(fn)
+
+
+class Models(SegmentAttr):
+    attrname = 'models'
+    singular = 'model'
+    transplants = defaultdict(list)
+
+    def models(self):
+        """Models in this Universe.
+
+        The MMTF format can define various models for a given structure. The
+        topology (eg residue identity) can change between different models,
+        resulting in a different number of atoms in each model.
+
+        Returns
+        -------
+        A list of AtomGroups, each representing a single model.
+        """
+        model_ids = np.unique(self.segments.models)
+
+        return [self.select_atoms('model {}'.format(i))
+                for i in model_ids]
+
+    transplants['Universe'].append(
+        ('models', property(models, None, None, models.__doc__)))
+
+
+class ModelSelection(RangeSelection):
+    token = 'model'
+    field = 'models'
+
+    def apply(self, group):
+        mask = np.zeros(len(group), dtype=bool)
+        vals = group.models
+
+        for upper, lower in zip(self.uppers, self.lowers):
+            if upper is not None:
+                thismask = vals >= lower
+                thismask &= vals <= upper
+            else:
+                thismask = vals == lower
+
+            mask |= thismask
+        return group[mask].unique
+
+
+
[docs]class MMTFParser(base.TopologyReaderBase): + format = 'MMTF' + + @staticmethod + def _format_hint(thing): + """Can parser read *thing*? + + .. versionadded:: 1.0.0 + """ + return isinstance(thing, mmtf.MMTFDecoder) + + @due.dcite( + Doi('10.1371/journal.pcbi.1005575'), + description="MMTF Parser", + path='MDAnalysis.topology.MMTFParser', + ) + def parse(self, **kwargs): + if isinstance(self.filename, mmtf.MMTFDecoder): + mtop = self.filename + else: + mtop = _parse_mmtf(self.filename) + + def iter_atoms(field): + # iterate through atoms in groups + for i in mtop.group_type_list: + g = mtop.group_list[i] + for val in g[field]: + yield val + + natoms = mtop.num_atoms + nresidues = mtop.num_groups + nsegments = mtop.num_chains + attrs = [] + + # required + charges = Charges(list(iter_atoms('formalChargeList'))) + names = Atomnames(list(iter_atoms('atomNameList'))) + types = Atomtypes(list(iter_atoms('elementList'))) + masses = Masses(guessers.guess_masses(types.values), guessed=True) + attrs.extend([charges, names, types, masses]) + + #optional are empty list if empty, sometimes arrays + if len(mtop.atom_id_list): + attrs.append(Atomids(mtop.atom_id_list)) + else: + # must have this attribute for MDA + attrs.append(Atomids(np.arange(natoms), guessed=True)) + if mtop.alt_loc_list: + attrs.append(AltLocs([val.replace('\x00', '').strip() + for val in mtop.alt_loc_list])) + else: + attrs.append(AltLocs(['']*natoms)) + if len(mtop.b_factor_list): + attrs.append(Tempfactors(mtop.b_factor_list)) + else: + attrs.append(Tempfactors([0]*natoms)) + if len(mtop.occupancy_list): + attrs.append(Occupancies(mtop.occupancy_list)) + else: + attrs.append(Occupancies([1]*natoms)) + + # Residue things + # required + resids = Resids(mtop.group_id_list) + resnums = Resnums(resids.values.copy()) + resnames = Resnames([mtop.group_list[i]['groupName'] + for i in mtop.group_type_list]) + attrs.extend([resids, resnums, resnames]) + # optional + # mmtf empty icode is '\x00' rather than '' + if mtop.ins_code_list: + attrs.append(ICodes([val.replace('\x00', '').strip() + for val in mtop.ins_code_list])) + else: + attrs.append(ICodes(['']*nresidues)) + + # Segment things + # optional + if mtop.chain_name_list: + attrs.append(Segids(mtop.chain_name_list)) + else: + # required for MDAnalysis + attrs.append(Segids(['SYSTEM'] * nsegments, guessed=True)) + + mods = np.repeat(np.arange(mtop.num_models), mtop.chains_per_model) + attrs.append(Models(mods)) + #attrs.append(chainids) + + # number of atoms in a given group id + groupID_2_natoms = {i:len(g['atomNameList']) + for i, g in enumerate(mtop.group_list)} + # mapping of atoms to residues + resindex = np.repeat(np.arange(nresidues), + [groupID_2_natoms[i] for i in mtop.group_type_list]) + + # mapping of residues to segments + segindex = np.repeat(np.arange(nsegments), mtop.groups_per_chain) + + # Bonds + # bonds are listed as indices within a group, + # offset pulls out 'global' index + offset = 0 + bonds = [] + for gtype in mtop.group_type_list: + g = mtop.group_list[gtype] + bondlist = g['bondAtomList'] + + for x, y in zip(bondlist[1::2], bondlist[::2]): + if x > y: + x, y = y, x # always have x < y + bonds.append((x + offset, y + offset)) + + offset += groupID_2_natoms[gtype] + # add inter group bonds + if not mtop.bond_atom_list is None: # optional field + for x, y in zip(mtop.bond_atom_list[1::2], + mtop.bond_atom_list[::2]): + if x > y: + x, y = y, x + bonds.append((x, y)) + attrs.append(Bonds(bonds)) + + top = Topology(natoms, nresidues, nsegments, + atom_resindex=resindex, + residue_segindex=segindex, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.html new file mode 100644 index 0000000000..20ae9b88ee --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.html @@ -0,0 +1,440 @@ + + + + + + MDAnalysis.topology.MOL2Parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.MOL2Parser

+# -*- 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-2017 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
+#
+
+"""
+MOL2 file format --- :mod:`MDAnalysis.coordinates.MOL2`
+========================================================
+
+Classes to read Tripos_ molecule structure format (MOL2_) coordinate
+and topology files. Used by the DOCK_ docking code.
+
+.. _MOL2: http://www.tripos.com/data/support/mol2.pdf
+.. _Tripos: http://www.tripos.com/
+.. _DOCK: http://dock.compbio.ucsf.edu/
+
+
+Classes
+-------
+
+.. autoclass:: MOL2Parser
+   :members:
+   :inherited-members:
+
+"""
+import os
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from .base import TopologyReaderBase, squash_by
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Bonds,
+    Charges,
+    Elements,
+    Masses,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+)
+from ..core.topology import Topology
+from .tables import SYBYL2SYMB
+
+import warnings
+
+
+
[docs]class MOL2Parser(TopologyReaderBase): + """Reads topology from a Tripos_ MOL2_ file. + + Creates the following Attributes: + - Atomids + - Atomnames + - Atomtypes + - Charges + - Resids + - Resnames + - Bonds + - Elements + + Guesses the following: + - masses + + Notes + ----- + Elements are obtained directly from the SYBYL atom types. If some atoms have + unknown atom types, they will be assigned an empty element record. If all + atoms have unknown atom types, the elements attribute will not be set. + + Dealing with optional fields: + + 1. ``resid`` will set to 1 when not provided. + + 2. If no atoms have ``resname`` field, resnames attribute will not be set; + If some atoms have ``resname`` while some do not, + :exc:`ValueError` will occur. + + 3. If "NO_CHARGES" shows up in "@<TRIPOS>MOLECULE" section + and no atoms have the ``charge`` field, charges attribute will not be set; + If "NO_CHARGES" shows up while ``charge`` field appears, + :exc:`ValueError` will occur; + If a charge model is specified while some atoms don't have ``charge``, + :exc:`ValueError` will occur as well. + + Raises + ------ + ValueError + If some atoms have the optional field ``resname`` (aka ``subst_name``) + while some do not. + + ValueError + If "NO_CHARGES" shows up in "@<TRIPOS>MOLECULE" section while + some atoms have the optional field ``charge``. + + ValueError + If a charge model is specified in "@<TRIPOS>MOLECULE" section while + some atoms do not have the optional field ``charge``. + + + .. versionchanged:: 0.9 + Now subclasses TopologyReaderBase + .. versionchanged:: 0.20.0 + Allows for comments at the top of the file + Ignores status bit strings + .. versionchanged:: 2.0.0 + Bonds attribute is not added if no bonds are present in MOL2 file + .. versionchanged:: 2.0.0 + Parse elements from atom types. + .. versionchanged:: 2.2.0 + Read MOL2 files with optional columns omitted. + """ + format = 'MOL2' + +
[docs] def parse(self, **kwargs): + """Parse MOL2 file *filename* and return the dict `structure`. + + Returns + ------- + A MDAnalysis Topology object + """ + blocks = [] + + with openany(self.filename) as f: + for i, line in enumerate(f): + # found new molecules + if "@<TRIPOS>MOLECULE" in line: + if len(blocks): + break + blocks.append({"start_line": i, "lines": []}) + if len(blocks): + blocks[-1]["lines"].append(line) + + if not len(blocks): + raise ValueError("The mol2 file '{0}' needs to have at least one" + " @<TRIPOS>MOLECULE block".format(self.filename)) + block = blocks[0] + + sections = {} + cursor = None + + for line in block["lines"]: + if "@<TRIPOS>" in line: + cursor = line.split("@<TRIPOS>")[1].strip().lower() + sections[cursor] = [] + continue + elif line.startswith("#") or line == "\n": + continue + sections[cursor].append(line) + + atom_lines, bond_lines = sections["atom"], sections.get("bond") + + if not len(atom_lines): + raise ValueError("The mol2 block ({0}:{1}) has no atoms".format( + os.path.basename(self.filename), block["start_line"])) + + ids = [] + names = [] + types = [] + resids = [] + resnames = [] + charges = [] + has_charges = sections['molecule'][3].strip() != 'NO_CHARGES' + for a in atom_lines: + columns = a.split() + if len(columns) >= 9: + aid, name, x, y, z, atom_type, \ + resid, resname, charge = columns[:9] + elif len(columns) < 6: + raise ValueError(f"The @<TRIPOS>ATOM block in mol2 file" + f" {os.path.basename(self.filename)}" + f" should have at least 6 fields to be" + f" unpacked: atom_id atom_name x y z" + f" atom_type [subst_id[subst_name" + f" [charge [status_bit]]]]") + else: + aid, name, x, y, z, atom_type = columns[:6] + id_name_charge = [1, None, None] + for i in range(6, len(columns)): + id_name_charge[i-6] = columns[i] + resid, resname, charge = id_name_charge + if has_charges: + if charge is None: + raise ValueError(f"The mol2 file {self.filename}" + f" indicates a charge model" + f"{sections['molecule'][3]}, but" + f" no charge provided in line: {a}") + else: + if charge is not None: + raise ValueError(f"The mol2 file {self.filename}" + f" indicates no charges, but charge" + f" {charge} provided in line: {a}.") + + ids.append(aid) + names.append(name) + types.append(atom_type) + resids.append(resid) + resnames.append(resname) + charges.append(charge) + + n_atoms = len(ids) + + validated_elements = np.empty(n_atoms, dtype="U3") + invalid_elements = set() + for i, at in enumerate(types): + if at in SYBYL2SYMB: + validated_elements[i] = SYBYL2SYMB[at] + else: + invalid_elements.add(at) + validated_elements[i] = '' + + # Print single warning for all unknown elements, if any + if invalid_elements: + warnings.warn("Unknown elements found for some " + f"atoms: {invalid_elements}. " + "These have been given an empty element record.") + + masses = guessers.guess_masses(validated_elements) + + attrs = [] + attrs.append(Atomids(np.array(ids, dtype=np.int32))) + attrs.append(Atomnames(np.array(names, dtype=object))) + attrs.append(Atomtypes(np.array(types, dtype=object))) + if has_charges: + attrs.append(Charges(np.array(charges, dtype=np.float32))) + attrs.append(Masses(masses, guessed=True)) + + if not np.all(validated_elements == ''): + attrs.append(Elements(validated_elements)) + + resids = np.array(resids, dtype=np.int32) + resnames = np.array(resnames, dtype=object) + + if np.all(resnames): + residx, resids, (resnames,) = squash_by( + resids, resnames) + n_residues = len(resids) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(Resnames(resnames)) + elif not np.any(resnames): + residx, resids, _ = squash_by(resids,) + n_residues = len(resids) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + else: + raise ValueError(f"Some atoms in the mol2 file {self.filename}" + f" have subst_name while some do not.") + + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + + # don't add Bonds if there are none (Issue #3057) + if bond_lines: + bonds = [] + bondorder = [] + for b in bond_lines: + # bond_type can be: 1, 2, am, ar + bid, a0, a1, bond_type = b.split()[:4] + + a0, a1 = int(a0) - 1, int(a1) - 1 + bond = tuple(sorted([a0, a1])) + bondorder.append(bond_type) + bonds.append(bond) + attrs.append(Bonds(bonds, order=bondorder)) + + top = Topology(n_atoms, n_residues, 1, + attrs=attrs, + atom_resindex=residx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/MinimalParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/MinimalParser.html new file mode 100644 index 0000000000..6428deca32 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/MinimalParser.html @@ -0,0 +1,219 @@ + + + + + + MDAnalysis.topology.MinimalParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.MinimalParser

+# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding: utf-8 -*-
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+#
+# MDAnalysis --- http://www.mdanalysis.org
+# Copyright (c) 2006-2017 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
+#
+
+"""
+Minimal topology parser
+=======================
+
+Parses only the number of atoms from a coordinate/trajectory file.
+This minimal topology can be used to access coordinate data without the need
+for a full-fledged topology file.
+
+
+
+Classes
+-------
+
+.. autoclass:: MinimalParser
+   :members:
+   :inherited-members:
+
+"""
+
+from ..core._get_readers import get_reader_for
+from ..core.topology import Topology
+from .base import TopologyReaderBase
+
+
+
[docs]class MinimalParser(TopologyReaderBase): + """Produces a minimal topology from only the number of atoms. + + This requires that the number of atoms be given in one of two ways: + - The number of atoms can be given as the 'n_atoms' keyword argument. + - If this is not given, then a Reader object for the filename will be + created and the `parse_n_atoms` method on this Reader will be called, + (requiring that the Reader has this capability). + + This requires that the coordinate format has + """ + format = 'MINIMAL' + +
[docs] def parse(self, **kwargs): + """Return the minimal *Topology* object""" + try: + n_atoms = kwargs['n_atoms'] + except KeyError: + reader = get_reader_for(self.filename) + n_atoms = reader.parse_n_atoms(self.filename, **kwargs) + + return Topology(n_atoms, 1, 1)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/PDBParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/PDBParser.html new file mode 100644 index 0000000000..9cda7a06fa --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/PDBParser.html @@ -0,0 +1,637 @@ + + + + + + MDAnalysis.topology.PDBParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.PDBParser

+# -*- 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-2017 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
+#
+
+"""
+PDB Topology Parser
+=========================================================================
+
+This topology parser uses a standard PDB file to build a minimum
+internal structure representation (list of atoms).
+
+The topology reader reads a PDB file line by line and ignores atom
+numbers but only reads residue numbers up to 9,999 correctly. If you
+have systems containing at least 10,000 residues then you need to use
+a different file format (e.g. the "extended" PDB, *XPDB* format, see
+:mod:`~MDAnalysis.topology.ExtendedPDBParser`) that can handle residue
+numbers up to 99,999.
+
+
+
+.. Note::
+
+   The parser processes atoms and their names. Masses are guessed and set to 0
+   if unknown. Partial charges are not set. Elements are parsed if they are
+   valid. If partially missing or incorrect, empty records are assigned.
+
+See Also
+--------
+* :mod:`MDAnalysis.topology.ExtendedPDBParser`
+* :class:`MDAnalysis.coordinates.PDB.PDBReader`
+* :class:`MDAnalysis.core.universe.Universe`
+
+
+Classes
+-------
+
+.. autoclass:: PDBParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+import warnings
+
+from .guessers import guess_masses, guess_types
+from .tables import SYMB2Z
+from ..lib import util
+from .base import TopologyReaderBase, change_squash
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomids,
+    AltLocs,
+    Bonds,
+    ChainIDs,
+    Atomtypes,
+    Elements,
+    ICodes,
+    Masses,
+    Occupancies,
+    RecordTypes,
+    Resids,
+    Resnames,
+    Resnums,
+    Segids,
+    Tempfactors,
+    FormalCharges,
+)
+
+
+def float_or_default(val, default):
+    try:
+        return float(val)
+    except ValueError:
+        return default
+
+
+DIGITS_UPPER = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+DIGITS_LOWER = DIGITS_UPPER.lower()
+DIGITS_UPPER_VALUES = dict([pair for pair in zip(DIGITS_UPPER, range(36))])
+DIGITS_LOWER_VALUES = dict([pair for pair in zip(DIGITS_LOWER, range(36))])
+
+
+def decode_pure(digits_values, s):
+    """Decodes the string s using the digit, value associations for each
+    character.
+
+    Parameters
+    ----------
+    digits_values: dict
+        A dictionary containing the base-10 numbers that each hexadecimal
+        number corresponds to.
+    s: str
+        The contents of the pdb index columns.
+
+    Returns
+    -------
+    The integer in base-10 corresponding to traditional base-36.
+    """
+    result = 0
+    n = len(digits_values)
+    for c in s:
+        result *= n
+        result += digits_values[c]
+    return result
+
+
+def hy36decode(width, s):
+    """
+    Decodes base-10/upper-case base-36/lower-case base-36 hybrid.
+
+    Parameters
+    ----------
+    width: int
+        The number of columns in the pdb file store atom index.
+    s: str
+        The contents of the pdb index columns.
+
+    Returns
+    -------
+    int
+        Base-10 integer corresponding to hybrid36.
+    """
+    if (len(s) == width):
+        f = s[0]
+        if (f == "-" or f == " " or f.isdigit()):
+            return int(s)
+        elif (f in DIGITS_UPPER_VALUES):
+            return decode_pure(digits_values=DIGITS_UPPER_VALUES,
+                               s=s) - 10 * 36 ** (width - 1) + 10 ** width
+        elif (f in DIGITS_LOWER_VALUES):
+            return decode_pure(digits_values=DIGITS_LOWER_VALUES,
+                               s=s) + 16 * 36 ** (width - 1) + 10 ** width
+    raise ValueError("invalid number literal.")
+
+
+
[docs]class PDBParser(TopologyReaderBase): + """Parser that obtains a list of atoms from a standard PDB file. + + Creates the following Attributes (if present): + - names + - chainids + - tempfactors + - occupancies + - record_types (ATOM/HETATM) + - resids + - resnames + - segids + - elements + - bonds + - formalcharges + + Guesses the following Attributes: + - masses + + See Also + -------- + :class:`MDAnalysis.coordinates.PDB.PDBReader` + + + .. versionadded:: 0.8 + .. versionchanged:: 0.18.0 + Added parsing of Record types + .. versionchanged:: 1.0.0 + Added parsing of valid Elements + .. versionchanged:: 2.0.0 + Bonds attribute is not added if no bonds are present in PDB file. + If elements are invalid or partially missing, empty elements records + are now assigned (Issue #2422). + Aliased ``bfactors`` topologyattribute to ``tempfactors``. + ``bfactors`` is deprecated and will be removed in 3.0 (Issue #1901) + .. versionchanged:: 2.3.0 + Formal charges are now read from PDB files if present. No formalcharge + attribute is created if no formal charges are present in the PDB file. + Any formal charges not set are assumed to have a value of 0. + Raise `UserWarning` instead `RuntimeError` + when CONECT records are corrupt. + .. versionchanged:: 2.5.0 + Formal charges will not be populated if an unknown entry is encountered, + instead a UserWarning is emitted. + """ + format = ['PDB', 'ENT'] + +
[docs] def parse(self, **kwargs): + """Parse atom information from PDB file + + Returns + ------- + MDAnalysis Topology object + """ + top = self._parseatoms() + + try: + bonds = self._parsebonds(top.ids.values) + except AttributeError: + warnings.warn("Invalid atom serials were present, " + "bonds will not be parsed") + except RuntimeError: + warnings.warn("CONECT records was corrupt, " + "bonds will not be parsed") + else: + # Issue 2832: don't append Bonds if there are no bonds + if bonds: + top.add_TopologyAttr(bonds) + + return top
+ + def _parseatoms(self): + """Create the initial Topology object""" + resid_prev = 0 # resid looping hack + + record_types = [] + serials = [] + names = [] + altlocs = [] + chainids = [] + icodes = [] + tempfactors = [] + occupancies = [] + resids = [] + resnames = [] + segids = [] + elements = [] + formalcharges = [] + + self._wrapped_serials = False # did serials go over 100k? + last_wrapped_serial = 100000 # if serials wrap, start from here + with util.openany(self.filename) as f: + for line in f: + line = line.strip() # Remove extra spaces + if not line: # Skip line if empty + continue + if line.startswith('END'): + break + if not line.startswith(('ATOM', 'HETATM')): + continue + + record_types.append(line[:6].strip()) + try: + serial = int(line[6:11]) + except: + try: + serial = hy36decode(5, line[6:11]) + except ValueError: + # serial can become '***' when they get too high + self._wrapped_serials = True + serial = last_wrapped_serial + last_wrapped_serial += 1 + finally: + serials.append(serial) + + names.append(line[12:16].strip()) + altlocs.append(line[16:17].strip()) + resnames.append(line[17:21].strip()) + chainids.append(line[21:22].strip()) + elements.append(line[76:78].strip()) + formalcharges.append(line[78:80].strip()) + + # Resids are optional + try: + if self.format == "XPDB": # fugly but keeps code DRY + # extended non-standard format used by VMD + resid = int(line[22:27]) + else: + resid = int(line[22:26]) + # Wrapping + while resid - resid_prev < -5000: + resid += 10000 + resid_prev = resid + except ValueError: + warnings.warn("PDB file is missing resid information. " + "Defaulted to '1'") + resid = 1 + finally: + resids.append(resid) + icodes.append(line[26:27].strip()) + + occupancies.append(float_or_default(line[54:60], 0.0)) + tempfactors.append(float_or_default(line[60:66], 1.0)) # AKA bfactor + + segids.append(line[66:76].strip()) + + # Warn about wrapped serials + if self._wrapped_serials: + warnings.warn("Serial numbers went over 100,000. " + "Higher serials have been guessed") + + # If segids not present, try to use chainids + if not any(segids): + segids = chainids + + n_atoms = len(serials) + + attrs = [] + # Make Atom TopologyAttrs + for vals, Attr, dtype in ( + (names, Atomnames, object), + (altlocs, AltLocs, object), + (chainids, ChainIDs, object), + (record_types, RecordTypes, object), + (serials, Atomids, np.int32), + (tempfactors, Tempfactors, np.float32), + (occupancies, Occupancies, np.float32), + ): + attrs.append(Attr(np.array(vals, dtype=dtype))) + # Guessed attributes + # masses from types if they exist + # OPT: We do this check twice, maybe could refactor to avoid this + if not any(elements): + atomtypes = guess_types(names) + attrs.append(Atomtypes(atomtypes, guessed=True)) + warnings.warn("Element information is missing, elements attribute " + "will not be populated. If needed these can be " + "guessed using MDAnalysis.topology.guessers.") + else: + # Feed atomtypes as raw element column, but validate elements + atomtypes = elements + attrs.append(Atomtypes(np.array(elements, dtype=object))) + + validated_elements = [] + for elem in elements: + if elem.capitalize() in SYMB2Z: + validated_elements.append(elem.capitalize()) + else: + wmsg = (f"Unknown element {elem} found for some atoms. " + f"These have been given an empty element record. " + f"If needed they can be guessed using " + f"MDAnalysis.topology.guessers.") + warnings.warn(wmsg) + validated_elements.append('') + attrs.append(Elements(np.array(validated_elements, dtype=object))) + + if any(formalcharges): + try: + for i, entry in enumerate(formalcharges): + if not entry == '': + if entry == '0': + # Technically a lack of charge shouldn't be in the + # PDB but MDA has a few files that specifically + # have 0 entries, indicating that some folks + # interpret 0 as an allowed entry + formalcharges[i] = 0 + elif ('+' in entry) or ('-' in entry): + formalcharges[i] = int(entry[::-1]) + else: + raise ValueError + else: + formalcharges[i] = 0 + except ValueError: + wmsg = (f"Unknown entry {entry} encountered in formal charge " + "field. This likely indicates that the PDB file is " + "not fully standard compliant. The formalcharges " + "attribute will not be populated.") + warnings.warn(wmsg) + else: + attrs.append(FormalCharges(np.array(formalcharges, dtype=int))) + + masses = guess_masses(atomtypes) + attrs.append(Masses(masses, guessed=True)) + + # Residue level stuff from here + resids = np.array(resids, dtype=np.int32) + resnames = np.array(resnames, dtype=object) + if self.format == 'XPDB': # XPDB doesn't have icodes + icodes = [''] * n_atoms + icodes = np.array(icodes, dtype=object) + resnums = resids.copy() + segids = np.array(segids, dtype=object) + + residx, (resids, resnames, icodes, resnums, segids) = change_squash( + (resids, resnames, icodes, segids), (resids, resnames, icodes, resnums, segids)) + n_residues = len(resids) + attrs.append(Resnums(resnums)) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(ICodes(icodes)) + attrs.append(Resnames(resnames)) + + if any(segids) and not any(val is None for val in segids): + segidx, (segids,) = change_squash((segids,), (segids,)) + n_segments = len(segids) + attrs.append(Segids(segids)) + else: + n_segments = 1 + attrs.append(Segids(np.array(['SYSTEM'], dtype=object))) + segidx = None + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + return top + + def _parsebonds(self, serials): + # Could optimise this by saving lines in the main loop + # then doing post processing after all Atoms have been read + # ie do one pass through the file only + # Problem is that in multiframe PDB, the CONECT is at end of file, + # so the "break" call happens before bonds are reached. + + # If the serials wrapped, this won't work + if self._wrapped_serials: + warnings.warn("Invalid atom serials were present, bonds will not" + " be parsed") + raise AttributeError # gets caught in parse + + # Mapping between the atom array indicies a.index and atom ids + # (serial) in the original PDB file + mapping = dict((s, i) for i, s in enumerate(serials)) + + bonds = set() + with util.openany(self.filename) as f: + lines = (line for line in f if line[:6] == "CONECT") + for line in lines: + atom, atoms = _parse_conect(line.strip()) + for a in atoms: + try: + bond = tuple([mapping[atom], mapping[a]]) + except KeyError: + # Bonds to TER records have no mapping + # Ignore these as they are not real atoms + warnings.warn( + "PDB file contained CONECT record to TER entry. " + "These are not included in bonds.") + else: + bonds.add(bond) + + bonds = tuple(bonds) + + return Bonds(bonds)
+ + +def _parse_conect(conect): + """parse a CONECT record from pdbs + + Parameters + ---------- + conect : str + white space striped CONECT record + + Returns + ------- + atom_id : int + atom index of bond + bonds : set + atom ids of bonded atoms + + Raises + ------ + RuntimeError + Raised if ``conect`` is not a valid CONECT record + """ + atom_id = int(conect[6:11]) + n_bond_atoms = len(conect[11:]) // 5 + + try: + if len(conect[11:]) % n_bond_atoms != 0: + raise RuntimeError("Bond atoms aren't aligned proberly for CONECT " + "record: {}".format(conect)) + except ZeroDivisionError: + # Conect record with only one entry (CONECT A\n) + warnings.warn("Found CONECT record with single entry, ignoring this") + return atom_id, [] # return empty list to allow iteration over nothing + + bond_atoms = (int(conect[11 + i * 5: 16 + i * 5]) for i in + range(n_bond_atoms)) + return atom_id, bond_atoms +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.html new file mode 100644 index 0000000000..4a99138369 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.html @@ -0,0 +1,336 @@ + + + + + + MDAnalysis.topology.PDBQTParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.PDBQTParser

+# -*- 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-2017 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
+#
+
+"""
+PDBQT topology parser
+=====================
+
+Use a PDBQT_ file to build a minimum internal structure representation (list of
+atoms), including AutoDock_ atom types (stored as :attr:`Atom.type`) and
+partial charges (:attr:`Atom.charge`).
+
+* Reads a PDBQT file line by line and does not require sequential atom numbering.
+* Multi-model PDBQT files are not supported.
+
+Notes
+-----
+Only reads atoms and their names; connectivity is not
+deduced. Masses are guessed and set to 0 if unknown.
+
+
+See Also
+--------
+`MDAnalysis.coordinates.PDBQT`
+
+
+Classes
+-------
+.. autoclass:: PDBQTParser
+   :members:
+   :inherited-members:
+
+
+.. _PDBQT:
+   http://autodock.scripps.edu/faqs-help/faq/what-is-the-format-of-a-pdbqt-file
+.. _AutoDock:
+   http://autodock.scripps.edu/
+"""
+import numpy as np
+
+from . import guessers
+from ..lib import util
+from .base import TopologyReaderBase, change_squash
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    AltLocs,
+    Atomtypes,
+    Charges,
+    ICodes,
+    Masses,
+    Occupancies,
+    RecordTypes,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+    Tempfactors,
+)
+
+
+
[docs]class PDBQTParser(TopologyReaderBase): + """Read topology from a PDBQT file. + + Creates the following Attributes: + - atom ids (serial) + - atom types + - atom names + - altLocs + - resnames + - chainIDs (becomes segid) + - resids + - record_types (ATOM/HETATM) + - icodes + - occupancies + - tempfactors + - charges + + Guesses the following: + - elements + - masses + + .. versionchanged:: 0.18.0 + Added parsing of Record types + """ + format = 'PDBQT' + +
[docs] def parse(self, **kwargs): + """Parse atom information from PDBQT file *filename*. + + Returns + ------- + MDAnalysis Topology object + """ + record_types = [] + serials = [] + names = [] + altlocs = [] + resnames = [] + chainids = [] + resids = [] + icodes = [] + occupancies = [] + tempfactors = [] + charges = [] + atomtypes = [] + + with util.openany(self.filename) as f: + for line in f: + line = line.strip() + if not line.startswith(('ATOM', 'HETATM')): + continue + record_types.append(line[:6].strip()) + serials.append(int(line[6:11])) + names.append(line[12:16].strip()) + altlocs.append(line[16:17].strip()) + resnames.append(line[17:21].strip()) + chainids.append(line[21:22].strip()) + resids.append(int(line[22:26])) + icodes.append(line[26:27].strip()) + occupancies.append(float(line[54:60])) + tempfactors.append(float(line[60:66])) + charges.append(float(line[66:76])) + atomtypes.append(line[77:80].strip()) + + n_atoms = len(serials) + + masses = guessers.guess_masses(atomtypes) + + attrs = [] + for attrlist, Attr, dtype in ( + (record_types, RecordTypes, object), + (serials, Atomids, np.int32), + (names, Atomnames, object), + (altlocs, AltLocs, object), + (occupancies, Occupancies, np.float32), + (tempfactors, Tempfactors, np.float32), + (charges, Charges, np.float32), + (atomtypes, Atomtypes, object), + ): + attrs.append(Attr(np.array(attrlist, dtype=dtype))) + attrs.append(Masses(masses, guessed=True)) + + resids = np.array(resids, dtype=np.int32) + icodes = np.array(icodes, dtype=object) + resnames = np.array(resnames, dtype=object) + chainids = np.array(chainids, dtype=object) + + residx, (resids, icodes, resnames, chainids) = change_squash( + (resids, icodes), (resids, icodes, resnames, chainids)) + n_residues = len(resids) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(ICodes(icodes)) + attrs.append(Resnames(resnames)) + + segidx, (segids,) = change_squash((chainids,), (chainids,)) + n_segments = len(segids) + attrs.append(Segids(segids)) + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/PQRParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/PQRParser.html new file mode 100644 index 0000000000..bda2602e19 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/PQRParser.html @@ -0,0 +1,386 @@ + + + + + + MDAnalysis.topology.PQRParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.PQRParser

+# -*- 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-2017 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
+#
+
+"""
+PQR topology parser
+===================
+
+Read atoms with charges from a PQR_ file (as written by PDB2PQR_). No
+connectivity is deduced.
+
+Note
+----
+The file format is described in :mod:`MDAnalysis.coordinates.PQR`.
+
+
+Classes
+-------
+
+.. autoclass:: PQRParser
+   :members:
+   :inherited-members:
+
+
+.. _PQR:     https://apbs-pdb2pqr.readthedocs.io/en/latest/formats/pqr.html
+.. _APBS:    https://apbs-pdb2pqr.readthedocs.io/en/latest/apbs/index.html
+.. _PDB2PQR: https://apbs-pdb2pqr.readthedocs.io/en/latest/pdb2pqr/index.html
+.. _PDB:     http://www.wwpdb.org/documentation/file-format
+
+"""
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Charges,
+    ICodes,
+    Masses,
+    Radii,
+    RecordTypes,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+)
+from ..core.topology import Topology
+from .base import TopologyReaderBase, squash_by, change_squash
+
+
+
[docs]class PQRParser(TopologyReaderBase): + """Parse atom information from PQR file *filename*. + + Creates a MDAnalysis Topology with the following attributes + - Atomids + - Atomnames + - Charges + - Radii + - RecordTypes (ATOM/HETATM) + - Resids + - Resnames + - Segids + + Guesses the following: + - atomtypes (if not present, Gromacs generated PQR files have these) + - masses + + .. versionchanged:: 0.9.0 + Read chainID from a PQR file and use it as segid (before we always used + 'SYSTEM' as the new segid). + .. versionchanged:: 0.16.1 + Now reads insertion codes and splits into new residues around these + .. versionchanged:: 0.18.0 + Added parsing of Record types + Can now read PQR files from Gromacs, these provide atom type as last column + but don't have segids + """ + format = 'PQR' + +
[docs] @staticmethod + def guess_flavour(line): + """Guess which variant of PQR format this line is + + Parameters + ---------- + line : str + entire line of PQR file starting with ATOM/HETATM + + Returns + ------- + flavour : str + ORIGINAL / GROMACS / NO_CHAINID + + .. versionadded:: 0.18.0 + """ + fields = line.split() + if len(fields) == 11: + try: + float(fields[-1]) + except ValueError: + flavour = 'GROMACS' + else: + flavour = 'ORIGINAL' + else: + flavour = 'NO_CHAINID' + return flavour
+ +
[docs] def parse(self, **kwargs): + """Parse atom information from PQR file *filename*. + + Returns + ------- + A MDAnalysis Topology object + """ + record_types = [] + serials = [] + names = [] + resnames = [] + chainIDs = [] + resids = [] + icodes = [] + charges = [] + radii = [] + elements = [] + + flavour = None + + with openany(self.filename) as f: + for line in f: + if not line.startswith(("ATOM", "HETATM")): + continue + fields = line.split() + + if flavour is None: + flavour = self.guess_flavour(line) + if flavour == 'ORIGINAL': + (recordName, serial, name, resName, + chainID, resSeq, x, y, z, charge, + radius) = fields + elif flavour == 'GROMACS': + (recordName, serial, name, resName, + resSeq, x, y, z, charge, + radius, element) = fields + chainID = "SYSTEM" + elements.append(element) + elif flavour == 'NO_CHAINID': + # files without the chainID + (recordName, serial, name, resName, + resSeq, x, y, z, charge, radius) = fields + chainID = "SYSTEM" + + try: + resid = int(resSeq) + except ValueError: + # has icode present + resid = int(resSeq[:-1]) + icode = resSeq[-1] + else: + icode = '' + + record_types.append(recordName) + serials.append(serial) + names.append(name) + resnames.append(resName) + resids.append(resid) + icodes.append(icode) + charges.append(charge) + radii.append(radius) + chainIDs.append(chainID) + + n_atoms = len(serials) + + if not elements: + atomtypes = guessers.guess_types(names) + guessed_types = True + else: + atomtypes = elements + guessed_types = False + masses = guessers.guess_masses(atomtypes) + + attrs = [] + attrs.append(Atomids(np.array(serials, dtype=np.int32))) + attrs.append(Atomnames(np.array(names, dtype=object))) + attrs.append(Charges(np.array(charges, dtype=np.float32))) + attrs.append(Atomtypes(atomtypes, guessed=guessed_types)) + attrs.append(Masses(masses, guessed=True)) + attrs.append(RecordTypes(np.array(record_types, dtype=object))) + attrs.append(Radii(np.array(radii, dtype=np.float32))) + + resids = np.array(resids, dtype=np.int32) + icodes = np.array(icodes, dtype=object) + resnames = np.array(resnames, dtype=object) + chainIDs = np.array(chainIDs, dtype=object) + + residx, (resids, resnames, icodes, chainIDs) = change_squash( + (resids, resnames, icodes, chainIDs), + (resids, resnames, icodes, chainIDs)) + + n_residues = len(resids) + attrs.append(Resids(resids)) + attrs.append(Resnums(resids.copy())) + attrs.append(Resnames(resnames)) + attrs.append(ICodes(icodes)) + + segidx, chainIDs = squash_by(chainIDs)[:2] + + n_segments = len(chainIDs) + attrs.append(Segids(chainIDs)) + + top = Topology(n_atoms, n_residues, n_segments, + attrs=attrs, + atom_resindex=residx, + residue_segindex=segidx) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/PSFParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/PSFParser.html new file mode 100644 index 0000000000..a683fe2571 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/PSFParser.html @@ -0,0 +1,493 @@ + + + + + + MDAnalysis.topology.PSFParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.PSFParser

+# -*- 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-2017 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
+#
+
+"""
+PSF topology parser
+===================
+
+Reads a CHARMM/NAMD/XPLOR PSF_ file to build the system. The topology will
+contain atom IDs, segids, residue IDs, residue names, atom names, atom types,
+charges and masses. Bonds, angles, dihedrals and impropers are also read from
+the file.
+
+It reads both standard and extended ("EXT") PSF formats and can also parse NAMD
+space-separated "PSF" file variants.
+
+.. _PSF: http://www.charmm.org/documentation/c35b1/struct.html
+
+Classes
+-------
+
+.. autoclass:: PSFParser
+   :members:
+   :inherited-members:
+
+"""
+import logging
+import functools
+from math import ceil
+import numpy as np
+
+from ..lib.util import openany
+from . import guessers
+from .base import TopologyReaderBase, squash_by, change_squash
+from ..core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Masses,
+    Charges,
+    Resids,
+    Resnums,
+    Resnames,
+    Segids,
+    Bonds,
+    Angles,
+    Dihedrals,
+    Impropers
+)
+from ..core.topology import Topology
+
+logger = logging.getLogger("MDAnalysis.topology.PSF")
+
+
+
[docs]class PSFParser(TopologyReaderBase): + """Read topology information from a CHARMM/NAMD/XPLOR PSF_ file. + + Creates a Topology with the following Attributes: + - ids + - names + - types + - masses + - charges + - resids + - resnames + - segids + - bonds + - angles + - dihedrals + - impropers + + .. _PSF: http://www.charmm.org/documentation/c35b1/struct.html + """ + format = 'PSF' + +
[docs] def parse(self, **kwargs): + """Parse PSF file into Topology + + Returns + ------- + MDAnalysis *Topology* object + """ + # Open and check psf validity + with openany(self.filename) as psffile: + header = next(psffile) + if not header.startswith("PSF"): + err = ("{0} is not valid PSF file (header = {1})" + "".format(self.filename, header)) + logger.error(err) + raise ValueError(err) + header_flags = header[3:].split() + + if "NAMD" in header_flags: + self._format = "NAMD" # NAMD/VMD + elif "EXT" in header_flags: + self._format = "EXTENDED" # CHARMM + else: + self._format = "STANDARD" # CHARMM + + next(psffile) + title = next(psffile).split() + if not (title[1] == "!NTITLE"): + err = "{0} is not a valid PSF file".format(self.filename) + logger.error(err) + raise ValueError(err) + # psfremarks = [psffile.next() for i in range(int(title[0]))] + for _ in range(int(title[0])): + next(psffile) + logger.debug("PSF file {0}: format {1}" + "".format(self.filename, self._format)) + + # Atoms first and mandatory + top = self._parse_sec( + psffile, ('NATOM', 1, 1, self._parseatoms)) + # Then possibly other sections + sections = ( + #("atoms", ("NATOM", 1, 1, self._parseatoms)), + (Bonds, ("NBOND", 2, 4, self._parsesection)), + (Angles, ("NTHETA", 3, 3, self._parsesection)), + (Dihedrals, ("NPHI", 4, 2, self._parsesection)), + (Impropers, ("NIMPHI", 4, 2, self._parsesection)), + #("donors", ("NDON", 2, 4, self._parsesection)), + #("acceptors", ("NACC", 2, 4, self._parsesection)) + ) + + try: + for attr, info in sections: + next(psffile) + top.add_TopologyAttr( + attr(self._parse_sec(psffile, info))) + except StopIteration: + # Reached the end of the file before we expected + for attr in (Bonds, Angles, Dihedrals, Impropers): + if not hasattr(top, attr.attrname): + top.add_TopologyAttr(attr([])) + + return top
+ + def _parse_sec(self, psffile, section_info): + """Parse a single section of the PSF + + Returns + ------- + A list of Attributes from this section + """ + desc, atoms_per, per_line, parsefunc = section_info + header = next(psffile) + while header.strip() == "": + header = next(psffile) + header = header.split() + # Get the number + num = float(header[0]) + sect_type = header[1].strip('!:') + # Make sure the section type matches the desc + if not sect_type == desc: + err = ("Expected section {0} but found {1}" + "".format(desc, sect_type)) + logger.error(err) + raise ValueError(err) + # Now figure out how many lines to read + numlines = int(ceil(num/per_line)) + + psffile_next = functools.partial(next, psffile) + return parsefunc(psffile_next, atoms_per, numlines) + + def _parseatoms(self, lines, atoms_per, numlines): + """Parses atom section in a Charmm PSF file. + + Normal (standard) and extended (EXT) PSF format are + supported. CHEQ is supported in the sense that CHEQ data is simply + ignored. + + + CHARMM Format from ``source/psffres.src``: + + CHEQ:: + II,LSEGID,LRESID,LRES,TYPE(I),IAC(I),CG(I),AMASS(I),IMOVE(I),ECH(I),EHA(I) + + standard format: + (I8,1X,A4,1X,A4,1X,A4,1X,A4,1X,I4,1X,2G14.6,I8,2G14.6) + (I8,1X,A4,1X,A4,1X,A4,1X,A4,1X,A4,1X,2G14.6,I8,2G14.6) XPLOR + expanded format EXT: + (I10,1X,A8,1X,A8,1X,A8,1X,A8,1X,I4,1X,2G14.6,I8,2G14.6) + (I10,1X,A8,1X,A8,1X,A8,1X,A8,1X,A4,1X,2G14.6,I8,2G14.6) XPLOR + + no CHEQ:: + II,LSEGID,LRESID,LRES,TYPE(I),IAC(I),CG(I),AMASS(I),IMOVE(I) + + standard format: + (I8,1X,A4,1X,A4,1X,A4,1X,A4,1X,I4,1X,2G14.6,I8) + (I8,1X,A4,1X,A4,1X,A4,1X,A4,1X,A4,1X,2G14.6,I8) XPLOR + expanded format EXT: + (I10,1X,A8,1X,A8,1X,A8,1X,A8,1X,I4,1X,2G14.6,I8) + (I10,1X,A8,1X,A8,1X,A8,1X,A8,1X,A4,1X,2G14.6,I8) XPLOR + + NAMD PSF + + space separated, see release notes for VMD 1.9.1, psfplugin at + http://www.ks.uiuc.edu/Research/vmd/current/devel.html : + + psfplugin: Added more logic to the PSF plugin to determine cases where the + CHARMM "EXTended" PSF format cannot accomodate long atom types, and we add + a "NAMD" keyword to the PSF file flags line at the top of the file. Upon + reading, if we detect the "NAMD" flag there, we know that it is possible + to parse the file correctly using a simple space-delimited scanf() format + string, and we use that strategy rather than holding to the inflexible + column-based fields that are a necessity for compatibility with CHARMM, + CNS, X-PLOR, and other formats. NAMD and the psfgen plugin already assume + this sort of space-delimited formatting, but that's because they aren't + expected to parse the PSF variants associated with the other programs. For + the VMD PSF plugin, having the "NAMD" tag in the flags line makes it + absolutely clear that we're dealing with a NAMD-specific file so we can + take the same approach. + + """ + # how to partition the line into the individual atom components + atom_parsers = { + 'STANDARD': lambda l: + (l[:8], l[9:13].strip() or "SYSTEM", l[14:18], + l[19:23].strip(), l[24:28].strip(), + l[29:33].strip(), l[34:48], l[48:62]), + # l[62:70], l[70:84], l[84:98] ignore IMOVE, ECH and EHA, + 'EXTENDED': lambda l: + (l[:10], l[11:19].strip() or "SYSTEM", l[20:28], + l[29:37].strip(), l[38:46].strip(), + l[47:51].strip(), l[52:66], l[66:70]), + # l[70:78], l[78:84], l[84:98] ignore IMOVE, ECH and EHA, + 'NAMD': lambda l: l.split()[:8], + } + 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], + x[4], x[5], float(x[6]), float(x[7])) + + # Oli: I don't think that this is the correct OUTPUT format: + # psf_atom_format = " %5d %4s %4d %4s %-4s %-4s %10.6f %7.4f%s\n" + # It should be rather something like: + # psf_ATOM_format = '%(iatom)8d %(segid)4s %(resid)-4d %(resname)4s '+\ + # '%(name)-4s %(type)4s %(charge)-14.6f%(mass)-14.4f%(imove)8d\n' + + # source/psfres.src (CHEQ and now can be used for CHEQ EXTended), see comments above + # II,LSEGID,LRESID,LRES,TYPE(I),IAC(I),CG(I),AMASS(I),IMOVE(I),ECH(I),EHA(I) + # (I8,1X,A4, 1X,A4, 1X,A4, 1X,A4, 1X,I4, 1X,2G14.6, I8, 2G14.6) + # 0:8 9:13 14:18 19:23 24:28 29:33 34:48 48:62 62:70 70:84 84:98 + + # Allocate arrays + atomids = np.zeros(numlines, dtype=np.int32) + segids = np.zeros(numlines, dtype=object) + resids = np.zeros(numlines, dtype=np.int32) + resnames = np.zeros(numlines, dtype=object) + atomnames = np.zeros(numlines, dtype=object) + atomtypes = np.zeros(numlines, dtype=object) + charges = np.zeros(numlines, dtype=np.float32) + masses = np.zeros(numlines, dtype=np.float64) + + for i in range(numlines): + try: + line = lines() + except StopIteration: + err = f"{self.filename} is not valid PSF file" + logger.error(err) + raise ValueError(err) from None + try: + vals = set_type(atom_parser(line)) + except ValueError: + # last ditch attempt: this *might* be a NAMD/VMD + # space-separated "PSF" file from VMD version < 1.9.1 + atom_parser = atom_parsers['NAMD'] + vals = set_type(atom_parser(line)) + logger.warning("Guessing that this is actually a" + " NAMD-type PSF file..." + " continuing with fingers crossed!") + logger.debug("First NAMD-type line: {0}: {1}" + "".format(i, line.rstrip())) + + atomids[i] = vals[0] + segids[i] = vals[1] + resids[i] = vals[2] + resnames[i] = vals[3] + atomnames[i] = vals[4] + atomtypes[i] = vals[5] + charges[i] = vals[6] + masses[i] = vals[7] + + # Atom + atomids = Atomids(atomids) + atomnames = Atomnames(atomnames) + atomtypes = Atomtypes(atomtypes) + charges = Charges(charges) + masses = Masses(masses) + + # Residue + # resids, resnames + residx, (new_resids, new_resnames, perres_segids) = change_squash( + (resids, resnames, segids), + (resids, resnames, segids)) + # transform from atom:Rid to atom:Rix + residueids = Resids(new_resids) + residuenums = Resnums(new_resids.copy()) + residuenames = Resnames(new_resnames) + + # Segment + segidx, perseg_segids = squash_by(perres_segids)[:2] + segids = Segids(perseg_segids) + + top = Topology(len(atomids), len(new_resids), len(segids), + attrs=[atomids, atomnames, atomtypes, + charges, masses, + residueids, residuenums, residuenames, + segids], + atom_resindex=residx, + residue_segindex=segidx) + + return top + + def _parsesection(self, lines, atoms_per, numlines): + section = [] + + for i in range(numlines): + # Subtract 1 from each number to ensure zero-indexing for the atoms + fields = np.int64(lines().split()) - 1 + for j in range(0, len(fields), atoms_per): + section.append(tuple(fields[j:j+atoms_per])) + return section
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/TOPParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/TOPParser.html new file mode 100644 index 0000000000..8787dad5ae --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/TOPParser.html @@ -0,0 +1,772 @@ + + + + + + MDAnalysis.topology.TOPParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.TOPParser

+# -*- 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-2017 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
+#
+
+"""
+AMBER PRMTOP topology parser
+============================
+
+Reads an AMBER top file to build the system.
+
+Amber keywords are turned into the following attributes:
+
++----------------------------+----------------------+
+| AMBER flag                 | MDAnalysis attribute |
++----------------------------+----------------------+
+| ATOM_NAME                  | names                |
++----------------------------+----------------------+
+| CHARGE                     | charges              |
++----------------------------+----------------------+
+| ATOMIC_NUMBER              | elements             |
++----------------------------+----------------------+
+| MASS                       | masses               |
++----------------------------+----------------------+
+| BONDS_INC_HYDROGEN         | bonds                |
+| BONDS_WITHOUT_HYDROGEN     |                      |
++----------------------------+----------------------+
+| ANGLES_INC_HYDROGEN        | angles               |
+| ANGLES_WITHOUT_HYDROGEN    |                      |
++----------------------------+----------------------+
+| DIHEDRALS_INC_HYDROGEN     | dihedrals / improper |
+| DIHEDRALS_WITHOUT_HYDROGEN |                      |
++----------------------------+----------------------+
+| ATOM_TYPE_INDEX            | type_indices         |
++----------------------------+----------------------+
+| AMBER_ATOM_TYPE            | types                |
++----------------------------+----------------------+
+| RESIDUE_LABEL              | resnames             |
++----------------------------+----------------------+
+| RESIDUE_POINTER            | residues             |
++----------------------------+----------------------+
+
+TODO:
+  Add support for Chamber-style topologies
+  More stringent tests
+
+.. Note::
+
+   The Amber charge is converted to electron charges as used in
+   MDAnalysis and other packages. To get back Amber charges, multiply
+   by 18.2223.
+
+   Chamber-style Amber topologies (i.e. topologies generated via parmed
+   conversion of a CHARMM topology to an AMBER one) are not currently
+   supported. Support will likely be added in future MDAnalysis releases.
+
+   As of version 2.0.0, elements are no longer guessed if ATOMIC_NUMBER records
+   are missing. In those scenarios, if elements are necessary, users will have
+   to invoke the element guessers after parsing the topology file. Please see
+   :mod:`MDAnalysis.topology.guessers` for more details.
+
+.. _`PARM parameter/topology file specification`:
+   http://ambermd.org/formats.html#topology
+
+Classes
+-------
+
+.. autoclass:: TOPParser
+   :members:
+   :inherited-members:
+
+"""
+import numpy as np
+import itertools
+
+from .tables import Z2SYMB
+from ..lib.util import openany, FORTRANReader
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomtypes,
+    Atomids,
+    Charges,
+    Elements,
+    Masses,
+    Resnames,
+    Resids,
+    Resnums,
+    Segids,
+    AtomAttr,
+    Bonds,
+    Angles,
+    Dihedrals,
+    Impropers
+)
+
+import warnings
+import logging
+
+logger = logging.getLogger('MDAnalysis.topology.TOPParser')
+
+
+class TypeIndices(AtomAttr):
+    """Numerical type of each Atom"""
+    attrname = 'type_indices'
+    singular = 'type_index'
+    level = 'atom'
+
+
+
[docs]class TOPParser(TopologyReaderBase): + """Reads topology information from an AMBER top file. + + Reads the following Attributes if in topology: + - Atomnames + - Charges + - Masses + - Elements + - Atomtypes + - Resnames + - Type_indices + - Bonds + - Angles + - Dihedrals (inc. impropers) + + The format is defined in `PARM parameter/topology file + specification`_. The reader tries to detect if it is a newer + (AMBER 12?) file format by looking for the flag "ATOMIC_NUMBER". + + .. _`PARM parameter/topology file specification`: + http://ambermd.org/formats.html#topology + + Notes + ----- + Elements are obtained from the atomic numbers (if present). If a given + input atomic number does not belong to an element (usually either -1 or 0), + the element will be assigned an empty record. + + .. versionchanged:: 0.7.6 + parses both amber10 and amber12 formats + .. versionchanged:: 0.19.0 + parses bonds, angles, dihedrals, and impropers + .. versionchanged:: 1.0.0 + warns users that chamber-style topologies are not currently supported + .. versionchanged:: 2.0.0 + no longer guesses elements if missing + """ + format = ['TOP', 'PRMTOP', 'PARM7'] + +
[docs] def parse(self, **kwargs): + """Parse Amber PRMTOP topology file *filename*. + + Returns + ------- + A MDAnalysis Topology object + """ + # Sections that we grab as we parse the file + sections = { + "ATOM_NAME": (1, 20, self.parse_names, "name", 0), + "CHARGE": (1, 5, self.parse_charges, "charge", 0), + "ATOMIC_NUMBER": (1, 10, self.parse_elements, "elements", 0), + "MASS": (1, 5, self.parse_masses, "mass", 0), + "ATOM_TYPE_INDEX": (1, 10, self.parse_type_indices, "type_indices", + 0), + "AMBER_ATOM_TYPE": (1, 20, self.parse_types, "types", 0), + "RESIDUE_LABEL": (1, 20, self.parse_resnames, "resname", 11), + "RESIDUE_POINTER": (1, 10, self.parse_residx, "respoint", 11), + "BONDS_INC_HYDROGEN": (3, 10, self.parse_bonded, "bondh", 2), + "BONDS_WITHOUT_HYDROGEN": (3, 10, self.parse_bonded, "bonda", 3), + "ANGLES_INC_HYDROGEN": (4, 10, self.parse_bonded, "angh", 4), + "ANGLES_WITHOUT_HYDROGEN": (4, 10, self.parse_bonded, "anga", 5), + "DIHEDRALS_INC_HYDROGEN": (5, 10, self.parse_bonded, "dihh", 6), + "DIHEDRALS_WITHOUT_HYDROGEN": (5, 10, self.parse_bonded, "diha", 7) + } + + attrs = {} # empty dict for attrs that we'll fill + + # Open and check top validity + # Reading header info POINTERS + with openany(self.filename) as self.topfile: + header = next(self.topfile) + if not header.startswith("%VE"): + raise ValueError( + "{0} is not a valid TOP file. %VE Missing in header" + "".format(self.filename)) + title = next(self.topfile).split() + + if not (title[1] == "TITLE"): + # Raise a separate warning if Chamber-style TOP is detected + if title[1] == "CTITLE": + emsg = ("{0} is detected as a Chamber-style TOP file. " + "At this time MDAnalysis does not support such " + "topologies".format(self.filename)) + else: + emsg = ("{0} is not a valid TOP file. " + "'TITLE' missing in header".format(self.filename)) + raise ValueError(emsg) + + while not header.startswith('%FLAG POINTERS'): + header = next(self.topfile) + next(self.topfile) + + topremarks = [next(self.topfile).strip() for i in range(4)] + sys_info = [int(k) for i in topremarks for k in i.split()] + + header = next(self.topfile) + # grab the next section title + next_section = header.split("%FLAG")[1].strip() + + while next_section is not None: + try: + (num_per_record, per_line, + func, name, sect_num) = sections[next_section] + except KeyError: + def next_getter(): + return self.skipper() + else: + num = sys_info[sect_num] * num_per_record + numlines = (num // per_line) + if num % per_line != 0: + numlines += 1 + + attrs[name] = func(num_per_record, numlines) + + def next_getter(): + return next(self.topfile) + + try: + line = next_getter() + # Capture case where section is empty w/ 1 empty line + if numlines == 0 and not line.strip(): + line = next_getter() + except StopIteration: + next_section = None + else: + try: + next_section = line.split("%FLAG")[1].strip() + except IndexError: + errmsg = (f"%FLAG section not found, formatting error " + f"for PARM7 file {self.filename} ") + raise IndexError(errmsg) from None + + # strip out a few values to play with them + n_atoms = len(attrs['name']) + + resptrs = attrs.pop('respoint') + resptrs.append(n_atoms) + residx = np.zeros(n_atoms, dtype=np.int32) + for i, (x, y) in enumerate(zip(resptrs[:-1], resptrs[1:])): + residx[x:y] = i + + n_res = len(attrs['resname']) + + # Deal with recreating bonds and angle records here + attrs['bonds'] = Bonds([i for i in itertools.chain( + attrs.pop('bonda'), attrs.pop('bondh'))]) + + attrs['angles'] = Angles([i for i in itertools.chain( + attrs.pop('anga'), attrs.pop('angh'))]) + + attrs['dihedrals'], attrs['impropers'] = self.parse_dihedrals( + attrs.pop('diha'), attrs.pop('dihh')) + + # Warn user if elements not in topology + if 'elements' not in attrs: + msg = ("ATOMIC_NUMBER record not found, elements attribute will " + "not be populated. If needed these can be guessed using " + "MDAnalysis.topology.guessers.") + logger.warning(msg) + warnings.warn(msg) + elif np.any(attrs['elements'].values == ""): + # only send out one warning that some elements are unknown + msg = ("Unknown ATOMIC_NUMBER value found for some atoms, these " + "have been given an empty element record. If needed these " + "can be guessed using MDAnalysis.topology.guessers.") + logger.warning(msg) + warnings.warn(msg) + + # atom ids are mandatory + attrs['atomids'] = Atomids(np.arange(n_atoms) + 1) + attrs['resids'] = Resids(np.arange(n_res) + 1) + attrs['resnums'] = Resnums(np.arange(n_res) + 1) + attrs['segids'] = Segids(np.array(['SYSTEM'], dtype=object)) + + top = Topology(n_atoms, n_res, 1, + attrs=list(attrs.values()), + atom_resindex=residx, + residue_segindex=None) + + return top
+ +
[docs] def skipper(self): + """TOPParser :class: helper function, skips lines of input parm7 file + until we find the next %FLAG entry and return that + + Returns + ------- + line : string + String containing the current line of the parm7 file + """ + line = next(self.topfile) + while not line.startswith("%FLAG"): + line = next(self.topfile) + return line
+ +
[docs] def parse_names(self, num_per_record, numlines): + """Extracts atoms names from parm7 file + + Parameters + ---------- + num_per_record : int + The number of entries for each record in the section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr : :class:`Atomnames` + A :class:`Atomnames` instance containing the names of each atom as + defined in the parm7 file + """ + vals = self.parsesection_mapper(numlines, lambda x: x) + attr = Atomnames(np.array(vals, dtype=object)) + return attr
+ +
[docs] def parse_resnames(self, num_per_record, numlines): + """Extracts the names of each residue + + Parameters + ---------- + num_per_record : int + The number of entries for each recrod in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr : :class:`Resnames` + A :class:`Resnames` instance containing the names of each residue + as defined in the parm7 file + """ + vals = self.parsesection_mapper(numlines, lambda x: x) + attr = Resnames(np.array(vals, dtype=object)) + return attr
+ +
[docs] def parse_charges(self, num_per_record, numlines): + """Extracts the partial charges for each atom + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr : :class:`Charges` + A :class:`Charges` instance containing the partial charges of each + atom as defined in the parm7 file + """ + vals = self.parsesection_mapper(numlines, lambda x: float(x)) + charges = np.array(vals, dtype=np.float32) + charges /= 18.2223 # to electron charge units + attr = Charges(charges) + return attr
+ +
[docs] def parse_masses(self, num_per_record, numlines): + """Extracts the mass of each atom + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr : :class:`Masses` + A :class:`Masses` instance containing the mass of each atom as + defined in the parm7 file + """ + vals = self.parsesection_mapper(numlines, lambda x: float(x)) + attr = Masses(vals) + return attr
+ +
[docs] def parse_elements(self, num_per_record, numlines): + """Extracts the atomic numbers of each atom and converts to element type + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section(unused input) + numlines : int + The number of lines to be pasred in current section + + Returns + ------- + attr : :class:`Elements` + A :class:`Elements` instance containing the element of each atom + as defined in the parm7 file + + Note + ---- + If the record contains unknown atomic numbers (e.g. <= 0), these will + be treated as unknown elements and assigned an empty string value. See + issues #2306 and #2651 for more details. + + .. versionchanged:: 2.0.0 + Unrecognised elements will now return a empty string. The parser + will no longer attempt to guess the element by default. + """ + + vals = self.parsesection_mapper( + numlines, + lambda x: Z2SYMB[int(x)] if int(x) > 0 else "") + attr = Elements(np.array(vals, dtype=object)) + return attr
+ +
[docs] def parse_types(self, num_per_record, numlines): + """Extracts the force field atom types of each atom + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr : :class:`Atomtypes` + A :class:`Atomtypes` instance containing the atom types for each + atom as defined in the parm7 file + """ + vals = self.parsesection_mapper(numlines, lambda x: x) + attr = Atomtypes(np.array(vals, dtype=object)) + return attr
+ +
[docs] def parse_type_indices(self, num_per_record, numlines): + """Extracts the index of atom types of the each atom involved in Lennard + Jones (6-12) interactions. + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + attr :class:`TypeIndices` + A :class:`TypeIndices` instance containing the LJ 6-12 atom type + index for each atom + """ + vals = self.parsesection_mapper(numlines, lambda x: int(x)) + attr = TypeIndices(np.array(vals, dtype=np.int32)) + return attr
+ +
[docs] def parse_residx(self, num_per_record, numlines): + """Extracts the residue pointers for each atom + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section (unused input) + numlines : int + The number of lines to be parsed in current section + + Returns + ------- + vals : list of int + A list of zero-formatted residue pointers for each atom + """ + vals = self.parsesection_mapper(numlines, lambda x: int(x) - 1) + return vals
+ +
[docs] def parse_chunks(self, data, chunksize): + """Helper function to parse AMBER PRMTOP bonds/angles. + + Parameters + ---------- + data : list of int + Input list of the parm7 bond/angle section, zero-indexed + num_per_record : int + The number of entries for each record in the input list + + Returns + ------- + vals : list of int tuples + A list of tuples containing the atoms involved in a given bonded + interaction + + Note + ---- + In the parm7 format this information is structured in the following + format: [ atoms 1:n, internal index ] + Where 1:n represent the ids of the n atoms involved in the bond/angle + and the internal index links to a given set of FF parameters. + Therefore, to extract the required information, we split out the list + into chunks of size num_per_record, and only extract the atom ids. + """ + vals = [tuple(data[x:x+chunksize-1]) + for x in range(0, len(data), chunksize)] + return vals
+ +
[docs] def parse_bonded(self, num_per_record, numlines): + """Extracts bond information from PARM7 format files + + Parameters + ---------- + num_per_record : int + The number of entries for each record in section + numlines : int + The number of lines to be parsed for this section + + Note + ---- + For the bond/angle sections of parm7 files, the atom numbers are set to + coordinate array index values. As detailed in + http://ambermd.org/formats.html to recover the actual atom number, one + should divide the values by 3 and add 1. Here, since we want to satisfy + zero-indexing, we only divide by 3. + """ + fields = self.parsesection_mapper(numlines, lambda x: int(x) // 3) + section = self.parse_chunks(fields, num_per_record) + return section
+ +
[docs] def parsesection_mapper(self, numlines, mapper): + """Parses FORTRAN formatted section, and returns a list of all entries + in each line + + Parameters + ---------- + numlines : int + The number of lines to be parsed in this section + mapper : lambda operator + Operator to format entries in current section + + Returns + ------- + section : list + A list of all entries in a given parm7 section + """ + section = [] + y = next(self.topfile).strip("%FORMAT(") + y.strip(")") + x = FORTRANReader(y) + for i in range(numlines): + l = next(self.topfile) + for j in range(len(x.entries)): + val = l[x.entries[j].start:x.entries[j].stop].strip() + if val: + section.append(mapper(val)) + return section
+ +
[docs] def parse_dihedrals(self, diha, dihh): + """Combines hydrogen and non-hydrogen containing AMBER dihedral lists + and extracts sublists for conventional dihedrals and improper angles + + Parameters + ---------- + diha : list of tuples + The atom ids of dihedrals not involving hydrogens + dihh : list of tuples + The atom ids of dihedrals involving hydrogens + + Returns + ------- + dihedrals : :class:`Dihedrals` + A :class:`Dihedrals` instance containing a list of all unique + dihedrals as defined by the parm7 file + impropers : :class:`Impropers` + A :class:`Impropers` instance containing a list of all unique + improper dihedrals as defined by the parm7 file + + Note + ---- + As detailed in http://ambermd.org/formats.html, the dihedral sections + of parm7 files contain information about both conventional dihedrals + and impropers. The following must be accounted for: + 1) If the fourth atom in a dihedral entry is given a negative value, + this indicates that it is an improper. + 2) If the third atom in a dihedral entry is given a negative value, + this indicates that it 1-4 NB interactions are ignored for this + dihedrals. This could be due to the dihedral within a ring, or if it is + part of a multi-term dihedral definition or if it is an improper. + """ + improp = [] + dihed = [] + for i in itertools.chain(diha, dihh): + if i[3] < 0: + improp.append(i[:2]+(abs(i[2]),)+(abs(i[3]),)) + elif i[2] < 0: + vals = i[:2] + (abs(i[2]),) + i[3:] + dihed.append(vals) + else: + dihed.append(i) + dihed = sorted(set(dihed)) + dihedrals = Dihedrals(dihed) + impropers = Impropers(improp) + return dihedrals, impropers
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/TPRParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/TPRParser.html new file mode 100644 index 0000000000..77a3fe137b --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/TPRParser.html @@ -0,0 +1,416 @@ + + + + + + MDAnalysis.topology.TPRParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.TPRParser

+# -*- 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-2017 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
+#
+
+# TPR parser and tpr support module
+# Copyright (c) 2011 Zhuyi Xue
+# Released under the  GNU Public Licence, v2
+
+
+"""Gromacs portable run input TPR format parser
+============================================
+
+The :mod:`~MDAnalysis.topology.TPRParser` module allows reading of a
+Gromacs_ portable run input file (a `TPR file`_). Because
+the file format of the TPR file is changing rapidly, not all versions
+are currently supported. The known working versions and the
+approximate Gromacs release numbers are listed in the table
+:ref:`TPR format versions <TPR-format-table>`.
+
+.. _`TPR-format-table`:
+
+.. table:: TPR format versions and generations read by :func:`MDAnalysis.topology.TPRParser.parse`.
+
+   ========== ============== ==================== =====
+   TPX format TPX generation Gromacs release      read
+   ========== ============== ==================== =====
+   ??         ??             3.3, 3.3.1           no
+
+   58         17             4.0, 4.0.2, 4.0.3,   yes
+                             4.0.4, 4.0.5, 4.0.6,
+                             4.0.7
+
+   73         23             4.5.0, 4.5.1, 4.5.2, yes
+                             4.5.3, 4.5.4, 4.5.5
+
+   83         24             4.6, 4.6.1           yes
+
+   100        26             5.0, 5.0.1, 5.0.2,   yes
+                             5.0.3,5.0.4, 5.0.5
+
+   103        26             5.1                  yes
+
+   110        26             2016                 yes
+   112        26             2018                 yes
+   116        26             2019                 yes
+   119        27             2020[*]_             yes
+   122        28             2021                 yes
+   127        28             2022                 yes
+   129        28             2023                 yes
+   ========== ============== ==================== =====
+
+.. [*] Files generated by the beta versions of Gromacs 2020 are NOT supported.
+   See `Issue 2428`_ for more details.
+
+For further discussion and notes see `Issue 2`_. Please *open a new issue* in
+the `Issue Tracker`_ when a new or different TPR file format version should be
+supported.
+
+Bonded interactions available in Gromacs are described in table 5.5 of the
+`Gromacs manual`_. The following ones are used to build the topology (see
+`Issue 463`_):
+
+* bonds: regular bonds (type 1), G96 bonds (type 2), Morse (type 3),
+  cubic bonds (type 4), connections (type 5), harmonic potentials (type 6),
+  FENE bonds (type 7), restraint potentials (type 10),
+  tabulated potential with exclusion/connection (type 8),
+  tabulated potential without exclusion/connection (type 9), constraints with
+  exclusion/connection (type 1), constraints without exclusion/connection (type
+  2), SETTLE constraints
+* angles: regular angles (type 1), G96 angles (type 2), cross bond-bond
+  (type3), cross-bond-angle (type 4), Urey-Bradley (type 5), quartic angles
+  (type 6), restricted bending potential (type 10), tabulated angles (type 8)
+* dihedrals: proper dihedrals (type 1 and type 9), Ryckaert-Bellemans dihedrals
+  (type 3), Fourier dihedrals (type 5), restricted dihedrals (type 10),
+  combined bending-torsion potentials (type 11), tabulated dihedral (type 8)
+* impropers: improper dihedrals (type 2), periodic improper dihedrals (type 4)
+
+
+Classes
+-------
+
+.. autoclass:: TPRParser
+   :members:
+   :inherited-members:
+
+See Also
+--------
+:mod:`MDAnalysis.topology.tpr`
+
+
+Development notes
+-----------------
+
+The TPR reader is a pure-python implementation of a basic TPR
+parser. Currently the following sections of the topology are parsed:
+
+* Atoms: number, name, type, resname, resid, segid, mass, charge, element
+  [residue, segment, radius, bfactor, resnum, moltype]
+* Bonds
+* Angles
+* Dihedrals
+* Impropers
+
+This tpr parser is written according to the following files
+
+- :file:`{gromacs_dir}/src/kernel/gmxdump.c`
+- :file:`{gromacs_dir}/src/gmxlib/tpxio.c` (the most important one)
+- :file:`{gromacs_dir}/src/gmxlib/gmxfio_rw.c`
+- :file:`{gromacs_dir}/src/gmxlib/gmxfio_xdr.c`
+- :file:`{gromacs_dir}/include/gmxfiofio.h`
+
+or their equivalent in more recent versions of Gromacs.
+
+The function :func:`read_tpxheader` is based on the
+`TPRReaderDevelopment`_ notes.  Functions with names starting with
+``read_`` or ``do_`` are trying to be similar to those in
+:file:`gmxdump.c` or :file:`tpxio.c`, those with ``extract_`` are new.
+
+Versions prior to Gromacs 4.0.x are not supported.
+
+.. Links
+.. _Gromacs: http://www.gromacs.org
+.. _`Gromacs manual`: http://manual.gromacs.org/documentation/5.1/manual-5.1.pdf
+.. _TPR file: http://manual.gromacs.org/current/online/tpr.html
+.. _`Issue Tracker`: https://github.com/MDAnalysis/mdanalysis/issues
+.. _`Issue 2`: https://github.com/MDAnalysis/mdanalysis/issues/2
+.. _`Issue 463`: https://github.com/MDAnalysis/mdanalysis/pull/463
+.. _TPRReaderDevelopment: https://github.com/MDAnalysis/mdanalysis/wiki/TPRReaderDevelopment
+.. _`Issue 2428`: https://github.com/MDAnalysis/mdanalysis/issues/2428
+
+
+.. versionchanged:: 2.0.0
+   The `elements` topology attribute is now exposed if at least one atom has
+   a valid element symbol. In that case, atoms for which the element is not
+   recognized have their element attribute set to an empty string. If none of
+   the elements are recognized, then the `elements` attribute is not set in the
+   topology.
+"""
+__author__ = "Zhuyi Xue"
+__copyright__ = "GNU Public Licence, v2"
+
+import xdrlib
+
+from . import guessers
+from ..lib.util import openany
+from .tpr import utils as tpr_utils
+from .tpr import setting as S
+from .base import TopologyReaderBase
+from ..core.topologyattrs import Resnums
+
+import logging
+logger = logging.getLogger("MDAnalysis.topology.TPRparser")
+
+
+
[docs]class TPRParser(TopologyReaderBase): + """Read topology information from a Gromacs_ `TPR file`_. + + .. _Gromacs: http://www.gromacs.org + .. _TPR file: http://manual.gromacs.org/current/online/tpr.html + """ + format = 'TPR' + +
[docs] def parse(self, tpr_resid_from_one=True, **kwargs): + """Parse a Gromacs TPR file into a MDAnalysis internal topology structure. + + Parameters + ---------- + tpr_resid_from_one: bool (optional) + Toggle whether to index resids from 1 or 0 from TPR files. + TPR files index resids from 0 by default, even though GRO and ITP + files index from 1. + + Returns + ------- + structure : dict + + + .. versionchanged:: 1.1.0 + Added the ``tpr_resid_from_one`` keyword to control if + resids are indexed from 0 or 1. Default ``False``. + .. versionchanged:: 2.0.0 + Changed to ``tpr_resid_from_one=True`` by default. + """ + with openany(self.filename, mode='rb') as infile: + tprf = infile.read() + data = tpr_utils.TPXUnpacker(tprf) + try: + th = tpr_utils.read_tpxheader(data) # tpxheader + except (EOFError, ValueError): + msg = f"{self.filename}: Invalid tpr file or cannot be recognized" + logger.critical(msg) + raise IOError(msg) + + self._log_header(th) + + # Starting with gromacs 2020 (tpx version 119), the body of the file + # is encoded differently. We change the unpacker accordingly. + if th.fver >= S.tpxv_AddSizeField and th.fgen >= 27: + actual_body_size = len(data.get_buffer()) - data.get_position() + if actual_body_size == 4 * th.sizeOfTprBody: + # See issue #2428. + msg = ( + "TPR files produced with beta versions of gromacs 2020 " + "are not supported." + ) + logger.critical(msg) + raise IOError(msg) + data = tpr_utils.TPXUnpacker2020.from_unpacker(data) + + state_ngtc = th.ngtc # done init_state() in src/gmxlib/tpxio.c + if th.bBox: + tpr_utils.extract_box_info(data, th.fver) + + if state_ngtc > 0: + if th.fver < 69: # redundancy due to different versions + tpr_utils.ndo_real(data, state_ngtc) + tpr_utils.ndo_real(data, state_ngtc) # relevant to Berendsen tcoupl_lambda + + if th.bTop: + tpr_top = tpr_utils.do_mtop(data, th.fver, + tpr_resid_from_one=tpr_resid_from_one) + else: + msg = f"{self.filename}: No topology found in tpr file" + logger.critical(msg) + raise IOError(msg) + + tpr_top.add_TopologyAttr(Resnums(tpr_top.resids.values.copy())) + + return tpr_top
+ + + def _log_header(self, th): + logger.info(f"Gromacs version : {th.ver_str}") + logger.info(f"tpx version : {th.fver}") + logger.info(f"tpx generation : {th.fgen}") + logger.info(f"tpx precision : {th.precision}") + logger.info(f"tpx file_tag : {th.file_tag}") + logger.info(f"tpx natoms : {th.natoms}") + logger.info(f"tpx ngtc : {th.ngtc}") + logger.info(f"tpx fep_state : {th.fep_state}") + logger.info(f"tpx lambda : {th.lamb}") + logger.debug(f"tpx bIr (input record): {th.bIr}") + logger.debug(f"tpx bTop : {th.bTop}") + logger.debug(f"tpx bX : {th.bX}") + logger.debug(f"tpx bV : {th.bV}") + logger.debug(f"tpx bF : {th.bF}") + logger.debug(f"tpx bBox : {th.bBox}")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/TXYZParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/TXYZParser.html new file mode 100644 index 0000000000..cd6f2dae62 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/TXYZParser.html @@ -0,0 +1,296 @@ + + + + + + MDAnalysis.topology.TXYZParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.TXYZParser

+# -*- 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-2017 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
+#
+"""TXYZ topology parser
+====================
+
+Tinker_ topology parser: reads information from .txyz and .arc files.
+Atom types are read from column 6, while bond connectivity is read from column 7
+onwards.
+
+.. _Tinker: https://dasher.wustl.edu/tinker/
+
+See Also
+--------
+MDAnalysis.coordinates.TXYZ : further documentation on the Tinker format
+
+
+Classes
+-------
+
+.. autoclass:: TXYZParser
+   :members:
+   :inherited-members:
+
+"""
+
+import itertools
+import numpy as np
+import warnings
+
+from . import guessers
+from .tables import SYMB2Z
+from ..lib.util import openany
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomids,
+    Atomtypes,
+    Bonds,
+    Masses,
+    Resids,
+    Resnums,
+    Segids,
+    Elements,
+)
+
+
+
[docs]class TXYZParser(TopologyReaderBase): + """Parse a list of atoms from a Tinker XYZ file. + + Creates the following attributes: + + - Atomnames + - Atomtypes + - Elements (if all atom names are element symbols) + + .. versionadded:: 0.17.0 + .. versionchanged:: 2.4.0 + Adding the `Element` attribute if all names are valid element symbols. + """ + format = ['TXYZ', 'ARC'] + +
[docs] def parse(self, **kwargs): + """Read the file and return the structure. + + Returns + ------- + MDAnalysis Topology object + """ + with openany(self.filename) as inf: + #header + natoms = int(inf.readline().split()[0]) + + atomids = np.zeros(natoms, dtype=int) + names = np.zeros(natoms, dtype=object) + types = np.zeros(natoms, dtype=object) + bonds = [] + # Find first atom line, maybe there's box information + fline = inf.readline() + try: + # If a box second value will be a float + # If an atom, second value will be a string + float(fline.split()[1]) + except ValueError: + # If float conversion failed, we have first atom line + pass + else: + # If previous try succeeded it was a box + # so read another line to find the first atom line + fline = inf.readline() + # Can't infinitely read as XYZ files can be multiframe + for i, line in zip(range(natoms), itertools.chain([fline], inf)): + line = line.split() + atomids[i]= line[0] + names[i] = line[1] + types[i] = line[5] + bonded_atoms = line[6:] + for other_atom in bonded_atoms: + other_atom = int(other_atom) - 1 + if i < other_atom: + bonds.append((i, other_atom)) + + # Guessing time + masses = guessers.guess_masses(names) + + attrs = [Atomnames(names), + Atomids(atomids), + Atomtypes(types), + Bonds(tuple(bonds)), + Masses(masses, guessed=True), + Resids(np.array([1])), + Resnums(np.array([1])), + Segids(np.array(['SYSTEM'], dtype=object)), + ] + if all(n.capitalize() in SYMB2Z for n in names): + attrs.append(Elements(np.array(names, dtype=object))) + + else: + warnings.warn("Element information is missing, elements attribute " + "will not be populated. If needed these can be " + "guessed using MDAnalysis.topology.guessers.") + + top = Topology(natoms, 1, 1, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/XYZParser.html b/2.7.0-dev0/_modules/MDAnalysis/topology/XYZParser.html new file mode 100644 index 0000000000..1e204838b9 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/XYZParser.html @@ -0,0 +1,260 @@ + + + + + + MDAnalysis.topology.XYZParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.XYZParser

+# -*- 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-2017 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
+#
+
+"""
+XYZ Topology Parser
+===================
+
+.. versionadded:: 0.9.1
+
+Reads an xyz file and pulls the atom information from it.  Because
+xyz only has atom name information, all information about residues
+and segments won't be populated.
+
+Classes
+-------
+
+.. autoclass:: XYZParser
+   :members:
+
+"""
+import numpy as np
+
+from . import guessers
+from ..lib.util import openany
+from .base import TopologyReaderBase
+from ..core.topology import Topology
+from ..core.topologyattrs import (
+    Atomnames,
+    Atomids,
+    Atomtypes,
+    Masses,
+    Resids,
+    Resnums,
+    Segids,
+    Elements,
+)
+
+
+
[docs]class XYZParser(TopologyReaderBase): + """Parse a list of atoms from an XYZ file. + + Creates the following attributes: + - Atomnames + + Guesses the following attributes: + - Atomtypes + - Masses + + .. versionadded:: 0.9.1 + + .. versionchanged: 1.0.0 + Store elements attribute, based on XYZ atom names + """ + format = 'XYZ' + +
[docs] def parse(self, **kwargs): + """Read the file and return the structure. + + Returns + ------- + MDAnalysis Topology object + """ + with openany(self.filename) as inf: + natoms = int(inf.readline().strip()) + inf.readline() + + names = np.zeros(natoms, dtype=object) + + # Can't infinitely read as XYZ files can be multiframe + for i in range(natoms): + name = inf.readline().split()[0] + names[i] = name + + # Guessing time + atomtypes = guessers.guess_types(names) + masses = guessers.guess_masses(names) + + attrs = [Atomnames(names), + Atomids(np.arange(natoms) + 1), + Atomtypes(atomtypes, guessed=True), + Masses(masses, guessed=True), + Resids(np.array([1])), + Resnums(np.array([1])), + Segids(np.array(['SYSTEM'], dtype=object)), + Elements(names)] + + top = Topology(natoms, 1, 1, + attrs=attrs) + + return top
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/base.html b/2.7.0-dev0/_modules/MDAnalysis/topology/base.html new file mode 100644 index 0000000000..f397ebf78d --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/base.html @@ -0,0 +1,379 @@ + + + + + + MDAnalysis.topology.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.topology.base

+# -*- 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-2017 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
+#
+"""
+Base topology reader classes --- :mod:`MDAnalysis.topology.base`
+================================================================
+
+Derive topology reader classes from the base class in this module. All
+topology readers raise :exc:`IOError` upon failing to read a topology
+file and :exc:`ValueError` upon failing to make sense of the read data.
+
+Classes
+-------
+
+.. autoclass:: TopologyReaderBase
+   :members:
+   :inherited-members:
+
+"""
+from functools import reduce
+
+import itertools
+import numpy as np
+import warnings
+
+from .. import _PARSERS, _PARSER_HINTS
+from ..coordinates.base import IOBase
+from ..lib import util
+
+
+class _Topologymeta(type):
+    """Internal: Topology Parser registration voodoo
+
+    When classes which inherit from TopologyReaderBase are *defined*
+    this metaclass makes it known to MDAnalysis.  The optional `format`
+    attribute and `_format_hint` staticmethod are read:
+     - `format` defines the file extension this Parser targets.
+     - `_format_hint` defines a function which returns a boolean if the
+       Parser can process a particular object
+
+    Eg::
+
+      class ThingParser(TopologyReaderBase):
+          format = ['foo', 'bar']
+
+          @staticmethod
+          _format_hint(thing):
+              try:
+                  import WeirdPackage
+              except ImportError:
+                  return False
+              return isinstance(thing, WeirdPackage.Thing)
+
+    This way there is no strict dependency on "WeirdPackage", but if
+    a user supplies a WeirdPackage.Thing the "ThingParser' will be able
+    to step up and read it.
+
+    .. versionchanged:: 1.0.0
+       Added format_hint functionality
+    """
+    def __init__(cls, name, bases, classdict):
+        type.__init__(type, name, bases, classdict)
+        try:
+            fmt = util.asiterable(classdict['format'])
+        except KeyError:
+            pass
+        else:
+            for fmt_name in fmt:
+                fmt_name = fmt_name.upper()
+                _PARSERS[fmt_name] = cls
+
+                if '_format_hint' in classdict:
+                    _PARSER_HINTS[fmt_name] = classdict['_format_hint'].__func__
+
+
[docs]class TopologyReaderBase(IOBase, metaclass=_Topologymeta): + """Base class for topology readers + + Parameters + ---------- + filename : str + name of the topology file + universe : Universe, optional + Supply a Universe to the Parser. This then passes it to the + atom instances that are created within parsers. + + All topology readers must define a `parse` method which + returns a Topology object + + Raises + ------ + * :exc:`IOError` upon failing to read a topology file + * :exc:`ValueError` upon failing to make sense of the read data + + .. versionadded:: 0.9.0 + .. versionchanged:: 0.9.2 + Added keyword 'universe' to pass to Atom creation. + """ + def __init__(self, filename): + self.filename = filename + + def parse(self, **kwargs): # pragma: no cover + raise NotImplementedError("Override this in each subclass")
+ + +def squash_by(child_parent_ids, *attributes): + """Squash a child-parent relationship + + Arguments + --------- + child_parent_ids - array of ids (unique values that identify the parent) + *attributes - other arrays that need to follow the sorting of ids + + Returns + ------- + child_parents_idx - an array of len(child) which points to the index of + parent + parent_ids - len(parent) of the ids + *parent_attrs - len(parent) of the other attributes + """ + unique_resids, sort_mask, atom_idx = np.unique( + child_parent_ids, return_index=True, return_inverse=True) + + return atom_idx, unique_resids, [attr[sort_mask] for attr in attributes] + + +def change_squash(criteria, to_squash): + """Squash per atom data to per residue according to changes in resid + + Parameters + ---------- + criteria : list of numpy ndarray + Arrays which when changing indicate a new residue + to_squash : list of numpy arrays + Arrays which get squashed according to the criteria arrays + + Returns + ------- + residx : numpy array + The Residue *index* that each Atom gets assigned to. [len(resids)] + squashed : numpy array + The to_squash arrays reduced down to per Residue values + + + Example + ------- + resids = np.array([2, 2, 3, 3, 2, 2]) + resnames = np.array(['RsA', 'RsA', 'RsB', 'RsB', 'RsC', 'RsC']) + segids = np.array(['A', 'A', 'A', 'A', 'B', 'B']) + + residx, (new_resids, new_resnames, new_segids) = resid_change_squash( + (resids,), (resids, resnames, segids)) + + # Per atom res index + residx: [0, 0, 1, 1, 2, 2] + # Per residue record of each attribute + new_resids: [2, 3, 2] + new_resnames: ['RsA', 'RsB', 'RsC'] + new_segids: ['A', 'A', 'B'] + """ + def get_borders(*arrays): + """Generator of indices to slice arrays when they change""" + borders = np.nonzero(reduce(np.logical_or, + (a[:-1] != a[1:] for a in arrays))) + # Add Nones so we can slice from start to end + return [None] + list(borders[0] + 1) + [None] + + l0 = len(criteria[0]) + if not all(len(other) == l0 + for other in itertools.chain(criteria[1:], to_squash)): + raise ValueError("All arrays must be equally sized") + + # 1) Detect where resids change + borders = get_borders(*criteria) + # Number of groups = number of changes + 1 + # 2 `None`s have been added, so -1 + nres = len(borders) - 1 + + # 2) Allocate new arrays + # Per atom record of what residue they belong to + residx = np.zeros_like(criteria[0], dtype=int) + # Per residue record of various attributes + new_others = [np.zeros(nres, dtype=o.dtype) for o in to_squash] + + # 3) Slice through resids and others to find values + for i, (x, y) in enumerate(zip(borders[:-1], borders[1:])): + residx[x:y] = i # atoms between x & y are in the i'th residue + for old, new in zip(to_squash, new_others): + new[i] = old[x:y][0] # TODO: Check that x:y is the same + # Should be the same for self consistency... + + return residx, new_others + + +def reduce_singular(values): + """Returns the value in an array of length 1, or + the tuple of an array with a longer lengh. + + Parameters + ---------- + values: array-like + Array to squash + + Returns + ------- + values: tuple or single value + """ + if len(values) == 1: + return values[0] + else: + return tuple(values) +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/guessers.html b/2.7.0-dev0/_modules/MDAnalysis/topology/guessers.html new file mode 100644 index 0000000000..23261f6c77 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/guessers.html @@ -0,0 +1,671 @@ + + + + + + MDAnalysis.topology.guessers — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.topology.guessers

+# -*- 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-2017 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
+#
+"""
+Guessing unknown Topology information --- :mod:`MDAnalysis.topology.guessers`
+=============================================================================
+
+In general `guess_atom_X` returns the guessed value for a single value,
+while `guess_Xs` will work on an array of many atoms.
+
+
+Example uses of guessers
+------------------------
+
+Guessing elements from atom names
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Currently, it is possible to guess elements from atom names using
+:func:`guess_atom_element` (or the synonymous :func:`guess_atom_type`). This can
+be done in the following manner::
+
+  import MDAnalysis as mda
+  from MDAnalysis.topology.guessers import guess_atom_element
+  from MDAnalysisTests.datafiles import PRM7
+
+  u = mda.Universe(PRM7)
+
+  print(u.atoms.names[1])  # returns the atom name H1
+
+  element = guess_atom_element(u.atoms.names[1])
+
+  print(element)  # returns element H
+
+In the above example, we take an atom named H1 and use
+:func:`guess_atom_element` to guess the element hydrogen (i.e. H). It is
+important to note that element guessing is not always accurate. Indeed in cases
+where the atom type is not recognised, we may end up with the wrong element.
+For example::
+
+  import MDAnalysis as mda
+  from MDAnalysis.topology.guessers import guess_atom_element
+  from MDAnalysisTests.datafiles import PRM19SBOPC
+
+  u = mda.Universe(PRM19SBOPC)
+
+  print(u.atoms.names[-1])  # returns the atom name EPW
+
+  element = guess_atom_element(u.atoms.names[-1])
+
+  print(element)  # returns element P
+
+Here we find that virtual site atom 'EPW' was given the element P, which
+would not be an expected result. We therefore always recommend that users
+carefully check the outcomes of any guessers.
+
+In some cases, one may want to guess elements for an entire universe and add
+this guess as a topology attribute. This can be done using :func:`guess_types`
+in the following manner::
+
+  import MDAnalysis as mda
+  from MDAnalysis.topology.guessers import guess_types
+  from MDAnalysisTests.datafiles import PRM7
+
+  u = mda.Universe(PRM7)
+
+  guessed_elements = guess_types(u.atoms.names)
+
+  u.add_TopologyAttr('elements', guessed_elements)
+
+  print(u.atoms.elements)  # returns an array of guessed elements
+
+More information on adding topology attributes can found in the `user guide`_.
+
+
+.. Links
+
+.. _user guide: https://www.mdanalysis.org/UserGuide/examples/constructing_universe.html#Adding-topology-attributes
+
+"""
+import numpy as np
+import warnings
+import re
+
+from ..lib import distances
+from . import tables
+
+
+
[docs]def guess_masses(atom_types): + """Guess the mass of many atoms based upon their type + + Parameters + ---------- + atom_types + Type of each atom + + Returns + ------- + atom_masses : np.ndarray dtype float64 + """ + validate_atom_types(atom_types) + masses = np.array([get_atom_mass(atom_t) for atom_t in atom_types], dtype=np.float64) + return masses
+ + +
[docs]def validate_atom_types(atom_types): + """Vaildates the atom types based on whether they are available in our tables + + Parameters + ---------- + atom_types + Type of each atom + + Returns + ------- + None + + .. versionchanged:: 0.20.0 + Try uppercase atom type name as well + """ + for atom_type in np.unique(atom_types): + try: + tables.masses[atom_type] + except KeyError: + try: + tables.masses[atom_type.upper()] + except KeyError: + warnings.warn("Failed to guess the mass for the following atom types: {}".format(atom_type))
+ + +
[docs]def guess_types(atom_names): + """Guess the atom type of many atoms based on atom name + + Parameters + ---------- + atom_names + Name of each atom + + Returns + ------- + atom_types : np.ndarray dtype object + """ + return np.array([guess_atom_element(name) for name in atom_names], dtype=object)
+ + +
[docs]def guess_atom_type(atomname): + """Guess atom type from the name. + + At the moment, this function simply returns the element, as + guessed by :func:`guess_atom_element`. + + + See Also + -------- + :func:`guess_atom_element` + :mod:`MDAnalysis.topology.tables` + + + """ + return guess_atom_element(atomname)
+ + +NUMBERS = re.compile(r'[0-9]') # match numbers +SYMBOLS = re.compile(r'[*+-]') # match *, +, - + +
[docs]def guess_atom_element(atomname): + """Guess the element of the atom from the name. + + Looks in dict to see if element is found, otherwise it uses the first + character in the atomname. The table comes from CHARMM and AMBER atom + types, where the first character is not sufficient to determine the atom + type. Some GROMOS ions have also been added. + + .. Warning: The translation table is incomplete. This will probably result + in some mistakes, but it still better than nothing! + + See Also + -------- + :func:`guess_atom_type` + :mod:`MDAnalysis.topology.tables` + """ + if atomname == '': + return '' + try: + return tables.atomelements[atomname.upper()] + except KeyError: + # strip symbols and numbers + no_symbols = re.sub(SYMBOLS, '', atomname) + name = re.sub(NUMBERS, '', no_symbols).upper() + + # just in case + if name in tables.atomelements: + return tables.atomelements[name] + + while name: + if name in tables.elements: + return name + if name[:-1] in tables.elements: + return name[:-1] + if name[1:] in tables.elements: + return name[1:] + if len(name) <= 2: + return name[0] + name = name[:-1] # probably element is on left not right + + # if it's numbers + return no_symbols
+ + +
[docs]def guess_bonds(atoms, coords, box=None, **kwargs): + r"""Guess if bonds exist between two atoms based on their distance. + + Bond between two atoms is created, if the two atoms are within + + .. math:: + + d < f \cdot (R_1 + R_2) + + of each other, where :math:`R_1` and :math:`R_2` are the VdW radii + of the atoms and :math:`f` is an ad-hoc *fudge_factor*. This is + the `same algorithm that VMD uses`_. + + Parameters + ---------- + atoms : AtomGroup + atoms for which bonds should be guessed + coords : array + coordinates of the atoms (i.e., `AtomGroup.positions)`) + fudge_factor : float, optional + The factor by which atoms must overlap eachother to be considered a + bond. Larger values will increase the number of bonds found. [0.55] + vdwradii : dict, optional + To supply custom vdwradii for atoms in the algorithm. Must be a dict + of format {type:radii}. The default table of van der Waals radii is + hard-coded as :data:`MDAnalysis.topology.tables.vdwradii`. Any user + defined vdwradii passed as an argument will supercede the table + values. [``None``] + lower_bound : float, optional + The minimum bond length. All bonds found shorter than this length will + be ignored. This is useful for parsing PDB with altloc records where + atoms with altloc A and B maybe very close together and there should be + no chemical bond between them. [0.1] + box : array_like, optional + Bonds are found using a distance search, if unit cell information is + given, periodic boundary conditions will be considered in the distance + search. [``None``] + + Returns + ------- + list + List of tuples suitable for use in Universe topology building. + + Warnings + -------- + No check is done after the bonds are guessed to see if Lewis + structure is correct. This is wrong and will burn somebody. + + Raises + ------ + :exc:`ValueError` if inputs are malformed or `vdwradii` data is missing. + + + .. _`same algorithm that VMD uses`: + http://www.ks.uiuc.edu/Research/vmd/vmd-1.9.1/ug/node26.html + + .. versionadded:: 0.7.7 + .. versionchanged:: 0.9.0 + Updated method internally to use more :mod:`numpy`, should work + faster. Should also use less memory, previously scaled as + :math:`O(n^2)`. *vdwradii* argument now augments table list + rather than replacing entirely. + """ + # why not just use atom.positions? + if len(atoms) != len(coords): + raise ValueError("'atoms' and 'coord' must be the same length") + + fudge_factor = kwargs.get('fudge_factor', 0.55) + + vdwradii = tables.vdwradii.copy() # so I don't permanently change it + user_vdwradii = kwargs.get('vdwradii', None) + if user_vdwradii: # this should make algo use their values over defaults + vdwradii.update(user_vdwradii) + + # Try using types, then elements + atomtypes = atoms.types + + # check that all types have a defined vdw + if not all(val in vdwradii for val in set(atomtypes)): + raise ValueError(("vdw radii for types: " + + ", ".join([t for t in set(atomtypes) if + not t in vdwradii]) + + ". These can be defined manually using the" + + " keyword 'vdwradii'")) + + lower_bound = kwargs.get('lower_bound', 0.1) + + if box is not None: + box = np.asarray(box) + + # to speed up checking, calculate what the largest possible bond + # atom that would warrant attention. + # then use this to quickly mask distance results later + max_vdw = max([vdwradii[t] for t in atomtypes]) + + bonds = [] + + pairs, dist = distances.self_capped_distance(coords, + max_cutoff=2.0*max_vdw, + min_cutoff=lower_bound, + box=box) + for idx, (i, j) in enumerate(pairs): + d = (vdwradii[atomtypes[i]] + vdwradii[atomtypes[j]])*fudge_factor + if (dist[idx] < d): + bonds.append((atoms[i].index, atoms[j].index)) + return tuple(bonds)
+ + +
[docs]def guess_angles(bonds): + """Given a list of Bonds, find all angles that exist between atoms. + + Works by assuming that if atoms 1 & 2 are bonded, and 2 & 3 are bonded, + then (1,2,3) must be an angle. + + Returns + ------- + list of tuples + List of tuples defining the angles. + Suitable for use in u._topology + + + See Also + -------- + :meth:`guess_bonds` + + + .. versionadded 0.9.0 + """ + angles_found = set() + + for b in bonds: + for atom in b: + other_a = b.partner(atom) # who's my friend currently in Bond + for other_b in atom.bonds: + if other_b != b: # if not the same bond I start as + third_a = other_b.partner(atom) + desc = tuple([other_a.index, atom.index, third_a.index]) + if desc[0] > desc[-1]: # first index always less than last + desc = desc[::-1] + angles_found.add(desc) + + return tuple(angles_found)
+ + +
[docs]def guess_dihedrals(angles): + """Given a list of Angles, find all dihedrals that exist between atoms. + + Works by assuming that if (1,2,3) is an angle, and 3 & 4 are bonded, + then (1,2,3,4) must be a dihedral. + + Returns + ------- + list of tuples + List of tuples defining the dihedrals. + Suitable for use in u._topology + + .. versionadded 0.9.0 + """ + dihedrals_found = set() + + for b in angles: + a_tup = tuple([a.index for a in b]) # angle as tuple of numbers + # if searching with b[0], want tuple of (b[2], b[1], b[0], +new) + # search the first and last atom of each angle + for atom, prefix in zip([b.atoms[0], b.atoms[-1]], + [a_tup[::-1], a_tup]): + for other_b in atom.bonds: + if not other_b.partner(atom) in b: + third_a = other_b.partner(atom) + desc = prefix + (third_a.index,) + if desc[0] > desc[-1]: + desc = desc[::-1] + dihedrals_found.add(desc) + + return tuple(dihedrals_found)
+ + +
[docs]def guess_improper_dihedrals(angles): + """Given a list of Angles, find all improper dihedrals that exist between + atoms. + + Works by assuming that if (1,2,3) is an angle, and 2 & 4 are bonded, + then (2, 1, 3, 4) must be an improper dihedral. + ie the improper dihedral is the angle between the planes formed by + (1, 2, 3) and (1, 3, 4) + + Returns + ------- + List of tuples defining the improper dihedrals. + Suitable for use in u._topology + + .. versionadded 0.9.0 + """ + dihedrals_found = set() + + for b in angles: + atom = b[1] # select middle atom in angle + # start of improper tuple + a_tup = tuple([b[a].index for a in [1, 2, 0]]) + # if searching with b[1], want tuple of (b[1], b[2], b[0], +new) + # search the first and last atom of each angle + for other_b in atom.bonds: + other_atom = other_b.partner(atom) + # if this atom isn't in the angle I started with + if not other_atom in b: + desc = a_tup + (other_atom.index,) + if desc[0] > desc[-1]: + desc = desc[::-1] + dihedrals_found.add(desc) + + return tuple(dihedrals_found)
+ + +
[docs]def get_atom_mass(element): + """Return the atomic mass in u for *element*. + + Masses are looked up in :data:`MDAnalysis.topology.tables.masses`. + + .. Warning:: Unknown masses are set to 0.0 + + .. versionchanged:: 0.20.0 + Try uppercase atom type name as well + """ + try: + return tables.masses[element] + except KeyError: + try: + return tables.masses[element.upper()] + except KeyError: + return 0.0
+ + +
[docs]def guess_atom_mass(atomname): + """Guess a mass based on the atom name. + + :func:`guess_atom_element` is used to determine the kind of atom. + + .. warning:: Anything not recognized is simply set to 0; if you rely on the + masses you might want to double check. + """ + return get_atom_mass(guess_atom_element(atomname))
+ + +
[docs]def guess_atom_charge(atomname): + """Guess atom charge from the name. + + .. Warning:: Not implemented; simply returns 0. + """ + # TODO: do something slightly smarter, at least use name/element + return 0.0
+ + +
[docs]def guess_aromaticities(atomgroup): + """Guess aromaticity of atoms using RDKit + + Parameters + ---------- + atomgroup : mda.core.groups.AtomGroup + Atoms for which the aromaticity will be guessed + + Returns + ------- + aromaticities : numpy.ndarray + Array of boolean values for the aromaticity of each atom + + + .. versionadded:: 2.0.0 + """ + mol = atomgroup.convert_to("RDKIT") + return np.array([atom.GetIsAromatic() for atom in mol.GetAtoms()])
+ + +
[docs]def guess_gasteiger_charges(atomgroup): + """Guess Gasteiger partial charges using RDKit + + Parameters + ---------- + atomgroup : mda.core.groups.AtomGroup + Atoms for which the charges will be guessed + + Returns + ------- + charges : numpy.ndarray + Array of float values representing the charge of each atom + + + .. versionadded:: 2.0.0 + """ + mol = atomgroup.convert_to("RDKIT") + from rdkit.Chem.rdPartialCharges import ComputeGasteigerCharges + ComputeGasteigerCharges(mol, throwOnParamFailure=True) + return np.array([atom.GetDoubleProp("_GasteigerCharge") + for atom in mol.GetAtoms()], + dtype=np.float32)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/tables.html b/2.7.0-dev0/_modules/MDAnalysis/topology/tables.html new file mode 100644 index 0000000000..5ec9484fe1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/tables.html @@ -0,0 +1,581 @@ + + + + + + MDAnalysis.topology.tables — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.topology.tables

+# -*- 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-2017 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
+#
+
+"""
+MDAnalysis topology tables
+==========================
+
+The module contains static lookup tables for atom typing etc. The
+tables are dictionaries that are indexed by the element.
+
+.. autodata:: atomelements
+.. autodata:: masses
+.. autodata:: vdwradii
+
+The original raw data are stored as multi-line strings that are
+translated into dictionaries with :func:`kv2dict`. In the future,
+these tables might be moved into external data files; see
+:func:`kv2dict` for explanation of the file format.
+
+.. autofunction:: kv2dict
+
+The raw tables are stored in the strings
+
+.. autodata:: TABLE_ATOMELEMENTS
+.. autodata:: TABLE_MASSES
+.. autodata:: TABLE_VDWRADII
+"""
+
+
+
[docs]def kv2dict(s, convertor=str): + """Primitive ad-hoc parser of a key-value record list. + + * The string *s* should contain each key-value pair on a separate + line (separated by newline). The first white space after the key + separates key and value. + + * Empty lines are allowed. + + * Comment lines (starting with #) are allowed. + + * Leading whitespace is ignored. + + The *convertor* is a function that converts its single argument to + a valid Python type. The default is :func:`str` but other + possibilities are :func:`int` (for integers) or :func:`float` for + floating point numbers. + """ + d = {} + lines = s.splitlines() + for line in lines: + line = line.lstrip() + values = line.split(None, 1) + if len(values) == 0 or line.startswith("#"): + continue + d[values[0]] = convertor(values[1]) + return d
+ + +#: Table with hard-coded special atom names, used for guessing atom types +#: with :func:`MDAnalysis.topology.core.guess_atom_element`. +TABLE_ATOMELEMENTS = """ +# translation of atomnames to types/element +# based on CHARMM and AMBER usage with a little bit of GROMOS (and PROPKA) +# NOTE: CL might be ambiguous and is interpreted as chloride! + +# --------- ------------------ +# atomname element +# --------- ------------------ + +# Bromide +BR BR + +# Calcium +CAL CA +C0 CA +CA2+ CA + +# Cesium +CES CS + +# Chloride +CLA CL +CLAL CL +CL CL +CL- CL + +# Iodide +IOD I + +# Iron +FE FE +FE2 FE + +# Lithium +LIT LI +LI LI +LI+ LI +QL LI + +# Magnesium +MG MG +MG2+ MG + +# Noble gases +## XXX collides with NE, HE in Arg XXX +## XXX so we remove the noble gases XXX +##HE HE +##NE NE + +# Potassium +K K +POT K +K+ K +QK K + +# Sodium +SOD NA +NA NA +NA+ NA +QN NA + +# Zink +ZN ZN + +# Copper +CU CU + +# Cesium +CS CS +CS+ CS +CES CS + +# Cerium?? +QC CE + +# Rubidium +RB RB +QR RB + +# special carbons (Amber?) +BC C +AC C + +# dummy atom types +MW DUMMY + +# other types are guessed from the name; see +# topology.core.guess_atom_elements() +""" + +#: Dictionary with hard-coded special atom names, used for guessing atom types +#: with :func:`MDAnalysis.topology.core.guess_atom_type`. +atomelements = kv2dict(TABLE_ATOMELEMENTS) + +elements = ['H', + 'LI', 'BE', 'B', 'C', 'N', 'O', 'F', + 'NA', 'MG', 'AL', 'P', 'SI', 'S', 'CL', + 'K'] + +#: Plain-text table with atomic masses in u. +TABLE_MASSES = """ +# masses for elements in atomic units (u) +# (taken from CHARMM and Gromacs atommass.dat) + +#------------ ----------- +# atomtype mass +#------------ ----------- +Ac 227.028 +Al 26.981539 +Am 243 +Sb 121.757 +Ar 39.948 +As 74.92159 +At 210 +Ba 137.327 +Bk 247 +Be 9.012182 +Bi 208.98037 +Bh 262 +B 10.811 +BR 79.90400 +Cd 112.411 +CA 40.08000 +Cf 251 +C 12.01100 +Ce 140.11600 +CS 132.90000 +CL 35.45000 +Cr 51.9961 +Co 58.9332 +CU 63.54600 +Cm 247 +Db 262 +Dy 162.5 +Es 252 +Er 167.26 +Eu 151.965 +Fm 257 +F 18.99800 +Fr 223 +Gd 157.25 +Ga 69.723 +Ge 72.61 +Au 196.96654 +Hf 178.49 +Hs 265 +HE 4.00260 +Ho 164.93032 +H 1.00800 +In 114.82 +I 126.90450 +Ir 192.22 +FE 55.84700 +Kr 83.8 +La 138.9055 +Lr 262 +Pb 207.2 +Li 6.941 +Lu 174.967 +MG 24.30500 +Mn 54.93805 +Mt 266 +Md 258 +Hg 200.59 +Mo 95.94 +N 14.00700 +NA 22.98977 +Nd 144.24 +NE 20.17970 +Np 237.048 +Ni 58.6934 +Nb 92.90638 +No 259 +Os 190.2 +O 15.99900 +Pd 106.42 +P 30.97400 +Pt 195.08 +Pu 244 +Po 209 +K 39.10200 +Pr 140.90765 +Pm 145 +Pa 231.0359 +Ra 226.025 +Rn 222 +Re 186.207 +Rh 102.9055 +RB 85.46780 +Ru 101.07 +Rf 261 +Sm 150.36 +Sc 44.95591 +Sg 263 +Se 78.96 +Si 28.0855 +Ag 107.8682 +Na 22.989768 +Sr 87.62 +S 32.06000 +Ta 180.9479 +Tc 98 +Te 127.6 +Tb 158.92534 +Tl 204.3833 +Th 232.0381 +Tm 168.93421 +Sn 118.71 +Ti 47.88 +W 183.85 +U 238.0289 +V 50.9415 +Xe 131.29 +Yb 173.04 +Y 88.90585 +ZN 65.37000 +Zr 91.224 +DUMMY 0.0 +""" + +#: Dictionary table with atomic masses in u, indexed by the element from +#: :data:`atomelements`. +masses = kv2dict(TABLE_MASSES, convertor=float) + +#: Plain-text table with vdw radii. +TABLE_VDWRADII = r""" +# Van der Waals radii taken from +# [1] Bondi, A. (1964). "Van der Waals Volumes and Radii". +# J. Phys. Chem. 68 (3): 441-451. doi:10.1021/j100785a001. +# [2] Rowland and Taylor (1996). "Intermolecular Nonbonded Contact Distances in Organic Crystal Structures: +# Comparison with Distances Expected from van der Waals Radii". +# J. Phys. Chem., 1996, 100 (18), 7384.7391. doi:10.1021/jp953141+. +# [3] Mantina, et al. (2009). "Consistent van der Waals Radii for the Whole Main Group". +# J. Phys. Chem. A, 2009, 113 (19), 5806-5812. doi:10.1021/jp8111556. +#------------ ----------- +# atomtype r_vdw +#------------ ----------- +H 1.10 +HE 1.40 +LI 1.82 +BE 1.53 +B 1.92 +C 1.70 +N 1.55 +O 1.52 +F 1.47 +NE 1.54 +NA 2.27 +MG 1.73 +AL 1.84 +SI 2.10 +P 1.80 +S 1.80 +CL 1.75 +AR 1.88 +K 2.75 +CA 2.31 +NI 1.63 +CU 1.40 +ZN 1.39 +GA 1.87 +GE 2.11 +AA 1.85 +SE 1.90 +BR 1.85 +KR 2.02 +RR 3.03 +SR 2.49 +PD 1.63 +AG 1.72 +CD 1.58 +IN 1.93 +SN 2.17 +SB 2.06 +TE 2.06 +I 1.98 +XE 2.16 +CS 3.43 +BA 2.68 +PT 1.75 +AU 1.66 +HH 1.55 +TL 1.96 +PB 2.02 +BI 2.07 +PO 1.97 +AT 2.02 +RN 2.20 +FR 3.48 +RA 2.83 +U 1.86 +""" + +#: Dictionary table with vdw radii, indexed by the element from +#: :data:`atomelements`. +#: .. SeeAlso:: :func:`MDAnalysis.topology.core.guess_bonds` +vdwradii = kv2dict(TABLE_VDWRADII, convertor=float) + +Z2SYMB = {1: 'H', 2: 'He', + 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', + 11: 'Na', 12: 'Mg', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', + 19: 'K', 20: 'Ca', 21: 'Sc', 22: 'Ti', 23: 'V', 24: 'Cr', 25: 'Mn', 26: 'Fe', + 27: 'Co', 28: 'Ni', 29: 'Cu', 30: 'Zn', 31: 'Ga', 32: 'Ge', 33: 'As', 34: 'Se', + 35: 'Br', 36: 'Kr', 37: 'Rb', 38: 'Sr', 39: 'Y', 40: 'Zr', 41: 'Nb', 42: 'Mo', + 43: 'Tc', 44: 'Ru', 45: 'Rh', 46: 'Pd', 47: 'Ag', 48: 'Cd', 49: 'In', 50: 'Sn', + 51: 'Sb', 52: 'Te', 53: 'I', 54: 'Xe', 55: 'Cs', 56: 'Ba', 57: 'La', 58: 'Ce', + 59: 'Pr', 60: 'Nd', 61: 'Pm', 62: 'Sm', 63: 'Eu', 64: 'Gd', 65: 'Tb', 66: 'Dy', + 67: 'Ho', 68: 'Er', 69: 'Tm', 70: 'Yb', 71: 'Lu', 72: 'Hf', 73: 'Ta', 74: 'W', + 75: 'Re', 76: 'Os', 77: 'Ir', 78: 'Pt', 79: 'Au', 80: 'Hg', 81: 'Tl', 82: 'Pb', + 83: 'Bi', 84: 'Po', 85: 'At', 86: 'Rn', 87: 'Fr', 88: 'Ra', 89: 'Ac', 90: 'Th', + 91: 'Pa', 92: 'U', 93: 'Np', 94: 'Pu', 95: 'Am', 96: 'Cm', 97: 'Bk', 98: 'Cf', + 99: 'Es', 100: 'Fm', 101: 'Md', 102: 'No', 103: 'Lr', 104: 'Rf', 105: 'Db', + 106: 'Sg', 107: 'Bh', 108: 'Hs', 109: 'Mt', 110: 'Ds', 111: 'Rg', 112: 'Cn', + 113: 'Nh', 114: 'Fl', 115: 'Mc', 116: 'Lv', 117: 'Ts', 118: 'Og'} + +SYMB2Z = {v:k for k, v in Z2SYMB.items()} + +# Conversion between SYBYL atom types and corresponding elements +# Tripos MOL2 file format: +# https://web.archive.org/web/*/http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf +SYBYL2SYMB = { + "H": "H", "H.spc": "H", "H.t3p": "H", + "C.3": "C", "C.2": "C", "C.1": "C", "C.ar": "C", "C.cat": "C", + "N.3": "N", "N.2": "N", "N.1": "N", "N.ar": "N", + "N.am": "N", "N.pl3": "N", "N.4": "N", + "O.3": "O", "O.2": "O", "O.co2": "O", "O.spc": "O", "O.t3p": "O", + "S.3": "S", "S.2": "S", "S.O": "S", "S.O2": "S", + "S.o": "S", "S.o2": "S", # Non-standard but often found in the wild... + "P.3": "P", + "F": "F", + "Li": "Li", + "Na": "Na", + "Mg": "Mg", + "Al": "Al", + "Si": "Si", + "K": "K", + "Ca": "Ca", + "Cr.th": "Cr", + "Cr.oh": "Cr", + "Mn": "Mn", + "Fe": "Fe", + "Co.oh": "Co", + "Cu": "Cu", + "Cl": "Cl", + "Br": "Br", + "I": "I", + "Zn": "Zn", + "Se": "Se", + "Mo": "Mo", + "Sn": "Sn", +} +
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/obj.html b/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/obj.html new file mode 100644 index 0000000000..bbe2c0f0d0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/obj.html @@ -0,0 +1,305 @@ + + + + + + MDAnalysis.topology.tpr.obj — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.topology.tpr.obj

+# -*- 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-2017 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
+#
+
+
+# TPR parser and tpr support module
+# Copyright (c) 2011 Zhuyi Xue
+# Released under the  GNU Public Licence, v2
+
+"""
+Class definitions for the TPRParser
+===================================
+
+"""
+from collections import namedtuple
+from ..tables import Z2SYMB
+
+TpxHeader = namedtuple(
+    "TpxHeader", [
+        "ver_str", "precision",
+        "fver", "fgen", "file_tag", "natoms", "ngtc", "fep_state", "lamb",
+        "bIr", "bTop", "bX", "bV", "bF", "bBox", "sizeOfTprBody"])
+Box = namedtuple("Box", "size rel v")
+Mtop = namedtuple("Mtop", "nmoltype moltypes nmolblock")
+Params = namedtuple("Params", "atnr ntypes functype reppow fudgeQQ")
+Atom = namedtuple("Atom", ["m", "q", "mB", "qB", "tp", "typeB", "ptype", "resind", "atomnumber"])
+Atoms = namedtuple("Atoms", "atoms nr nres type typeB atomnames resnames")
+Ilist = namedtuple("Ilist", "nr ik, iatoms")
+Molblock = namedtuple("Molblock", [
+    "molb_type", "molb_nmol", "molb_natoms_mol",
+    "molb_nposres_xA", "molb_nposres_xB"])
+
+
+
[docs]class MoleculeKind(object): + def __init__(self, name, atomkinds, bonds=None, angles=None, + dihe=None, impr=None, donors=None, acceptors=None): + self.name = name # name of the molecule + self.atomkinds = atomkinds + self.bonds = bonds + self.angles = angles + self.dihe = dihe + self.impr = impr + self.donors = donors + self.acceptors = acceptors + + def __repr__(self): + return ( + f"Molecule: {self.name:<20s} " + f"#atoms: {self.number_of_atoms():<10d} " + f"#residues: {self.number_of_residues():<10d}" + ) + +
[docs] def number_of_atoms(self): + return len(self.atomkinds)
+ +
[docs] def number_of_residues(self): + return len({a.resid for a in self.atomkinds})
+ + # remap_ method returns [tuple(), tuple(), ..] or [] + # Note: in MDAnalysis, bonds, angles, etc are represented as tuple and not as list +
[docs] def remap_bonds(self, atom_start_ndx): + if self.bonds: + return [tuple(i + atom_start_ndx for i in b) for b in self.bonds] + else: + return []
+ +
[docs] def remap_angles(self, atom_start_ndx): + if self.angles: + return [tuple(i + atom_start_ndx for i in a) for a in self.angles] + else: + return []
+ +
[docs] def remap_dihe(self, atom_start_ndx): + if self.dihe: + return [tuple(i + atom_start_ndx for i in a) for a in self.dihe] + else: + return []
+ +
[docs] def remap_impr(self, atom_start_ndx): + # improper + if self.impr: + return [tuple(i + atom_start_ndx for i in a) for a in self.impr] + else: + return []
+ + +
[docs]class AtomKind(object): + def __init__( + self, id, name, type, resid, resname, mass, charge, atomic_number): + # id is only within the scope of a single molecule, not the whole system + self.id = id + self.name = name + self.type = type + self.resid = resid + self.resname = resname + self.mass = mass + self.charge = charge + self.atomic_number = atomic_number + + @property + def element_symbol(self): + """ + The symbol of the atom element. + + The symbol corresponding to the atomic number. If the atomic number + is not recognized, which happens if a particle is not really an + atom (e.g a coarse-grained particle), an empty string is returned. + """ + return Z2SYMB.get(self.atomic_number, '') + + def __repr__(self): + return ( + f"< AtomKind: " + f"id {self.id:6d}, " + f"name {self.name:5s}, " + f"type {self.type:10s}, " + f"resid {self.resid:6d}, " + f"resname {self.resname:4s}, " + f"mass {self.mass:8.4f}, " + f"charge {6:12.3f} " + ">" + )
+ + +
[docs]class InteractionKind(object): + def __init__(self, name, long_name, natoms): + """natoms: number of atoms involved in this type of interaction""" + self.name = name + self.long_name = long_name + self.natoms = natoms + +
[docs] def process(self, atom_ndx): + # The format for all record is (type, atom1, atom2, ...) + # but we are only interested in the atoms. + for cursor in range(0, len(atom_ndx), self.natoms + 1): + yield atom_ndx[cursor + 1: cursor + 1 + self.natoms]
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/utils.html b/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/utils.html new file mode 100644 index 0000000000..d92254c3a1 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/utils.html @@ -0,0 +1,1020 @@ + + + + + + MDAnalysis.topology.tpr.utils — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.topology.tpr.utils

+# -*- 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-2017 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
+#
+
+
+# TPR parser and tpr support module
+# Copyright (c) 2011 Zhuyi Xue
+# Released under the  GNU Public Licence, v2
+
+"""
+Utilities for the TPRParser
+===========================
+
+Function calling order::
+
+   (TPRParser.py call do_mtop)
+   do_mtop -> do_symtab
+           -> do_ffparams -> do_iparams
+           -> do_moltype  -> do_atoms  -> do_atom
+                                       -> do_resinfo
+                          -> do_ilists
+                          -> do_block
+                          -> do_blocka
+           -> do_molblock
+
+Then compose the stuffs in the format :class:`MDAnalysis.Universe` reads in.
+
+The module also contains the :func:`do_inputrec` to read the TPR header with.
+"""
+
+import numpy as np
+import xdrlib
+import struct
+
+from . import obj
+from . import setting
+from ..base import squash_by
+from ...core.topology import Topology
+from ...core.topologyattrs import (
+    Atomids,
+    Atomnames,
+    Atomtypes,
+    Masses,
+    Charges,
+    Elements,
+    Resids,
+    Resnames,
+    Moltypes,
+    Molnums,
+    Segids,
+    Bonds,
+    Angles,
+    Dihedrals,
+    Impropers,
+)
+
+
+
[docs]class TPXUnpacker(xdrlib.Unpacker): + """ + Extend the standard XDR unpacker for the specificity of TPX files. + """ + def __init__(self, data): + super().__init__(data) + self._buf = self.get_buffer() + + # The parent class uses a dunder attribute to store the + # cursor position. This property makes it easier to manipulate + # this attribute that is otherwise "protected". + @property + def _pos(self): + return self.get_position() + + @_pos.setter + def _pos(self, value): + self.set_position(value) + + def _unpack_value(self, item_size, struct_template): + start_position = self._pos + end_position = self._pos = start_position + item_size + content = self._buf[start_position:end_position] + if len(content) != item_size: + raise EOFError + return struct.unpack(struct_template, content)[0] + +
[docs] def unpack_int64(self): + return self._unpack_value(8, '>q')
+ +
[docs] def unpack_uint64(self): + return self._unpack_value(8, '>Q')
+ +
[docs] def unpack_ushort(self): + return self.unpack_uint()
+ +
[docs] def unpack_uchar(self): + # TPX files prior to gromacs 2020 (tpx version < 119) use unsigned ints + # (4 bytes) instead of unsigned chars. + return self._unpack_value(4, '>I')
+ +
[docs] def do_string(self): + """ + Emulate gmx_fio_do_string + + gmx_fio_do_string reads a string from a XDR file. On the contrary to the + python unpack_string, gmx_fio_do_string reads the size as an unsigned + integer before reading the actual string. + + See <gromacs-2016-src>/src/gromacs/fileio/gmx_system_xdr.c:454 + """ + self.unpack_int() + return self.unpack_string()
+ + +
[docs]class TPXUnpacker2020(TPXUnpacker): + """ + Unpacker for TPX files from and later than gromacs 2020. + + A new implementation of the serializer (InMemorySerializer), introduced in + gromacs 2020, changes le meaning of some types in the file body (the header + keep using the previous implementation of the serializer). + """ +
[docs] @classmethod + def from_unpacker(cls, unpacker): + new_unpacker = cls(unpacker.get_buffer()) + new_unpacker._pos = unpacker.get_position() + if hasattr(unpacker, 'unpack_real'): + if unpacker.unpack_real == unpacker.unpack_float: + new_unpacker.unpack_real = new_unpacker.unpack_float + elif unpacker.unpack_real == unpacker.unpack_double: + new_unpacker.unpack_real = new_unpacker.unpack_double + else: + raise ValueError("Unrecognized precision") + return new_unpacker
+ +
[docs] def unpack_fstring(self, n): + if n < 0: + raise ValueError('Size of fstring cannot be negative.') + start_position = self._pos + end_position = self._pos = start_position + n + if end_position > len(self._buf): + raise EOFError + content = self._buf[start_position:end_position] + return content
+ +
[docs] def unpack_ushort(self): + # The InMemorySerializer implements ushort according to the XDR standard + # on the contrary to the IO serializer. + return self._unpack_value(2, '>H')
+ +
[docs] def unpack_uchar(self): + # The InMemorySerializer implements uchar according to the XDR standard + # on the contrary to the IO serializer. + return self._unpack_value(1, '>B')
+ +
[docs] def do_string(self): + """ + Emulate gmx_fio_do_string + """ + n = self.unpack_uint64() + return self.unpack_fstring(n)
+ + +
[docs]def ndo_int(data, n): + """mimic of gmx_fio_ndo_real in gromacs""" + return [data.unpack_int() for i in range(n)]
+ + +
[docs]def ndo_real(data, n): + """mimic of gmx_fio_ndo_real in gromacs""" + return [data.unpack_real() for i in range(n)]
+ + +
[docs]def do_rvec(data): + return data.unpack_farray(setting.DIM, data.unpack_real)
+ + +
[docs]def ndo_rvec(data, n): + """mimic of gmx_fio_ndo_rvec in gromacs""" + return [data.unpack_farray(setting.DIM, data.unpack_real) for i in range(n)]
+ + +
[docs]def ndo_ivec(data, n): + """mimic of gmx_fio_ndo_rvec in gromacs""" + return [data.unpack_farray(setting.DIM, data.unpack_int) for i in range(n)]
+ + +
[docs]def fileVersion_err(fver): + if fver not in setting.SUPPORTED_VERSIONS: + raise NotImplementedError( + f"Your tpx version is {fver}, which this parser does not support, yet " + )
+ + +
[docs]def define_unpack_real(prec, data): + """Define an unpack_real method of data based on the float precision used""" + if prec == 4: + data.unpack_real = data.unpack_float + elif prec == 8: + data.unpack_real = data.unpack_double + else: + raise ValueError(f"unsupported precision: {prec}")
+ + +
[docs]def read_tpxheader(data): + """this function is now compatible with do_tpxheader in tpxio.cpp + """ + # Last compatibility check with gromacs-2016 + ver_str = data.do_string() # version string e.g. VERSION 4.0.5 + if not ver_str.startswith(b'VERSION'): + raise ValueError('Input does not look like a TPR file.') + precision = data.unpack_int() # e.g. 4 + define_unpack_real(precision, data) + fileVersion = data.unpack_int() # version of tpx file + fileVersion_err(fileVersion) + + # This is for backward compatibility with development version 77-79 where + # the tag was, mistakenly, placed before the generation. + # These versions are development versions between the 4.5 and 4.6 series. + if 77 <= fileVersion <= 79: + data.unpack_int() # the value is 8, but haven't found the + file_tag = data.do_string() + + fileGeneration = data.unpack_int() if fileVersion >= 26 else 0 # generation of tpx file, e.g. 17 + + # Versions before 77 don't have the tag, set it to TPX_TAG_RELEASE file_tag + # file_tag is used for comparing with tpx_tag. Only tpr files with a + # tpx_tag from a lower or the same version of gromacs code can be parsed by + # the tpxio.c + + file_tag = data.do_string() if fileVersion >= 81 else setting.TPX_TAG_RELEASE + + natoms = data.unpack_int() # total number of atoms + ngtc = data.unpack_int() if fileVersion >= 28 else 0 # number of groups for T-coupling + + if fileVersion < 62: + # not sure what these two are for. + data.unpack_int() # idum + data.unpack_real() # rdum + + fep_state = data.unpack_int() if fileVersion >= 79 else 0 + + # actually, it's lambda, not sure what is it. us lamb because lambda is a + # keyword in python + lamb = data.unpack_real() + bIr = data.unpack_int() # has input record or not + bTop = data.unpack_int() # has topology or not + bX = data.unpack_int() # has coordinates or not + bV = data.unpack_int() # has velocity or not + bF = data.unpack_int() # has force or not + bBox = data.unpack_int() # has box or not + + sizeOfTprBody = None + if fileVersion >= setting.tpxv_AddSizeField and fileGeneration >= 27: + sizeOfTprBody = data.unpack_int64() + + th = obj.TpxHeader(ver_str, precision, fileVersion, fileGeneration, + file_tag, natoms, ngtc, fep_state, lamb, + bIr, bTop, bX, bV, bF, bBox, sizeOfTprBody) + return th
+ + +
[docs]def extract_box_info(data, fver): + box = ndo_rvec(data, setting.DIM) + box_rel = ndo_rvec(data, setting.DIM) + box_v = ndo_rvec(data, setting.DIM) + + return obj.Box(box, box_rel, box_v)
+ + +
[docs]def do_mtop(data, fver, tpr_resid_from_one=False): + # mtop: the topology of the whole system + symtab = do_symtab(data) + do_symstr(data, symtab) # system_name + do_ffparams(data, fver) # params + + nmoltype = data.unpack_int() + moltypes = [] # non-gromacs + for i in range(nmoltype): + moltype = do_moltype(data, symtab, fver) + moltypes.append(moltype) + + nmolblock = data.unpack_int() + + mtop = obj.Mtop(nmoltype, moltypes, nmolblock) + + bonds = [] + angles = [] + dihedrals = [] + impropers = [] + + atomids = [] + segids = [] + resids = [] + resnames = [] + atomnames = [] + atomtypes = [] + moltypes = [] + molnums = [] + charges = [] + masses = [] + elements = [] + + atom_start_ndx = 0 + res_start_ndx = 0 + molnum = 0 + for i in range(mtop.nmolblock): + # molb_type is just an index for moltypes/molecule_types + mb = do_molblock(data) + # segment is made to correspond to the molblock as in gromacs, the + # naming is kind of arbitrary + molblock = mtop.moltypes[mb.molb_type].name.decode('utf-8') + segid = f"seg_{i}_{molblock}" + for j in range(mb.molb_nmol): + mt = mtop.moltypes[mb.molb_type] # mt: molecule type + for atomkind in mt.atomkinds: + atomids.append(atomkind.id + atom_start_ndx) + segids.append(segid) + resids.append(atomkind.resid + res_start_ndx) + resnames.append(atomkind.resname.decode()) + atomnames.append(atomkind.name.decode()) + atomtypes.append(atomkind.type.decode()) + moltypes.append(molblock) + molnums.append(molnum) + charges.append(atomkind.charge) + masses.append(atomkind.mass) + elements.append(atomkind.element_symbol) + molnum += 1 + + # remap_ method returns [blah, blah, ..] or [] + bonds.extend(mt.remap_bonds(atom_start_ndx)) + angles.extend(mt.remap_angles(atom_start_ndx)) + dihedrals.extend(mt.remap_dihe(atom_start_ndx)) + impropers.extend(mt.remap_impr(atom_start_ndx)) + + atom_start_ndx += mt.number_of_atoms() + res_start_ndx += mt.number_of_residues() + + atomids = Atomids(np.array(atomids, dtype=np.int32)) + atomnames = Atomnames(np.array(atomnames, dtype=object)) + atomtypes = Atomtypes(np.array(atomtypes, dtype=object)) + charges = Charges(np.array(charges, dtype=np.float32)) + masses = Masses(np.array(masses, dtype=np.float32)) + + moltypes = np.array(moltypes, dtype=object) + molnums = np.array(molnums, dtype=np.int32) + segids = np.array(segids, dtype=object) + resids = np.array(resids, dtype=np.int32) + if tpr_resid_from_one: + resids += 1 + + resnames = np.array(resnames, dtype=object) + (residx, new_resids, + (new_resnames, + new_moltypes, + new_molnums, + perres_segids + ) + ) = squash_by(resids, + resnames, + moltypes, + molnums, + segids) + residueids = Resids(new_resids) + residuenames = Resnames(new_resnames) + residue_moltypes = Moltypes(new_moltypes) + residue_molnums = Molnums(new_molnums) + + segidx, perseg_segids = squash_by(perres_segids)[:2] + segids = Segids(perseg_segids) + + top = Topology(len(atomids), len(new_resids), len(perseg_segids), + attrs=[atomids, atomnames, atomtypes, + charges, masses, + residueids, residuenames, + residue_moltypes, residue_molnums, + segids], + atom_resindex=residx, + residue_segindex=segidx) + top.add_TopologyAttr(Bonds([bond for bond in bonds if bond])) + top.add_TopologyAttr(Angles([angle for angle in angles if angle])) + top.add_TopologyAttr(Dihedrals([dihedral for dihedral in dihedrals + if dihedral])) + top.add_TopologyAttr(Impropers([improper for improper in impropers + if improper])) + + if any(elements): + elements = Elements(np.array(elements, dtype=object)) + top.add_TopologyAttr(elements) + + return top
+ + +
[docs]def do_symstr(data, symtab): + # do_symstr: get a string based on index from the symtab + ndx = data.unpack_int() + return symtab[ndx]
+ + +
[docs]def do_symtab(data): + symtab_nr = data.unpack_int() # number of symbols + symtab = [] + for i in range(symtab_nr): + j = data.do_string() + symtab.append(j) + return symtab
+ + +
[docs]def do_ffparams(data, fver): + atnr = data.unpack_int() + ntypes = data.unpack_int() + functype = ndo_int(data, ntypes) + reppow = data.unpack_double() if fver >= 66 else 12.0 + fudgeQQ = data.unpack_real() + + # mimicing the c code, + # remapping the functype due to inconsistency in different versions + for i in range(len(functype)): + for k in setting.ftupd: + # j[0]: tpx_version, j[1] funtype + if fver < k[0] and functype[i] >= k[1]: + functype[i] += 1 + + do_iparams(data, functype, fver) + + params = obj.Params(atnr, ntypes, functype, reppow, fudgeQQ) + return params
+ + +
[docs]def do_harm(data): + data.unpack_real() # rA + data.unpack_real() # krA + data.unpack_real() # rB + data.unpack_real() # krB
+ + +
[docs]def do_iparams(data, functypes, fver): + # Not all elif cases in this function has been used and tested + for k, i in enumerate(functypes): + if i in [ + setting.F_ANGLES, setting.F_G96ANGLES, + setting.F_BONDS, setting.F_G96BONDS, + setting.F_HARMONIC, setting.F_IDIHS + ]: + do_harm(data) + elif i in [setting.F_RESTRANGLES]: + data.unpack_real() # harmonic.rA + data.unpack_real() # harmonic.krA + elif i in [setting.F_LINEAR_ANGLES]: + data.unpack_real() # linangle.klinA + data.unpack_real() # linangle.aA + data.unpack_real() # linangle.klinB + data.unpack_real() # linangle.aB); + elif i in [setting.F_FENEBONDS]: + data.unpack_real() # fene.bm + data.unpack_real() # fene.kb + elif i in [setting.F_RESTRBONDS]: + data.unpack_real() # restraint.lowA + data.unpack_real() # restraint.up1A + data.unpack_real() # restraint.up2A + data.unpack_real() # restraint.kA + data.unpack_real() # restraint.lowB + data.unpack_real() # restraint.up1B + data.unpack_real() # restraint.up2B + data.unpack_real() # restraint.kB + elif i in [ + setting.F_TABBONDS, setting.F_TABBONDSNC, + setting.F_TABANGLES, setting.F_TABDIHS, + ]: + data.unpack_real() # tab.kA + data.unpack_int() # tab.table + data.unpack_real() # tab.kB + elif i in [setting.F_CROSS_BOND_BONDS]: + data.unpack_real() # cross_bb.r1e + data.unpack_real() # cross_bb.r2e + data.unpack_real() # cross_bb.krr + elif i in [setting.F_CROSS_BOND_ANGLES]: + data.unpack_real() # cross_ba.r1e + data.unpack_real() # cross_ba.r2e + data.unpack_real() # cross_ba.r3e + data.unpack_real() # cross_ba.krt + elif i in [setting.F_UREY_BRADLEY]: + data.unpack_real() # u_b.theta + data.unpack_real() # u_b.ktheta + data.unpack_real() # u_b.r13 + data.unpack_real() # u_b.kUB + if fver >= 79: + data.unpack_real() # u_b.thetaB + data.unpack_real() # u_b.kthetaB + data.unpack_real() # u_b.r13B + data.unpack_real() # u_b.kUBB + elif i in [setting.F_QUARTIC_ANGLES]: + data.unpack_real() # qangle.theta + ndo_real(data, 5) # qangle.c + elif i in [setting.F_BHAM]: + data.unpack_real() # bham.a + data.unpack_real() # bham.b + data.unpack_real() # bham.c + elif i in [setting.F_MORSE]: + data.unpack_real() # morse.b0 + data.unpack_real() # morse.cb + data.unpack_real() # morse.beta + if fver >= 79: + data.unpack_real() # morse.b0B + data.unpack_real() # morse.cbB + data.unpack_real() # morse.betaB + elif i in [setting.F_CUBICBONDS]: + data.unpack_real() # cubic.b0g + data.unpack_real() # cubic.kb + data.unpack_real() # cubic.kcub + elif i in [setting.F_CONNBONDS]: + pass + elif i in [setting.F_POLARIZATION]: + data.unpack_real() # polarize.alpha + elif i in [setting.F_ANHARM_POL]: + data.unpack_real() # anharm_polarize.alpha + data.unpack_real() # anharm_polarize.drcut + data.unpack_real() # anharm_polarize.khyp + elif i in [setting.F_WATER_POL]: + data.unpack_real() # wpol.al_x + data.unpack_real() # wpol.al_y + data.unpack_real() # wpol.al_z + data.unpack_real() # wpol.rOH + data.unpack_real() # wpol.rHH + data.unpack_real() # wpol.rOD + elif i in [setting.F_THOLE_POL]: + data.unpack_real() # thole.a + data.unpack_real() # thole.alpha1 + data.unpack_real() # thole.alpha2 + if fver < setting.tpxv_RemoveTholeRfac: + data.unpack_real() # thole.rfac + + elif i in [setting.F_LJ]: + data.unpack_real() # lj_c6 + data.unpack_real() # lj_c9 + elif i in [setting.F_LJ14]: + data.unpack_real() # lj14_c6A + data.unpack_real() # lj14_c12A + data.unpack_real() # lj14_c6B + data.unpack_real() # lj14_c12B + elif i in [setting.F_LJC14_Q]: + data.unpack_real() # ljc14.fqq + data.unpack_real() # ljc14.qi + data.unpack_real() # ljc14.qj + data.unpack_real() # ljc14.c6 + data.unpack_real() # ljc14.c12 + elif i in [setting.F_LJC_PAIRS_NB]: + data.unpack_real() # ljcnb.qi + data.unpack_real() # ljcnb.qj + data.unpack_real() # ljcnb.c6 + data.unpack_real() # ljcnb.c12 + + elif i in [ + setting.F_PIDIHS, setting.F_ANGRES, + setting.F_ANGRESZ, setting.F_PDIHS, + ]: + data.unpack_real() # pdihs_phiA + data.unpack_real() # pdihs_cpA + data.unpack_real() # pdihs_phiB + data.unpack_real() # pdihs_cpB + data.unpack_int() # pdihs_mult + + elif i in [setting.F_RESTRDIHS]: + data.unpack_real() # pdihs.phiA + data.unpack_real() # pdihs.cpA + elif i in [setting.F_DISRES]: + data.unpack_int() # disres.label + data.unpack_int() # disres.type + data.unpack_real() # disres.low + data.unpack_real() # disres.up1 + data.unpack_real() # disres.up2 + data.unpack_real() # disres.kfac + + elif i in [setting.F_ORIRES]: + data.unpack_int() # orires.ex + data.unpack_int() # orires.label + data.unpack_int() # orires.power + data.unpack_real() # orires.c + data.unpack_real() # orires.obs + data.unpack_real() # orires.kfac + + elif i in [setting.F_DIHRES]: + if fver < 72: + data.unpack_int() # idum + data.unpack_int() # idum + data.unpack_real() # dihres.phiA + data.unpack_real() # dihres.dphiA + data.unpack_real() # dihres.kfacA + if fver >= 72: + data.unpack_real() # dihres.phiB + data.unpack_real() # dihres.dphiB + data.unpack_real() # dihres.kfacB + + elif i in [setting.F_POSRES]: + do_rvec(data) # posres.pos0A + do_rvec(data) # posres.fcA + do_rvec(data) # posres.pos0B + do_rvec(data) # posres.fcB + + elif i in [setting.F_FBPOSRES]: + data.unpack_int() # fbposres.geom + do_rvec(data) # fbposres.pos0 + data.unpack_real() # fbposres.r + data.unpack_real() # fbposres.k + + elif i in [setting.F_CBTDIHS]: + ndo_real(data, setting.NR_CBTDIHS) # cbtdihs.cbtcA + + elif i in [setting.F_RBDIHS]: + ndo_real(data, setting.NR_RBDIHS) # iparams_rbdihs_rbcA + ndo_real(data, setting.NR_RBDIHS) # iparams_rbdihs_rbcB + + elif i in [setting.F_FOURDIHS]: + # Fourier dihedrals + ndo_real(data, setting.NR_RBDIHS) # rbdihs.rbcA + ndo_real(data, setting.NR_RBDIHS) # rbdihs.rbcB + + elif i in [setting.F_CONSTR, setting.F_CONSTRNC]: + data.unpack_real() # dA + data.unpack_real() # dB + + elif i in [setting.F_SETTLE]: + data.unpack_real() # settle.doh + data.unpack_real() # settle.dhh + + elif i in [setting.F_VSITE1]: + pass + + elif i in [setting.F_VSITE2, setting.F_VSITE2FD]: + data.unpack_real() # vsite.a + + elif i in [setting.F_VSITE3, setting.F_VSITE3FD, setting.F_VSITE3FAD]: + data.unpack_real() # vsite.a + data.unpack_real() # vsite.b + + elif i in [setting.F_VSITE3OUT, setting.F_VSITE4FD, setting.F_VSITE4FDN]: + data.unpack_real() # vsite.a + data.unpack_real() # vsite.b + data.unpack_real() # vsite.c + + elif i in [setting.F_VSITEN]: + data.unpack_int() # vsiten.n + data.unpack_real() # vsiten.a + + elif i in [setting.F_GB12, setting.F_GB13, setting.F_GB14]: + # /* We got rid of some parameters in version 68 */ + if fver < 68: + data.unpack_real() # rdum + data.unpack_real() # rdum + data.unpack_real() # rdum + data.unpack_real() # rdum + data.unpack_real() # gb.sar + data.unpack_real() # gb.st + data.unpack_real() # gb.pi + data.unpack_real() # gb.gbr + data.unpack_real() # gb.bmlt + + elif i in [setting.F_CMAP]: + data.unpack_int() # cmap.cmapA + data.unpack_int() # cmap.cmapB + else: + raise NotImplementedError(f"unknown functype: {i}") + return
+ + +
[docs]def do_moltype(data, symtab, fver): + molname = do_symstr(data, symtab) + + # key info: about atoms + atoms_obj = do_atoms(data, symtab, fver) + + #### start: MDAnalysis specific + atomkinds = [] + for k, a in enumerate(atoms_obj.atoms): + atomkinds.append(obj.AtomKind( + k, + atoms_obj.atomnames[k], + atoms_obj.type[k], + a.resind, + atoms_obj.resnames[a.resind], + a.m, + a.q, + a.atomnumber, + )) + #### end: MDAnalysis specific + + # key info: about bonds, angles, dih, improp dih. + ilists = do_ilists(data, fver) + + #### start: MDAnalysis specific + # these may not be available for certain molecules, e.g. tip4p + bonds, angles, dihs, impr = [], [], [], [] + for ilist in ilists: + if ilist.nr > 0: + ik_obj = obj.InteractionKind(*ilist.ik) + ias = ilist.iatoms + + # the following if..elif..else statement needs to be updated as new + # type of interactions become interested + if ik_obj.name in ['BONDS', 'G96BONDS', 'MORSE', 'CUBICBONDS', + 'CONNBONDS', 'HARMONIC', 'FENEBONDS', + 'RESTRAINTPOT', 'CONSTR', 'CONSTRNC', + 'TABBONDS', 'TABBONDSNC']: + bonds += list(ik_obj.process(ias)) + elif ik_obj.name in ['ANGLES', 'G96ANGLES', 'CROSS_BOND_BOND', + 'CROSS_BOND_ANGLE', 'UREY_BRADLEY', 'QANGLES', + 'RESTRANGLES', 'TABANGLES']: + angles += list(ik_obj.process(ias)) + elif ik_obj.name in ['PDIHS', 'RBDIHS', 'RESTRDIHS', 'CBTDIHS', + 'FOURDIHS', 'TABDIHS']: + dihs += list(ik_obj.process(ias)) + elif ik_obj.name in ['IDIHS', 'PIDIHS']: + impr += list(ik_obj.process(ias)) + elif ik_obj.name == 'SETTLE': + # SETTLE interactions are optimized triangular constraints for + # water molecules. They should be counted as a pair of bonds + # between the oxygen and the hydrogens. In older versions of + # the TPR format only specifies the index of the oxygen and + # assumes that the next two atoms are the hydrogens. + if len(ias) == 2: + # Old format. Only the first atom is specified. + base_atom = ias[1] + bonds += [ + [base_atom, base_atom + 1], + [base_atom, base_atom + 2], + ] + else: + all_settle = ik_obj.process(ias) + for settle in all_settle: + base_atom = settle[0] + bonds += [ + [settle[0], settle[1]], + [settle[0], settle[2]], + ] + else: + # other interaction types are not interested at the moment + pass + + bonds = bonds if bonds else None + angles = angles if angles else None + dihs = dihs if dihs else None + impr = impr if impr else None + moltype = obj.MoleculeKind(molname, atomkinds, bonds, angles, dihs, impr) + #### end: MDAnalysis specific + + # info in do_block and do_blocka is not interesting, but has to be parsed + # here so that all moltypes can be parsed properly + do_block(data) + do_blocka(data) + return moltype
+ + +
[docs]def do_atoms(data, symtab, fver): + nr = data.unpack_int() # number of atoms in a particular molecule + nres = data.unpack_int() # number of residues in a particular molecule + + atoms = [] + for i in range(nr): + A = do_atom(data, fver) + atoms.append(A) + + # do_strstr + atomnames = [symtab[i] for i in ndo_int(data, nr)] + + type = [symtab[i] for i in ndo_int(data, nr)] # e.g. opls_111 + typeB = [symtab[i] for i in ndo_int(data, nr)] + resnames = do_resinfo(data, symtab, fver, nres) + + return obj.Atoms(atoms, nr, nres, type, typeB, atomnames, resnames)
+ + +
[docs]def do_resinfo(data, symtab, fver, nres): + if fver < 63: + resnames = [symtab[i] for i in ndo_int(data, nres)] + else: + resnames = [] + for i in range(nres): + resnames.append(symtab[data.unpack_int()]) + data.unpack_int() + data.unpack_uchar() + return resnames
+ + +
[docs]def do_atom(data, fver): + m = data.unpack_real() # mass + q = data.unpack_real() # charge + mB = data.unpack_real() + qB = data.unpack_real() + tp = data.unpack_ushort() # type is a keyword in python + typeB = data.unpack_ushort() + ptype = data.unpack_int() # regular atom, virtual site or others + resind = data.unpack_int() # index of residue + + atomnumber = data.unpack_int() # index of atom type + + return obj.Atom(m, q, mB, qB, tp, typeB, ptype, resind, atomnumber)
+ + +
[docs]def do_ilists(data, fver): + nr = [] # number of ilist + iatoms = [] # atoms involved in a particular interaction type + pos = [] + for j in range(setting.F_NRE): # total number of energies (i.e. interaction types) + bClear = False + for k in setting.ftupd: + if fver < k[0] and j == k[1]: + bClear = True + if bClear: + nr.append(0) + iatoms.append(None) + else: + # do_ilist + n = data.unpack_int() + nr.append(n) + l_ = [] + for i in range(n): + l_.append(data.unpack_int()) + iatoms.append(l_) + + return [ + obj.Ilist(n, it, i) + for n, it, i in zip(nr, setting.interaction_types, iatoms) + ]
+ + +
[docs]def do_molblock(data): + molb_type = data.unpack_int() + molb_nmol = data.unpack_int() # number of moles in the molblock + molb_natoms_mol = data.unpack_int() # number of atoms in a molecule + molb_nposres_xA = data.unpack_int() + if molb_nposres_xA > 0: + ndo_rvec(data, molb_nposres_xA) + molb_nposres_xB = data.unpack_int() # The number of posres coords for top B + if molb_nposres_xB > 0: + ndo_rvec(data, molb_nposres_xB) + + return obj.Molblock(molb_type, molb_nmol, molb_natoms_mol, + molb_nposres_xA, molb_nposres_xB)
+ + +
[docs]def do_block(data): + block_nr = data.unpack_int() # for cgs: charge groups + # starting or ending atom indices, based on which cgs are grouped + ndo_int(data, block_nr + 1) + return do_block
+ + +
[docs]def do_blocka(data): + block_nr = data.unpack_int() # No. of atoms with excls + block_nra = data.unpack_int() # total times fo appearance of atoms for excls + ndo_int(data, block_nr + 1) + ndo_int(data, block_nra) + return block_nr, block_nra
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/base.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/base.html new file mode 100644 index 0000000000..274276aab8 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/base.html @@ -0,0 +1,274 @@ + + + + + + MDAnalysis.transformations.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.base

+# -*- 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-2017 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.
+#
+# 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
+#
+
+"""\
+Transformations Base Class --- :mod:`MDAnalysis.transformations.base`
+=====================================================================
+
+.. autoclass:: TransformationBase
+
+"""
+from threadpoolctl import threadpool_limits
+
+
+
[docs]class TransformationBase(object): + """Base class for defining on-the-fly transformations + + The class is designed as a template for creating on-the-fly + Transformation classes. This class will + + 1) set up a context manager framework on limiting the threads + per call, which may be the multi-thread OpenBlas backend of NumPy. + This backend may kill the performance when subscribing hyperthread + or oversubscribing the threads when used together with other parallel + engines e.g. Dask. + (PR `#2950 <https://github.com/MDAnalysis/mdanalysis/pull/2950>`_) + + Define ``max_threads=1`` when that is the case. + + 2) set up a boolean attribute `parallelizable` for checking if the + transformation can be applied in a **split-apply-combine** parallelism. + For example, the :class:`~MDAnalysis.transformations.positionaveraging.PositionAverager` + is history-dependent and can not be used in parallel analysis natively. + (Issue `#2996 <https://github.com/MDAnalysis/mdanalysis/issues/2996>`_) + + To define a new Transformation, :class:`TransformationBase` + has to be subclassed. + ``max_threads`` will be set to ``None`` by default, + i.e. does not do anything and any settings in the environment such as + the environment variable :envvar:`OMP_NUM_THREADS` + (see the `OpenMP specification for OMP_NUM_THREADS <https://www.openmp.org/spec-html/5.0/openmpse50.html>`_) + are used. + ``parallelizable`` will be set to ``True`` by default. + You may need to double check if it can be used in parallel analysis; + if not, override the value to ``False``. + Note this attribute is not checked anywhere in MDAnalysis yet. + Developers of the parallel analysis have to check it in their own code. + + .. code-block:: python + + class NewTransformation(TransformationBase): + def __init__(self, ag, parameter, + max_threads=1, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + self.ag = ag + self._param = parameter + + def _transform(self, ts): + # REQUIRED + ts.positions = some_function(ts, self.ag, self._param) + return ts + + Afterwards the new transformation can be run like this. + + .. code-block:: python + + new_transformation = NewTransformation(ag, param) + u.trajectory.add_transformations(new_transformation) + + + .. versionadded:: 2.0.0 + Add the base class for all transformations to limit threads and + check if it can be used in parallel analysis. + """ + + def __init__(self, **kwargs): + """ + Parameters + ---------- + max_threads: int, optional + The maximum thread number can be used. + Default is ``None``, which means the default or the external setting. + parallelizable: bool, optional + A check for if this can be used in split-apply-combine parallel + analysis approach. + Default is ``True``. + """ + self.max_threads = kwargs.pop('max_threads', None) + self.parallelizable = kwargs.pop('parallelizable', True) + + def __call__(self, ts): + """The function that makes transformation can be called as a function + + The thread limit works as a context manager with given `max_threads` + wrapping the real :func:`_transform` function + """ + with threadpool_limits(self.max_threads): + return self._transform(ts) + + def _transform(self, ts): + """Transform the given `Timestep` + + It deals with the transformation of a single `Timestep`. + """ + raise NotImplementedError("Only implemented in child classes")
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.html new file mode 100644 index 0000000000..e1004c73b8 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.html @@ -0,0 +1,244 @@ + + + + + + MDAnalysis.transformations.boxdimensions — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.boxdimensions

+# -*- 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-2017 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
+#
+
+"""\
+Set box dimensions --- :mod:`MDAnalysis.transformations.boxdimensions`
+=======================================================================
+
+Set dimensions of the simulation box to a constant vector across all timesteps.
+
+
+.. autoclass:: set_dimensions
+"""
+import numpy as np
+
+from .base import TransformationBase
+
+
+
[docs]class set_dimensions(TransformationBase): + """ + Set simulation box dimensions. + + Timestep dimensions are modified in place. + + Example + ------- + + e.g. set simulation box dimensions to a vector containing unit cell + dimensions [*a*, *b*, *c*, *alpha*, *beta*, *gamma*], lengths *a*, + *b*, *c* are in the MDAnalysis length unit (Å), and angles are in degrees. + + .. code-block:: python + + dim = [2, 2, 2, 90, 90, 90] + transform = mda.transformations.boxdimensions.set_dimensions(dim) + u.trajectory.add_transformations(transform) + + Parameters + ---------- + dimensions: iterable of floats + vector that contains unit cell lengths and angles. + Expected shapes are (6, 0) or (1, 6) + + Returns + ------- + :class:`~MDAnalysis.coordinates.timestep.Timestep` object + """ + + def __init__(self, + dimensions, + max_threads=None, + parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + self.dimensions = dimensions + + try: + self.dimensions = np.asarray(self.dimensions, np.float32) + except ValueError: + errmsg = (f'{self.dimensions} cannot be converted into ' + 'np.float32 numpy.ndarray') + raise ValueError(errmsg) + try: + self.dimensions = self.dimensions.reshape(6, ) + except ValueError: + errmsg = (f'{self.dimensions} array does not have valid box ' + 'dimension shape.\nSimulation box dimensions are ' + 'given by an float array of shape (6, ), ' + ' containing 3 lengths and 3 angles: ' + '[a, b, c, alpha, beta, gamma]') + raise ValueError(errmsg) + + def _transform(self, ts): + ts.dimensions = self.dimensions + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/fit.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/fit.html new file mode 100644 index 0000000000..a166b438ef --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/fit.html @@ -0,0 +1,409 @@ + + + + + + MDAnalysis.transformations.fit — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.fit

+# -*- 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-2017 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.
+#
+# 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
+#
+
+"""\
+Fitting transformations --- :mod:`MDAnalysis.transformations.fit`
+=================================================================
+
+Translate and/or rotates the coordinates of a given trajectory to align
+a given AtomGroup to a reference structure.
+
+.. autoclass:: fit_translation
+
+.. autoclass:: fit_rot_trans
+
+"""
+import numpy as np
+
+from ..analysis import align
+from ..lib.transformations import euler_from_matrix, euler_matrix
+
+from .base import TransformationBase
+
+
+
[docs]class fit_translation(TransformationBase): + """Translates a given AtomGroup so that its center of geometry/mass matches + the respective center of the given reference. A plane can be given by the + user using the option `plane`, and will result in the removal of + the translation motions of the AtomGroup over that particular plane. + + Example + ------- + Removing the translations of a given AtomGroup `ag` on the XY plane by + fitting its center of mass to the center of mass of a reference `ref`: + + .. code-block:: python + + ag = u.select_atoms("protein") + ref = mda.Universe("reference.pdb") + transform = mda.transformations.fit_translation(ag, ref, plane="xy", + weights="mass") + u.trajectory.add_transformations(transform) + + Parameters + ---------- + ag : Universe or AtomGroup + structure to translate, a + :class:`~MDAnalysis.core.groups.AtomGroup` or a whole + :class:`~MDAnalysis.core.universe.Universe` + reference : Universe or AtomGroup + reference structure, a :class:`~MDAnalysis.core.groups.AtomGroup` or a + whole :class:`~MDAnalysis.core.universe.Universe` + plane: str, optional + used to define the plane on which the translations will be removed. + Defined as a string of the plane. + Suported planes are yz, xz and xy planes. + weights : {"mass", ``None``} or array_like, optional + choose weights. With ``"mass"`` uses masses as weights; with ``None`` + weigh each atom equally. If a float array of the same length as + `ag` is provided, use each element of the `array_like` as a + weight for the corresponding atom in `ag`. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, ag, reference, plane=None, weights=None, + max_threads=None, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.ag = ag + self.reference = reference + self.plane = plane + self.weights = weights + + if self.plane is not None: + axes = {'yz': 0, 'xz': 1, 'xy': 2} + try: + self.plane = axes[self.plane] + except (TypeError, KeyError): + raise ValueError(f'{self.plane} is not a valid plane') \ + from None + try: + if self.ag.atoms.n_residues != self.reference.atoms.n_residues: + errmsg = ( + f"{self.ag} and {self.reference} have mismatched" + f"number of residues" + ) + + raise ValueError(errmsg) + except AttributeError: + errmsg = ( + f"{self.ag} or {self.reference} is not valid" + f"Universe/AtomGroup" + ) + raise AttributeError(errmsg) from None + self.ref, self.mobile = align.get_matching_atoms(self.reference.atoms, + self.ag.atoms) + self.weights = align.get_weights(self.ref.atoms, weights=self.weights) + self.ref_com = self.ref.center(self.weights) + + def _transform(self, ts): + mobile_com = np.asarray(self.mobile.atoms.center(self.weights), + np.float32) + vector = self.ref_com - mobile_com + if self.plane is not None: + vector[self.plane] = 0 + ts.positions += vector + + return ts
+ + +
[docs]class fit_rot_trans(TransformationBase): + """Perform a spatial superposition by minimizing the RMSD. + + Spatially align the group of atoms `ag` to `reference` by doing a RMSD + fit. + + This fit works as a way to remove translations and rotations of a given + AtomGroup in a trajectory. A plane can be given using the flag `plane` + so that only translations and rotations in that particular plane are + removed. This is useful for protein-membrane systems to where the membrane + must remain in the same orientation. + + Note + ---- + ``max_threads`` is set to 1 for this transformation + with which it performs better. + + Example + ------- + Removing the translations and rotations of a given AtomGroup `ag` on the XY plane + by fitting it to a reference `ref`, using the masses as weights for the RMSD fit: + + .. code-block:: python + + ag = u.select_atoms("protein") + ref = mda.Universe("reference.pdb") + transform = mda.transformations.fit_rot_trans(ag, ref, plane="xy", + weights="mass") + u.trajectory.add_transformations(transform) + + Parameters + ---------- + ag : Universe or AtomGroup + structure to translate and rotate, a + :class:`~MDAnalysis.core.groups.AtomGroup` or a whole + :class:`~MDAnalysis.core.universe.Universe` + reference : Universe or AtomGroup + reference structure, a :class:`~MDAnalysis.core.groups.AtomGroup` or a whole + :class:`~MDAnalysis.core.universe.Universe` + plane: str, optional + used to define the plane on which the rotations and translations will be removed. + Defined as a string of the plane. Supported planes are "yz", "xz" and "xy" planes. + weights : {"mass", ``None``} or array_like, optional + choose weights. With ``"mass"`` uses masses as weights; with ``None`` + weigh each atom equally. If a float array of the same length as + `ag` is provided, use each element of the `array_like` as a + weight for the corresponding atom in `ag`. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, ag, reference, plane=None, weights=None, + max_threads=1, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.ag = ag + self.reference = reference + self.plane = plane + self.weights = weights + + if self.plane is not None: + axes = {'yz': 0, 'xz': 1, 'xy': 2} + try: + self.plane = axes[self.plane] + except (TypeError, KeyError): + raise ValueError(f'{self.plane} is not a valid plane') \ + from None + try: + if self.ag.atoms.n_residues != self.reference.atoms.n_residues: + errmsg = ( + f"{self.ag} and {self.reference} have mismatched " + f"number of residues" + ) + raise ValueError(errmsg) + except AttributeError: + errmsg = ( + f"{self.ag} or {self.reference} is not valid " + f"Universe/AtomGroup" + ) + raise AttributeError(errmsg) from None + self.ref, self.mobile = align.get_matching_atoms(self.reference.atoms, + self.ag.atoms) + self.weights = align.get_weights(self.ref.atoms, weights=self.weights) + self.ref_com = self.ref.center(self.weights) + self.ref_coordinates = self.ref.atoms.positions - self.ref_com + + def _transform(self, ts): + mobile_com = self.mobile.atoms.center(self.weights) + mobile_coordinates = self.mobile.atoms.positions - mobile_com + rotation, dump = align.rotation_matrix(mobile_coordinates, + self.ref_coordinates, + weights=self.weights) + vector = self.ref_com + if self.plane is not None: + matrix = np.r_[rotation, np.zeros(3).reshape(1, 3)] + matrix = np.c_[matrix, np.zeros(4)] + euler_angs = np.asarray(euler_from_matrix(matrix, axes='sxyz'), + np.float32) + for i in range(0, euler_angs.size): + euler_angs[i] = (euler_angs[self.plane] if i == self.plane + else 0) + rotation = euler_matrix(euler_angs[0], + euler_angs[1], + euler_angs[2], + axes='sxyz')[:3, :3] + vector[self.plane] = mobile_com[self.plane] + ts.positions = ts.positions - mobile_com + ts.positions = np.dot(ts.positions, rotation.T) + ts.positions = ts.positions + vector + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/nojump.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/nojump.html new file mode 100644 index 0000000000..8243f3941f --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/nojump.html @@ -0,0 +1,318 @@ + + + + + + MDAnalysis.transformations.nojump — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.nojump

+# -*- 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-2017 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
+#
+
+"""\
+No Jump Trajectory Unwrapping --- :mod:`MDAnalysis.transformations.nojump`
+=======================================================================================
+
+Unwraps the trajectory such that atoms never move more than half a periodic box length.
+The consequence of this is that particles will diffuse across periodic boundaries when
+needed. This unwrapping method is suitable as a preprocessing step to calculate
+molecular diffusion, or more commonly to keep multi-domain proteins whole during trajectory
+analysis.
+The algorithm used is based on :cite:p:`Kulke2022`.
+
+.. autoclass:: NoJump
+
+"""
+import numpy as np
+import warnings
+
+from .base import TransformationBase
+from ..due import due, Doi
+from ..exceptions import NoDataError
+
+
+
[docs]class NoJump(TransformationBase): + """ + Returns transformed coordinates for the given timestep so that an atom + does not move more than half the periodic box size between two timesteps, and will move + across periodic boundary edges. The algorithm used is based on :cite:p:`Kulke2022`, + equation B6 for non-orthogonal systems, so it is general to most applications where + molecule trajectories should not "jump" from one side of a periodic box to another. + + Note that this transformation depends on a periodic box dimension being set for every + frame in the trajectory, and that this box dimension can be transformed to an orthonormal + unit cell. If not, an error is emitted. Since it is typical to transform all frames + sequentially when unwrapping trajectories, warnings are emitted if non-sequential timesteps + are transformed using NoJump. + + Example + ------- + + Suppose you had a molecular trajectory with a protein dimer that moved across a periodic + boundary. This will normally appear to make the dimer split apart. This transformation + uses the molecular motions between frames in a wrapped trajectory to create an unwrapped + trajectory where molecules never move more than half a periodic box dimension between subsequent + frames. Thus, the normal use case is to apply the transformation to every frame of a trajectory, + and to do so sequentially. + + .. code-block:: python + + transformation = NoJump() + u.trajectory.add_transformations(transformation) + for ts in u.trajectory: + print(ts.positions) + + In this case, ``ts.positions`` will return the NoJump unwrapped trajectory, which would keep + protein dimers together if they are together in the inital timestep. The unwrapped trajectory may + also be useful to compute diffusion coefficients via the Einstein relation. + To reverse the process, wrap the coordinates again. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + + Kulke2022 + + """ + + @due.dcite( + Doi("10.1021/acs.jctc.2c00327"), + description="Works through the orthogonal case for unwrapping, " + "and proposes the non-orthogonal approach.", + path=__name__, + ) + 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) + self.prev = None + self.old_frame = 0 + self.older_frame = "A" + self.check_c = check_continuity + + def _transform(self, ts): + L = ts.triclinic_dimensions + if L is None: + msg = f"Periodic box dimensions not provided at step {ts.frame}" + raise NoDataError(msg) + try: + Linverse = np.linalg.inv(L) + except np.linalg.LinAlgError: + msg = f"Periodic box dimensions are not invertible at step {ts.frame}" + raise NoDataError(msg) + if self.prev is None: + self.prev = ts.positions @ Linverse + self.old_frame = ts.frame + return ts + if ( + self.check_c + and self.older_frame != "A" + and (self.old_frame - self.older_frame) != (ts.frame - self.old_frame) + ): + warnings.warn( + "NoJump detected that the interval between frames is unequal." + "We are resetting the reference frame to the current timestep.", + UserWarning, + ) + self.prev = ts.positions @ Linverse + self.old_frame = ts.frame + self.older_frame = "A" + return ts + if self.check_c and np.abs(self.old_frame - ts.frame) != 1: + warnings.warn( + "NoJump transform is only accurate when positions" + "do not move by more than half a box length." + "Currently jumping between frames with a step of more than 1." + "This might be fine, but depending on the trajectory stride," + "this might be inaccurate.", + UserWarning, + ) + # Convert into reduced coordinate space + fcurrent = ts.positions @ Linverse + fprev = self.prev # Previous unwrapped coordinates in reduced box coordinates. + # Calculate the new positions in reduced coordinate space (Equation B6 from + # 10.1021/acs.jctc.2c00327). As it turns out, the displacement term can + # be moved inside the round function in this coordinate space, as the + # difference between wrapped and unwrapped coordinates is an integer. + newpositions = fcurrent - np.round(fcurrent - fprev) + # Convert back into real space + ts.positions = newpositions @ L + # Set things we need to save for the next frame. + self.prev = newpositions # Note that this is in reduced coordinate space. + self.older_frame = self.old_frame + self.old_frame = ts.frame + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.html new file mode 100644 index 0000000000..5625e7e718 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.html @@ -0,0 +1,352 @@ + + + + + + MDAnalysis.transformations.positionaveraging — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.positionaveraging

+# -*- 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-2017 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
+#
+
+"""\
+Trajectory Coordinate Averaging --- :mod:`MDAnalysis.transformations.positionaveraging` 
+=======================================================================================
+
+Averages the coordinates of a given trajectory with the N previous frames.
+For frames < N, the average of the frames iterated up to that point will be
+returned. 
+
+.. autoclass:: PositionAverager
+
+"""
+import numpy as np
+import warnings
+
+from .base import TransformationBase
+
+
+
[docs]class PositionAverager(TransformationBase): + """ + Averages the coordinates of a given timestep so that the coordinates + of the AtomGroup correspond to the average positions of the N previous + frames. + For frames < N, the average of the frames iterated up to that point will + be returned. + + Example + ------- + + Average the coordinates of a given AtomGroup over the course of + the previous N frames. For ``N=3``, the output will correspond to the + average of the coordinates over the last 3 frames. + When ``check_reset=True``, the averager will be reset once the iteration is + complete, or if the frames iterated are not sequential. + + .. code-block:: python + + N=3 + transformation = PositionAverager(N, check_reset=True) + u.trajectory.add_transformations(transformation) + for ts in u.trajectory: + print(ts.positions) + + In this case, ``ts.positions`` will return the average coordinates of the + last N iterated frames. + + + When ``check_reset=False``, the average of coordinates from non + sequential timesteps can also be computed. However, the averager must be + manually reset before restarting an iteration. In this case, + ``ts.positions`` will return the average coordinates of the last N + iterated frames, despite them not being sequential + (``frames = [0, 7, 1, 6]``). + + .. code-block:: python + + N=3 + transformation = PositionAverager(N, check_reset=False) + u.trajectory.add_transformations(transformation) + frames = [0, 7, 1, 6] + transformation.resetarrays() + for ts in u.trajectory[frames]: + print(ts.positions) + + If ``check_reset=True``, the ``PositionAverager`` would have automatically + reset after detecting a non sequential iteration (i.e. when iterating from + frame 7 to frame 1 or when resetting the iterator from frame 6 back to + frame 0). + + + For frames < N, the average is calculated with the frames iterated up + to that point and thus will not follow the same behaviour as for + frames > N. This can be followed by comparing the number of frames being + used to compute the current averaged frame (``current_avg``) to the one + requested when calling ``PositionAverager`` (``avg_frames``) which in + these examples corresponds to ``N=3``. + + .. code-block:: python + + N=3 + transformation = PositionAverager(N, check_reset=True) + u.trajectory.add_transformations(transformation) + for ts in u.trajectory: + if transformation.current_avg == transformation.avg_frames: + print(ts.positions) + + In the case of ``N=3``, as the average is calculated with the frames + iterated up to the current iteration, the first frame returned will + not be averaged. During the first iteration no other frames are stored in + memory thus far and, consequently, ``transformation.current_avg = 1``. + The second frame iterated will return the average of frame 1 and frame 2, + with ``transformation.current_avg = 2``. Only during the third and + following iterations will ``ts.positions`` start returning the average of + the last 3 frames and thus ``transformation.current_avg = 3`` + These initial frames are typically not desired during analysis, but one can + easily avoid them, as seen in the previous example with + ``if transformation.current_avg == transformation.avg_frames:`` or by + simply removing the first ``avg_frames-1`` frames from the analysis. + + + + Parameters + ---------- + avg_frames: int + Determines the number of frames to be used for the position averaging. + check_reset: bool, optional + If ``True``, position averaging will be reset and a warning raised + when the trajectory iteration direction changes. If ``False``, position + averaging will not reset, regardless of the iteration. + + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + + def __init__(self, avg_frames, check_reset=True, + max_threads=None, + parallelizable=False): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + self.avg_frames = avg_frames + self.check_reset = check_reset + self.current_avg = 0 + self.resetarrays() + self.current_frame = 0 + + def resetarrays(self): + self.idx_array = np.empty(self.avg_frames) + self.idx_array[:] = np.nan + + def rollidx(self, ts): + self.idx_array = np.roll(self.idx_array, 1) + self.idx_array[0] = ts.frame + + def rollposx(self, ts): + try: + self.coord_array.size + except AttributeError: + size = (ts.positions.shape[0], ts.positions.shape[1], + self.avg_frames) + self.coord_array = np.empty(size) + + self.coord_array = np.roll(self.coord_array, 1, axis=2) + self.coord_array[..., 0] = ts.positions.copy() + + def _transform(self, ts): + # calling the same timestep will not add new data to coord_array + # This can prevent from getting different values when + # call `u.trajectory[i]` multiple times. + if (ts.frame == self.current_frame + and hasattr(self, 'coord_array') + and not np.isnan(self.idx_array).all()): + test = ~np.isnan(self.idx_array) + ts.positions = np.mean(self.coord_array[..., test], axis=2) + return ts + else: + self.current_frame = ts.frame + + self.rollidx(ts) + test = ~np.isnan(self.idx_array) + self.current_avg = sum(test) + if self.check_reset: + sign = np.sign(np.diff(self.idx_array[test])) + if not (np.all(sign == 1) or np.all(sign == -1)): + warnings.warn('Cannot average position for non sequential' + 'iterations. Averager will be reset.', + Warning) + self.resetarrays() + return self(ts) + + self.rollposx(ts) + ts.positions = np.mean(self.coord_array[..., test], axis=2) + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/rotate.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/rotate.html new file mode 100644 index 0000000000..d2c26f40bc --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/rotate.html @@ -0,0 +1,340 @@ + + + + + + MDAnalysis.transformations.rotate — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.rotate

+# -*- 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-2017 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
+#
+
+"""\
+Trajectory rotation --- :mod:`MDAnalysis.transformations.rotate`
+================================================================
+
+Rotates the coordinates by a given angle arround an axis formed by a direction
+and a point.
+
+.. autoclass:: rotateby
+
+"""
+import numpy as np
+from functools import partial
+
+from ..lib.transformations import rotation_matrix
+from ..lib.util import get_weights
+
+from .base import TransformationBase
+
+
+
[docs]class rotateby(TransformationBase): + ''' + Rotates the trajectory by a given angle on a given axis. The axis is defined by + the user, combining the direction vector and a point. This point can be the center + of geometry or the center of mass of a user defined AtomGroup, or an array defining + custom coordinates. + + Note + ---- + ``max_threads`` is set to 1 for this transformation + with which it performs better. + + Examples + -------- + + e.g. rotate the coordinates by 90 degrees on a axis formed by the [0,0,1] vector and + the center of geometry of a given AtomGroup: + + .. code-block:: python + + from MDAnalysis import transformations + + ts = u.trajectory.ts + angle = 90 + ag = u.atoms + d = [0,0,1] + rotated = transformations.rotate.rotateby(angle, direction=d, ag=ag)(ts) + + e.g. rotate the coordinates by a custom axis: + + .. code-block:: python + + from MDAnalysis import transformations + + ts = u.trajectory.ts + angle = 90 + p = [1,2,3] + d = [0,0,1] + rotated = transformations.rotate.rotateby(angle, direction=d, point=p)(ts) + + Parameters + ---------- + angle: float + rotation angle in degrees + direction: array-like + vector that will define the direction of a custom axis of rotation from the + provided point. Expected shapes are (3, ) or (1, 3). + ag: AtomGroup, optional + use the weighted center of an AtomGroup as the point from where the rotation axis + will be defined. If no AtomGroup is given, the `point` argument becomes mandatory + point: array-like, optional + list of the coordinates of the point from where a custom axis of rotation will + be defined. Expected shapes are (3, ) or (1, 3). If no point is given, the + `ag` argument becomes mandatory. + weights: {"mass", ``None``} or array_like, optional + define the weights of the atoms when calculating the center of the AtomGroup. + With ``"mass"`` uses masses as weights; with ``None`` weigh each atom equally. + If a float array of the same length as `ag` is provided, use each element of + the `array_like` as a weight for the corresponding atom in `ag`. Default is + None. + wrap: bool, optional + If `True`, all the atoms from the given AtomGroup will be moved to the unit cell + before calculating the center of mass or geometry. Default is `False`, no changes + to the atom coordinates are done before calculating the center of the AtomGroup. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + Warning + ------- + Wrapping/unwrapping the trajectory or performing PBC corrections may not be possible + after rotating the trajectory. + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + ''' + def __init__(self, + angle, + direction, + point=None, + ag=None, + weights=None, + wrap=False, + max_threads=1, + parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.angle = angle + self.direction = direction + self.point = point + self.ag = ag + self.weights = weights + self.wrap = wrap + + self.angle = np.deg2rad(self.angle) + try: + self.direction = np.asarray(self.direction, np.float32) + if self.direction.shape != (3, ) and \ + self.direction.shape != (1, 3): + raise ValueError('{} is not a valid direction' + .format(self.direction)) + self.direction = self.direction.reshape(3, ) + except ValueError: + raise ValueError(f'{self.direction} is not a valid direction') \ + from None + if self.point is not None: + self.point = np.asarray(self.point, np.float32) + if self.point.shape != (3, ) and self.point.shape != (1, 3): + raise ValueError('{} is not a valid point'.format(self.point)) + self.point = self.point.reshape(3, ) + elif self.ag: + try: + self.atoms = self.ag.atoms + except AttributeError: + raise ValueError(f'{self.ag} is not an AtomGroup object') \ + from None + else: + try: + self.weights = get_weights(self.atoms, + weights=self.weights) + except (ValueError, TypeError): + errmsg = ("weights must be {'mass', None} or an iterable " + "of the same size as the atomgroup.") + raise TypeError(errmsg) from None + self.center_method = partial(self.atoms.center, + self.weights, + wrap=self.wrap) + else: + raise ValueError('A point or an AtomGroup must be specified') + + def _transform(self, ts): + if self.point is None: + position = self.center_method() + else: + position = self.point + matrix = rotation_matrix(self.angle, self.direction, position) + rotation = matrix[:3, :3].T + translation = matrix[:3, 3] + ts.positions = np.dot(ts.positions, rotation) + ts.positions += translation + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/translate.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/translate.html new file mode 100644 index 0000000000..e758aaf5de --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/translate.html @@ -0,0 +1,328 @@ + + + + + + MDAnalysis.transformations.translate — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.translate

+# -*- 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-2017 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
+#
+
+"""\
+Trajectory translation --- :mod:`MDAnalysis.transformations.translate`
+======================================================================
+
+Translate the coordinates of a given trajectory by a given vector.
+The vector can either be user defined, using the function :func:`translate`
+or defined by centering an AtomGroup in the unit cell using the function
+:func:`center_in_box`
+
+.. autoclass:: translate
+
+.. autoclass:: center_in_box
+
+
+"""
+import numpy as np
+from functools import partial
+
+from .base import TransformationBase
+
+
+
[docs]class translate(TransformationBase): + """ + Translates the coordinates of a given :class:`~MDAnalysis.coordinates.timestep.Timestep` + instance by a given vector. + + Example + ------- + .. code-block:: python + + ts = MDAnalysis.transformations.translate([1,2,3])(ts) + + Parameters + ---------- + vector: array-like + coordinates of the vector to which the coordinates will be translated + + Returns + ------- + :class:`~MDAnalysis.coordinates.timestep.Timestep` object + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, vector, + max_threads=None, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.vector = vector + + if len(self.vector) > 2: + self.vector = np.float32(self.vector) + else: + raise ValueError("{} vector is too short".format(self.vector)) + + def _transform(self, ts): + ts.positions += self.vector + return ts
+ + +
[docs]class center_in_box(TransformationBase): + """ + Translates the coordinates of a given :class:`~MDAnalysis.coordinates.timestep.Timestep` + instance so that the center of geometry/mass of the given :class:`~MDAnalysis.core.groups.AtomGroup` + is centered on the unit cell. The unit cell dimensions are taken from the input Timestep object. + If a point is given, the center of the atomgroup will be translated to this point instead. + + Example + ------- + + .. code-block:: python + + ag = u.residues[1].atoms + ts = MDAnalysis.transformations.center(ag,center='mass')(ts) + + Parameters + ---------- + ag: AtomGroup + atom group to be centered on the unit cell. + center: str, optional + used to choose the method of centering on the given atom group. Can be 'geometry' + or 'mass' + point: array-like, optional + overrides the unit cell center - the coordinates of the Timestep are translated so + that the center of mass/geometry of the given AtomGroup is aligned to this position + instead. Defined as an array of size 3. + wrap: bool, optional + If `True`, all the atoms from the given AtomGroup will be moved to the unit cell + before calculating the center of mass or geometry. Default is `False`, no changes + to the atom coordinates are done before calculating the center of the AtomGroup. + + Returns + ------- + :class:`~MDAnalysis.coordinates.timestep.Timestep` object + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, ag, center='geometry', point=None, wrap=False, + max_threads=None, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.ag = ag + self.center = center + self.point = point + self.wrap = wrap + + pbc_arg = self.wrap + if self.point: + self.point = np.asarray(self.point, np.float32) + if self.point.shape != (3, ) and self.point.shape != (1, 3): + raise ValueError('{} is not a valid point'.format(self.point)) + try: + if self.center == 'geometry': + self.center_method = partial(self.ag.center_of_geometry, + wrap=pbc_arg) + elif self.center == 'mass': + self.center_method = partial(self.ag.center_of_mass, + wrap=pbc_arg) + else: + raise ValueError(f'{self.center} is valid for center') + except AttributeError: + if self.center == 'mass': + errmsg = f'{self.ag} is not an AtomGroup object with masses' + raise AttributeError(errmsg) from None + else: + raise ValueError(f'{self.ag} is not an AtomGroup object') \ + from None + + def _transform(self, ts): + if self.point is None: + if ts.dimensions is None: + raise ValueError("Box is None") + boxcenter = np.sum(ts.triclinic_dimensions, axis=0) / 2 + else: + boxcenter = self.point + + ag_center = self.center_method() + + vector = boxcenter - ag_center + ts.positions += vector + + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/transformations/wrap.html b/2.7.0-dev0/_modules/MDAnalysis/transformations/wrap.html new file mode 100644 index 0000000000..052e24c1f6 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/transformations/wrap.html @@ -0,0 +1,318 @@ + + + + + + MDAnalysis.transformations.wrap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.transformations.wrap

+# -*- 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-2017 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.
+#
+# 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
+#
+
+"""\
+Wrap/unwrap transformations --- :mod:`MDAnalysis.transformations.wrap`
+======================================================================
+
+Wrap/unwrap the atoms of a given AtomGroup in the unit cell. :func:`wrap` 
+translates the atoms back in the unit cell. :func:`unwrap` translates the
+atoms of each molecule so that bons don't split over images.
+
+.. autoclass:: wrap
+
+.. autoclass:: unwrap
+
+"""
+
+from ..lib._cutil import make_whole
+
+from .base import TransformationBase
+
+
+
[docs]class wrap(TransformationBase): + """ + Shift the contents of a given AtomGroup back into the unit cell. :: + + +-----------+ +-----------+ + | | | | + | 3 | 6 | 6 3 | + | ! | ! | ! ! | + | 1-2-|-5-8 -> |-5-8 1-2-| + | ! | ! | ! ! | + | 4 | 7 | 7 4 | + | | | | + +-----------+ +-----------+ + + Example + ------- + + .. code-block:: python + + ag = u.atoms + transform = mda.transformations.wrap(ag) + u.trajectory.add_transformations(transform) + + Parameters + ---------- + + ag: Atomgroup + Atomgroup to be wrapped in the unit cell + compound : {'atoms', 'group', 'residues', 'segments', 'fragments'}, optional + The group which will be kept together through the shifting process. + + Notes + ----- + When specifying a `compound`, the translation is calculated based on + each compound. The same translation is applied to all atoms + within this compound, meaning it will not be broken by the shift. + This might however mean that not all atoms from the compound are + inside the unit cell, but rather the center of the compound is. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, ag, compound='atoms', + max_threads=None, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.ag = ag + self.compound = compound + + def _transform(self, ts): + self.ag.wrap(compound=self.compound) + return ts
+ + +
[docs]class unwrap(TransformationBase): + """ + Move all atoms in an AtomGroup so that bonds don't split over images + + Atom positions are modified in place. + + This function is most useful when atoms have been packed into the primary + unit cell, causing breaks mid molecule, with the molecule then appearing + on either side of the unit cell. This is problematic for operations + such as calculating the center of mass of the molecule. :: + + +-----------+ +-----------+ + | | | | + | 6 3 | | 3 | 6 + | ! ! | | ! | ! + |-5-8 1-2-| -> | 1-2-|-5-8 + | ! ! | | ! | ! + | 7 4 | | 4 | 7 + | | | | + +-----------+ +-----------+ + + Example + ------- + + .. code-block:: python + + ag = u.atoms + transform = mda.transformations.unwrap(ag) + u.trajectory.add_transformations(transform) + + Parameters + ---------- + atomgroup : AtomGroup + The :class:`MDAnalysis.core.groups.AtomGroup` to work with. + The positions of this are modified in place. + + Returns + ------- + MDAnalysis.coordinates.timestep.Timestep + + + .. versionchanged:: 2.0.0 + The transformation was changed from a function/closure to a class + with ``__call__``. + .. versionchanged:: 2.0.0 + The transformation was changed to inherit from the base class for + limiting threads and checking if it can be used in parallel analysis. + """ + def __init__(self, ag, max_threads=None, parallelizable=True): + super().__init__(max_threads=max_threads, + parallelizable=parallelizable) + + self.ag = ag + + try: + self.ag.fragments + except AttributeError: + raise AttributeError("{} has no fragments".format(self.ag)) + + def _transform(self, ts): + for frag in self.ag.fragments: + make_whole(frag) + return ts
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/units.html b/2.7.0-dev0/_modules/MDAnalysis/units.html new file mode 100644 index 0000000000..a71485e3ea --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/units.html @@ -0,0 +1,567 @@ + + + + + + MDAnalysis.units — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for MDAnalysis.units

+# -*- 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-2017 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
+#
+
+r"""
+Constants and unit conversion --- :mod:`MDAnalysis.units`
+===============================================================
+
+The base units of MDAnalysis trajectories are the **Å** (**ångström**) for
+**length** and **ps** (**pico second**) for **time**. By default, all positions
+are in Å and all times are in ps, regardless of how the MD code stored
+trajectory data. By default, MDAnalysis converts automatically to the
+MDAnalysis units when reading trajectories and converts back when writing. This
+makes it possible to write scripts that can be agnostic of the specifics of how
+a particular MD code stores trajectory data. Other base units are listed in the
+table on :ref:`table-baseunits`.
+
+.. _table-baseunits:
+
+.. Table:: Base units in MDAnalysis as encoded in :data:`MDANALYSIS_BASE_UNITS`
+
+   =========== ============== ===============================================
+   quantity    unit            SI units
+   =========== ============== ===============================================
+   length       Å              :math:`10^{-10}` m
+   time         ps             :math:`10^{-12}` s
+   energy       kJ/mol         :math:`1.66053892103219 \times 10^{-21}` J
+   charge       :math:`e`      :math:`1.602176565 \times 10^{-19}` As
+   force        kJ/(mol·Å)     :math:`1.66053892103219 \times 10^{-11}` J/m
+   speed        Å/ps           :math:`100` m/s
+   =========== ============== ===============================================
+
+Implementation notes
+--------------------
+
+All conversions with :func:`convert` are carried out in a simple fashion: the
+conversion factor :math:`f_{b,b'}` from the base unit :math:`b` to another unit
+:math:`b'` is precomputed and stored (see :ref:`Data`). The numerical value of
+a quantity in unit :math:`b` is :math:`X/b` (e.g. for :math:`X =
+1.23\,\mathrm{ps}`, the numerical value is :math:`X/\mathrm{ps} =
+1.23`). [#funits]_
+
+The new numerical value :math:`X'/b'` of the quantity (in units of :math:`b'`)
+is then
+
+.. math::
+
+   X'/b' = f_{b,b'} X/b
+
+The function :func:`get_conversion_factor` returns the appropriate factor
+:math:`f_{b,b'}`.
+
+Conversion between different units is always carried out via the base unit as
+an intermediate step::
+
+    x is in u1: from u1 to b:  x'  = x  / factor[u1]
+                from b  to u2: x'' = x' * factor[u2]
+    so f[u1,u2] = factor[u2]/factor[u1]
+
+
+Conversions
+~~~~~~~~~~~
+
+Examples for how to calculate some of the conversion factors that are
+hard-coded in :mod:`~MDAnalysis.units` (see :ref:`Data`).
+
+density:
+  Base unit is :math:`\mathrm{Å}^{-3}`::
+
+     n/x = n/A**3 * densityUnit_factor[x]
+
+  Example for how to calculate the conversion factor
+  :math:`f_{\mathrm{Å}^{-3},\mathrm{nm}^{-3}}` from :math:`\mathrm{Å}^{-3}` to
+  :math:`\mathrm{nm}^{-3}`:
+
+  .. math::
+
+     f_{\mathrm{Å}^{-3},\mathrm{nm}^{-3}}
+           = \frac{1\,\mathrm{nm}^{-3}}{1\,\mathrm{Å}^{-3}}
+           = \frac{(10\,\mathrm{Å})^{-3}}{1\,\mathrm{Å}^{-3}}
+           = 10^{-3}
+
+concentration:
+  Example for how to convert the conversion factor to Molar (mol/l)::
+
+     factor = 1 A**-3 / (N_Avogadro * (10**-9 dm)**-3)
+
+  relative to a density rho0 in :math:`g/cm^3`::
+
+    M(H2O) = 18 g/mol   Molar mass of water
+
+    factor = 1/(1e-24 * N_Avogadro / M(H2O))
+
+  from :math:`\rho/\rho_0 = n/(N_A * M^{-1}) / \rho_0`
+
+  where :math:`[n] = 1/Volume`, :math:`[\rho] = mass/Volume`
+
+
+Note
+----
+In the future we might move towards using the Quantities_ package or
+:mod:`scipy.constants`.
+
+
+.. _Quantities: http://packages.python.org/quantities/
+
+Functions
+---------
+
+.. autofunction:: get_conversion_factor
+.. autofunction:: convert
+
+.. _Data:
+
+Data
+----
+
+.. autodata:: MDANALYSIS_BASE_UNITS
+.. autodata:: constants
+.. autodata:: lengthUnit_factor
+.. autodata:: water
+.. autodata:: densityUnit_factor
+.. autodata:: timeUnit_factor
+.. autodata:: speedUnit_factor
+.. autodata:: forceUnit_factor
+.. autodata:: chargeUnit_factor
+.. autodata:: conversion_factor
+.. autodata:: unit_types
+
+
+References and footnotes
+------------------------
+
+.. bibliography::
+   :filter: False
+   :style: MDA
+
+   Jorgensen1998
+
+.. _AKMA: http://www.charmm.org/documentation/c37b1/usage.html#%20AKMA
+.. _electron charge: http://physics.nist.gov/cgi-bin/cuu/Value?e
+.. _`Avogadro's constant`: http://physics.nist.gov/cgi-bin/cuu/Value?na
+
+.. Rubric:: Footnotes
+
+.. [#funits] One can also consider the conversion factor to carry
+   units :math:`b'/b`, in which case the conversion formula would
+   become
+
+   .. math::
+
+      X' = f_{b,b'} X
+
+"""
+
+import warnings
+
+
+# Remove in 2.8.0
+class DeprecatedKeyAccessDict(dict):
+    deprecated_kB = 'Boltzman_constant'
+
+    def __getitem__(self, key):
+        if key == self.deprecated_kB:
+            wmsg = ("Please use 'Boltzmann_constant' henceforth. The key "
+                    "'Boltzman_constant' was a typo and will be removed "
+                    "in MDAnalysis 2.8.0.")
+            warnings.warn(wmsg, DeprecationWarning)
+            key = 'Boltzmann_constant'
+        return super().__getitem__(key)
+
+
+#
+# NOTE: Whenever a constant is added to the constants dict, you also
+#       MUST add an appropriate entry to
+#       test_units:TestConstants.constants_reference !
+
+#: Values of physical constants are taken from `CODATA 2010 at NIST`_. The
+#: thermochemical calorie is defined in the `ISO 80000-5:2007`_ standard
+#: and is also listed in the `NIST Guide to SI: Appendix B.8: Factors for Units`_.
+#:
+#: .. _`CODATA 2010 at NIST`:
+#:    http://physics.nist.gov/cuu/Constants/
+#: .. _`ISO 80000-5:2007`:
+#:    http://www.iso.org/iso/catalogue_detail?csnumber=31890
+#: .. _`NIST Guide to SI: Appendix B.8: Factors for Units`:
+#:    http://physics.nist.gov/Pubs/SP811/appenB8.html#C
+#:
+#: .. versionadded:: 0.9.0
+constants = DeprecatedKeyAccessDict({
+    'N_Avogadro': 6.02214129e+23,          # mol**-1
+    'elementary_charge': 1.602176565e-19,  # As
+    'calorie': 4.184,                      # J
+    'Boltzmann_constant': 8.314462159e-3,   # KJ (mol K)**-1
+    'electric_constant': 5.526350e-3,      # As (Angstroms Volts)**-1
+})
+
+#: The basic unit of *length* in MDAnalysis is the Angstrom.
+#: Conversion factors between the base unit and other lengthUnits *x* are stored.
+#: Conversions follow `L/x = L/Angstrom * lengthUnit_factor[x]`.
+#: *x* can be *nm*/*nanometer* or *fm*.
+lengthUnit_factor = {
+    'Angstrom': 1.0, 'A': 1.0, 'angstrom': 1.0,
+    u'\u212b': 1.0,   # Unicode and UTF-8 encoded symbol for angstroms
+    'nm': 1.0 / 10, 'nanometer': 1.0 / 10,
+    'pm': 1e2, 'picometer': 1e2,
+    'fm': 1e5, 'femtometer': 1e5,
+}
+
+
+#: water density values at T=298K, P=1atm :cite:p:`Jorgensen1998`.
+#:  ======== =========
+#:  model    g cm**-3
+#:  ======== =========
+#:    SPC     0.985(1)
+#:    TIP3P   1.002(1)
+#:    TIP4P   1.001(1)
+#:    exp     0.997
+#:  ======== =========
+#:
+#: and molar mass 18.016 g mol**-1.
+water = {
+    'exp': 0.997, 'SPC': 0.985, 'TIP3P': 1.002, 'TIP4P': 1.001,  # in g cm**-3
+    'MolarMass': 18.016,  # in g mol**-1
+}
+
+#: The basic unit for *densities* is Angstrom**(-3), i.e.
+#: the volume per molecule in A**3. Especially for water
+#: it can be convenient to measure the density relative to bulk, and
+#: hence a number of values are pre-stored in :data:`water`.
+densityUnit_factor = {
+    'Angstrom^{-3}': 1 / 1.0, 'A^{-3}': 1 / 1.0,
+    '\u212b^{-3}': 1 / 1.0,
+    'nm^{-3}': 1 / 1e-3, 'nanometer^{-3}': 1 / 1e-3,
+    'Molar': 1 / (1e-27 * constants['N_Avogadro']),
+    'SPC': 1 / (1e-24 * constants['N_Avogadro'] * water['SPC'] / water['MolarMass']),
+    'TIP3P': 1 / (1e-24 * constants['N_Avogadro'] * water['TIP3P'] / water['MolarMass']),
+    'TIP4P': 1 / (1e-24 * constants['N_Avogadro'] * water['TIP4P'] / water['MolarMass']),
+    'water': 1 / (1e-24 * constants['N_Avogadro'] * water['exp'] / water['MolarMass']),
+}
+
+
+#: For *time*, the basic unit is ps; in particular CHARMM's
+#: 1 AKMA_ time unit = 4.888821E-14 sec is supported.
+timeUnit_factor = {
+    'ps': 1.0, 'picosecond': 1.0,  # 1/1.0
+    'fs': 1e3, 'femtosecond': 1e3,  # 1/1e-3,
+    'ns': 1e-3, 'nanosecond': 1e-3,  # 1/1e3,
+    'ms': 1e-9, 'millisecond': 1e-9,  # 1/1e9,
+    'us': 1e-6, 'microsecond': 1e-6, '\u03BCs': 1e-6,  # 1/1e6,
+    'second': 1e-12, 'sec': 1e-12, 's': 1e-12,  # 1/1e12,
+    'AKMA': 1 / 4.888821e-2,
+}
+# getting the factor f:  1200ps * f = 1.2 ns  ==> f = 1/1000 ns/ps
+
+#: For *speed*, the basic unit is Angstrom/ps.
+speedUnit_factor = {
+    'Angstrom/ps': 1.0, 'A/ps': 1.0, '\u212b/ps': 1.0,
+    'Angstrom/picosecond': 1.0,
+    'angstrom/picosecond': 1.0,  # 1
+    'Angstrom/fs': 1.0 * 1e3,
+    'Angstrom/femtosecond': 1.0 * 1e3,
+    'angstrom/femtosecond': 1.0 * 1e3,
+    'angstrom/fs': 1.0 * 1e3,
+    'A/fs': 1.0 * 1e3,
+    'Angstrom/ms': 1.0 * 1e-9,
+    'Angstrom/millisecond': 1.0 * 1e-9,
+    'angstrom/millisecond': 1.0 * 1e-9,
+    'angstrom/ms': 1.0 * 1e-9,
+    'A/ms': 1.0 * 1e-9,
+    'Angstrom/us': 1.0 * 1e-6,
+    'angstrom/us': 1.0 * 1e-6,
+    'A/us': 1.0 * 1e-6,
+    'Angstrom/microsecond': 1.0 * 1e-6,
+    'angstrom/microsecond': 1.0 * 1e-6,
+    'Angstrom/\u03BCs': 1.0 * 1e-6,
+    'angstrom/\u03BCs': 1.0 * 1e-6,
+    'Angstrom/AKMA': 4.888821e-2,
+    'A/AKMA': 4.888821e-2,
+    'nm/ps': 0.1, 'nanometer/ps': 0.1, 'nanometer/picosecond': 0.1,  # 1/10
+    'nm/ns': 0.1 / 1e-3,
+    'pm/ps': 1e2,
+    'm/s': 1e-10 / 1e-12,
+}
+# (TODO: build this combinatorically from lengthUnit and timeUnit)
+
+#: *Energy* is measured in kJ/mol.
+energyUnit_factor = {
+    'kJ/mol': 1.0,
+    'kcal/mol': 1/constants['calorie'],
+    'J': 1e3/constants['N_Avogadro'],
+    'eV': 1e3/(constants['N_Avogadro'] * constants['elementary_charge']),
+    }
+
+#: For *force* the basic unit is kJ/(mol*Angstrom).
+forceUnit_factor = {
+    'kJ/(mol*Angstrom)': 1.0, 'kJ/(mol*A)': 1.0,
+    'kJ/(mol*\u212b)': 1.0,
+    'kJ/(mol*nm)': 10.0,
+    'Newton': 1e13/constants['N_Avogadro'],
+    'N': 1e13/constants['N_Avogadro'],
+    'J/m': 1e13/constants['N_Avogadro'],
+    'kcal/(mol*Angstrom)': 1/constants['calorie'],
+}
+# (TODO: build this combinatorically from lengthUnit and energyUnit)
+
+#: *Charge* is measured in multiples of the `electron charge`_ *e*, with the value
+#: *elementary_charge* in :data:`constants`.
+#: The `conversion factor to Amber charge units`_ is 18.2223.
+#:
+#: .. _`conversion factor to Amber charge units`: http://ambermd.org/formats.html#parm
+#:
+#: .. versionchanged:: 0.9.0
+#:    Use CODATA 2010 value for *elementary charge*, which differs from the previously used value
+#:    *e* =  1.602176487 x 10**(-19) C by 7.8000000e-27 C.
+chargeUnit_factor = {
+    'e': 1.0,
+    'Amber': 18.2223,  # http://ambermd.org/formats.html#parm
+    'C': constants['elementary_charge'], 'As': constants['elementary_charge'],
+}
+
+#: :data:`conversion_factor` is used by :func:`get_conversion_factor`
+#: NOTE: any observable with a unit (i.e. one with an entry in
+#: the :attr:`unit` attribute) needs an entry in :data:`conversion_factor`
+conversion_factor = {
+    'length': lengthUnit_factor,
+    'density': densityUnit_factor,
+    'time': timeUnit_factor,
+    'charge': chargeUnit_factor,
+    'speed': speedUnit_factor,
+    'force': forceUnit_factor,
+    'energy': energyUnit_factor,
+}
+
+#: Generated lookup table (dict): returns the type of unit for a known input unit.
+#: Note: Any unit must be *unique* because this dict is used to guess the
+#: unit type.
+unit_types = {}
+for utype, ufactor in conversion_factor.items():
+    for unit in ufactor.keys():
+        assert not unit in unit_types  # see comment!
+        unit_types[unit] = utype
+
+#: Lookup table for base units in MDAnalysis by unit type.
+MDANALYSIS_BASE_UNITS = {"length": "A",
+                         "time": "ps",
+                         "energy": "kJ/mol",
+                         "charge": "e",
+                         "force": "kJ/(mol*A)",
+                         "speed": "A/ps"}
+
+
+
[docs]def get_conversion_factor(unit_type, u1, u2): + """generate the conversion factor u1 -> u2 by using the base unit as an intermediate + + f[u1 -> u2] = factor[u2]/factor[u1] + + Conversion of :math:`X` (in u1) to :math:`X'` (in u2): + + :math:`X'` = conversion_factor * :math:`X` + """ + # x is in u1: from u1 to b: x' = x / factor[u1] + # from b to u2: x'' = x' * factor[u2] + # so f[u1,u2] = factor[u2]/factor[u1] + return conversion_factor[unit_type][u2] / conversion_factor[unit_type][u1]
+ + +
[docs]def convert(x, u1, u2): + """Convert value *x* in unit *u1* to new value in *u2*. + + Returns + ------- + float + Converted value. + + Raises + ------ + ValueError + The units are not known or if one attempts to convert between + incompatible units. + """ + try: + ut1 = unit_types[u1] + except KeyError: + errmsg = (f"unit '{u1}' not recognized.\n" + f"It must be one of {', '.join(unit_types)}.") + raise ValueError(errmsg) from None + + try: + ut2 = unit_types[u2] + except KeyError: + errmsg = (f"unit '{u2}' not recognized.\n" + f"It must be one of {', '.join(unit_types)}.") + raise ValueError(errmsg) from None + if ut1 != ut2: + raise ValueError("Cannot convert between unit types " + "{0} --> {1}".format(u1, u2)) + return x * get_conversion_factor(ut1, u1, u2)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines.html b/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines.html new file mode 100644 index 0000000000..edbec0df11 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines.html @@ -0,0 +1,516 @@ + + + + + + MDAnalysis.visualization.streamlines — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.visualization.streamlines

+# -*- 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-2017 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
+#
+
+"""Streamplots (2D)  --- :mod:`MDAnalysis.visualization.streamlines`
+=================================================================
+
+:Authors: Tyler Reddy and Matthieu Chavent
+:Year: 2014
+:Copyright: GNU Public License v3
+
+
+The :func:`generate_streamlines` function can generate a 2D flow field from a
+MD trajectory, for instance, lipid molecules in a flat membrane. It can make
+use of multiple cores to perform the analyis in parallel (using
+:mod:`multiprocessing`).
+
+See Also
+--------
+MDAnalysis.visualization.streamlines_3D : streamplots in 3D
+
+
+.. autofunction:: generate_streamlines
+
+"""
+import multiprocessing
+
+import numpy as np
+import scipy
+
+try:
+    import matplotlib
+    import matplotlib.path
+except ImportError:
+    raise ImportError(
+            '2d streamplot module requires: matplotlib.path for its '
+            'path.Path.contains_points method. The installation '
+            'instructions for the matplotlib module can be found here: '
+            'http://matplotlib.org/faq/installing_faq.html?highlight=install'
+            ) from None
+
+import MDAnalysis
+
+
+
+def produce_grid(tuple_of_limits, grid_spacing):
+    """Produce a 2D grid for the simulation system.
+
+    The grid is based on the tuple of Cartesian Coordinate limits calculated in
+    an earlier step.
+
+    Parameters
+    ----------
+    tuple_of_limits : tuple
+        ``x_min, x_max, y_min, y_max``
+    grid_spacing : float
+        grid size in all directions in ångström
+
+    Returns
+    -------
+    grid : array
+       ``numpy.mgrid[x_min:x_max:grid_spacing, y_min:y_max:grid_spacing]``
+    """
+    x_min, x_max, y_min, y_max = tuple_of_limits
+    grid = np.mgrid[x_min:x_max:grid_spacing, y_min:y_max:grid_spacing]
+    return grid
+
+
+def split_grid(grid, num_cores):
+    """Split the grid into blocks of vertices.
+
+    Take the overall `grid` for the system and split it into lists of
+    square vertices that can be distributed to each core.
+
+    Parameters
+    ----------
+    grid : numpy.array
+        2D array
+    num_cores : int
+        number of partitions to generate
+
+    Returns
+    -------
+    list_square_vertex_arrays_per_core : array of arrays
+         split the list of square vertices
+         ``[[v1,v2,v3,v4],[v1,v2,v3,v4],...,...]`` into roughly equally-sized
+         sublists to be distributed over the available cores on the system
+    list_parent_index_values : array of arrays
+         arrays of `[[row, column], [row, column], ...]`` for each core
+    current_row : int
+         last row + 1
+    current_column : int
+         last column + 1
+
+    Note
+    ----
+    Limited to 2D for now.
+
+    """
+
+    # produce an array containing the cartesian coordinates of all vertices in the grid:
+    x_array, y_array = grid
+    grid_vertex_cartesian_array = np.dstack((x_array, y_array))
+    #the grid_vertex_cartesian_array has N_rows, with each row corresponding to a column of coordinates in the grid (
+    # so a given row has shape N_rows, 2); overall shape (N_columns_in_grid, N_rows_in_a_column, 2)
+    #although I'll eventually want a pure numpy/scipy/vector-based solution, for now I'll allow loops to simplify the
+    #  division of the cartesian coordinates into a list of the squares in the grid
+    list_all_squares_in_grid = []  # should eventually be a nested list of all the square vertices in the grid/system
+    list_parent_index_values = []  # want an ordered list of assignment indices for reconstructing the grid positions
+    # in the parent process
+    current_column = 0
+    while current_column < grid_vertex_cartesian_array.shape[0] - 1:
+        # go through all the columns except the last one and account for the square vertices (the last column
+        #  has no 'right neighbour')
+        current_row = 0
+        while current_row < grid_vertex_cartesian_array.shape[1] - 1:
+            # all rows except the top row, which doesn't have a row above it for forming squares
+            bottom_left_vertex_current_square = grid_vertex_cartesian_array[current_column, current_row]
+            bottom_right_vertex_current_square = grid_vertex_cartesian_array[current_column + 1, current_row]
+            top_right_vertex_current_square = grid_vertex_cartesian_array[current_column + 1, current_row + 1]
+            top_left_vertex_current_square = grid_vertex_cartesian_array[current_column, current_row + 1]
+            #append the vertices of this square to the overall list of square vertices:
+            list_all_squares_in_grid.append(
+                [bottom_left_vertex_current_square, bottom_right_vertex_current_square, top_right_vertex_current_square,
+                    top_left_vertex_current_square])
+            list_parent_index_values.append([current_row, current_column])
+            current_row += 1
+        current_column += 1
+    #split the list of square vertices [[v1,v2,v3,v4],[v1,v2,v3,v4],...,...] into roughly equally-sized sublists to
+    # be distributed over the available cores on the system:
+    list_square_vertex_arrays_per_core = np.array_split(list_all_squares_in_grid, num_cores)
+    list_parent_index_values = np.array_split(list_parent_index_values, num_cores)
+    return [list_square_vertex_arrays_per_core, list_parent_index_values, current_row, current_column]
+
+
+def per_core_work(topology_file_path, trajectory_file_path, list_square_vertex_arrays_this_core, MDA_selection,
+                  start_frame, end_frame, reconstruction_index_list, maximum_delta_magnitude):
+    """Run the analysis on one core.
+
+    The code to perform on a given core given the list of square vertices assigned to it.
+    """
+    # obtain the relevant coordinates for particles of interest
+    universe_object = MDAnalysis.Universe(topology_file_path, trajectory_file_path)
+    list_previous_frame_centroids = []
+    list_previous_frame_indices = []
+    #define some utility functions for trajectory iteration:
+
+    def produce_list_indices_point_in_polygon_this_frame(vertex_coord_list):
+        list_indices_point_in_polygon = []
+        for square_vertices in vertex_coord_list:
+            path_object = matplotlib.path.Path(square_vertices)
+            index_list_in_polygon = np.where(path_object.contains_points(relevant_particle_coordinate_array_xy))
+            list_indices_point_in_polygon.append(index_list_in_polygon)
+        return list_indices_point_in_polygon
+
+    def produce_list_centroids_this_frame(list_indices_in_polygon):
+        list_centroids_this_frame = []
+        for indices in list_indices_in_polygon:
+            if not indices[0].size > 0:  # if there are no particles of interest in this particular square
+                list_centroids_this_frame.append(None)
+            else:
+                current_coordinate_array_in_square = relevant_particle_coordinate_array_xy[indices]
+                current_square_indices_centroid = np.average(current_coordinate_array_in_square, axis=0)
+                list_centroids_this_frame.append(current_square_indices_centroid)
+        return list_centroids_this_frame  # a list of numpy xy centroid arrays for this frame
+
+    for ts in universe_object.trajectory:
+        if ts.frame < start_frame:  # don't start until first specified frame
+            continue
+        relevant_particle_coordinate_array_xy = universe_object.select_atoms(MDA_selection).positions[..., :-1]
+        # only 2D / xy coords for now
+        #I will need a list of indices for relevant particles falling within each square in THIS frame:
+        list_indices_in_squares_this_frame = produce_list_indices_point_in_polygon_this_frame(
+            list_square_vertex_arrays_this_core)
+        #likewise, I will need a list of centroids of particles in each square (same order as above list):
+        list_centroids_in_squares_this_frame = produce_list_centroids_this_frame(list_indices_in_squares_this_frame)
+        if list_previous_frame_indices:  # if the previous frame had indices in at least one square I will need to use
+            #  those indices to generate the updates to the corresponding centroids in this frame:
+            list_centroids_this_frame_using_indices_from_last_frame = produce_list_centroids_this_frame(
+                list_previous_frame_indices)
+            #I need to write a velocity of zero if there are any 'empty' squares in either frame:
+            xy_deltas_to_write = []
+            for square_1_centroid, square_2_centroid in zip(list_centroids_this_frame_using_indices_from_last_frame,
+                                                            list_previous_frame_centroids):
+                if square_1_centroid is None or square_2_centroid is None:
+                    xy_deltas_to_write.append([0, 0])
+                else:
+                    xy_deltas_to_write.append(np.subtract(square_1_centroid, square_2_centroid).tolist())
+
+            #xy_deltas_to_write = np.subtract(np.array(
+            # list_centroids_this_frame_using_indices_from_last_frame),np.array(list_previous_frame_centroids))
+            xy_deltas_to_write = np.array(xy_deltas_to_write)
+            #now filter the array to only contain distances in the range [-8,8] as a placeholder for dealing with PBC
+            #  issues (Matthieu seemed to use a limit of 8 as well);
+            xy_deltas_to_write = np.clip(xy_deltas_to_write, -maximum_delta_magnitude, maximum_delta_magnitude)
+
+            #with the xy and dx,dy values calculated I need to set the values from this frame to previous frame
+            # values in anticipation of the next frame:
+            list_previous_frame_centroids = list_centroids_in_squares_this_frame[:]
+            list_previous_frame_indices = list_indices_in_squares_this_frame[:]
+        else:  # either no points in squares or after the first frame I'll just reset the 'previous' values so they
+            # can be used when consecutive frames have proper values
+            list_previous_frame_centroids = list_centroids_in_squares_this_frame[:]
+            list_previous_frame_indices = list_indices_in_squares_this_frame[:]
+        if ts.frame > end_frame:
+            break  # stop here
+    return list(zip(reconstruction_index_list, xy_deltas_to_write.tolist()))
+
+
+
[docs]def generate_streamlines(topology_file_path, trajectory_file_path, grid_spacing, MDA_selection, start_frame, + end_frame, xmin, xmax, ymin, ymax, maximum_delta_magnitude, num_cores='maximum'): + r"""Produce the x and y components of a 2D streamplot data set. + + Parameters + ---------- + topology_file_path : str + Absolute path to the topology file + trajectory_file_path : str + Absolute path to the trajectory file. It will normally be desirable + to filter the trajectory with a tool such as GROMACS + :program:`g_filter` (see :cite:p:`a-Chavent2014`) + grid_spacing : float + The spacing between grid lines (angstroms) + MDA_selection : str + MDAnalysis selection string + start_frame : int + First frame number to parse + end_frame : int + Last frame number to parse + xmin : float + Minimum coordinate boundary for x-axis (angstroms) + xmax : float + Maximum coordinate boundary for x-axis (angstroms) + ymin : float + Minimum coordinate boundary for y-axis (angstroms) + ymax : float + Maximum coordinate boundary for y-axis (angstroms) + maximum_delta_magnitude : float + Absolute value of the largest displacement tolerated for the + centroid of a group of particles ( angstroms). Values above this + displacement will not count in the streamplot (treated as + excessively large displacements crossing the periodic boundary) + num_cores : int or 'maximum' (optional) + The number of cores to use. (Default 'maximum' uses all available + cores) + + Returns + ------- + dx_array : array of floats + An array object containing the displacements in the x direction + dy_array : array of floats + An array object containing the displacements in the y direction + average_displacement : float + :math:`\frac{\sum\sqrt[]{dx^2 + dy^2}}{N}` + standard_deviation_of_displacement : float + standard deviation of :math:`\sqrt[]{dx^2 + dy^2}` + + Examples + -------- + Generate 2D streamlines and plot:: + + import matplotlib, matplotlib.pyplot, np + import MDAnalysis, MDAnalysis.visualization.streamlines + + u1, v1, average_displacement, standard_deviation_of_displacement = + MDAnalysis.visualization.streamlines.generate_streamlines('testing.gro', 'testing_filtered.xtc', + grid_spacing=20, MDA_selection='name PO4', start_frame=2, end_frame=3, + xmin=-8.73000049591, xmax= 1225.96008301, + ymin= -12.5799999237, ymax=1224.34008789, + maximum_delta_magnitude=1.0, num_cores=16) + x = np.linspace(0, 1200, 61) + y = np.linspace(0, 1200, 61) + speed = np.sqrt(u1*u1 + v1*v1) + fig = matplotlib.pyplot.figure() + ax = fig.add_subplot(111, aspect='equal') + ax.set_xlabel('x ($\AA$)') + ax.set_ylabel('y ($\AA$)') + ax.streamplot(x, y, u1, v1, density=(10,10), color=speed, linewidth=3*speed/speed.max()) + fig.savefig('testing_streamline.png',dpi=300) + + .. image:: testing_streamline.png + + + References + ---------- + .. bibliography:: + :filter: False + :style: MDA + :keyprefix: a- + :labelprefix: ᵃ + + Chavent2014 + + + See Also + -------- + MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d + + """ + # work out the number of cores to use: + if num_cores == 'maximum': + num_cores = multiprocessing.cpu_count() # use all available cores + else: + num_cores = num_cores # use the value specified by the user + #assert isinstance(num_cores,(int,long)), "The number of specified cores must (of course) be an integer." + np.seterr(all='warn', over='raise') + parent_list_deltas = [] # collect all data from child processes here + + def log_result_to_parent(delta_array): + parent_list_deltas.extend(delta_array) + + tuple_of_limits = (xmin, xmax, ymin, ymax) + grid = produce_grid(tuple_of_limits=tuple_of_limits, grid_spacing=grid_spacing) + list_square_vertex_arrays_per_core, list_parent_index_values, total_rows, total_columns = \ + split_grid(grid=grid, + num_cores=num_cores) + pool = multiprocessing.Pool(num_cores) + for vertex_sublist, index_sublist in zip(list_square_vertex_arrays_per_core, list_parent_index_values): + pool.apply_async(per_core_work, args=( + topology_file_path, trajectory_file_path, vertex_sublist, MDA_selection, start_frame, end_frame, + index_sublist, maximum_delta_magnitude), callback=log_result_to_parent) + pool.close() + pool.join() + dx_array = np.zeros((total_rows, total_columns)) + dy_array = np.zeros((total_rows, total_columns)) + #the parent_list_deltas is shaped like this: [ ([row_index,column_index],[dx,dy]), ... (...),...,] + for index_array, delta_array in parent_list_deltas: # go through the list in the parent process and assign to the + # appropriate positions in the dx and dy matrices: + #build in a filter to replace all values at the cap (currently between -8,8) with 0 to match Matthieu's code + # (I think eventually we'll reduce the cap to a narrower boundary though) + index_1 = index_array.tolist()[0] + index_2 = index_array.tolist()[1] + if abs(delta_array[0]) == maximum_delta_magnitude: + dx_array[index_1, index_2] = 0 + else: + dx_array[index_1, index_2] = delta_array[0] + if abs(delta_array[1]) == maximum_delta_magnitude: + dy_array[index_1, index_2] = 0 + else: + dy_array[index_1, index_2] = delta_array[1] + + #at Matthieu's request, we now want to calculate the average and standard deviation of the displacement values: + displacement_array = np.sqrt(dx_array ** 2 + dy_array ** 2) + average_displacement = np.average(displacement_array) + standard_deviation_of_displacement = np.std(displacement_array) + + return (dx_array, dy_array, average_displacement, standard_deviation_of_displacement)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.html b/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.html new file mode 100644 index 0000000000..fa827d75b0 --- /dev/null +++ b/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.html @@ -0,0 +1,669 @@ + + + + + + MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +

Source code for MDAnalysis.visualization.streamlines_3D

+# -*- 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-2017 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
+#
+
+"""Streamplots (3D) --- :mod:`MDAnalysis.visualization.streamlines_3D`
+===================================================================
+
+:Authors: Tyler Reddy and Matthieu Chavent
+:Year: 2014
+:Copyright: GNU Public License v3
+
+
+The :func:`generate_streamlines_3d` function can generate a 3D flow field from
+a MD trajectory, for instance, lipid molecules in a virus capsid. It can make
+use of multiple cores to perform the analyis in parallel (using
+:mod:`multiprocessing`).
+
+.. rubric: References
+
+.. bibliography::
+    :filter: False
+    :style: MDA
+    :keyprefix: b-
+    :labelprefix: ᵇ
+
+    Chavent2014
+
+See Also
+--------
+MDAnalysis.visualization.streamlines : streamplots in 2D
+
+
+.. autofunction:: generate_streamlines_3d
+
+"""
+import multiprocessing
+
+import numpy as np
+import numpy.testing
+import scipy
+import scipy.spatial.distance
+
+import MDAnalysis
+
+
+def determine_container_limits(topology_file_path, trajectory_file_path,
+                               buffer_value):
+    """Calculate the extent of the atom coordinates + buffer.
+
+    A function for the parent process which should take the input trajectory
+    and calculate the limits of the container for the system and return these
+    limits.
+
+    Parameters
+    ----------
+    topology_file_path : str
+        topology file name
+    trajectory_file_path : str
+        trajectory file name
+    buffer_value : float
+        buffer value (padding) in +/- {x, y, z}
+    """
+    universe_object = MDAnalysis.Universe(topology_file_path, trajectory_file_path)
+    all_atom_selection = universe_object.select_atoms('all')  # select all particles
+    all_atom_coordinate_array = all_atom_selection.positions
+    x_min, x_max, y_min, y_max, z_min, z_max = [
+        all_atom_coordinate_array[..., 0].min(),
+        all_atom_coordinate_array[..., 0].max(), all_atom_coordinate_array[..., 1].min(),
+        all_atom_coordinate_array[..., 1].max(), all_atom_coordinate_array[..., 2].min(),
+        all_atom_coordinate_array[..., 2].max()]
+    tuple_of_limits = \
+        (
+            x_min - buffer_value,
+            x_max + buffer_value, y_min - buffer_value, y_max + buffer_value, z_min - buffer_value,
+            z_max + buffer_value)  # using buffer_value to catch particles near edges
+    return tuple_of_limits
+
+
+def produce_grid(tuple_of_limits, grid_spacing):
+    """Produce a 3D grid for the simulation system.
+
+    The partitioning is based on the tuple of Cartesian Coordinate limits
+    calculated in an earlier step.
+
+    Parameters
+    ----------
+    tuple_of_limits : tuple
+        ``x_min, x_max, y_min, y_max, z_min, z_max``
+    grid_spacing : float
+        grid size in all directions in ångström
+
+    Returns
+    -------
+    grid : array
+        ``numpy.mgrid[x_min:x_max:grid_spacing, y_min:y_max:grid_spacing, z_min:z_max:grid_spacing]``
+
+    """
+    x_min, x_max, y_min, y_max, z_min, z_max = tuple_of_limits
+    grid = np.mgrid[x_min:x_max:grid_spacing, y_min:y_max:grid_spacing, z_min:z_max:grid_spacing]
+    return grid
+
+
+def split_grid(grid, num_cores):
+    """Split the grid into blocks of vertices.
+
+    Take the overall `grid` for the system and split it into lists of cube
+    vertices that can be distributed to each core.
+
+    Parameters
+    ----------
+    grid : numpy.array
+        3D array
+    num_cores : int
+        number of partitions to generate
+
+    Returns
+    -------
+    list_dictionaries_for_cores : list of dict
+    total_cubes : int
+    num_sheets : int
+    delta_array_shape : tuple
+
+    """
+    # unpack the x,y,z mgrid arrays
+    x, y, z = grid
+    num_z_values = z.shape[-1]
+    num_sheets = z.shape[0]
+    delta_array_shape = tuple(
+        [n - 1 for n in x.shape])  # the final target shape for return delta arrays is n-1 in each dimension
+
+    ordered_list_per_sheet_x_values = []
+    for x_sheet in x:  # each x_sheet should have shape (25,23) and the same x value in each element
+        array_all_x_values_current_sheet = x_sheet.flatten()
+        ordered_list_per_sheet_x_values.append(array_all_x_values_current_sheet)
+    ordered_list_per_sheet_y_values = []
+    for y_columns in y:
+        array_all_y_values_current_sheet = y_columns.flatten()
+        ordered_list_per_sheet_y_values.append(array_all_y_values_current_sheet)
+    ordered_list_per_sheet_z_values = []
+    for z_slices in z:
+        array_all_z_values_current_sheet = z_slices.flatten()
+        ordered_list_per_sheet_z_values.append(array_all_z_values_current_sheet)
+
+    ordered_list_cartesian_coordinates_per_sheet = []
+    for x_sheet_coords, y_sheet_coords, z_sheet_coords in zip(ordered_list_per_sheet_x_values,
+                                                              ordered_list_per_sheet_y_values,
+                                                              ordered_list_per_sheet_z_values):
+        ordered_list_cartesian_coordinates_per_sheet.append(list(zip(x_sheet_coords, y_sheet_coords, z_sheet_coords)))
+    array_ordered_cartesian_coords_per_sheet = np.array(ordered_list_cartesian_coordinates_per_sheet)
+    #now I'm going to want to build cubes in an ordered fashion, and in such a way that I can track the index /
+    # centroid of each cube for domain decomposition / reconstruction and mayavi mlab.flow() input
+    #cubes will be formed from N - 1 base sheets combined with subsequent sheets
+    current_base_sheet = 0
+    dictionary_cubes_centroids_indices = {}
+    cube_counter = 0
+    while current_base_sheet < num_sheets - 1:
+        current_base_sheet_array = array_ordered_cartesian_coords_per_sheet[current_base_sheet]
+        current_top_sheet_array = array_ordered_cartesian_coords_per_sheet[
+            current_base_sheet + 1]  # the points of the sheet 'to the right' in the grid
+        current_index = 0
+        while current_index < current_base_sheet_array.shape[0] - num_z_values:
+            # iterate through all the indices in each of the sheet arrays (careful to avoid extra
+            # points not needed for cubes)
+            column_z_level = 0  # start at the bottom of a given 4-point column and work up
+            while column_z_level < num_z_values - 1:
+                current_list_cube_vertices = []
+                first_two_vertices_base_sheet = current_base_sheet_array[current_index:current_index + 2, ...].tolist()
+                first_two_vertices_top_sheet = current_top_sheet_array[current_index:current_index + 2, ...].tolist()
+                next_two_vertices_base_sheet = current_base_sheet_array[current_index +
+                                                                        num_z_values: 2 +
+                                                                        num_z_values + current_index, ...].tolist()
+                next_two_vertices_top_sheet = current_top_sheet_array[current_index +
+                                                                      num_z_values: 2 +
+                                                                      num_z_values + current_index, ...].tolist()
+                for vertex_set in [
+                    first_two_vertices_base_sheet, first_two_vertices_top_sheet,
+                    next_two_vertices_base_sheet, next_two_vertices_top_sheet
+                ]:
+                    current_list_cube_vertices.extend(vertex_set)
+                vertex_array = np.array(current_list_cube_vertices)
+                assert vertex_array.shape == (8, 3), "vertex_array has incorrect shape"
+                cube_centroid = np.average(np.array(current_list_cube_vertices), axis=0)
+                dictionary_cubes_centroids_indices[cube_counter] = {
+                    'centroid': cube_centroid,
+                    'vertex_list': current_list_cube_vertices}
+                cube_counter += 1
+                current_index += 1
+                column_z_level += 1
+                if column_z_level == num_z_values - 1:  # the loop will break but I should also increment the
+                    # current_index
+                    current_index += 1
+        current_base_sheet += 1
+    total_cubes = len(dictionary_cubes_centroids_indices)
+
+    #produce an array of pseudo cube indices (actually the dictionary keys which are cube numbers in string format):
+    pseudo_cube_indices = np.arange(0, total_cubes)
+    sublist_of_cube_indices_per_core = np.array_split(pseudo_cube_indices, num_cores)
+    #now, the split of pseudoindices seems to work well, and the above sublist_of_cube_indices_per_core is a list of
+    # arrays of cube numbers / keys in the original dictionary
+    #now I think I'll try to produce a list of dictionaries that each contain their assigned cubes based on the above
+    #  per core split
+    list_dictionaries_for_cores = []
+    subdictionary_counter = 0
+    for array_cube_indices in sublist_of_cube_indices_per_core:
+        current_core_dictionary = {}
+        items_to_pop = len(array_cube_indices)
+        items_popped = 0
+        while items_popped < items_to_pop:
+            key, value = dictionary_cubes_centroids_indices.popitem()
+            current_core_dictionary.update({key: value})
+            items_popped += 1
+        list_dictionaries_for_cores.append(current_core_dictionary)
+        subdictionary_counter += 1
+    return list_dictionaries_for_cores, total_cubes, num_sheets, delta_array_shape
+
+
+def per_core_work(start_frame_coord_array, end_frame_coord_array, dictionary_cube_data_this_core, MDA_selection,
+                  start_frame, end_frame):
+    """Run the analysis on one core.
+
+    The code to perform on a given core given the dictionary of cube data.
+    """
+    list_previous_frame_centroids = []
+    list_previous_frame_indices = []
+    # define some utility functions for trajectory iteration:
+
+    def point_in_cube(array_point_coordinates, list_cube_vertices, cube_centroid):
+        """Determine if an array of coordinates are within a cube."""
+        #the simulation particle point can't be more than half the cube side length away from the cube centroid in
+        # any given dimension:
+        array_cube_vertices = np.array(list_cube_vertices)
+        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,
+                                          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))
+        absolute_delta_x_coords = absolute_delta_coords[..., 0]
+        indices_delta_x_acceptable = np.where(absolute_delta_x_coords <= cube_half_side_length)
+        absolute_delta_y_coords = absolute_delta_coords[..., 1]
+        indices_delta_y_acceptable = np.where(absolute_delta_y_coords <= cube_half_side_length)
+        absolute_delta_z_coords = absolute_delta_coords[..., 2]
+        indices_delta_z_acceptable = np.where(absolute_delta_z_coords <= cube_half_side_length)
+        intersection_xy_acceptable_arrays = np.intersect1d(indices_delta_x_acceptable[0],
+                                                              indices_delta_y_acceptable[0])
+        overall_indices_points_in_current_cube = np.intersect1d(intersection_xy_acceptable_arrays,
+                                                                   indices_delta_z_acceptable[0])
+        return overall_indices_points_in_current_cube
+
+    def update_dictionary_point_in_cube_start_frame(array_simulation_particle_coordinates,
+                                                    dictionary_cube_data_this_core):
+        """Basically update the cube dictionary objects assigned to this core to contain a new key/value pair
+        corresponding to the indices of the relevant particles that fall within a given cube. Also, for a given cube,
+        store a key/value pair for the centroid of the particles that fall within the cube."""
+        cube_counter = 0
+        for key, cube in dictionary_cube_data_this_core.items():
+            index_list_in_cube = point_in_cube(array_simulation_particle_coordinates, cube['vertex_list'],
+                                               cube['centroid'])
+            cube['start_frame_index_list_in_cube'] = index_list_in_cube
+            if len(index_list_in_cube) > 0:  # if there's at least one particle in this cube
+                centroid_particles_in_cube = np.average(array_simulation_particle_coordinates[index_list_in_cube],
+                                                           axis=0)
+                cube['centroid_of_particles_first_frame'] = centroid_particles_in_cube
+            else:  # empty cube
+                cube['centroid_of_particles_first_frame'] = None
+            cube_counter += 1
+
+    def update_dictionary_end_frame(array_simulation_particle_coordinates, dictionary_cube_data_this_core):
+        """Update the cube dictionary objects again as appropriate for the second and final frame."""
+        cube_counter = 0
+        for key, cube in dictionary_cube_data_this_core.items():
+            # if there were no particles in the cube in the first frame, then set dx,dy,dz each to 0
+            if cube['centroid_of_particles_first_frame'] is None:
+                cube['dx'] = 0
+                cube['dy'] = 0
+                cube['dz'] = 0
+            else:  # there was at least one particle in the starting cube so we can get dx,dy,dz centroid values
+                new_coordinate_array_for_particles_starting_in_this_cube = array_simulation_particle_coordinates[
+                    cube['start_frame_index_list_in_cube']]
+                new_centroid_for_particles_starting_in_this_cube = np.average(
+                    new_coordinate_array_for_particles_starting_in_this_cube, axis=0)
+                cube['centroid_of_paticles_final_frame'] = new_centroid_for_particles_starting_in_this_cube
+                delta_centroid_array_this_cube = new_centroid_for_particles_starting_in_this_cube - cube[
+                    'centroid_of_particles_first_frame']
+                cube['dx'] = delta_centroid_array_this_cube[0]
+                cube['dy'] = delta_centroid_array_this_cube[1]
+                cube['dz'] = delta_centroid_array_this_cube[2]
+            cube_counter += 1
+
+    #now that the parent process is dealing with the universe object & grabbing required coordinates, each child
+    # process only needs to take the coordinate arrays & perform the operations with its assigned cubes (no more file
+    #  opening and trajectory iteration on each core--which I'm hoping will substantially reduce the physical memory
+    # footprint of my 3D streamplot code)
+    update_dictionary_point_in_cube_start_frame(start_frame_coord_array, dictionary_cube_data_this_core)
+    update_dictionary_end_frame(end_frame_coord_array, dictionary_cube_data_this_core)
+    return dictionary_cube_data_this_core
+
+
+def produce_coordinate_arrays_single_process(topology_file_path, trajectory_file_path, MDA_selection, start_frame,
+                                             end_frame):
+    """Generate coordinate arrays.
+
+    To reduce memory footprint produce only a single MDA selection and get
+    desired coordinate arrays; can later send these coordinate arrays to all
+    child processes rather than having each child process open a trajectory and
+    waste memory.
+
+    """
+    universe_object = MDAnalysis.Universe(topology_file_path, trajectory_file_path)
+    relevant_particles = universe_object.select_atoms(MDA_selection)
+    # pull out coordinate arrays from desired frames:
+    for ts in universe_object.trajectory:
+        if ts.frame > end_frame:
+            break  # stop here
+        if ts.frame == start_frame:
+            start_frame_relevant_particle_coordinate_array_xyz = relevant_particles.positions
+        elif ts.frame == end_frame:
+            end_frame_relevant_particle_coordinate_array_xyz = relevant_particles.positions
+        else:
+            continue
+    return (start_frame_relevant_particle_coordinate_array_xyz, end_frame_relevant_particle_coordinate_array_xyz)
+
+
+
[docs]def generate_streamlines_3d(topology_file_path, trajectory_file_path, grid_spacing, MDA_selection, start_frame, + end_frame, xmin, xmax, ymin, ymax, zmin, zmax, maximum_delta_magnitude=2.0, + num_cores='maximum'): + r"""Produce the x, y and z components of a 3D streamplot data set. + + Parameters + ---------- + topology_file_path : str + Absolute path to the topology file + trajectory_file_path : str + Absolute path to the trajectory file. It will normally be desirable + to filter the trajectory with a tool such as GROMACS + :program:`g_filter` (see :cite:p:`b-Chavent2014`) + grid_spacing : float + The spacing between grid lines (angstroms) + MDA_selection : str + MDAnalysis selection string + start_frame : int + First frame number to parse + end_frame : int + Last frame number to parse + xmin : float + Minimum coordinate boundary for x-axis (angstroms) + xmax : float + Maximum coordinate boundary for x-axis (angstroms) + ymin : float + Minimum coordinate boundary for y-axis (angstroms) + ymax : float + Maximum coordinate boundary for y-axis (angstroms) + maximum_delta_magnitude : float + Absolute value of the largest displacement tolerated for the + centroid of a group of particles ( angstroms). Values above this + displacement will not count in the streamplot (treated as + excessively large displacements crossing the periodic boundary) + num_cores : int or 'maximum' (optional) + The number of cores to use. (Default 'maximum' uses all available + cores) + + Returns + ------- + dx_array : array of floats + An array object containing the displacements in the x direction + dy_array : array of floats + An array object containing the displacements in the y direction + dz_array : array of floats + An array object containing the displacements in the z direction + + Examples + -------- + Generate 3D streamlines and visualize in `mayavi`_:: + + import numpy as np + + import MDAnalysis + import MDAnalysis.visualization.streamlines_3D + + import mayavi, mayavi.mlab + + # assign coordinate system limits and grid spacing: + x_lower,x_upper = -8.73, 1225.96 + y_lower,y_upper = -12.58, 1224.34 + z_lower,z_upper = -300, 300 + grid_spacing_value = 20 + + x1, y1, z1 = MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d( + 'testing.gro', 'testing_filtered.xtc', + xmin=x_lower, xmax=x_upper, + ymin=y_lower, ymax=y_upper, + zmin=z_lower, zmax=z_upper, + grid_spacing=grid_spacing_value, MDA_selection = 'name PO4', + start_frame=2, end_frame=3, num_cores='maximum') + + x, y, z = np.mgrid[x_lower:x_upper:x1.shape[0]*1j, + y_lower:y_upper:y1.shape[1]*1j, + z_lower:z_upper:z1.shape[2]*1j] + + # plot with mayavi: + fig = mayavi.mlab.figure(bgcolor=(1.0, 1.0, 1.0), size=(800, 800), fgcolor=(0, 0, 0)) + for z_value in np.arange(z_lower, z_upper, grid_spacing_value): + st = mayavi.mlab.flow(x, y, z, x1, y1, z1, line_width=1, + seedtype='plane', integration_direction='both') + st.streamline_type = 'tube' + st.tube_filter.radius = 2 + st.seed.widget.origin = np.array([ x_lower, y_upper, z_value]) + st.seed.widget.point1 = np.array([ x_upper, y_upper, z_value]) + st.seed.widget.point2 = np.array([ x_lower, y_lower, z_value]) + st.seed.widget.resolution = int(x1.shape[0]) + st.seed.widget.enabled = False + mayavi.mlab.axes(extent = [0, 1200, 0, 1200, -300, 300]) + fig.scene.z_plus_view() + mayavi.mlab.savefig('test_streamplot_3D.png') + # more compelling examples can be produced for vesicles and other spherical systems + + .. image:: test_streamplot_3D.png + + See Also + -------- + MDAnalysis.visualization.streamlines.generate_streamlines + + + .. _mayavi: http://docs.enthought.com/mayavi/mayavi/ + """ + # work out the number of cores to use: + if num_cores == 'maximum': + num_cores = multiprocessing.cpu_count() # use all available cores + else: + num_cores = num_cores # use the value specified by the user + # assert isinstance(num_cores,(int,long)), "The number of specified cores must (of course) be an integer." + np.seterr(all='warn', over='raise') + parent_cube_dictionary = {} # collect all data from child processes here + + def log_result_to_parent(process_dict): + parent_cube_dictionary.update(process_dict) + + #step 1: produce tuple of cartesian coordinate limits for the first frame + #tuple_of_limits = determine_container_limits(topology_file_path = topology_file_path,trajectory_file_path = + # trajectory_file_path,buffer_value=buffer_value) + tuple_of_limits = (xmin, xmax, ymin, ymax, zmin, zmax) + #step 2: produce a suitable grid (will assume that grid size / container size does not vary during simulation--or + # at least not beyond the buffer limit, such that this grid can be used for all subsequent frames) + grid = produce_grid(tuple_of_limits=tuple_of_limits, grid_spacing=grid_spacing) + #step 3: split the grid into a dictionary of cube information that can be sent to each core for processing: + list_dictionaries_for_cores, total_cubes, num_sheets, delta_array_shape = split_grid(grid=grid, num_cores=num_cores) + #step 3b: produce required coordinate arrays on a single core to avoid making a universe object on each core: + start_frame_coord_array, end_frame_coord_array = produce_coordinate_arrays_single_process(topology_file_path, + trajectory_file_path, + MDA_selection, + start_frame, end_frame) + #step 4: per process work using the above grid data split + pool = multiprocessing.Pool(num_cores) + for sub_dictionary_of_cube_data in list_dictionaries_for_cores: + pool.apply_async(per_core_work, args=( + start_frame_coord_array, end_frame_coord_array, sub_dictionary_of_cube_data, MDA_selection, start_frame, + end_frame), callback=log_result_to_parent) + pool.close() + pool.join() + #so, at this stage the parent process now has a single dictionary with all the cube objects updated from all + # available cores + #the 3D streamplot (i.e, mayavi flow() function) will require separate 3D np arrays for dx,dy,dz + #the shape of each 3D array will unfortunately have to match the mgrid data structure (bit of a pain): ( + # num_sheets - 1, num_sheets - 1, cubes_per_column) + cubes_per_sheet = int(float(total_cubes) / float(num_sheets - 1)) + #produce dummy zero arrays for dx,dy,dz of the appropriate shape: + dx_array = np.zeros(delta_array_shape) + dy_array = np.zeros(delta_array_shape) + dz_array = np.zeros(delta_array_shape) + #now use the parent cube dictionary to correctly substitute in dx,dy,dz values + current_sheet = 0 # which is also the current row + y_index_current_sheet = 0 # sub row + z_index_current_column = 0 # column + total_cubes_current_sheet = 0 + for cube_number in range(0, total_cubes): + dx_array[current_sheet, y_index_current_sheet, z_index_current_column] = parent_cube_dictionary[cube_number][ + 'dx'] + dy_array[current_sheet, y_index_current_sheet, z_index_current_column] = parent_cube_dictionary[cube_number][ + 'dy'] + dz_array[current_sheet, y_index_current_sheet, z_index_current_column] = parent_cube_dictionary[cube_number][ + 'dz'] + z_index_current_column += 1 + total_cubes_current_sheet += 1 + if z_index_current_column == delta_array_shape[2]: + # done building current y-column so iterate y value and reset z + z_index_current_column = 0 + y_index_current_sheet += 1 + if y_index_current_sheet == delta_array_shape[1]: # current sheet is complete + current_sheet += 1 + y_index_current_sheet = 0 # restart for new sheet + z_index_current_column = 0 + total_cubes_current_sheet = 0 + # now set velocity component values greater than a certain cutoff to 0, + # because they tend to reflect spurious values (i.e., PBC jumping) + dx_array[abs(dx_array) >= maximum_delta_magnitude] = 1.0 + dy_array[abs(dy_array) >= maximum_delta_magnitude] = 1.0 + dz_array[abs(dz_array) >= maximum_delta_magnitude] = 1.0 + return (dx_array, dy_array, dz_array)
+
+ +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_modules/index.html b/2.7.0-dev0/_modules/index.html new file mode 100644 index 0000000000..fbd0f62ed6 --- /dev/null +++ b/2.7.0-dev0/_modules/index.html @@ -0,0 +1,301 @@ + + + + + + Overview: module code — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +

All modules for which code is available

+ + +
+
+ +
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/align.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/align.rst.txt new file mode 100644 index 0000000000..513985d792 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/align.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.align + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/atomicdistances.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/atomicdistances.rst.txt new file mode 100644 index 0000000000..42c884e793 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/atomicdistances.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.atomicdistances + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/base.rst.txt new file mode 100644 index 0000000000..4eda92ceac --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/base.rst.txt @@ -0,0 +1,4 @@ +.. automodule:: MDAnalysis.analysis.base + :members: + + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/bat.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/bat.rst.txt new file mode 100644 index 0000000000..9c0f799c75 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/bat.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.bat diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/contacts.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/contacts.rst.txt new file mode 100644 index 0000000000..9cf301ffb8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/contacts.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.contacts + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/data.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/data.rst.txt new file mode 100644 index 0000000000..63008abaf3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/data.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.data.filenames + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/density.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/density.rst.txt new file mode 100644 index 0000000000..40cb906b20 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/density.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.density + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/dielectric.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/dielectric.rst.txt new file mode 100644 index 0000000000..215727b583 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/dielectric.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.analysis.dielectric + :members: + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/diffusionmap.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/diffusionmap.rst.txt new file mode 100644 index 0000000000..1eefec1e07 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/diffusionmap.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.diffusionmap diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/dihedrals.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/dihedrals.rst.txt new file mode 100644 index 0000000000..eeb1a2ec4b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/dihedrals.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.dihedrals diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/distances.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/distances.rst.txt new file mode 100644 index 0000000000..ef14369494 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/distances.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.distances + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore.rst.txt new file mode 100644 index 0000000000..cf48569f93 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore.rst.txt @@ -0,0 +1,65 @@ +=============================================================================== + ENCORE Ensemble Similarity Calculations --- :mod:`MDAnalysis.analysis.encore` +=============================================================================== + +:Author: Matteo Tiberti, Wouter Boomsma, Tone Bengtsen +:Year: 2015-2017 +:Copyright: GNU Public License v3 +:Maintainer: Matteo Tiberti , mtiberti on github + +.. versionadded:: 0.16.0 + +The module contains implementations of similarity measures between protein +ensembles described in :cite:p:`a-LindorffLarsen2009`. The implementation and examples +are described in :cite:p:`a-Tiberti2015`. + +The module includes facilities for handling ensembles and trajectories through +the :class:`Universe` class, performing clustering or dimensionality reduction +of the ensemble space, estimating multivariate probability distributions from +the input data, and more. ENCORE can be used to compare experimental and +simulation-derived ensembles, as well as estimate the convergence of +trajectories from time-dependent simulations. + +ENCORE includes three different methods for calculations of similarity measures +between ensembles implemented in individual functions: + + ++ **Harmonic Ensemble Similarity** : :func:`~MDAnalysis.analysis.encore.similarity.hes` ++ **Clustering Ensemble Similarity** : :func:`~MDAnalysis.analysis.encore.similarity.ces` ++ **Dimensional Reduction Ensemble Similarity** : :func:`~MDAnalysis.analysis.encore.similarity.dres` + +as well as two methods to evaluate the convergence of trajectories: + ++ **Clustering based convergence evaluation** : :func:`~MDAnalysis.analysis.encore.similarity.ces_convergence` ++ **Dimensionality-reduction based convergence evaluation** : :func:`~MDAnalysis.analysis.encore.similarity.dres_convergence` + + +When using this module in published work please cite :cite:p:`a-Tiberti2015`. + + +Modules +------- + +.. toctree:: + :maxdepth: 1 + + ./encore/similarity + ./encore/clustering + ./encore/dimensionality_reduction + ./encore/confdistmatrix + ./encore/covariance + ./encore/bootstrap + ./encore/utils + + +References +---------- + +.. bibliography:: + :filter: False + :style: MDA + :keyprefix: a- + :labelprefix: ᵃ + + LindorffLarsen2009 + Tiberti2015 \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/bootstrap.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/bootstrap.rst.txt new file mode 100644 index 0000000000..5c844a1112 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/bootstrap.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.encore.bootstrap + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/clustering.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/clustering.rst.txt new file mode 100644 index 0000000000..0b0ca7ea64 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/clustering.rst.txt @@ -0,0 +1,24 @@ +============ + Clustering +============ + +.. automodule:: MDAnalysis.analysis.encore.clustering.cluster + :members: + +.. automodule:: MDAnalysis.analysis.encore.clustering.ClusterCollection + :members: + +.. automodule:: MDAnalysis.analysis.encore.clustering.ClusteringMethod + :members: + + +Clustering algorithms +===================== + +The following clustering algorithms are always available: + +.. automodule:: MDAnalysis.analysis.encore.clustering.affinityprop + :members: + + + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/confdistmatrix.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/confdistmatrix.rst.txt new file mode 100644 index 0000000000..0f3e232d95 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/confdistmatrix.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.encore.confdistmatrix + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/covariance.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/covariance.rst.txt new file mode 100644 index 0000000000..8f7fd5a6c8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/covariance.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.encore.covariance + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/dimensionality_reduction.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/dimensionality_reduction.rst.txt new file mode 100644 index 0000000000..7d32682421 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/dimensionality_reduction.rst.txt @@ -0,0 +1,18 @@ +========================== + Dimensionality reduction +========================== + +.. automodule:: MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality + :members: + +.. automodule:: MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod + :members: + +Dimensionality reduction algorithms +=================================== + +The following dimensionality reduction algorithms are always natively +available: + +.. automodule:: MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/similarity.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/similarity.rst.txt new file mode 100644 index 0000000000..6d550d22d2 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/similarity.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.encore.similarity + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/encore/utils.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/utils.rst.txt new file mode 100644 index 0000000000..85a2f6cd41 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/encore/utils.rst.txt @@ -0,0 +1,8 @@ +============================== + Utility functions for ENCORE +============================== + +.. automodule:: MDAnalysis.analysis.encore.utils + :members: + +.. autofunction:: MDAnalysis.analysis.encore.cutils.PureRMSD diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/gnm.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/gnm.rst.txt new file mode 100644 index 0000000000..8f28ec66c5 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/gnm.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.gnm diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel.rst.txt new file mode 100644 index 0000000000..79b79c7e36 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel_deprecated.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel_deprecated.rst.txt new file mode 100644 index 0000000000..bf960e41bf --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/hbond_autocorrel_deprecated.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.hbonds.hbond_autocorrel diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/helix_analysis.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/helix_analysis.rst.txt new file mode 100644 index 0000000000..864e786ae1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/helix_analysis.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.helix_analysis + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/hole2.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/hole2.rst.txt new file mode 100644 index 0000000000..b95d182131 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/hole2.rst.txt @@ -0,0 +1,36 @@ +=================================================== + HOLE analysis --- :mod:`MDAnalysis.analysis.hole2` +=================================================== + +:Author: Lily Wang +:Year: 2020 +:Copyright: GNU Public License v3 + +.. versionadded:: 1.0.0 + +This module provides an updated interface for the HOLE_ suite of tools +:cite:p:`Smart1993,Smart1996` to analyse an ion channel pore or transporter +pathway :cite:p:`Stelzl2014` as a function of time or arbitrary order +parameters. It replaces :mod:`MDAnalysis.analysis.hole`. + +HOLE_ must be installed separately and can be obtained in binary form +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.) + +Module +------ + +.. automodule:: MDAnalysis.analysis.hole2 + + + +Utility functions and templates +------------------------------- + +.. automodule:: MDAnalysis.analysis.hole2.utils + :members: + + +.. automodule:: MDAnalysis.analysis.hole2.templates + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/hydrogenbonds.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/hydrogenbonds.rst.txt new file mode 100644 index 0000000000..e67253d13a --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/hydrogenbonds.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.hydrogenbonds.hbond_analysis diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/leaflet.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/leaflet.rst.txt new file mode 100644 index 0000000000..be64581bcb --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/leaflet.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.leaflet diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/legacy/x3dna.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/legacy/x3dna.rst.txt new file mode 100644 index 0000000000..63a5668d27 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/legacy/x3dna.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.legacy.x3dna diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/legacy_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/legacy_modules.rst.txt new file mode 100644 index 0000000000..c8ad08e0fd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/legacy_modules.rst.txt @@ -0,0 +1,35 @@ +============================================================ + :mod:`MDAnalysis.analysis.legacy` --- Legacy analysis code +============================================================ + +.. versionadded:: 0.16.0 + +The :mod:`MDAnalysis.analysis.legacy` package contains analysis +modules that are not or only incompletely tested and not regularly +maintained. They nevertheless still provide useful and sometimes +unique analysis capabilities and are therefore provided **as +is**. (For further discussion, see `Issue 743`_.) + +.. warning:: + + Code in the :mod:`~MDAnalysis.analysis.legacy` package is not + regularly maintained. Please use it very carefully. + +If you want to use modules from this package then you will have to import +them explicitly. For example, :: + + from MDAnalysis.analysis.legacy import x3dna + + +.. _Issue 743: https://github.com/MDAnalysis/mdanalysis/issues/743 + + +Legacy modules +============== + +.. toctree:: + :maxdepth: 1 + + legacy/x3dna + + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/lineardensity.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/lineardensity.rst.txt new file mode 100644 index 0000000000..2e4b4de2e5 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/lineardensity.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.analysis.lineardensity + :members: + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/msd.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/msd.rst.txt new file mode 100644 index 0000000000..4fcc341139 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/msd.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.msd diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/nucleicacids.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/nucleicacids.rst.txt new file mode 100644 index 0000000000..d8ac37592d --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/nucleicacids.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.nucleicacids \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/nuclinfo.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/nuclinfo.rst.txt new file mode 100644 index 0000000000..db0ede3208 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/nuclinfo.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.nuclinfo + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/pca.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/pca.rst.txt new file mode 100644 index 0000000000..dc90112ad4 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/pca.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.pca diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/polymer.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/polymer.rst.txt new file mode 100644 index 0000000000..6641bb5689 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/polymer.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.analysis.polymer + :members: + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/psa.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/psa.rst.txt new file mode 100644 index 0000000000..bdc747c3a6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/psa.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.psa + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/rdf.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/rdf.rst.txt new file mode 100644 index 0000000000..a12bf80321 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/rdf.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.rdf + :members: \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/rms.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/rms.rst.txt new file mode 100644 index 0000000000..3e3124acd0 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/rms.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.rms + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/waterdynamics.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/waterdynamics.rst.txt new file mode 100644 index 0000000000..2db6600b28 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/waterdynamics.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.waterdynamics + diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis/wbridge_analysis.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis/wbridge_analysis.rst.txt new file mode 100644 index 0000000000..ea9ab08ee1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis/wbridge_analysis.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.hydrogenbonds.wbridge_analysis diff --git a/2.7.0-dev0/_sources/documentation_pages/analysis_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/analysis_modules.rst.txt new file mode 100644 index 0000000000..96ca0010dc --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/analysis_modules.rst.txt @@ -0,0 +1,186 @@ +.. Contains the formatted docstrings from the analysis modules located in 'mdanalysis/MDAnalysis/analysis', although in some cases the documentation imports functions and docstrings from other files which are also curated to reStructuredText markup. + +**************** +Analysis modules +**************** + +The :mod:`MDAnalysis.analysis` module contains code to carry out specific +analysis functionality for MD trajectories. +It is based on the core functionality (i.e. trajectory +I/O, selections etc). The analysis modules can be used as examples for how to +use MDAnalysis but also as working code for research projects; typically all +contributed code has been used by the authors in their own work. +An analysis using the available modules +usually follows the same structure + +#. Import the desired module, since analysis modules are not imported + by default. +#. Initialize the analysis class instance from the previously imported module. +#. Run the analysis, optionally for specific trajectory slices. +#. Access the analysis from the :attr:`results` attribute + +.. code-block:: python + + from MDAnalysis.analysis import ExampleAnalysisModule # (e.g. RMSD) + + analysis_obj = ExampleAnalysisModule.AnalysisClass(universe, ...) + analysis_obj.run(start=start_frame, stop=stop_frame, step=step) + print(analysis_obj.results) + + +Please see the individual module documentation for any specific caveats +and also read and cite the reference papers associated with these algorithms. + +.. rubric:: Additional dependencies + +Some of the modules in :mod:`MDAnalysis.analysis` require additional Python +packages to enable full functionality. For example, +:mod:`MDAnalysis.analysis.encore` provides more options if `scikit-learn`_ is +installed. If you installed MDAnalysis with +:program:`pip` (see :ref:`installation-instructions`) +these packages are *not automatically installed*. +Although, one can add the ``[analysis]`` tag to the +:program:`pip` command to force their installation. If you installed +MDAnalysis with :program:`conda` then a +*full set of dependencies* is automatically installed. + +Other modules require external programs. For instance, the +:mod:`MDAnalysis.analysis.hole2.hole` module requires an installation of the +HOLE_ suite of programs. You will need to install these external dependencies +by following their installation instructions before you can use the +corresponding MDAnalysis module. + +.. _scikit-learn: http://scikit-learn.org/ +.. _HOLE: http://www.holeprogram.org/ + +Building blocks for Analysis +============================ + +The building block for the analysis modules is +:class:`MDAnalysis.analysis.base.AnalysisBase`. +To build your own analysis class start by reading the documentation. + +.. toctree:: + :maxdepth: 1 + + analysis/base + +Distances and contacts +====================== + +.. toctree:: + :maxdepth: 1 + + analysis/align + analysis/contacts + analysis/distances + analysis/atomicdistances + analysis/rms + analysis/psa + analysis/encore + analysis/bat + +Hydrogen bonding +================ + +.. toctree:: + :maxdepth: 1 + + analysis/hydrogenbonds + analysis/hbond_autocorrel + analysis/wbridge_analysis + +Deprecated modules: + +.. toctree:: + :maxdepth: 1 + + analysis/hbond_autocorrel_deprecated + +Membranes and membrane proteins +=============================== + +.. toctree:: + :maxdepth: 1 + + analysis/hole2 + analysis/leaflet + +Nucleic acids +============= + +.. toctree:: + :maxdepth: 1 + + analysis/nuclinfo + analysis/nucleicacids + +Polymers +======== + +.. toctree:: + :maxdepth: 1 + + analysis/polymer + + +Structure +========= + +Macromolecules +-------------- + +.. toctree:: + :maxdepth: 1 + + analysis/gnm + analysis/helix_analysis + analysis/dihedrals + +Liquids +------- + +.. toctree:: + :maxdepth: 1 + + analysis/rdf + analysis/msd + +Volumetric analysis +=================== + +.. toctree:: + :maxdepth: 1 + + analysis/density + analysis/lineardensity + analysis/waterdynamics + analysis/dielectric + +Dimensionality Reduction +======================== +.. toctree:: + :maxdepth: 1 + + analysis/diffusionmap + analysis/pca + +Legacy analysis modules +======================= + +The :mod:`MDAnalysis.analysis.legacy` module contains code that for a +range of reasons is not as well maintained and tested as the other +analysis modules. *Use with care.* + +.. toctree:: + :maxdepth: 1 + + analysis/legacy_modules + +Data +==== + +.. toctree:: + :maxdepth: 1 + + analysis/data diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary/EDR.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary/EDR.rst.txt new file mode 100644 index 0000000000..01ff5c913e --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary/EDR.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.auxiliary.EDR diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary/XVG.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary/XVG.rst.txt new file mode 100644 index 0000000000..08e68d05bd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary/XVG.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.auxiliary.XVG + diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary/base.rst.txt new file mode 100644 index 0000000000..982d696249 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary/base.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.auxiliary.base + diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary/core.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary/core.rst.txt new file mode 100644 index 0000000000..f2bdfb0e1b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary/core.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.auxiliary.core + diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary/init.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary/init.rst.txt new file mode 100644 index 0000000000..850d09a806 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary/init.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.auxiliary.__init__ + diff --git a/2.7.0-dev0/_sources/documentation_pages/auxiliary_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/auxiliary_modules.rst.txt new file mode 100644 index 0000000000..0ff1b033e8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/auxiliary_modules.rst.txt @@ -0,0 +1,17 @@ +.. Contains the formatted docstrings from the auxiliary modules located in 'mdanalysis/MDAnalysis/auxiliary' + +***************** +Auxiliary modules +***************** + +The auxiliary module contains the classes to read auxiliary data and sort out +alignment between auxiliary and trajectory data. + +.. toctree:: + :maxdepth: 1 + + auxiliary/init + auxiliary/base + auxiliary/core + auxiliary/XVG + auxiliary/EDR diff --git a/2.7.0-dev0/_sources/documentation_pages/converters.rst.txt b/2.7.0-dev0/_sources/documentation_pages/converters.rst.txt new file mode 100644 index 0000000000..5769401b1b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/converters.rst.txt @@ -0,0 +1,54 @@ +.. module:: MDAnalysis.converters + +.. _`Converter modules`: + +************************** +Converter modules +************************** + +.. versionadded:: 2.0.0 + +The :mod:`MDAnalysis.converters` module contains the Converter classes that +MDAnalysis uses to convert MDAnalysis structures to and from other Python +packages. + +If you are converting *to* MDAnalysis, you can use the normal syntax for +creating a Universe from files. Typically MDAnalysis will recognise which +library it is dealing with, so you will not need to pass in a ``format`` keyword. + +For example:: + + import MDAnalysis as mda + from MDAnalysis import GRO + import parmed as pmd + + pgro = pmd.load_file(GRO) # creates parmed structure + ugro = mda.Universe(pgro) # you can just pass it in + +If you are converting *from* MDAnalysis, use the +:func:`~MDAnalysis.core.groups.AtomGroup.convert_to` method. With this, +you will have to specify a package name (case-insensitive). :: + + pgro2 = ugro.atoms.convert_to('PARMED') # converts back to parmed structure + +Another syntax is also available for tab-completion support:: + + pgro2 = ugro.atoms.convert_to.parmed() + + +.. rubric:: Available converters + +.. toctree:: + :maxdepth: 1 + + converters/ParmEd + converters/RDKit + converters/OpenMM + +.. rubric:: Converter functionalities + +.. toctree:: + :maxdepth: 1 + + core/accessors + diff --git a/2.7.0-dev0/_sources/documentation_pages/converters/OpenMM.rst.txt b/2.7.0-dev0/_sources/documentation_pages/converters/OpenMM.rst.txt new file mode 100644 index 0000000000..01fd1d5fca --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/converters/OpenMM.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.converters.OpenMMParser + +.. automodule:: MDAnalysis.converters.OpenMM diff --git a/2.7.0-dev0/_sources/documentation_pages/converters/ParmEd.rst.txt b/2.7.0-dev0/_sources/documentation_pages/converters/ParmEd.rst.txt new file mode 100644 index 0000000000..fc24968381 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/converters/ParmEd.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.converters.ParmEdParser + +.. automodule:: MDAnalysis.converters.ParmEd diff --git a/2.7.0-dev0/_sources/documentation_pages/converters/RDKit.rst.txt b/2.7.0-dev0/_sources/documentation_pages/converters/RDKit.rst.txt new file mode 100644 index 0000000000..760446fd1d --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/converters/RDKit.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.converters.RDKitParser + +.. automodule:: MDAnalysis.converters.RDKit diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/CRD.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/CRD.rst.txt new file mode 100644 index 0000000000..96e9c4322f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/CRD.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.CRD + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/DCD.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/DCD.rst.txt new file mode 100644 index 0000000000..7ebed363a8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/DCD.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.DCD diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/DLPoly.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/DLPoly.rst.txt new file mode 100644 index 0000000000..3f68e546c2 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/DLPoly.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.DLPoly + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/DMS.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/DMS.rst.txt new file mode 100644 index 0000000000..eb42d8f802 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/DMS.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.DMS + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/FHIAIMS.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/FHIAIMS.rst.txt new file mode 100644 index 0000000000..f078e23b1b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/FHIAIMS.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.FHIAIMS + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/GMS.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/GMS.rst.txt new file mode 100644 index 0000000000..dd811a0407 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/GMS.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.GMS + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/GRO.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/GRO.rst.txt new file mode 100644 index 0000000000..5031c40fe3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/GRO.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.GRO + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/GSD.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/GSD.rst.txt new file mode 100644 index 0000000000..aff15b428f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/GSD.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.GSD diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/H5MD.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/H5MD.rst.txt new file mode 100644 index 0000000000..3757e06148 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/H5MD.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.H5MD diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/INPCRD.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/INPCRD.rst.txt new file mode 100644 index 0000000000..1d697c0ccf --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/INPCRD.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.INPCRD diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/LAMMPS.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/LAMMPS.rst.txt new file mode 100644 index 0000000000..804bc509f6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/LAMMPS.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.LAMMPS + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/MMTF.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/MMTF.rst.txt new file mode 100644 index 0000000000..09df91d6c6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/MMTF.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.MMTF + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/MOL2.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/MOL2.rst.txt new file mode 100644 index 0000000000..278b94d7b2 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/MOL2.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.MOL2 + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/NAMDBIN.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/NAMDBIN.rst.txt new file mode 100644 index 0000000000..974ef39c95 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/NAMDBIN.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.NAMDBIN diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/PDB.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/PDB.rst.txt new file mode 100644 index 0000000000..0ca77f92c6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/PDB.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.PDB + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/PDBQT.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/PDBQT.rst.txt new file mode 100644 index 0000000000..48b7647325 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/PDBQT.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.PDBQT + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/PQR.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/PQR.rst.txt new file mode 100644 index 0000000000..3ebc0846dc --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/PQR.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.PQR + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/TNG.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/TNG.rst.txt new file mode 100644 index 0000000000..b8c8c3bca3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/TNG.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.TNG + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/TRJ.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRJ.rst.txt new file mode 100644 index 0000000000..2059bc55fe --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRJ.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.TRJ + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/TRR.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRR.rst.txt new file mode 100644 index 0000000000..4c9b0770dd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRR.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.coordinates.TRR + :members: + :inherited-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/TRZ.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRZ.rst.txt new file mode 100644 index 0000000000..0fe61ad899 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/TRZ.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.TRZ + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/TXYZ.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/TXYZ.rst.txt new file mode 100644 index 0000000000..2dbe52423b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/TXYZ.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.TXYZ + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/XDR.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/XDR.rst.txt new file mode 100644 index 0000000000..1c585e324e --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/XDR.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.coordinates.XDR + :members: + :inherited-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/XTC.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/XTC.rst.txt new file mode 100644 index 0000000000..1588bb8855 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/XTC.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.coordinates.XTC + :members: + :inherited-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/XYZ.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/XYZ.rst.txt new file mode 100644 index 0000000000..a98129b608 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/XYZ.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.XYZ + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/base.rst.txt new file mode 100644 index 0000000000..700ee30f5f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/base.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.base + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/chain.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/chain.rst.txt new file mode 100644 index 0000000000..180b426669 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/chain.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.chain + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/chemfiles.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/chemfiles.rst.txt new file mode 100644 index 0000000000..13016a9a62 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/chemfiles.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.chemfiles diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/core.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/core.rst.txt new file mode 100644 index 0000000000..37696683e7 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/core.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.core + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/init.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/init.rst.txt new file mode 100644 index 0000000000..2b3637156f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/init.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.coordinates.__init__ + diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/memory.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/memory.rst.txt new file mode 100644 index 0000000000..e02e1e1d4c --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/memory.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.memory diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/null.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/null.rst.txt new file mode 100644 index 0000000000..ab0b375de4 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/null.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.null diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/pickle_readers.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/pickle_readers.rst.txt new file mode 100644 index 0000000000..fbcc881ab0 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/pickle_readers.rst.txt @@ -0,0 +1,102 @@ +.. Contains the formatted docstrings for the serialization of universe located +.. mainly in 'MDAnalysis/libs/pickle_file_io.py' +.. _serialization: + +********************************************************* +Serialization of Coordinate Readers +********************************************************* + +To achieve a working implementation of parallelism, this document illustrates +the basic idea of how different coordinate readers are being serialized in MDAnalysis, +and what developers should do to serialize a new reader. + +To make sure every Trajectory reader can be successfully +serialized, we implement picklable I/O classes (see :ref:`implemented-fileio`). +When the file is pickled, filename and other necessary attributes of the open +file handle are saved. On unpickling, the file is opened by filename. +This means that for a successful unpickle, the original file still has to +be accessible with its filename. To retain the current frame of the trajectory, +:func:`_read_frame(previous frame)` will be called during unpickling. + +.. _how_to_serialize_a_new_reader: + +How to serialize a new reader +----------------------------- + +File Access +^^^^^^^^^^^ +If the new reader uses :func:`util.anyopen()` +(e.g. :class:`MDAnalysis.coordinates.PDB.PDBReader`), +the reading handler can be pickled without modification. +If the new reader uses I/O classes from other package +(e.g. :class:`MDAnalysis.coordinates.GSD.GSDReader`), +and cannot be pickled natively, create a new picklable class inherited from +the file class in that package +(e.g. :class:`MDAnalysis.coordinates.GSD.GSDPicklable`), +adding :func:`__getstate__`, +:func:`__setstate__` functions (or :func:`__reduce__` if needed. Consult the +pickle `documentation `_ of python) +to allow file handler serialization. + +To seek or not to seek +^^^^^^^^^^^^^^^^^^^^^^ +Some I/O classes support :func:`seek` and :func:`tell` functions to allow the file +to be pickled with an offset. It is normally not needed for MDAnalysis with +random access. But if error occurs during testing, find a way to make the offset work. +Maybe this I/O class supports frame indexing? Maybe the file handler inside this I/O +class supports offset? + +For example, in :class:`MDAnalysis.coordinates.TRZ.TRZReader`, +:func:`_read_frame` is implemented by :func:`_seek` ing the file into +its previous frame and :func:`_read_next_timestep`, so the offset of the file is crucial +for such machinery to work. + +Miscellaneous +^^^^^^^^^^^^^ +If pickle still fails due to some unpicklable attributes, try to find a way +to pickle those, or write custom :func:`__getstate__` and :func:`__setstate__` +methods for the reader. + +If the new reader is written in Cython, read :class:`lib.formats.libmdaxdr` and +:class:`lib.formats.libdcd` files as references. + +.. _test_pickle: + +Tests +----- +_SingleFrameReader Test +^^^^^^^^^^^^^^^^^^^^^^^ +If the new reader is a single-frame reader, the basic test should normally +inherited from :class:`_SingleFrameReader`, where the pickliablity is tested. + +BaseReaderTest and MultiframeReaderTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +If the test for the new reader uses :class:`BaseReaderTest` or +:class:`MultiframeReaderTest`, whether the current timestep information is +saved (the former), whether its relative position is maintained, +i.e. next() reads the right next timestep, and whether its last timestep +can be pickled, are already tested. + +File handler Test +^^^^^^^^^^^^^^^^^ +If the new reader accesses the file with :func:`util.anyopen`, add necessary +tests inside ``parallelism/test_multiprocessing.py`` for the reader. + +If the new reader accessed the file with a new picklable I/O class, +add necessary tests inside ``utils/test_pickleio.py`` for the I/O class, +``parallelism/test_multiprocessing.py`` for the reader. + +.. _implemented-fileio: + +Currently implemented picklable IO Formats +------------------------------------------ + +* :class:`MDAnalysis.lib.picklable_file_io.FileIOPicklable` +* :class:`MDAnalysis.lib.picklable_file_io.BufferIOPicklable` +* :class:`MDAnalysis.lib.picklable_file_io.TextIOPicklable` +* :class:`MDAnalysis.lib.picklable_file_io.BZ2Picklable` +* :class:`MDAnalysis.lib.picklable_file_io.GzipPicklable` +* :class:`MDAnalysis.coordinates.GSD.GSDPicklable` +* :class:`MDAnalysis.coordinates.TRJ.NCDFPicklable` +* :class:`MDAnalysis.coordinates.chemfiles.ChemfilesPicklable` +* :class:`MDAnalysis.coordinates.H5MD.H5PYPicklable` diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates/timestep.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates/timestep.rst.txt new file mode 100644 index 0000000000..34c34cfbcb --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates/timestep.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.coordinates.timestep diff --git a/2.7.0-dev0/_sources/documentation_pages/coordinates_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/coordinates_modules.rst.txt new file mode 100644 index 0000000000..073ec44758 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/coordinates_modules.rst.txt @@ -0,0 +1,70 @@ +.. Contains the formatted docstrings from the coordinates modules located in 'mdanalysis/MDAnalysis/coordinates' +.. _Coordinates: + +************************** +Coordinates modules +************************** + +The coordinates module contains the classes to read and write +trajectories. Typically, MDAnalysis recognizes :ref:`Supported coordinate +formats` by the file extension and hence most users probably do not need to +concern themselves with classes and functions described here. However, +if MDAnalysis fails to recognize a coordinate file then the user can +provide the format in the keyword argument *format* to +:class:`~MDAnalysis.core.universe.Universe` to force the format. + +.. rubric:: Coordinate formats + +.. toctree:: + :maxdepth: 1 + + coordinates/init + coordinates/CRD + coordinates/DCD + coordinates/DLPoly + coordinates/DMS + coordinates/GMS + coordinates/GSD + coordinates/GRO + coordinates/H5MD + coordinates/INPCRD + coordinates/LAMMPS + coordinates/MMTF + coordinates/MOL2 + coordinates/NAMDBIN + coordinates/PDB + coordinates/PDBQT + coordinates/PQR + coordinates/TNG + coordinates/TRJ + coordinates/TRR + coordinates/TRZ + coordinates/TXYZ + coordinates/XTC + coordinates/XYZ + coordinates/FHIAIMS + coordinates/memory + coordinates/chemfiles + coordinates/null + +.. rubric:: Coordinate core modules + +The remaining pages are primarily of interest to +developers. Programmers and anyone trying to implement new +functionality should first read the :ref:`Trajectory API`. + + +.. toctree:: + :maxdepth: 1 + + coordinates/timestep + coordinates/base + coordinates/core + coordinates/pickle_readers + coordinates/chain + coordinates/XDR + +In particular, all trajectory readers have to be +:ref:`serializable` and they should pass all tests +available in the ``MDAnalysisTests.coordinates.base.MultiframeReaderTest`` +or ``MDAnalysisTests.coordinates.base.BaseReaderTest``. diff --git a/2.7.0-dev0/_sources/documentation_pages/core/accessors.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/accessors.rst.txt new file mode 100644 index 0000000000..0216b5a043 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/accessors.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.core.accessors \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/core/groups.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/groups.rst.txt new file mode 100644 index 0000000000..0ea31cda4a --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/groups.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.core.groups diff --git a/2.7.0-dev0/_sources/documentation_pages/core/init.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/init.rst.txt new file mode 100644 index 0000000000..2dc72f84fe --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/init.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.core.__init__ + diff --git a/2.7.0-dev0/_sources/documentation_pages/core/selection.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/selection.rst.txt new file mode 100644 index 0000000000..8f3e40ecff --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/selection.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.core.selection + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/core/topology.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/topology.rst.txt new file mode 100644 index 0000000000..9d9dfa242a --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/topology.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.core.topology diff --git a/2.7.0-dev0/_sources/documentation_pages/core/topologyattrs.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/topologyattrs.rst.txt new file mode 100644 index 0000000000..9eda33222c --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/topologyattrs.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.core.topologyattrs + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/core/topologyobjects.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/topologyobjects.rst.txt new file mode 100644 index 0000000000..5e8446e8fa --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/topologyobjects.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.core.topologyobjects + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/core/universe.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core/universe.rst.txt new file mode 100644 index 0000000000..4aff509154 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core/universe.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.core.universe diff --git a/2.7.0-dev0/_sources/documentation_pages/core_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/core_modules.rst.txt new file mode 100644 index 0000000000..deb04c2284 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/core_modules.rst.txt @@ -0,0 +1,59 @@ +.. Contains the formatted docstrings for the core modules located in 'mdanalysis/MDAnalysis/core' + +************************** +Core modules +************************** + +The :mod:`MDAnalysis.core` modules contain functionality essential for +MDAnalysis, such as the central data structures in +:mod:`MDAnalysis.core.universe` and :mod:`MDAnalysis.core.groups` or +the selection definitions and parsing in +:mod:`MDAnalysis.core.selection`. + +.. toctree:: + :maxdepth: 1 + + core/init + +Important objects for users +=========================== + +All users of MDAnalysis need to understand the two most important +classes in this section, namely the +:class:`~MDAnalysis.core.universe.Universe` and the +:class:`~MDAnalysis.core.groups.AtomGroup`. + +.. toctree:: + :maxdepth: 1 + + core/universe + core/groups + + +.. _topology-system-label: + +Topology system +=============== + +The topology system is primarily of interest to developers. + +.. toctree:: + :maxdepth: 1 + + core/topology + core/topologyobjects + core/topologyattrs + +.. SeeAlso:: :ref:`Developer notes for Topology + Parsers ` + +Selection system +================ + +The selection system is primarily of interest to developers. + +.. toctree:: + :maxdepth: 1 + + core/selection + diff --git a/2.7.0-dev0/_sources/documentation_pages/exceptions.rst.txt b/2.7.0-dev0/_sources/documentation_pages/exceptions.rst.txt new file mode 100644 index 0000000000..8d93a5193f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/exceptions.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.exceptions + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/NeighborSearch.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/NeighborSearch.rst.txt new file mode 100644 index 0000000000..967e7a13cd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/NeighborSearch.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.NeighborSearch + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/c_distances.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/c_distances.rst.txt new file mode 100644 index 0000000000..962e1d9055 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/c_distances.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.c_distances + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/c_distances_openmp.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/c_distances_openmp.rst.txt new file mode 100644 index 0000000000..d03ca6e6f7 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/c_distances_openmp.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.c_distances_openmp + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/correlations.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/correlations.rst.txt new file mode 100644 index 0000000000..e68b0eba86 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/correlations.rst.txt @@ -0,0 +1,9 @@ +.. automodule:: MDAnalysis.lib.correlations + + Autocorrelation Function + ------------------------ + .. autofunction:: MDAnalysis.lib.correlations.autocorrelation + + Intermittency Function + ---------------------- + .. autofunction:: MDAnalysis.lib.correlations.correct_intermittency \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/distances.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/distances.rst.txt new file mode 100644 index 0000000000..c50b85bd1c --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/distances.rst.txt @@ -0,0 +1,18 @@ +.. automodule:: MDAnalysis.lib.distances + + + +Low-level modules for :mod:`MDAnalysis.lib.distances` +===================================================== + +:mod:`MDAnalysis.lib._distances` contains low level access to the +*serial* MDAnalysis Cython functions in `distances`. These have +little to no error checking done on inputs so should be used with +caution. Similarly, :mod:`MDAnalysis.lib._distances_openmp` contains +the OpenMP-enable functions. + +.. toctree:: + :maxdepth: 1 + + c_distances + c_distances_openmp diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/formats/libdcd.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/formats/libdcd.rst.txt new file mode 100644 index 0000000000..aaf528c1d6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/formats/libdcd.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.lib.formats.libdcd + :members: + :inherited-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/formats/libmdaxdr.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/formats/libmdaxdr.rst.txt new file mode 100644 index 0000000000..f6cca2f9f4 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/formats/libmdaxdr.rst.txt @@ -0,0 +1,3 @@ +.. automodule:: MDAnalysis.lib.formats.libmdaxdr + :members: + :inherited-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/log.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/log.rst.txt new file mode 100644 index 0000000000..583e7cb408 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/log.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.log + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/mdamath.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/mdamath.rst.txt new file mode 100644 index 0000000000..22ef1f4fbe --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/mdamath.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.lib.mdamath diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/nsgrid.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/nsgrid.rst.txt new file mode 100644 index 0000000000..f36f2480b0 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/nsgrid.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.nsgrid + :members: \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/picklable_file_io.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/picklable_file_io.rst.txt new file mode 100644 index 0000000000..8df008afdd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/picklable_file_io.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.lib.picklable_file_io diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/pkdtree.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/pkdtree.rst.txt new file mode 100644 index 0000000000..b9d710fdf3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/pkdtree.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.pkdtree + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/qcprot.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/qcprot.rst.txt new file mode 100644 index 0000000000..0ecd59574f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/qcprot.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.qcprot + diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/transformations.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/transformations.rst.txt new file mode 100644 index 0000000000..5f45038ca6 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/transformations.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.transformations + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/lib/util.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib/util.rst.txt new file mode 100644 index 0000000000..63db8ea453 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib/util.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.lib.util + diff --git a/2.7.0-dev0/_sources/documentation_pages/lib_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/lib_modules.rst.txt new file mode 100644 index 0000000000..1b55a968f4 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/lib_modules.rst.txt @@ -0,0 +1,107 @@ +.. _lib: + +******************************************* +Library functions --- :mod:`MDAnalysis.lib` +******************************************* + +.. module:: MDAnalysis.lib + :synopsis: ``lib`` collects independent code for re-use in MDAnalysis + +:mod:`MDAnalysis.lib` contains code that is independent of the +specific MDAnalysis framework, such as fast calculators for distances +or simple logging support. Modules do not depend on other code inside +MDAnalysis except in :mod:`MDAnalysis.lib` itself (and possibly in +:mod:`MDAnalysis.exceptions`) and thus can be easily imported +elsewhere. + +Overview +-------- + +:mod:`MDAnalysis.lib.distances` contains many high performance maths +functions. Most of them have the keyword *backend* that allows one to +either select serial (single threaded) code (``backend="serial``) or +to use parallelized versions (e.g. ``backend="OpenMP"`` for OpenMP +parallelism). + +:mod:`MDAnalysis.lib.transformations` contains a multitude of +matrix operations for manipulating coordinate data. + +:mod:`MDAnalysis.lib.qcprot` contains a fast implementation of +superposition by minimizing the RMSD. + +:mod:`MDAnalysis.lib.util` contains various file and string utility +functions whereas mathematical functions are to be found in +:mod:`MDAnalysis.lib.mdamath`. + +A number of modules are concerned with finding +neighbors. :mod:`MDAnalysis.lib.NeighborSearch` contains high-level +classes to do neighbor searches with MDAnalysis +objects. :mod:`MDAnalysis.lib.nsgrid` contains a fast implementation +of grid neighbor search whereas :mod:`MDAnalysis.lib.pkdtree` uses +KDTrees (with periodic images) for neighbor searching. Some of the +functions in :mod:`MDAnalysis.lib.distances` user either of these +algorithms to speed up distance calculations. + + + +List of modules +--------------- + +.. toctree:: + :maxdepth: 1 + + ./lib/distances + ./lib/NeighborSearch + ./lib/nsgrid + ./lib/pkdtree + ./lib/log + ./lib/mdamath + ./lib/transformations + ./lib/qcprot + ./lib/util + ./lib/correlations + ./lib/picklable_file_io + +Low level file formats +---------------------- + +The modules in :mod:`MDAnalysis.lib.formats` contain code to access various file +formats in a way that is *independent from other MDAnalysis functionality* +(i.e., they do not use any classes from :mod:`MDAnalysis.core` or +:mod:`MDAnalysis.topology`). This low-level code is used in the +:mod:`MDAnalysis.coordinates` module but can also be re-used by other +Python-based projects. + +.. toctree:: + :maxdepth: 1 + + ./lib/formats/libmdaxdr + ./lib/formats/libdcd + +Libmdanalysis +------------- + +The :file:`__init__.pxd` file in :mod:`MDAnalysis.lib.libmdanalysis` provides a +single place to ``cimport`` MDAnalysis' public Cython headers. This is recommended +for advanced developers only. + +For example, imagine we are writing a Cython extension module in +:mod:`MDAnalysis.lib` and we would like to make a function that creates a +:class:`MDAnalysis.coordinates.timestep.Timestep` + +.. code-block:: cython + + from MDAnalysis.lib.libmdanalysis cimport timestep + # or we could use the relative cimport + # from .libmdanalysis cimport timestep + + cdef timestep.Timestep make_timestep(int natoms): + cdef timestep.Timestep ts = timestep.Timestep(natoms) + return ts + + +Currently modules that are exposed as public Cython headers are: + +- :mod:`MDAnalysis.coordinates.timestep` + +For more details consult the source :mod:`MDAnalysis.lib.libmdanalysis.__init__.pxd` \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/overview.rst.txt b/2.7.0-dev0/_sources/documentation_pages/overview.rst.txt new file mode 100644 index 0000000000..daf3cc9a1d --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/overview.rst.txt @@ -0,0 +1,219 @@ +.. _overview-label: + +========================== + Overview over MDAnalysis +========================== + +**MDAnalysis** is a Python package that provides classes to access +data in molecular dynamics trajectories. It is object oriented so it +treats atoms, groups of atoms, trajectories, etc as different +objects. Each object has a number of operations defined on itself +(also known as "methods") and also contains values describing the +object ("attributes"). For example, a +:class:`~MDAnalysis.core.groups.AtomGroup` object has a +:meth:`~MDAnalysis.core.groups.AtomGroup.center_of_mass` method that +returns the center of mass of the group of atoms. It also contains an +attribute called :attr:`~MDAnalysis.core.groups.AtomGroup.residues` +that lists all the residues that belong to the group. Using methods +such as :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` +(which uses `CHARMM-style`_ atom :ref:`selection-commands-label`) one +can create new objects (in this case, another +:class:`~MDAnalysis.core.groups.AtomGroup`). + +A typical usage pattern is to iterate through a trajectory and analyze +coordinates for every frame. In the following example the end-to-end distance +of a protein and the radius of gyration of the backbone atoms are calculated:: + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF,DCD # test trajectory + import numpy.linalg + u = mda.Universe(PSF,DCD) # always start with a Universe + nterm = u.select_atoms('segid 4AKE and name N')[0] # can access structure via segid (s4AKE) and atom name + cterm = u.select_atoms('segid 4AKE and name C')[-1] # ... takes the last atom named 'C' + bb = u.select_atoms('protein and backbone') # a selection (a AtomGroup) + for ts in u.trajectory: # iterate through all frames + r = cterm.position - nterm.position # end-to-end vector from atom positions + d = numpy.linalg.norm(r) # end-to-end distance + rgyr = bb.radius_of_gyration() # method of a AtomGroup; updates with each frame + print(f"frame = {ts.frame}: d = {d} Angstroem, Rgyr = {rgyr} Angstroem") + + +.. _NumPy: http://numpy.scipy.org +.. _CHARMM: http://www.charmm.org/ +.. _LAMMPS: http://lammps.sandia.gov/ +.. _NAMD: http://www.ks.uiuc.edu/Research/namd/ +.. _Gromacs: http://www.gromacs.org/ + +.. _CHARMM-style: + http://www.charmm.org/documentation/c37b1/select.html + +.. TODO: more about philosophy etc... copy and paste from paper + +Using MDAnalysis in python +========================== + +If you've installed MDAnalysis in the standard python modules location, load +from within the interpreter:: + + from MDAnalysis import * + +or :: + + import MDAnalysis as mda + +The idea behind MDAnalysis is to get trajectory data into NumPy_ +:class:`numpy.ndarray` arrays, where it can then be easily manipulated using +all the power in NumPy_ and SciPy_. + +MDAnalysis works well both in scripts and in interactive use. The developers +very much recommend using MDAnalysis from within the IPython_ Python shell. It +allows one to interactively explore the objects (using TAB-completion and +online help), do analysis and immediately plot results. The examples in this manual +are typically run from an interactive :program:`ipython` session. + +Invariably, a MDAnalysis session starts with loading data into the +:class:`~MDAnalysis.core.universe.Universe` class (which can be accessed +as :class:`MDAnalysis.Universe`):: + + import MDAnalysis as mda + universe = mda.Universe(topology, trajectory) + +- The *topology* file lists the atoms and residues (and also their + connectivity). It can be a CHARMM/XPLOR/NAMD PSF file or a coordinate file + such as a Protein Databank Brookhaven PDB file, a CHARMM card coordinate file + (CRD), or a GROMOS/Gromacs GRO file. + +- The *trajectory* contains a list of coordinates in the order defined in the + *topology*. It can either be a single frame (PDB, CRD, and GRO are all read) + or a time series of coordinate frames such as a CHARMM/NAMD/LAMMPS DCD + binary file, a Gromacs XTC/TRR trajectory, or a XYZ trajectory (possibly + compressed with gzip or bzip2). + +For the remainder of this introduction we are using a short example trajectory +that is provided with MDAnalysis (as part of the `MDAnalysis test suite`_). The +trajectory is loaded with :: + + >>> from MDAnalysis import Universe + >>> from MDAnalysis.tests.datafiles import PSF,DCD + >>> u = Universe(PSF, DCD) + +(The ``>>>`` signs are the Python input prompt and are not to be typed; they +just make clear in the examples what is input and what is output.) + +The :class:`~MDAnalysis.core.universe.Universe` contains a number of important attributes, +the most important ones of which is +:attr:`~MDAnalysis.core.universe.Universe.atoms`:: + + >>> print(u.atoms) + + +:attr:`Universe.atoms` is a +:class:`~MDAnalysis.core.groups.AtomGroup` and can be thought of as +list consisting of :class:`~MDAnalysis.core.groups.Atom` +objects. The :class:`~MDAnalysis.core.groups.Atom` is the +elementary and fundamental object in MDAnalysis. + +The :attr:`MDAnalysis.Universe.trajectory` attribute gives access to the coordinates +over time:: + + >>> print(u.trajectory) + < DCDReader '/..../MDAnalysis/tests/data/adk_dims.dcd' with 98 frames of 3341 atoms (0 fixed) > + +Finally, the :meth:`MDAnalysis.Universe.select_atoms` method generates a new +:class:`~MDAnalysis.core.groups.AtomGroup` according to a selection criterion + + >>> calphas = u.select_atoms("name CA") + >>> print(calphas) + + +as described in :ref:`selection-commands-label`. + +.. _SciPy: http://www.scipy.org/ +.. _IPython: http://ipython.scipy.org/ +.. _MDAnalysis test suite: https://github.com/MDAnalysis/mdanalysis/wiki/UnitTests + + +Examples +======== + +The easiest way to get started with MDAnalysis is to read this introduction and the chapters on :ref:`topology-label` and :ref:`selection-commands-label`, then explore the package interactively in IPython_ or another interactive Python interpreter. + +Included trajectories +--------------------- + +MDAnalysis comes with a number of real trajectories for testing. You +can also use them to explore the functionality and ensure that +everything is working properly:: + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF,DCD, PDB,XTC + u_dims_adk = mda.Universe(PSF,DCD) + u_eq_adk = mda.Universe(PDB, XTC) + +The PSF and DCD file are a closed-form-to-open-form transition of +Adenylate Kinase (from [Beckstein2009]_) and the PDB+XTC file are ten +frames from a Gromacs simulation of AdK solvated in TIP4P water with +the OPLS/AA force field. + +.. [Beckstein2009] O. Beckstein, E.J. Denning, J.R. Perilla, and + T.B. Woolf. Zipping and Unzipping of Adenylate + Kinase: Atomistic Insights into the Ensemble of + Open <--> Closed Transitions. *J Mol Biol* **394** + (2009), 160--176, doi:`10.1016/j.jmb.2009.09.009`_ + +.. _`10.1016/j.jmb.2009.09.009`: http://dx.doi.org/10.1016/j.jmb.2009.09.009 + +Code snippets +------------- + +The source code distribution comes with a directory `examples`_ that +contains a number of code snippets that show how to use certain +aspects of MDAnalysis. + +For instance, there is code that shows how to + +* fit a trajectory to a reference structure using the QCP + RMSD-alignment code in :mod:`MDAnalysis.core.qcprot` + (`rmsfit_qcp.py`_); + +* do a block-averaging error analysis (`blocks.py`_); + +* calculate a potential profile across a membrane (`potential_profile.py`_); + +* do a native contact analysis using :mod:`MDAnalysis.analysis.contacts` (`nativecontacts.py`_) + +* get the lipid composition of the individual leaflets of a bilayer + using :mod:`MDAnalysis.analysis.leaflet` (`membrane-leaflets.py`_); + +* define the multimeric states of a number of transmembrane peptides + via clustering (`multimers-analysis.py`_); + +* convert between trajectory formats (e.g. `dcd2xtc.py`_ or `amber2dcd.py`_) + +* use MDAnalysis for simple model building (`make_MthK_tetramer.py`_); + +and more. + +.. Links to the stable git repository: + +.. _examples: + https://github.com/MDAnalysis/MDAnalysisCookbook/tree/master/examples/ + +.. _`rmsfit_qcp.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/rmsfit_qcp.py +.. _`blocks.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/blocks.py +.. _`potential_profile.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/potential_profile.py +.. _`nativecontacts.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/nativecontacts.py +.. _`membrane-leaflets.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/membrane-leaflets.py +.. _`multimers-analysis.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/multimers-analysis.py +.. _`dcd2xtc.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/dcd2xtc.py +.. _`amber2dcd.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/amber2dcd.py +.. _`make_MthK_tetramer.py`: + https://github.com/MDAnalysis/MDAnalysisCookbook/blob/master/examples/make_MthK_tetramer.py diff --git a/2.7.0-dev0/_sources/documentation_pages/references.rst.txt b/2.7.0-dev0/_sources/documentation_pages/references.rst.txt new file mode 100644 index 0000000000..7de33322fd --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/references.rst.txt @@ -0,0 +1,277 @@ +.. -*- coding: utf-8 -*- +.. note: make sure that no lines accidentally start with a single character +.. followed by a period: reST interprets it as an enumerated list and +.. messes up the formatting + +.. The references are accessible globally; you can cite these papers anywhere +.. in the docs. + +.. _references: + +************ + References +************ + +MDAnalysis and the included algorithms are scientific software that +are described in academic publications. **Please cite these papers when you use +MDAnalysis in published work.** + +It is possible to :ref:`automatically generate a list of references +` for any program that uses +MDAnalysis. This list (in common reference manager formats) contains +the citations associated with the specific algorithms and libraries +that were used in the program. + + +Citations for the whole MDAnalysis library +========================================== + +When using MDAnalysis in published work, please cite +[Michaud-Agrawal2011]_ and [Gowers2016]_. + +(We are currently asking you to cite *both* papers if at all possible +because the 2016 paper describes many updates to the original 2011 +paper and neither paper on its own provides a comprehensive +description of the library. We will publish a complete self-contained +paper with the upcoming 1.0 release of MDAnalysis, which will then +supersede these two citations.) + + +.. [Michaud-Agrawal2011] 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`_ + +.. [Gowers2016] 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 98-105, + Austin, TX, 2016. SciPy. doi:`10.25080/Majora-629e541a-00e`_ + +.. _`10.1002/jcc.21787`: http://dx.doi.org/10.1002/jcc.21787 +.. _`10.25080/Majora-629e541a-00e`: + https://doi.org/10.25080/Majora-629e541a-00e + +.. _`MDAnalysis: A Python package for the rapid analysis of molecular + dynamics simulations`: + http://conference.scipy.org/proceedings/scipy2016/oliver_beckstein.html + + +.. _references-components: + +Citations for included algorithms and modules +============================================= + +If you use the RMSD calculation (:mod:`MDAnalysis.analysis.rms`) or alignment +code (:mod:`MDAnalysis.analysis.align`) that uses the +:mod:`~MDAnalysis.core.qcprot` module please also cite [Theobald2005b]_ and +[Liu2010b]_. + +.. [Theobald2005b] Douglas L. Theobald. Rapid calculation of RMSD using a + quaternion-based characteristic polynomial. *Acta Crystallographica A* + **61** (2005), 478-480. + +.. [Liu2010b] Pu Liu, Dmitris K. Agrafiotis, and Douglas L. Theobald. Fast + determination of the optimal rotational matrix for macromolecular + superpositions. *J. Comput. Chem.* **31** (2010), 1561–1563. + +If you use the helix analysis algorithm HELANAL_ in +:mod:`MDAnalysis.analysis.helanal` please cite [Bansal2000b]_. + +.. [Bansal2000b] Bansal M, Kumar S, Velavan R. HELANAL — A program to + characterise helix geometry in proteins. *J. Biomol. Struct. Dyn.* **17** + (2000), 811–819 + +.. _HELANAL: http://www.ccrnp.ncifcrf.gov/users/kumarsan/HELANAL/helanal.html + +If you use the GNM trajectory analysis code in +:mod:`MDAnalysis.analysis.gnm` please cite [Hall2007b]_. + +.. [Hall2007b] Benjamin A. Hall, Samantha L. Kaye, Andy Pang, Rafael Perera, and + Philip C. Biggin. Characterization of Protein Conformational States by + Normal-Mode Frequencies. *JACS* **129** (2007), 11394–11401. + +If you use the water analysis code in +:mod:`MDAnalysis.analysis.waterdynamics` please cite [Araya-Secchi2014b]_. + +.. [Araya-Secchi2014b] R. Araya-Secchi., Tomas Perez-Acle, Seung-gu Kang, Tien + Huynh, Alejandro Bernardin, Yerko Escalona, Jose-Antonio Garate, + Agustin D. Martinez, Isaac E. Garcia, Juan C. Saez, Ruhong + Zhou. Characterization of a novel water pocket inside the human Cx26 + hemichannel structure. *Biophysical Journal*, **107** (2014), 599-612. + +If you use the Path Similarity Analysis (PSA) code in +:mod:`MDAnalysis.analysis.psa` please cite [Seyler2015b]_. + +.. [Seyler2015b] Seyler SL, Kumar A, Thorpe MF, Beckstein O. Path Similarity + Analysis: A Method for Quantifying Macromolecular Pathways. *PLoS + Comput Biol* **11** (2015), e1004568. doi: `10.1371/journal.pcbi.1004568`_ + +.. _`10.1371/journal.pcbi.1004568`: http://doi.org/10.1371/journal.pcbi.1004568 + +If you use the implementation of the ENCORE ensemble analysis in +:mod:`MDAnalysis.analysis.encore` please cite [Tiberti2015b]_. + +.. [Tiberti2015b] M. Tiberti, E. Papaleo, T. Bengtsen, W. Boomsma, + and K. Lindorff-Larsen. ENCORE: Software for quantitative ensemble + comparison. *PLoS Comput Biol*, **11** (2015), e1004415. doi: + `10.1371/journal.pcbi.1004415`_ + +.. _`10.1371/journal.pcbi.1004415`: http://doi.org/10.1371/journal.pcbi.1004415 + +If you use the streamline visualization in +:mod:`MDAnalysis.visualization.streamlines` and +:mod:`MDAnalysis.visualization.streamlines_3D` please cite [Chavent2014b]_. + +.. [Chavent2014b] Chavent, M., Reddy, T., Dahl, C.E., Goose, J., Jobard, B., + and Sansom, M.S.P. Methodologies for the analysis of instantaneous lipid + diffusion in MD simulations of large membrane systems. *Faraday + Discussions* **169** (2014), 455–475. doi: `10.1039/c3fd00145h`_ + +.. _`10.1039/c3fd00145h`: https://doi.org/10.1039/c3fd00145h + +If you use the hydrogen bond analysis code in +:mod:`MDAnalysis.analysis.hydrogenbonds.hbond_analysis` please cite [Smith2019]_. + +.. [Smith2019] P. Smith, R. M. Ziolek, E. Gazzarrini, D. M. Owen, and C. D. Lorenz. + On the interaction of hyaluronic acid with synovial fluid lipid membranes. *PCCP* + **21** (2019), 9845-9857. doi: `10.1039/C9CP01532A`_ + +.. _`10.1039/C9CP01532A`: http://dx.doi.org/10.1039/C9CP01532A + +If you use :meth:`~MDAnalysis.analysis.pca.PCA.rmsip` or +:func:`~MDAnalysis.analysis.pca.rmsip` please cite [Amadei1999]_ and +[Leo-Macias2004]_ . + +.. [Amadei1999] Amadei, A., Ceruso, M. A. & Nola, A. D. + On the convergence of the conformational coordinates basis set obtained by the essential dynamics analysis of proteins’ molecular dynamics simulations. + *Proteins: Structure, Function, and Bioinformatics* **36**, 419–424 (1999). + doi: `10.1002/(SICI)1097-0134(19990901)36:4<419::AID-PROT5>3.0.CO;2-U`_ + +.. _`10.1002/(SICI)1097-0134(19990901)36:4<419::AID-PROT5>3.0.CO;2-U`: https://doi.org/10.1002/(SICI)1097-0134(19990901)36:4%3C419::AID-PROT5%3E3.0.CO;2-U + +.. [Leo-Macias2004] Leo-Macias, A., Lopez-Romero, P., Lupyan, D., Zerbino, D. & Ortiz, A. R. + An Analysis of Core Deformations in Protein Superfamilies. + *Biophys J* **88**, 1291–1299 (2005). doi: `10.1529/biophysj.104.052449`_ + +.. _`10.1529/biophysj.104.052449`: https://dx.doi.org/10.1529%2Fbiophysj.104.052449 + +If you use :meth:`~MDAnalysis.analysis.pca.PCA.cumulative_overlap` or +:func:`~MDAnalysis.analysis.pca.cumulative_overlap` please cite [Yang2008]_ . + +.. [Yang2008] Yang, L., Song, G., Carriquiry, A. & Jernigan, R. L. + Close Correspondence between the Motions from Principal Component Analysis of Multiple HIV-1 Protease Structures and Elastic Network Modes. + *Structure* **16**, 321–330 (2008). doi: `10.1016/j.str.2007.12.011`_ + +.. _`10.1016/j.str.2007.12.011`: https://dx.doi.org/10.1016/j.str.2007.12.011 + +If you use the Mean Squared Displacement analysis code in +:mod:`MDAnalysis.analysis.msd` please cite [Calandri2011]_ and [Buyl2018]_. + +.. [Calandri2011] Calandrini, V., Pellegrini, E., Calligari, P., Hinsen, K., Kneller, G. R. + NMoldyn-Interfacing Spectroscopic Experiments, Molecular Dynamics Simulations and Models for Time Correlation Functions. + *Collect. SFN*, **12**, 201–232 (2011). doi: `10.1051/sfn/201112010`_ + +.. _`10.1051/sfn/201112010`: https://doi.org/10.1051/sfn/201112010 + +.. [Buyl2018] Buyl, P. tidynamics: A tiny package to compute the dynamics of stochastic and molecular simulations. Journal of Open Source Software, + 3(28), 877 (2018). doi: `10.21105/joss.00877`_ + +.. _`10.21105/joss.00877`: https://doi.org/10.21105/joss.00877 + +If you calculate shape parameters using +:meth:`~MDAnalysis.core.group.AtomGroup.shape_parameter`, +:meth:`~MDAnalysis.core.group.ResidueGroup.shape_parameter`, +:meth:`~MDAnalysis.core.group.SegmentGroup.shape_parameter` +please cite [Dima2004a]_. + +.. [Dima2004a] Dima, R. I., & Thirumalai, D. (2004). Asymmetry + in the shapes of folded and denatured states of + proteins. *J Phys Chem B*, 108(21), + 6564-6570. doi:`10.1021/jp037128y + `_ + +If you calculate asphericities using +:meth:`~MDAnalysis.core.group.AtomGroup.asphericity`, +:meth:`~MDAnalysis.core.group.ResidueGroup.asphericity`, +:meth:`~MDAnalysis.core.group.SegmentGroup.asphericity` +please cite [Dima2004b]_. + +.. [Dima2004b] Dima, R. I., & Thirumalai, D. (2004). Asymmetry + in the shapes of folded and denatured states of + proteins. *J Phys Chem B*, 108(21), + 6564-6570. doi:`10.1021/jp037128y + `_ + +If you use use the dielectric analysis code in +:class:`~MDAnalysis.analysis.dielectric.DielectricConstant` please cite [Neumann1983]_. + +.. [Neumann1983] Neumann, M. (1983). Dipole + Moment Fluctuation Formulas in Computer Simulations of Polar Systems. + *Molecular Physics* **50**, no. 4, 841–858. doi: `10.1080/00268978300102721`_ + +.. _`10.1080/00268978300102721`: http://doi.org/10.1080/00268978300102721 + +If you use H5MD files using +:mod:`MDAnalysis.coordinates.H5MD.py`, please cite [Buyl2013]_ and +[Jakupovic2021]_. + +.. [Buyl2013] Buyl P., Colberg P., and Höfling F.(2013). + H5MD: A structured, efficient, and portable file format for molecular data. + *Computer Physics Communications*, 185. doi:`10.1016/j.cpc.2014.01.018. + `_ + +.. [Jakupovic2021] Jakupovic E. and Beckstein O., MPI-parallel Molecular + Dynamics Trajectory Analysis with the H5MD Format in the MDAnalysis + Python Package, in *Proceedings of the 20th Python in Science Conference*, + (Meghann Agarwal, Chris Calloway, Dillon Niederhut, and David Shupe, eds.), + pp. 18 – 26, 2021. doi:`10.25080/majora-1b6fd038-005. + `_ + + +.. _citations-using-duecredit: + + +Citations using Duecredit +========================= + +Citations can be automatically generated using duecredit_, depending on the +packages used. Duecredit is easy to install via ``pip``. Simply type: + +.. code-block:: bash + + pip install duecredit + +duecredit_ will remain an optional dependency, i.e. any code using +MDAnalysis will work correctly even without duecredit installed. + +A list of citations for ``yourscript.py`` can be obtained using simple +commands. + +.. code-block:: bash + + cd /path/to/yourmodule + python -m duecredit yourscript.py + +or set the environment variable :envvar:`DUECREDIT_ENABLE` + +.. code-block:: bash + + DUECREDIT_ENABLE=yes python yourscript.py + +Once the citations have been extracted (to a hidden file in the +current directory), you can use the :program:`duecredit` program to +export them to different formats. For example, one can display them in +BibTeX format, using: + +.. code-block:: bash + + duecredit summary --format=bibtex + + +**Please cite your use of MDAnalysis and the packages and algorithms +that it uses. Thanks!** + + +.. _duecredit: https://github.com/duecredit/duecredit diff --git a/2.7.0-dev0/_sources/documentation_pages/selections.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections.rst.txt new file mode 100644 index 0000000000..6ee7f26bc2 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections.rst.txt @@ -0,0 +1,468 @@ +.. -*- coding: utf-8 -*- +.. _selection-commands-label: + +==================== + Selection commands +==================== + +Once you have the :meth:`~MDAnalysis.core.universe.Universe` object, you can +select atoms (using a syntax very similar to `CHARMM's atom selection +syntax`_):: + + >>> kalp = universe.select_atoms("segid KALP") + +.. _`CHARMM's atom selection syntax`: + https://www.charmm.org/charmm/documentation/by-version/c45b1/select.html + +The :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` method of a +:class:`~MDAnalysis.core.groups.AtomGroup` or a +:class:`~MDAnalysis.core.universe.Universe` returns a +:class:`~MDAnalysis.core.groups.AtomGroup`, so you can use all the methods +defined for AtomGroups on them. Selections always return an +:class:`~MDAnalysis.core.groups.AtomGroup` with atoms sorted according to their +index in the topology (this is to ensure that there are not any duplicates, +which can happen with complicated selections). + +One can group subselections using parentheses:: + + >>> universe.select_atoms("segid DMPC and not (name H* or type OW)") + + +Almost all the basic CHARMM selections work. + +It is also possible to export selections for external software +packages with the help of :ref:`Selection exporters`. + +.. note:: + + By default, atoms are sorted by index in the output AtomGroup. + For example, the below code will return the first, second, and + sixth atom in ``ag``:: + + >>> ag = u.select_atoms("name N") + >>> ag2 = ag[[5, 1, 0]] + >>> ag3 = ag2.select_atoms("name N") + >>> np.all(ag3.ix == ag2.ix) + False + + You can turn off sorting behavior with the ``sorted`` keyword:: + + >>> ag = u.select_atoms("name N") + >>> ag2 = ag[[5, 1, 0]] + >>> ag3 = ag2.select_atoms("name N", sorted=False) + >>> np.all(ag3.ix == ag2.ix) + True + + For further details on ordered selections, see :ref:`ordered-selections-label`. + + +Selection Keywords +================== + +The following describes all selection keywords currently understood by the +selection parser. The following applies to all selections: + +* Keywords are case sensitive. +* Atoms are automatically sequentially ordered in a resulting selection (see + notes below on :ref:`ordered-selections-label` for how to circumvent this if + necessary). +* Selections are parsed left to right and parentheses can be used for + grouping. +* You can use the singular name of any topology attribute as a selection + keyword. `Defined topology attributes`_ are listed in the User Guide. + Alternatively, you can define a + :class:`~MDAnalysis.core.topologyattrs.TopologyAttr` yourself, + providing that the attribute ``dtype`` is one of ``int``, ``float``, + ``str`` (or ``object``), or ``bool``. + However, the topology must contain this attribute information for + the selection to work. + + * Selections of attributes that are integers or floats can use the + syntax "myTopologyAttr 0 - 2", "myTopologyAttr 0:2", or + "myTopologyAttr 0 to 2", to select a range with + both ends inclusive. Whitespace and negative numbers are allowed. + * "myTopologyAttr 0" can be used to select all atoms + matching the value; however, this can be tricky with floats because of + precision differences and we recommend using a range like above when + possible. + * Boolean selections default to True, so "myTopologyAttr" and + "myTopologyAttr True" both give all atoms with + ``myTopologyAttr == True``. + +.. seealso:: + + Regular expression patterns + :data:`~MDAnalysis.core.selection.FLOAT_PATTERN` for matching floats; + :data:`~MDAnalysis.core.selection.INT_PATTERN` for matching integers; + and :data:`~MDAnalysis.core.selection.RANGE_PATTERN` for matching + selection ranges. + + +.. _`Defined topology attributes`: https://userguide.mdanalysis.org/stable/topology_system.html#format-specific-attributes + + +Simple selections +----------------- + +This is a non-exhaustive list of the available selection keywords. As noted +in the dot point above, keywords will be automatically generated for any +suitable :class:`~MDAnalysis.core.topologyattrs.TopologyAttr`. A list of +`Defined topology attributes`_ is available in the User Guide. + +protein, backbone, nucleic, nucleicbackbone + selects all atoms that belong to a standard set of residues; a protein + is identfied by a hard-coded set of residue names so it may not + work for esoteric residues. + +segid *seg-name* + select by segid (as given in the topology), e.g. ``segid 4AKE`` or + ``segid DMPC`` + +resid *residue-number-range* + resid can take a single residue number or a range of numbers. A range + consists of two numbers separated by a colon (inclusive) such + as ``resid 1:5``. A residue number ("resid") is taken directly from the + topology. + +resnum *resnum-number-range* + resnum is the canonical residue number; typically it is set to the + residue id in the original PDB structure. + +resname *residue-name* + select by residue name, e.g. ``resname LYS`` + +name *atom-name* + select by atom name (as given in the topology). Often, this is force + field dependent. Example: ``name CA`` (for Cα atoms) or ``name + OW`` (for SPC water oxygen) + +type *atom-type* + select by atom type; this is either a string or a number and depends on + the force field; it is read from the topology file (e.g. the CHARMM PSF + file contains numeric atom types). It has non-sensical values when a + PDB or GRO file is used as a topology. + +atom *seg-name* *residue-number* *atom-name* + a selector for a single atom consisting of segid resid atomname, + e.g. ``DMPC 1 C2`` selects the C2 carbon of the first residue of the + DMPC segment + +altLoc *alternative-location* + a selection for atoms where alternative locations are available, which is + often the case with high-resolution crystal structures + e.g. ``resid 4 and resname ALA and altLoc B`` selects only the atoms of ALA-4 + that have an altLoc B record. + +chainID *chain-name* + a selection for atoms where chainIDs have been defined. + +element *element-name* + a selection for atoms where elements have been defined. e.g. ``element H C`` + +moltype *molecule-type* + select by molecule type, e.g. ``moltype Protein_A``. At the moment, only + the TPR format defines the molecule type. + +smarts *SMARTS-query* + select atoms using Daylight's SMARTS queries, e.g. ``smarts + [#7;R]`` to find nitrogen atoms in rings. Requires RDKit. + All matches are combined as a single unique match. The `smarts` + selection accepts two sets of key word arguments from + `select_atoms()`: the ``rdkit_kwargs`` are passed internally to + `RDKitConverter.convert()` and the ``smarts_kwargs`` are passed to + RDKit's `GetSubstructMatches + `_. + By default, the `useChirality` kwarg in ``rdkit_kwargs`` is set to true + and maxMatches in ``smarts_kwargs`` is ``max(1000, 10 * n_atoms)``, where + ``n_atoms`` is either ``len(AtomGroup)`` or ``len(Universe.atoms)``, + whichever is applicable. Note that the number of matches can occasionally + exceed the default value of maxMatches, causing too few atoms to be + returned. If this occurs, a warning will be issued. The problem can be + fixed by increasing the value of maxMatches. This behavior may be updated + in the future + +chiral *R | S* + select a particular stereocenter. e.g. ``name C and chirality S`` + to select only S-chiral carbon atoms. Only ``R`` and ``S`` will be + possible options but other values will not raise an error. + +formalcharge *formal-charge* + select atoms based on their formal charge, e.g. + ``name O and formalcharge -1`` to select all oxygens with a + negative 1 formal charge. + +Pattern matching +---------------- + +The pattern matching notation described below is used to specify +patterns for matching strings (based on :mod:`fnmatch`): + +``?`` + Is a pattern that will match any single character. For example, + ``resname T?R`` selects residues named "TYR" and "THR". +``*`` + Is a pattern that will match multiple characters. For example, + ``GL*`` selects all strings that start with "GL" such as "GLU", + "GLY", "GLX29", "GLN". +``[seq]`` + Would match any character in seq. For example, "resname GL[NY]" + selects all residues named "GLN" or "GLY" but would not select + "GLU". +``[!seq]`` + Would match any character not in seq. For example, "resname GL[!NY]" + would match residues named "GLU" but would not match "GLN" or "GLY". + +Boolean +------- + +not + all atoms not in the selection, e.g. ``not protein`` selects all atoms + that aren't part of a protein + +and, or + combine two selections according to the rules of boolean algebra, + e.g. ``protein and not (resname ALA or resname LYS)`` selects all atoms + that belong to a protein, but are not in a lysine or alanine residue + +Geometric +--------- + +around *distance* *selection* + selects all atoms a certain cutoff away from another selection, + e.g. ``around 3.5 protein`` selects all atoms not belonging to protein + that are within 3.5 Angstroms from the protein + +sphlayer *innerRadius* *externalRadius* *selection* + selects all atoms within a spherical layer centered in the center of + geometry (COG) of a given selection, e.g., ``sphlayer 2.4 6.0 ( protein + and ( resid 130 or resid 80 ) )`` selects the center of geometry of + protein, resid 130, resid 80 and creates a spherical layer of inner + radius 2.4 and external radius 6.0 around the COG. + +sphzone *externalRadius* *selection* + selects all atoms within a spherical zone centered in the center of + geometry (COG) of a given selection, e.g. ``sphzone 6.0 ( protein and ( + resid 130 or resid 80 ) )`` selects the center of geometry of protein, + resid 130, resid 80 and creates a sphere of radius 6.0 around the COG. + +isolayer *inner radius* *outer radius* *selection* + Similar to sphlayer, but will find layer around all referenced atoms. + For example, if the atom types for a polymer backbone were chosen, then + an isolayer parallel to the backbone will be generated. As another + example, if a set of ions were chosen as a reference to isolate the second + hydration layer, then they will all be included in the same group. + However, in the instance that a molecule is in the second hydration layer + of one ion and the first hydration layer of another, those atoms will not + be included. + +cylayer *innerRadius* *externalRadius* *zMax* *zMin* *selection* + selects all atoms within a cylindric layer centered in the center of + geometry (COG) of a given selection, e.g. ``cylayer 5 10 10 -8 + protein`` selects the center of geometry of protein, and creates a + cylindrical layer of inner radius 5, external radius 10 centered on the + COG. In z, the cylinder extends from 10 above the COG to 8 + below. Positive values for *zMin*, or negative ones for *zMax*, are + allowed. + +cyzone *externalRadius* *zMax* *zMin* *selection* + selects all atoms within a cylindric zone centered in the center of + geometry (COG) of a given selection, e.g. ``cyzone 15 4 -8 protein and + resid 42`` selects the center of geometry of protein and resid 42, and + creates a cylinder of external radius 15 centered on the COG. In z, the + cylinder extends from 4 above the COG to 8 below. Positive values for + *zMin*, or negative ones for *zMax*, are allowed. + + .. versionchanged:: 0.10.0 + keywords *cyzone* and *cylayer* now take *zMax* and *zMin* to be + relative to the COG of *selection*, instead of absolute z-values + in the box. + +point *x* *y* *z* *distance* + selects all atoms within a cutoff of a point in space, make sure + coordinate is separated by spaces, e.g. ``point 5.0 5.0 5.0 3.5`` + selects all atoms within 3.5 Angstroms of the coordinate (5.0, 5.0, + 5.0) + +prop [abs] *property* *operator* *value* + selects atoms based on position, using *property* **x**, **y**, or + **z** coordinate. Supports the **abs** keyword (for absolute value) and + the following *operators*: **<, >, <=, >=, ==, !=**. For example, + ``prop z >= 5.0`` selects all atoms with z coordinate greater than 5.0; + ``prop abs z <= 5.0`` selects all atoms within -5.0 <= z <= 5.0. + + +.. note:: + By default periodicity **is** taken into account with geometric + selections, i.e. selections will find atoms that are in different + periodic images. + To control this behaviour, use the boolean ``"periodic"`` keyword + argument of :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms`. + + +Similarity and connectivity +--------------------------- + +same *subkeyword* as *selection* + selects all atoms that have the same *subkeyword* value as any atom in + *selection*. Allowed *subkeyword* values are the atom properties: ``name, + type, resname, resid, segid, mass, charge, radius, bfactor, resnum``, the + groups an atom belong to: ``residue, segment, fragment``, and the atom + coordinates ``x, y, z``. + +byres *selection* + selects all atoms that are in the same segment and residue as selection, + e.g. specify the subselection after the byres keyword. ``byres`` is a + shortcut to ``same residue as`` + +bonded *selection* + selects all atoms that are bonded to selection + eg: ``select name H and bonded name O`` selects only hydrogens bonded to + oxygens + +Index +----- + +bynum *index-range* + selects all atoms within a range of (1-based) inclusive indices, + e.g. ``bynum 1`` selects the first atom in the universe; ``bynum 5:10`` + selects atoms 5 through 10 inclusive. All atoms in the + :class:`MDAnalysis.Universe` are consecutively numbered, and the index + runs from 1 up to the total number of atoms. + +id *index-range* + selects all atoms in a range of (1-based) inclusive indices, e.g. ``id 1`` selects + all the atoms with id 1; ``id 5:7`` selects all atoms with ids 5, all atoms with + ids 6 and all atoms with ids 7. + +index *index-range* + selects all atoms within a range of (0-based) inclusive indices, + e.g. ``index 0`` selects the first atom in the universe; ``index 5:10`` + selects atoms 6 through 11 inclusive. All atoms in the + :class:`MDAnalysis.Universe` are consecutively numbered, and the index + runs from 0 up to the total number of atoms - 1. + + +.. note:: + Conventionally, ``id`` corresponds to the serial number in the PDB format. In contrast + to ``bynum``, the ``id`` topology attribute is not necessarily continuous, ordered, or + unique, and can be arbitrarily assigned by the user. + + +.. _pre-selections-label: + +Preexisting selections and modifiers +------------------------------------ + +group `group-name` + selects the atoms in the :class:`AtomGroup` passed to the function as an + argument named `group-name`. Only the atoms common to `group-name` and the + instance :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` was called + from will be considered, unless ``group`` is preceded by the ``global`` + keyword. `group-name` will be included in the parsing just by comparison of + atom indices. This means that it is up to the user to make sure the + `group-name` group was defined in an appropriate :class:`Universe`. + +global *selection* + by default, when issuing + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` from an + :class:`~MDAnalysis.core.groups.AtomGroup`, selections and subselections + are returned intersected with the atoms of that instance. Prefixing a + selection term with ``global`` causes its selection to be returned in its + entirety. As an example, the ``global`` keyword allows for + ``lipids.select_atoms("around 10 global protein")`` --- where ``lipids`` is + a group that does not contain any proteins. Were ``global`` absent, the + result would be an empty selection since the ``protein`` subselection would + itself be empty. When issuing + :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` from a + :class:`~MDAnalysis.core.universe.Universe`, ``global`` is ignored. + +.. versionchanged:: 1.0.0 + The ``fullgroup`` selection has now been removed. Please use the equivalent + ``global group`` selection. + +Dynamic selections +================== + +By default :meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` returns an +:class:`~MDAnalysis.core.groups.AtomGroup`, in which the list of atoms is +constant across trajectory frame changes. If +:meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` is invoked with named +argument ``updating`` set to ``True``, an +:class:`~MDAnalysis.core.groups.UpdatingAtomGroup` instance will be returned +instead. It behaves just like an :class:`~MDAnalysis.core.groups.AtomGroup` +object, with the difference that the selection expressions are re-evaluated +every time the trajectory frame changes (this happens lazily, only when the +:class:`~MDAnalysis.core.groups.UpdatingAtomGroup` object is accessed so that +there is no redundant updating going on):: + + # A dynamic selection of corner atoms: + >>> ag_updating = universe.select_atoms("prop x < 5 and prop y < 5 and prop z < 5", updating=True) + >>> ag_updating + + >>> universe.trajectory.next() + >>> ag_updating + + +Using the ``group`` selection keyword for +:ref:`preexisting-selections `, one can +make updating selections depend on +:class:`~MDAnalysis.core.groups.AtomGroup`, or even other +:class:`~MDAnalysis.core.groups.UpdatingAtomGroup`, instances. +Likewise, making an updating selection from an already updating group will +cause later updates to also reflect the updating of the base group:: + + >>> chained_ag_updating = ag_updating.select_atoms("resid 1:1000", updating=True) + >>> chained_ag_updating + + >>> universe.trajectory.next() + >>> chained_ag_updating + + +Finally, a non-updating selection or a slicing/addition operation made on an +:class:`~MDAnalysis.core.groups.UpdatingAtomGroup` will return a static +:class:`~MDAnalysis.core.groups.AtomGroup`, which will no longer update +across frames:: + + >>> static_ag = ag_updating.select_atoms("resid 1:1000") + >>> static_ag + + >>> universe.trajectory.next() + >>> static_ag + + +.. _ordered-selections-label: + +Ordered selections +================== + +:meth:`~MDAnalysis.core.groups.AtomGroup.select_atoms` sorts the atoms +in the :class:`~MDAnalysis.core.groups.AtomGroup` by atom index before +returning them (this is to eliminate possible duplicates in the +selection). If the ordering of atoms is crucial (for instance when +describing angles or dihedrals) or if duplicate atoms are required +then one has to concatenate multiple AtomGroups, which does not sort +them. + +The most straightforward way to concatentate two AtomGroups is by using the +``+`` operator:: + + >>> ordered = u.select_atoms("segid DMPC and resid 3 and name P") + u.select_atoms("segid DMPC and resid 2 and name P") + >>> print(list(ordered)) + [< Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>, + < Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>] + +A shortcut is to provide *two or more* selections to +:meth:`~MDAnalysis.core.universe.Universe.select_atoms`, which then +does the concatenation automatically:: + + >>> print(list(universe.select_atoms("segid DMPC and resid 3 and name P", "segid DMPC and resid 2 and name P"))) + [< Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>, + < Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>] + +Just for comparison to show that a single selection string does not +work as one might expect:: + + # WRONG! + >>> print(list(universe.select_atoms("segid DMPC and (resid 3 or resid 2) and name P"))) + [< Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>, + < Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>] diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/base.rst.txt new file mode 100644 index 0000000000..20b0b2e3e4 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/base.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.selections.base diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/charmm.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/charmm.rst.txt new file mode 100644 index 0000000000..673e74204a --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/charmm.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.selections.charmm + diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/gromacs.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/gromacs.rst.txt new file mode 100644 index 0000000000..accc0123ad --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/gromacs.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.selections.gromacs diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/jmol.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/jmol.rst.txt new file mode 100644 index 0000000000..9fcce22020 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/jmol.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.selections.jmol diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/pymol.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/pymol.rst.txt new file mode 100644 index 0000000000..390fcdd838 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/pymol.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.selections.pymol + diff --git a/2.7.0-dev0/_sources/documentation_pages/selections/vmd.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections/vmd.rst.txt new file mode 100644 index 0000000000..be547a4d39 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections/vmd.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.selections.vmd + diff --git a/2.7.0-dev0/_sources/documentation_pages/selections_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/selections_modules.rst.txt new file mode 100644 index 0000000000..460a7a38ee --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/selections_modules.rst.txt @@ -0,0 +1,125 @@ +.. Contains the formatted docstrings for the core modules located in 'mdanalysis/MDAnalysis/core' + +.. _`Selection exporters`: + +******************* +Selection exporters +******************* + +The classes in this module allow writing a selection to a file that can be read by +*another program* to select the atoms in a MDAnalysis +:class:`MDAnalysis.core.groups.AtomGroup`. Such cross-package interoperability +allows a user to combine their favourite tools with MDAnalysis for further +visualization or simulation. + + +.. _Supported selection exporters: + +.. table:: Table of supported exporters and recognized file name extensions. + + +---------------+-----------+-------+--------------------------------------------+ + |Name | extension | IO | remarks | + +===============+===========+=======+============================================+ + | vmd | tcl | w | VMD_ macros, available in Representations; | + | | | | module :mod:`MDAnalysis.selections.vmd` | + +---------------+-----------+-------+--------------------------------------------+ + | pymol | pml | w | simple PyMOL_ selection string; | + | | | | module :mod:`MDAnalysis.selections.pymol` | + +---------------+-----------+-------+--------------------------------------------+ + | gromacs | ndx | w | Gromacs_ index file; | + | | | | module :mod:`MDAnalysis.selections.gromacs`| + +---------------+-----------+-------+--------------------------------------------+ + | charmm | str | w | CHARMM_ selection of individual atoms; | + | | | | module :mod:`MDAnalysis.selections.charmm` | + +---------------+-----------+-------+--------------------------------------------+ + | jmol | spt | w | Jmol_ selection commands; | + | | | | module :mod:`MDAnalysis.selections.jmol` | + +---------------+-----------+-------+--------------------------------------------+ + +How to write selections +======================= + +Single AtomGroup +---------------- + +The typical situation is that one has an +:class:`~MDAnalysis.core.groups.AtomGroup` and wants to work with the +same selection of atoms in a different package, for example, to +visualize the atoms in VMD_. First create an :class:`AtomGroup` (named +``g`` in the example below) and then use its +:class:`~MDAnalysis.core.groups.AtomGroup.write` method with the +appropriate *file extension* (see :ref:`Supported selection +exporters` for the recognized *extension*):: + + g = u.select_atoms('protein") + g.write("selections.vmd", name="mda_protein") + +In VMD_, sourcing the file ``selections.vmd`` (written in Tcl) defines +the "macro" ``mda_protein`` that contains the atom indices to select + +.. code-block:: tcl + + source selection.vmd + set sel [atomselect top mda_mdanalysis] + +and in the GUI the macro appears in the :menuselection:`Graphics --> +Representations` window in the list :guilabel:`Selections: Singlewords` as +"mda_protein". + + +Multiple selections +------------------- + +The :class:`~MDAnalysis.core.groups.AtomGroup.write` method can take +additional keyword arguments, including ``mode``. The default is +``mode="w"``, which will overwrite the provided file. If ``mode="a"`` +then the selection is *appended* to the file. + +Alternatively, one may use the +:class:`~MDAnalysis.selections.base.SelectionWriter` itself as a +context manager and write each :class:`AtomGroup` inside the +context. For example, to write multiple groups that were selected to +mark different parts of a lipid bilayer to Gromacs_ index file named +"leaflets.ndx":: + + with mda.selections.gromacs.SelectionWriter('leaflets.ndx', mode='w') as ndx: + ndx.write(upper_saturated, name='upper_sat') + ndx.write(lower_saturated, name='lower_sat') + ndx.write(upper_unsaturated, name='upper_unsat') + ndx.write(lower_unsaturated, name='lower_unsat') + +There is a separate :class:`SelectionWriter` for each format, as +described next. + + +Selection writers +================= + +There exist different :class:`~MDAnalysis.selections.base.SelectionWriterBase` +classes for different packages. The +:func:`~MDAnalysis.selections.get_writer` function can automatically pick +the appropriate one, based on the file name extension in the :ref:`Supported +selection exporters`. + +.. autofunction:: MDAnalysis.selections.get_writer + + +.. rubric:: Formats + +Each module implements a :class:`SelectionWriter` for a specific format. + +.. toctree:: + :maxdepth: 1 + + selections/vmd + selections/pymol + selections/gromacs + selections/charmm + selections/jmol + selections/base + +.. _CHARMM: http://www.charmm.org +.. _Gromacs: http://www.gromacs.org +.. _VMD: http://www.ks.uiuc.edu/Research/vmd/ +.. _PyMOL: http://www.pymol.org +.. _Jmol: http://wiki.jmol.org/ diff --git a/2.7.0-dev0/_sources/documentation_pages/topology.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology.rst.txt new file mode 100644 index 0000000000..ecf61b0af1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology.rst.txt @@ -0,0 +1,15 @@ +.. -*- coding: utf-8 -*- +.. _topology-label: + +===================== + The topology system +===================== + +As shown briefly in :ref:`overview-label`, the :class:`~MDAnalysis.core.universe.Universe` class is the primary object and core interface to molecular dynamics data in MDAnalysis. +When loading topology information from a file, as with :: + + >>> from MDAnalysis import Universe + >>> from MDAnalysis.tests.datafiles import PSF + >>> u = Universe(PSF) + +the file is read, the contents parsed, and a :class:`~MDAnalysis.core.topology.Topology` object is constructed from these contents. diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/CRDParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/CRDParser.rst.txt new file mode 100644 index 0000000000..faba597412 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/CRDParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.CRDParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/DLPolyParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/DLPolyParser.rst.txt new file mode 100644 index 0000000000..8364d67589 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/DLPolyParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.DLPolyParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/DMSParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/DMSParser.rst.txt new file mode 100644 index 0000000000..298e49cfab --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/DMSParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.DMSParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/ExtendedPDBParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/ExtendedPDBParser.rst.txt new file mode 100644 index 0000000000..cf5f3d2c43 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/ExtendedPDBParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.ExtendedPDBParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/FHIAIMSParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/FHIAIMSParser.rst.txt new file mode 100644 index 0000000000..2e05970984 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/FHIAIMSParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.FHIAIMSParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/GMSParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/GMSParser.rst.txt new file mode 100644 index 0000000000..94095d10d5 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/GMSParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.GMSParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/GROParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/GROParser.rst.txt new file mode 100644 index 0000000000..cd1f876ded --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/GROParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.GROParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/GSDParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/GSDParser.rst.txt new file mode 100644 index 0000000000..50f4d2f4a9 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/GSDParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.GSDParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/HoomdXMLParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/HoomdXMLParser.rst.txt new file mode 100644 index 0000000000..9d3b04b8b1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/HoomdXMLParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.HoomdXMLParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/ITPParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/ITPParser.rst.txt new file mode 100644 index 0000000000..e5d5511caf --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/ITPParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.ITPParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/LAMMPSParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/LAMMPSParser.rst.txt new file mode 100644 index 0000000000..cd1dde00f9 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/LAMMPSParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.LAMMPSParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/MMTFParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/MMTFParser.rst.txt new file mode 100644 index 0000000000..c86da7fe2e --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/MMTFParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.MMTFParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/MOL2Parser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/MOL2Parser.rst.txt new file mode 100644 index 0000000000..91488264a9 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/MOL2Parser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.MOL2Parser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/MinimalParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/MinimalParser.rst.txt new file mode 100644 index 0000000000..724af39e3f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/MinimalParser.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.MinimalParser diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/PDBParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/PDBParser.rst.txt new file mode 100644 index 0000000000..e7ec59cf64 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/PDBParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.PDBParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/PDBQTParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/PDBQTParser.rst.txt new file mode 100644 index 0000000000..c584b9cea7 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/PDBQTParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.PDBQTParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/PQRParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/PQRParser.rst.txt new file mode 100644 index 0000000000..6061c49e87 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/PQRParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.PQRParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/PSFParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/PSFParser.rst.txt new file mode 100644 index 0000000000..d8cf0f512c --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/PSFParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.PSFParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/TOPParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/TOPParser.rst.txt new file mode 100644 index 0000000000..d7738f98b3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/TOPParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.TOPParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/TPRParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/TPRParser.rst.txt new file mode 100644 index 0000000000..397ae3904b --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/TPRParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.TPRParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/TXYZParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/TXYZParser.rst.txt new file mode 100644 index 0000000000..c76cb9a797 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/TXYZParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.TXYZParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/XYZParser.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/XYZParser.rst.txt new file mode 100644 index 0000000000..cb29d637c1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/XYZParser.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.XYZParser + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/base.rst.txt new file mode 100644 index 0000000000..fc9b0d2fe1 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/base.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.base + diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/core.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/core.rst.txt new file mode 100644 index 0000000000..3e578bd2d8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/core.rst.txt @@ -0,0 +1,6 @@ +.. core.rst uses automatic listing of members at the moment; all the +.. other ones have the classes and functions explicitly listed in the +.. reST doc string. + +.. automodule:: MDAnalysis.topology.core + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/guessers.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/guessers.rst.txt new file mode 100644 index 0000000000..e6449f5ddc --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/guessers.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.topology.guessers + :members: diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/init.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/init.rst.txt new file mode 100644 index 0000000000..5517e354f3 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/init.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.__init__ diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/tables.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/tables.rst.txt new file mode 100644 index 0000000000..f4d579ec9c --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/tables.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.topology.tables diff --git a/2.7.0-dev0/_sources/documentation_pages/topology/tpr_util.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology/tpr_util.rst.txt new file mode 100644 index 0000000000..acf5427240 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology/tpr_util.rst.txt @@ -0,0 +1,21 @@ +=============================================== + Utility functions for the TPR topology parser +=============================================== + +The :mod:`MDAnalysis.topology.tpr` module contains classes and +functions on which the Gromacs TPR topology reader +:class:`~MDAnalysis.topology.TPRParser.TPRParser` is built. + +.. automodule:: MDAnalysis.topology.tpr + +.. automodule:: MDAnalysis.topology.tpr.setting + :members: + :undoc-members: + +.. automodule:: MDAnalysis.topology.tpr.obj + :members: + :undoc-members: + +.. automodule:: MDAnalysis.topology.tpr.utils + :members: + :undoc-members: diff --git a/2.7.0-dev0/_sources/documentation_pages/topology_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/topology_modules.rst.txt new file mode 100644 index 0000000000..ed8caba8ce --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/topology_modules.rst.txt @@ -0,0 +1,64 @@ +.. Contains the formatted docstrings from the topology modules located in 'mdanalysis/MDAnalysis/topology' + +************************** +Topology modules +************************** + +The topology module contains the functions to read topology +files. MDAnalysis uses topology files to identify atoms and bonds +between the atoms. It can use topology files from MD packages such as +CHARMM's and NAMD's PSF format or Amber's PRMTOP files. In addition, +it can also glean atom information from single frame coordinate files +such the PDB, CRD, or PQR formats (see the :ref:`Supported topology +formats`). + +Typically, MDAnalysis recognizes formats by the file extension and +hence most users probably do not need to concern themselves with +classes and functions described here. However, if MDAnalysis does not +properly recognize a file format then a user can explicitly set the +topology file format in the *topology_format* keyword argument to +:class:`~MDAnalysis.core.universe.Universe`. + +.. rubric:: Topology formats + +.. toctree:: + :maxdepth: 1 + + topology/init + topology/CRDParser + topology/DLPolyParser + topology/DMSParser + topology/FHIAIMSParser + topology/GMSParser + topology/GROParser + topology/GSDParser + topology/HoomdXMLParser + topology/ITPParser + topology/LAMMPSParser + topology/MinimalParser + topology/MMTFParser + topology/MOL2Parser + topology/PDBParser + topology/ExtendedPDBParser + topology/PDBQTParser + topology/PQRParser + topology/PSFParser + topology/TOPParser + topology/TPRParser + topology/TXYZParser + topology/XYZParser + +.. rubric:: Topology core modules + +The remaining pages are primarily of interest to developers as they +contain functions and classes that are used in the implementation of +the topology readers. + +.. toctree:: + :maxdepth: 1 + + topology/base + topology/core + topology/guessers + topology/tables + topology/tpr_util diff --git a/2.7.0-dev0/_sources/documentation_pages/trajectory_transformations.rst.txt b/2.7.0-dev0/_sources/documentation_pages/trajectory_transformations.rst.txt new file mode 100644 index 0000000000..425762bb59 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/trajectory_transformations.rst.txt @@ -0,0 +1,275 @@ +.. Contains the formatted docstrings for the transformations located in 'mdanalysis/MDAnalysis/transformations' +.. _transformations: + +********************************************************* +Trajectory transformations ("on-the-fly" transformations) +********************************************************* + +.. module:: MDAnalysis.transformations + +In MDAnalysis, a *transformation* is a function/function-like class +that modifies the data for the current :class:`Timestep` and returns the +:class:`Timestep`. For instance, coordinate transformations, such as +PBC corrections and molecule fitting are often required for some +analyses and visualization. Transformation functions +(``transformation_1`` and ``transformation_2`` in the following +example) can be called by the user for any given :class:`Timestep` of +the trajectory, + +.. code-block:: python + + u = MDAnalysis.Universe(topology, trajectory) + + for ts in u.trajectory: + ts = transformation_2(transformation_1(ts)) + +where they change the coordinates of the timestep ``ts`` in +place. There is nothing special about these transformations except +that they have to be written in such a way that they change the +:class:`Timestep` in place. + +As described under :ref:`workflows`, multiple transformations can be +grouped together and associated with a trajectory so that the +trajectory is **transformed on-the-fly**, i.e., the data read from the +trajectory file will be changed before it is made available in, say, +the :attr:`AtomGroup.positions` attribute. + +The submodule :mod:`MDAnalysis.transformations` contains a +collection of transformations (see :ref:`transformations-module`) that +can be immediately used but one can always write custom +transformations (see :ref:`custom-transformations`). + + +.. _workflows: + +Workflows +--------- + +Instead of manually applying transformations, it is much more +convenient to associate a whole *workflow* of transformations with a +trajectory and have the transformations be called automatically. + +A workflow is a sequence (tuple or list) of transformation functions +that will be applied in this order. For example, + +.. code-block:: python + + workflow = [transformation_1, transformation_2] + +would effectively result in + +.. code-block:: python + + ts = transformation_2(transformation_1(ts)) + +for every time step in the trajectory. + +One can add a workflow using the +:meth:`Universe.trajectory.add_transformations +` method +of a trajectory (where the list ``workflow`` is taken from the example +above), + +.. code-block:: python + + u.trajectory.add_transformations(*workflow) + +or upon :class:`Universe ` +creation using the keyword argument `transformations`: + +.. code-block:: python + + u = MDAnalysis.Universe(topology, trajectory, transformations=workflow) + +Note that in these two cases, the workflow cannot be changed after having +being added. + + +.. _custom-transformations: + +Creating transformations +------------------------ + +A simple *transformation* can also be a function that takes a +:class:`~MDAnalysis.coordinates.base.Timestep` as input, modifies it, and +returns it. If it takes no other arguments but a :class:`Timestep` +can be defined as the following example: + +.. code-block:: python + + def up_by_2(ts): + """ + Translate all coordinates by 2 angstroms up along the Z dimension. + """ + ts.positions = ts.positions + np.array([0, 0, 2], dtype=np.float32) + return ts + +If the transformation requires other arguments besides the :class:`Timestep`, +the following two methods can be used to create such transformation: + + +.. _custom-transformations-class: + +Creating complex transformation classes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is implemented by inheriting from +:class:`MDAnalysis.transformations.base.TransformationBase`, +which defines :func:`__call__` for the transformation class +and can be applied directly to a :class:`Timestep`. :func:`_transform` has to +be defined and include the operations on the :class:`MDAnalysis.coordinates.base.Timestep`. + +So, a transformation class can be roughly defined as follows: + +.. code-block:: python + + from MDAnalysis.transformations import TransformationBase + + class up_by_x_class(TransformationBase): + def __init__(self, distance): + self.distance = distance + + def _transform(self, ts): + ts.positions = ts.positions + np.array([0, 0, self.distance], dtype=np.float32) + return ts + +It is the default construction method in :mod:`MDAnalysis.transformations` +from release 2.0.0 onwards because it can be reliably serialized. +See :class:`MDAnalysis.transformations.translate` for a simple example. + + +.. _custom-transformations-closure: + +Creating complex transformation closure functions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Transformation can also be a wrapped function takes the :class:`Timestep` object as argument. +So in this case, a transformation function (closure) can be roughly defined as follows: + +.. code-block:: python + + def up_by_x_func(distance): + """ + Creates a transformation that will translate all coordinates by a given amount along the Z dimension. + """ + def wrapped(ts): + ts.positions = ts.positions + np.array([0, 0, distance], dtype=np.float32) + return ts + return wrapped + +An alternative to using a wrapped function is using partials from :mod:`functools`. The +above function can be written as: + +.. code-block:: python + + import functools + + def up_by_x(ts, distance): + ts.positions = ts.positions + np.array([0, 0, distance], dtype=np.float32) + return ts + + up_by_2 = functools.partial(up_by_x, distance=2) + +Although functions (closures) work as transformations, they are not used in +in MDAnalysis from release 2.0.0 onwards because they cannot be reliably +serialized and thus a :class:`Universe` with such transformations cannot be +used with common parallelization schemes (e.g., ones based on +:mod:`multiprocessing`). +For detailed descriptions about how to write a closure-style transformation, +please refer to MDAnalysis 1.x documentation. + +.. _transformations-module: + +Transformations in MDAnalysis +----------------------------- + +The module :mod:`MDAnalysis.transformations` contains transformations that can +be immediately used in your own :ref:`workflows`. In order to use +any of these transformations, the module must first be imported: + +.. code-block:: python + + import MDAnalysis.transformations + +A workflow can then be added to a trajectory as described above. Notably, +the parameter `max_threads` can be defined when creating a transformation +instance to limit the maximum threads. +(See :class:`MDAnalysis.transformations.base.TransformationBase` for more details) +Whether a specific transformation can be used along with parallel analysis +can be assessed by checking its +:attr:`~MDAnalysis.transformations.base.TransformationBase.parallelizable` +attribute. + +See :ref:`implemented-transformations` for more on the existing +transformations in :mod:`MDAnalysis.transformations`. + + +How to transformations +---------------------- + +Translating the coordinates of a single frame (although one would normally add +the transformation to a :ref:`workflow`, as shown in the subsequent +examples): + +.. code-block:: python + + u = MDAnalysis.Universe(topology, trajectory) + new_ts = MDAnalysis.transformations.translate([1,1,1])(u.trajectory.ts) + +Create a workflow and add it to the trajectory: + +.. code-block:: python + + u = MDAnalysis.Universe(topology, trajectory) + workflow = [MDAnalysis.transformations.translate([1,1,1]), + MDAnalysis.transformations.translate([1,2,3])] + u.trajectory.add_transformations(*workflow) + +Giving a workflow as a keyword argument when defining the universe: + +.. code-block:: python + + workflow = [MDAnalysis.transformations.translate([1,1,1]), + MDAnalysis.transformations.translate([1,2,3])] + u = MDAnalysis.Universe(topology, trajectory, transformations=workflow) + + +.. _building-block-transformation: + +Building blocks for Transformation Classes +------------------------------------------ +Transformations normally ultilize the power of NumPy to get better performance +on array operations. However, when it comes to parallelism, NumPy will sometimes +oversubscribe the threads, either by hyper threading (when it uses OpenBlas backend), +or by working with other parallel engines (e.g. Dask). + +In MDAnalysis, we use `threadpoolctl `_ +inside :class:`~MDAnalysis.transformations.base.TransformationBase` to control the maximum threads for transformations. + +It is also possible to apply a global thread limit by setting the external environmental +varibale, e.g. :code:`OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 +BLIS_NUM_THREADS=1 python script.py`. Read more about parallelism and resource management +in `scikit-learn documentations `_. + +Users are advised to benchmark code because interaction between different +libraries can lead to sub-optimal performance with defaults. + +.. toctree:: + + ./transformations/base + +.. _implemented-transformations: + +Currently implemented transformations +------------------------------------- + +.. toctree:: + + ./transformations/translate + ./transformations/rotate + ./transformations/positionaveraging + ./transformations/fit + ./transformations/wrap + ./transformations/nojump + ./transformations/boxdimensions + diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/base.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/base.rst.txt new file mode 100644 index 0000000000..d5a0377540 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/base.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.base diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/boxdimensions.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/boxdimensions.rst.txt new file mode 100644 index 0000000000..e40789ae65 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/boxdimensions.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.boxdimensions diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/fit.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/fit.rst.txt new file mode 100644 index 0000000000..a5fe6293a8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/fit.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.fit \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/nojump.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/nojump.rst.txt new file mode 100644 index 0000000000..d1543ca4cb --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/nojump.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.nojump diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/positionaveraging.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/positionaveraging.rst.txt new file mode 100644 index 0000000000..69c94d8364 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/positionaveraging.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.positionaveraging diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/rotate.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/rotate.rst.txt new file mode 100644 index 0000000000..38bae418c8 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/rotate.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.rotate \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/translate.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/translate.rst.txt new file mode 100644 index 0000000000..78eb247cee --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/translate.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.translate \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/transformations/wrap.rst.txt b/2.7.0-dev0/_sources/documentation_pages/transformations/wrap.rst.txt new file mode 100644 index 0000000000..868288015a --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/transformations/wrap.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.transformations.wrap \ No newline at end of file diff --git a/2.7.0-dev0/_sources/documentation_pages/units.rst.txt b/2.7.0-dev0/_sources/documentation_pages/units.rst.txt new file mode 100644 index 0000000000..dfa08e918f --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/units.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.units + diff --git a/2.7.0-dev0/_sources/documentation_pages/version.rst.txt b/2.7.0-dev0/_sources/documentation_pages/version.rst.txt new file mode 100644 index 0000000000..a0076f55ab --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/version.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.version diff --git a/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines.rst.txt b/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines.rst.txt new file mode 100644 index 0000000000..036aeb55c0 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines.rst.txt @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.visualization.streamlines diff --git a/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines_3D.rst.txt b/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines_3D.rst.txt new file mode 100644 index 0000000000..60f3a584d0 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/visualization/streamlines_3D.rst.txt @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.visualization.streamlines_3D + diff --git a/2.7.0-dev0/_sources/documentation_pages/visualization_modules.rst.txt b/2.7.0-dev0/_sources/documentation_pages/visualization_modules.rst.txt new file mode 100644 index 0000000000..3578aaf802 --- /dev/null +++ b/2.7.0-dev0/_sources/documentation_pages/visualization_modules.rst.txt @@ -0,0 +1,37 @@ +.. Contains the formatted docstrings from the visualization modules located in 'mdanalysis/MDAnalysis/visualization' + +********************* +Visualization modules +********************* + +The :mod:`MDAnalysis.visualization` namespace contains code to carry out +analyses which return data that is specifically-tailored for visualization. + +Please see the individual module documentation for additional references and +citation information. + +These modules are not imported by default; in order to use them one has to +import them from :mod:`MDAnalysis.visualization`, for instance: :: + + import MDAnalysis.visualization.streamlines + +.. Note:: + + Some of the modules require additional Python packages such as matplotlib_ or + scipy_. + +.. _matplotlib: http://matplotlib.org +.. _scipy: https://www.scipy.org/scipylib/index.html + + +Visualization of Lipid Flow +=========================== + +.. toctree:: + :maxdepth: 1 + + visualization/streamlines + visualization/streamlines_3D + + + diff --git a/2.7.0-dev0/_sources/index.rst.txt b/2.7.0-dev0/_sources/index.rst.txt new file mode 100644 index 0000000000..f8c215b9e1 --- /dev/null +++ b/2.7.0-dev0/_sources/index.rst.txt @@ -0,0 +1,216 @@ +.. -*- coding: utf-8 -*- +.. MDAnalysis documentation master file, created by +.. sphinx-quickstart on Mon Sep 27 09:39:55 2010. +.. You can adapt this file completely to your liking, but it should at least +.. contain the root `toctree` directive. + +############################### +MDAnalysis documentation +############################### + + +:Release: |release| +:Date: |today| + +**MDAnalysis** (`www.mdanalysis.org`_) is an object-oriented python +toolkit to analyze molecular dynamics trajectories generated by +CHARMM_, Gromacs_, Amber_, NAMD_, LAMMPS_, `DL_POLY`_ and other +packages; it also reads other formats (e.g., PDB_ files and `XYZ +format`_ trajectories; see :ref:`Supported coordinate formats` and +:ref:`Supported topology formats` for the full lists). It can write +most of these formats, too, together with atom selections for use in +Gromacs_, CHARMM_, VMD_ and PyMol_ (see :ref:`Selection exporters`). + +It allows one to read molecular dynamics trajectories and access the +atomic coordinates through NumPy_ arrays. This provides a flexible and +relatively fast framework for complex analysis tasks. Fairly complete +atom :ref:`selection-commands-label` are implemented. Trajectories can +also be manipulated (for instance, fit to a reference structure) and +written out in a range of formats. + +.. _`www.mdanalysis.org`: https://www.mdanalysis.org +.. _NumPy: http://numpy.scipy.org +.. _CHARMM: http://www.charmm.org/ +.. _Amber: http://ambermd.org/ +.. _LAMMPS: http://lammps.sandia.gov/ +.. _NAMD: http://www.ks.uiuc.edu/Research/namd/ +.. _Gromacs: http://www.gromacs.org/ +.. _`DL_POLY`: http://www.scd.stfc.ac.uk//44516.aspx +.. _VMD: http://www.ks.uiuc.edu/Research/vmd/ +.. _PyMol: http://www.pymol.org/ +.. _PDB: http://www.rcsb.org/pdb/static.do?p=file_formats/pdb/index.html +.. _XYZ format: http://openbabel.org/wiki/XYZ_%28format%29 + + +Getting involved +================ + +Please report **bugs** or **enhancement requests** through the `Issue +Tracker`_. Questions can also be asked on the `mdnalysis-discussion mailing +list`_. + +The MDAnalysis community subscribes to a `Code of Conduct`_ that all community +members agree and adhere to --- please read it. + +.. _Issue Tracker: https://github.com/MDAnalysis/mdanalysis/issues +.. _`mdnalysis-discussion mailing list`: + http://groups.google.com/group/mdnalysis-discussion +.. _`Code of Conduct`: https://www.mdanalysis.org/pages/conduct/ + + + +User Guide +========== + +The MDAnalysis `User Guide`_ provides comprehensive information on how to +use the library. We would recommend that new users have a look at the +`Quick Start Guide`_. The User Guide also has a set of `examples`_ on how to +use the MDAnalysis library which may be of interest. + +.. _`User Guide`: https://userguide.mdanalysis.org/stable/index.html +.. _`Quick Start Guide`: https://userguide.mdanalysis.org/stable/examples/quickstart.html +.. _`examples`: https://userguide.mdanalysis.org/stable/examples/README.html + + +.. _installation-instructions: + +Installing MDAnalysis +===================== + +The easiest approach to `install the latest release`_ is to use a package that +can be installed either with conda_ or pip_. + +conda +----- + +First installation with conda_: + +.. code-block:: bash + + conda config --add channels conda-forge + conda install mdanalysis + +which will automatically install a *full set of dependencies*. + +To upgrade later: + +.. code-block:: bash + + conda update mdanalysis + +pip +--- + +Installation with `pip`_ and a *minimal set of dependencies*: + +.. code-block:: bash + + pip install --upgrade MDAnalysis + +To install with a *full set of dependencies* (which includes everything needed +for :mod:`MDAnalysis.analysis`), add the ``[analysis]`` tag: + +.. code-block:: bash + + pip install --upgrade MDAnalysis[analysis] + + +Tests +----- + +If you want to `run the tests`_ or use example files to follow some of the +examples in the documentation or the tutorials_, also install the +``MDAnalysisTests`` package: + +.. code-block:: bash + + conda install mdanalysistests # with conda + pip install --upgrade MDAnalysisTests # with pip + +.. _install the latest release: + https://userguide.mdanalysis.org/stable/installation.html#installation +.. _pip: + http://www.pip-installer.org/en/latest/index.html +.. _conda: + http://conda.pydata.org/docs/ +.. _run the tests: https://github.com/MDAnalysis/mdanalysis/wiki/UnitTests +.. _tutorials: https://www.mdanalysis.org/pages/learning_MDAnalysis/ + + +Source Code +=========== + +**Source code** is available from +https://github.com/MDAnalysis/mdanalysis/ and is packaged under the +`GNU Public Licence, version 3 or any later version`_. Individual components +of the source code are provided under GPL compatible licenses, details can be +found in the `MDAnalysis license file`_. Obtain the sources with `git`_. + +.. code-block:: bash + + git clone https://github.com/MDAnalysis/mdanalysis.git + + +The `User Guide`_ provides more information on how to +`install the development version`_ of MDAnalysis. + +.. _GNU Public Licence, version 3 or any later version: + https://www.gnu.org/licenses/gpl-3.0.en.html +.. _MDAnalysis license file: + https://github.com/MDAnalysis/mdanalysis/blob/develop/LICENSE +.. _git: https://git-scm.com/ +.. _`install the development version`: https://userguide.mdanalysis.org/stable/installation.html#development-versions + + +Citation +======== + +When using MDAnalysis in published work, please cite +[Michaud-Agrawal2011]_ and [Gowers2016]_. + +MDAnalysis also contains specific algorithms and whole analysis +modules whose algorithms have also been published in the scientific +literature. Please make sure to also reference any +:ref:`references-components` in published work. + +Thank you! + + +.. Hide the contents from the front page because they are already in +.. the side bar in the Alabaster sphinx style; requires Alabaster +.. config sidebar_includehidden=True (default) + +.. Contents +.. ======== + +.. toctree:: + :maxdepth: 4 + :numbered: + :hidden: + + ./documentation_pages/overview + ./documentation_pages/topology + ./documentation_pages/selections + ./documentation_pages/analysis_modules + ./documentation_pages/topology_modules + ./documentation_pages/coordinates_modules + ./documentation_pages/converters + ./documentation_pages/trajectory_transformations + ./documentation_pages/selections_modules + ./documentation_pages/auxiliary_modules + ./documentation_pages/core_modules + ./documentation_pages/visualization_modules + ./documentation_pages/lib_modules + ./documentation_pages/version + ./documentation_pages/units + ./documentation_pages/exceptions + ./documentation_pages/references + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/2.7.0-dev0/_static/_sphinx_javascript_frameworks_compat.js b/2.7.0-dev0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000000..8549469dc2 --- /dev/null +++ b/2.7.0-dev0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/2.7.0-dev0/_static/basic.css b/2.7.0-dev0/_static/basic.css new file mode 100644 index 0000000000..eeb0519a69 --- /dev/null +++ b/2.7.0-dev0/_static/basic.css @@ -0,0 +1,899 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} +dl.field-list > dt:after { + content: ":"; +} + + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/2.7.0-dev0/_static/css/badge_only.css b/2.7.0-dev0/_static/css/badge_only.css new file mode 100644 index 0000000000..c718cee441 --- /dev/null +++ b/2.7.0-dev0/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000000..6cb6000018 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff2 b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000000..7059e23142 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000000..f815f63f99 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff2 b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000000..f2c76e5bda Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.eot b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000..e9f60ca953 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.svg b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..855c845e53 --- /dev/null +++ b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.ttf b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000..400014a4b0 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff2 b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000..4d13fc6040 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff b/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000000..88ad05b9ff Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff2 b/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000000..c4e3d804b5 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-bold.woff b/2.7.0-dev0/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000000..c6dff51f06 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-bold.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-bold.woff2 b/2.7.0-dev0/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000000..bb195043cf Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-bold.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff b/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000000..76114bc033 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff2 b/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000000..3404f37e2e Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-normal.woff b/2.7.0-dev0/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000000..ae1307ff5f Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-normal.woff differ diff --git a/2.7.0-dev0/_static/css/fonts/lato-normal.woff2 b/2.7.0-dev0/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000000..3bf9843328 Binary files /dev/null and b/2.7.0-dev0/_static/css/fonts/lato-normal.woff2 differ diff --git a/2.7.0-dev0/_static/css/jupyter.min.css b/2.7.0-dev0/_static/css/jupyter.min.css new file mode 100644 index 0000000000..4825808a11 --- /dev/null +++ b/2.7.0-dev0/_static/css/jupyter.min.css @@ -0,0 +1,84 @@ +/*! +* +* Twitter Bootstrap +* +*/.jupyter{/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ + /*! +* +* Font Awesome +* +*/ + /*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + + + + /*! +* +* IPython base +* +*/ + + + + + + + + /*! +* +* IPython auth +* +*/ + /*! +* +* IPython tree view +* +*/ + + + + /*! +* +* IPython text editor webapp +* +*/ + /*! +* +* IPython notebook +* +*/ + + + + + + + + + + + + + + + + + + + + + + /*! +* +* IPython notebook webapp +* +*/}.jupyter html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.jupyter body{margin:0}.jupyter article,.jupyter aside,.jupyter details,.jupyter figcaption,.jupyter figure,.jupyter footer,.jupyter header,.jupyter hgroup,.jupyter main,.jupyter menu,.jupyter nav,.jupyter section,.jupyter summary{display:block}.jupyter audio,.jupyter canvas,.jupyter progress,.jupyter video{display:inline-block;vertical-align:baseline}.jupyter audio:not([controls]){display:none;height:0}.jupyter [hidden],.jupyter template{display:none}.jupyter a{background-color:transparent}.jupyter a:active,.jupyter a:hover{outline:0}.jupyter abbr[title]{border-bottom:1px dotted}.jupyter b,.jupyter strong{font-weight:700}.jupyter dfn{font-style:italic}.jupyter h1{font-size:2em;margin:.67em 0}.jupyter mark{background:#ff0;color:#000}.jupyter small{font-size:80%}.jupyter sub,.jupyter sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.jupyter sup{top:-.5em}.jupyter sub{bottom:-.25em}.jupyter img{border:0}.jupyter svg:not(:root){overflow:hidden}.jupyter figure{margin:1em 40px}.jupyter hr{box-sizing:content-box;height:0}.jupyter pre{overflow:auto}.jupyter code,.jupyter kbd,.jupyter pre,.jupyter samp{font-family:monospace,monospace;font-size:1em}.jupyter button,.jupyter input,.jupyter optgroup,.jupyter select,.jupyter textarea{color:inherit;font:inherit;margin:0}.jupyter button{overflow:visible}.jupyter button,.jupyter select{text-transform:none}.jupyter button,.jupyter html input[type=button],.jupyter input[type=reset],.jupyter input[type=submit]{-webkit-appearance:button;cursor:pointer}.jupyter button[disabled],.jupyter html input[disabled]{cursor:default}.jupyter button::-moz-focus-inner,.jupyter input::-moz-focus-inner{border:0;padding:0}.jupyter input{line-height:normal}.jupyter input[type=checkbox],.jupyter input[type=radio]{box-sizing:border-box;padding:0}.jupyter input[type=number]::-webkit-inner-spin-button,.jupyter input[type=number]::-webkit-outer-spin-button{height:auto}.jupyter input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}.jupyter input[type=search]::-webkit-search-cancel-button,.jupyter input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.jupyter fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}.jupyter legend{border:0;padding:0}.jupyter textarea{overflow:auto}.jupyter optgroup{font-weight:700}.jupyter table{border-collapse:collapse;border-spacing:0}.jupyter td,.jupyter th{padding:0}@media print{.jupyter *,.jupyter :after,.jupyter :before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}.jupyter a,.jupyter a:visited{text-decoration:underline}.jupyter a[href]:after{content:" (" attr(href) ")"}.jupyter abbr[title]:after{content:" (" attr(title) ")"}.jupyter a[href^="javascript:"]:after,.jupyter a[href^="#"]:after{content:""}.jupyter blockquote,.jupyter pre{border:1px solid #999;page-break-inside:avoid}.jupyter thead{display:table-header-group}.jupyter img,.jupyter tr{page-break-inside:avoid}.jupyter img{max-width:100%!important}.jupyter h2,.jupyter h3,.jupyter p{orphans:3;widows:3}.jupyter h2,.jupyter h3{page-break-after:avoid}.jupyter .navbar{display:none}.jupyter .btn>.caret,.jupyter .dropup>.btn>.caret{border-top-color:#000!important}.jupyter .label{border:1px solid #000}.jupyter .table{border-collapse:collapse!important}.jupyter .table td,.jupyter .table th{background-color:#fff!important}.jupyter .table-bordered td,.jupyter .table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot);src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff) format('woff'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.jupyter .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jupyter .glyphicon-asterisk:before{content:"\2a"}.jupyter .glyphicon-plus:before{content:"\2b"}.jupyter .glyphicon-eur:before,.jupyter .glyphicon-euro:before{content:"\20ac"}.jupyter .glyphicon-minus:before{content:"\2212"}.jupyter .glyphicon-cloud:before{content:"\2601"}.jupyter .glyphicon-envelope:before{content:"\2709"}.jupyter .glyphicon-pencil:before{content:"\270f"}.jupyter .glyphicon-glass:before{content:"\e001"}.jupyter .glyphicon-music:before{content:"\e002"}.jupyter .glyphicon-search:before{content:"\e003"}.jupyter .glyphicon-heart:before{content:"\e005"}.jupyter .glyphicon-star:before{content:"\e006"}.jupyter .glyphicon-star-empty:before{content:"\e007"}.jupyter .glyphicon-user:before{content:"\e008"}.jupyter .glyphicon-film:before{content:"\e009"}.jupyter .glyphicon-th-large:before{content:"\e010"}.jupyter .glyphicon-th:before{content:"\e011"}.jupyter .glyphicon-th-list:before{content:"\e012"}.jupyter .glyphicon-ok:before{content:"\e013"}.jupyter .glyphicon-remove:before{content:"\e014"}.jupyter .glyphicon-zoom-in:before{content:"\e015"}.jupyter .glyphicon-zoom-out:before{content:"\e016"}.jupyter .glyphicon-off:before{content:"\e017"}.jupyter .glyphicon-signal:before{content:"\e018"}.jupyter .glyphicon-cog:before{content:"\e019"}.jupyter .glyphicon-trash:before{content:"\e020"}.jupyter .glyphicon-home:before{content:"\e021"}.jupyter .glyphicon-file:before{content:"\e022"}.jupyter .glyphicon-time:before{content:"\e023"}.jupyter .glyphicon-road:before{content:"\e024"}.jupyter .glyphicon-download-alt:before{content:"\e025"}.jupyter .glyphicon-download:before{content:"\e026"}.jupyter .glyphicon-upload:before{content:"\e027"}.jupyter .glyphicon-inbox:before{content:"\e028"}.jupyter .glyphicon-play-circle:before{content:"\e029"}.jupyter .glyphicon-repeat:before{content:"\e030"}.jupyter .glyphicon-refresh:before{content:"\e031"}.jupyter .glyphicon-list-alt:before{content:"\e032"}.jupyter .glyphicon-lock:before{content:"\e033"}.jupyter .glyphicon-flag:before{content:"\e034"}.jupyter .glyphicon-headphones:before{content:"\e035"}.jupyter .glyphicon-volume-off:before{content:"\e036"}.jupyter .glyphicon-volume-down:before{content:"\e037"}.jupyter .glyphicon-volume-up:before{content:"\e038"}.jupyter .glyphicon-qrcode:before{content:"\e039"}.jupyter .glyphicon-barcode:before{content:"\e040"}.jupyter .glyphicon-tag:before{content:"\e041"}.jupyter .glyphicon-tags:before{content:"\e042"}.jupyter .glyphicon-book:before{content:"\e043"}.jupyter .glyphicon-bookmark:before{content:"\e044"}.jupyter .glyphicon-print:before{content:"\e045"}.jupyter .glyphicon-camera:before{content:"\e046"}.jupyter .glyphicon-font:before{content:"\e047"}.jupyter .glyphicon-bold:before{content:"\e048"}.jupyter .glyphicon-italic:before{content:"\e049"}.jupyter .glyphicon-text-height:before{content:"\e050"}.jupyter .glyphicon-text-width:before{content:"\e051"}.jupyter .glyphicon-align-left:before{content:"\e052"}.jupyter .glyphicon-align-center:before{content:"\e053"}.jupyter .glyphicon-align-right:before{content:"\e054"}.jupyter .glyphicon-align-justify:before{content:"\e055"}.jupyter .glyphicon-list:before{content:"\e056"}.jupyter .glyphicon-indent-left:before{content:"\e057"}.jupyter .glyphicon-indent-right:before{content:"\e058"}.jupyter .glyphicon-facetime-video:before{content:"\e059"}.jupyter .glyphicon-picture:before{content:"\e060"}.jupyter .glyphicon-map-marker:before{content:"\e062"}.jupyter .glyphicon-adjust:before{content:"\e063"}.jupyter .glyphicon-tint:before{content:"\e064"}.jupyter .glyphicon-edit:before{content:"\e065"}.jupyter .glyphicon-share:before{content:"\e066"}.jupyter .glyphicon-check:before{content:"\e067"}.jupyter .glyphicon-move:before{content:"\e068"}.jupyter .glyphicon-step-backward:before{content:"\e069"}.jupyter .glyphicon-fast-backward:before{content:"\e070"}.jupyter .glyphicon-backward:before{content:"\e071"}.jupyter .glyphicon-play:before{content:"\e072"}.jupyter .glyphicon-pause:before{content:"\e073"}.jupyter .glyphicon-stop:before{content:"\e074"}.jupyter .glyphicon-forward:before{content:"\e075"}.jupyter .glyphicon-fast-forward:before{content:"\e076"}.jupyter .glyphicon-step-forward:before{content:"\e077"}.jupyter .glyphicon-eject:before{content:"\e078"}.jupyter .glyphicon-chevron-left:before{content:"\e079"}.jupyter .glyphicon-chevron-right:before{content:"\e080"}.jupyter .glyphicon-plus-sign:before{content:"\e081"}.jupyter .glyphicon-minus-sign:before{content:"\e082"}.jupyter .glyphicon-remove-sign:before{content:"\e083"}.jupyter .glyphicon-ok-sign:before{content:"\e084"}.jupyter .glyphicon-question-sign:before{content:"\e085"}.jupyter .glyphicon-info-sign:before{content:"\e086"}.jupyter .glyphicon-screenshot:before{content:"\e087"}.jupyter .glyphicon-remove-circle:before{content:"\e088"}.jupyter .glyphicon-ok-circle:before{content:"\e089"}.jupyter .glyphicon-ban-circle:before{content:"\e090"}.jupyter .glyphicon-arrow-left:before{content:"\e091"}.jupyter .glyphicon-arrow-right:before{content:"\e092"}.jupyter .glyphicon-arrow-up:before{content:"\e093"}.jupyter .glyphicon-arrow-down:before{content:"\e094"}.jupyter .glyphicon-share-alt:before{content:"\e095"}.jupyter .glyphicon-resize-full:before{content:"\e096"}.jupyter .glyphicon-resize-small:before{content:"\e097"}.jupyter .glyphicon-exclamation-sign:before{content:"\e101"}.jupyter .glyphicon-gift:before{content:"\e102"}.jupyter .glyphicon-leaf:before{content:"\e103"}.jupyter .glyphicon-fire:before{content:"\e104"}.jupyter .glyphicon-eye-open:before{content:"\e105"}.jupyter .glyphicon-eye-close:before{content:"\e106"}.jupyter .glyphicon-warning-sign:before{content:"\e107"}.jupyter .glyphicon-plane:before{content:"\e108"}.jupyter .glyphicon-calendar:before{content:"\e109"}.jupyter .glyphicon-random:before{content:"\e110"}.jupyter .glyphicon-comment:before{content:"\e111"}.jupyter .glyphicon-magnet:before{content:"\e112"}.jupyter .glyphicon-chevron-up:before{content:"\e113"}.jupyter .glyphicon-chevron-down:before{content:"\e114"}.jupyter .glyphicon-retweet:before{content:"\e115"}.jupyter .glyphicon-shopping-cart:before{content:"\e116"}.jupyter .glyphicon-folder-close:before{content:"\e117"}.jupyter .glyphicon-folder-open:before{content:"\e118"}.jupyter .glyphicon-resize-vertical:before{content:"\e119"}.jupyter .glyphicon-resize-horizontal:before{content:"\e120"}.jupyter .glyphicon-hdd:before{content:"\e121"}.jupyter .glyphicon-bullhorn:before{content:"\e122"}.jupyter .glyphicon-bell:before{content:"\e123"}.jupyter .glyphicon-certificate:before{content:"\e124"}.jupyter .glyphicon-thumbs-up:before{content:"\e125"}.jupyter .glyphicon-thumbs-down:before{content:"\e126"}.jupyter .glyphicon-hand-right:before{content:"\e127"}.jupyter .glyphicon-hand-left:before{content:"\e128"}.jupyter .glyphicon-hand-up:before{content:"\e129"}.jupyter .glyphicon-hand-down:before{content:"\e130"}.jupyter .glyphicon-circle-arrow-right:before{content:"\e131"}.jupyter .glyphicon-circle-arrow-left:before{content:"\e132"}.jupyter .glyphicon-circle-arrow-up:before{content:"\e133"}.jupyter .glyphicon-circle-arrow-down:before{content:"\e134"}.jupyter .glyphicon-globe:before{content:"\e135"}.jupyter .glyphicon-wrench:before{content:"\e136"}.jupyter .glyphicon-tasks:before{content:"\e137"}.jupyter .glyphicon-filter:before{content:"\e138"}.jupyter .glyphicon-briefcase:before{content:"\e139"}.jupyter .glyphicon-fullscreen:before{content:"\e140"}.jupyter .glyphicon-dashboard:before{content:"\e141"}.jupyter .glyphicon-paperclip:before{content:"\e142"}.jupyter .glyphicon-heart-empty:before{content:"\e143"}.jupyter .glyphicon-link:before{content:"\e144"}.jupyter .glyphicon-phone:before{content:"\e145"}.jupyter .glyphicon-pushpin:before{content:"\e146"}.jupyter .glyphicon-usd:before{content:"\e148"}.jupyter .glyphicon-gbp:before{content:"\e149"}.jupyter .glyphicon-sort:before{content:"\e150"}.jupyter .glyphicon-sort-by-alphabet:before{content:"\e151"}.jupyter .glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.jupyter .glyphicon-sort-by-order:before{content:"\e153"}.jupyter .glyphicon-sort-by-order-alt:before{content:"\e154"}.jupyter .glyphicon-sort-by-attributes:before{content:"\e155"}.jupyter .glyphicon-sort-by-attributes-alt:before{content:"\e156"}.jupyter .glyphicon-unchecked:before{content:"\e157"}.jupyter .glyphicon-expand:before{content:"\e158"}.jupyter .glyphicon-collapse-down:before{content:"\e159"}.jupyter .glyphicon-collapse-up:before{content:"\e160"}.jupyter .glyphicon-log-in:before{content:"\e161"}.jupyter .glyphicon-flash:before{content:"\e162"}.jupyter .glyphicon-log-out:before{content:"\e163"}.jupyter .glyphicon-new-window:before{content:"\e164"}.jupyter .glyphicon-record:before{content:"\e165"}.jupyter .glyphicon-save:before{content:"\e166"}.jupyter .glyphicon-open:before{content:"\e167"}.jupyter .glyphicon-saved:before{content:"\e168"}.jupyter .glyphicon-import:before{content:"\e169"}.jupyter .glyphicon-export:before{content:"\e170"}.jupyter .glyphicon-send:before{content:"\e171"}.jupyter .glyphicon-floppy-disk:before{content:"\e172"}.jupyter .glyphicon-floppy-saved:before{content:"\e173"}.jupyter .glyphicon-floppy-remove:before{content:"\e174"}.jupyter .glyphicon-floppy-save:before{content:"\e175"}.jupyter .glyphicon-floppy-open:before{content:"\e176"}.jupyter .glyphicon-credit-card:before{content:"\e177"}.jupyter .glyphicon-transfer:before{content:"\e178"}.jupyter .glyphicon-cutlery:before{content:"\e179"}.jupyter .glyphicon-header:before{content:"\e180"}.jupyter .glyphicon-compressed:before{content:"\e181"}.jupyter .glyphicon-earphone:before{content:"\e182"}.jupyter .glyphicon-phone-alt:before{content:"\e183"}.jupyter .glyphicon-tower:before{content:"\e184"}.jupyter .glyphicon-stats:before{content:"\e185"}.jupyter .glyphicon-sd-video:before{content:"\e186"}.jupyter .glyphicon-hd-video:before{content:"\e187"}.jupyter .glyphicon-subtitles:before{content:"\e188"}.jupyter .glyphicon-sound-stereo:before{content:"\e189"}.jupyter .glyphicon-sound-dolby:before{content:"\e190"}.jupyter .glyphicon-sound-5-1:before{content:"\e191"}.jupyter .glyphicon-sound-6-1:before{content:"\e192"}.jupyter .glyphicon-sound-7-1:before{content:"\e193"}.jupyter .glyphicon-copyright-mark:before{content:"\e194"}.jupyter .glyphicon-registration-mark:before{content:"\e195"}.jupyter .glyphicon-cloud-download:before{content:"\e197"}.jupyter .glyphicon-cloud-upload:before{content:"\e198"}.jupyter .glyphicon-tree-conifer:before{content:"\e199"}.jupyter .glyphicon-tree-deciduous:before{content:"\e200"}.jupyter .glyphicon-cd:before{content:"\e201"}.jupyter .glyphicon-save-file:before{content:"\e202"}.jupyter .glyphicon-open-file:before{content:"\e203"}.jupyter .glyphicon-level-up:before{content:"\e204"}.jupyter .glyphicon-copy:before{content:"\e205"}.jupyter .glyphicon-paste:before{content:"\e206"}.jupyter .glyphicon-alert:before{content:"\e209"}.jupyter .glyphicon-equalizer:before{content:"\e210"}.jupyter .glyphicon-king:before{content:"\e211"}.jupyter .glyphicon-queen:before{content:"\e212"}.jupyter .glyphicon-pawn:before{content:"\e213"}.jupyter .glyphicon-bishop:before{content:"\e214"}.jupyter .glyphicon-knight:before{content:"\e215"}.jupyter .glyphicon-baby-formula:before{content:"\e216"}.jupyter .glyphicon-tent:before{content:"\26fa"}.jupyter .glyphicon-blackboard:before{content:"\e218"}.jupyter .glyphicon-bed:before{content:"\e219"}.jupyter .glyphicon-apple:before{content:"\f8ff"}.jupyter .glyphicon-erase:before{content:"\e221"}.jupyter .glyphicon-hourglass:before{content:"\231b"}.jupyter .glyphicon-lamp:before{content:"\e223"}.jupyter .glyphicon-duplicate:before{content:"\e224"}.jupyter .glyphicon-piggy-bank:before{content:"\e225"}.jupyter .glyphicon-scissors:before{content:"\e226"}.jupyter .glyphicon-bitcoin:before{content:"\e227"}.jupyter .glyphicon-btc:before{content:"\e227"}.jupyter .glyphicon-xbt:before{content:"\e227"}.jupyter .glyphicon-yen:before{content:"\00a5"}.jupyter .glyphicon-jpy:before{content:"\00a5"}.jupyter .glyphicon-ruble:before{content:"\20bd"}.jupyter .glyphicon-rub:before{content:"\20bd"}.jupyter .glyphicon-scale:before{content:"\e230"}.jupyter .glyphicon-ice-lolly:before{content:"\e231"}.jupyter .glyphicon-ice-lolly-tasted:before{content:"\e232"}.jupyter .glyphicon-education:before{content:"\e233"}.jupyter .glyphicon-option-horizontal:before{content:"\e234"}.jupyter .glyphicon-option-vertical:before{content:"\e235"}.jupyter .glyphicon-menu-hamburger:before{content:"\e236"}.jupyter .glyphicon-modal-window:before{content:"\e237"}.jupyter .glyphicon-oil:before{content:"\e238"}.jupyter .glyphicon-grain:before{content:"\e239"}.jupyter .glyphicon-sunglasses:before{content:"\e240"}.jupyter .glyphicon-text-size:before{content:"\e241"}.jupyter .glyphicon-text-color:before{content:"\e242"}.jupyter .glyphicon-text-background:before{content:"\e243"}.jupyter .glyphicon-object-align-top:before{content:"\e244"}.jupyter .glyphicon-object-align-bottom:before{content:"\e245"}.jupyter .glyphicon-object-align-horizontal:before{content:"\e246"}.jupyter .glyphicon-object-align-left:before{content:"\e247"}.jupyter .glyphicon-object-align-vertical:before{content:"\e248"}.jupyter .glyphicon-object-align-right:before{content:"\e249"}.jupyter .glyphicon-triangle-right:before{content:"\e250"}.jupyter .glyphicon-triangle-left:before{content:"\e251"}.jupyter .glyphicon-triangle-bottom:before{content:"\e252"}.jupyter .glyphicon-triangle-top:before{content:"\e253"}.jupyter .glyphicon-console:before{content:"\e254"}.jupyter .glyphicon-superscript:before{content:"\e255"}.jupyter .glyphicon-subscript:before{content:"\e256"}.jupyter .glyphicon-menu-left:before{content:"\e257"}.jupyter .glyphicon-menu-right:before{content:"\e258"}.jupyter .glyphicon-menu-down:before{content:"\e259"}.jupyter .glyphicon-menu-up:before{content:"\e260"}.jupyter *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jupyter :after,.jupyter :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jupyter html{font-size:10px;-webkit-tap-highlight-color:transparent}.jupyter body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42857143;color:#000;background-color:#fff}.jupyter button,.jupyter input,.jupyter select,.jupyter textarea{font-family:inherit;font-size:inherit;line-height:inherit}.jupyter a{color:#337ab7;text-decoration:none}.jupyter a:focus,.jupyter a:hover{color:#23527c;text-decoration:underline}.jupyter a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.jupyter figure{margin:0}.jupyter img{vertical-align:middle}.jupyter .img-responsive{display:block;max-width:100%;height:auto}.jupyter .img-rounded{border-radius:3px}.jupyter .img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.jupyter .img-circle{border-radius:50%}.jupyter hr{margin-top:18px;margin-bottom:18px;border:0;border-top:1px solid #eee}.jupyter .sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.jupyter .sr-only-focusable:active,.jupyter .sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.jupyter [role=button]{cursor:pointer}.jupyter .h1,.jupyter .h2,.jupyter .h3,.jupyter .h4,.jupyter .h5,.jupyter .h6,.jupyter h1,.jupyter h2,.jupyter h3,.jupyter h4,.jupyter h5,.jupyter h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.jupyter .h1 .small,.jupyter .h1 small,.jupyter .h2 .small,.jupyter .h2 small,.jupyter .h3 .small,.jupyter .h3 small,.jupyter .h4 .small,.jupyter .h4 small,.jupyter .h5 .small,.jupyter .h5 small,.jupyter .h6 .small,.jupyter .h6 small,.jupyter h1 .small,.jupyter h1 small,.jupyter h2 .small,.jupyter h2 small,.jupyter h3 .small,.jupyter h3 small,.jupyter h4 .small,.jupyter h4 small,.jupyter h5 .small,.jupyter h5 small,.jupyter h6 .small,.jupyter h6 small{font-weight:400;line-height:1;color:#777}.jupyter .h1,.jupyter .h2,.jupyter .h3,.jupyter h1,.jupyter h2,.jupyter h3{margin-top:18px;margin-bottom:9px}.jupyter .h1 .small,.jupyter .h1 small,.jupyter .h2 .small,.jupyter .h2 small,.jupyter .h3 .small,.jupyter .h3 small,.jupyter h1 .small,.jupyter h1 small,.jupyter h2 .small,.jupyter h2 small,.jupyter h3 .small,.jupyter h3 small{font-size:65%}.jupyter .h4,.jupyter .h5,.jupyter .h6,.jupyter h4,.jupyter h5,.jupyter h6{margin-top:9px;margin-bottom:9px}.jupyter .h4 .small,.jupyter .h4 small,.jupyter .h5 .small,.jupyter .h5 small,.jupyter .h6 .small,.jupyter .h6 small,.jupyter h4 .small,.jupyter h4 small,.jupyter h5 .small,.jupyter h5 small,.jupyter h6 .small,.jupyter h6 small{font-size:75%}.jupyter .h1,.jupyter h1{font-size:33px}.jupyter .h2,.jupyter h2{font-size:27px}.jupyter .h3,.jupyter h3{font-size:23px}.jupyter .h4,.jupyter h4{font-size:17px}.jupyter .h5,.jupyter h5{font-size:13px}.jupyter .h6,.jupyter h6{font-size:12px}.jupyter p{margin:0 0 9px}.jupyter .lead{margin-bottom:18px;font-size:14px;font-weight:300;line-height:1.4}@media (min-width:768px){.jupyter .lead{font-size:19.5px}}.jupyter .small,.jupyter small{font-size:92%}.jupyter .mark,.jupyter mark{background-color:#fcf8e3;padding:.2em}.jupyter .text-left{text-align:left}.jupyter .text-right{text-align:right}.jupyter .text-center{text-align:center}.jupyter .text-justify{text-align:justify}.jupyter .text-nowrap{white-space:nowrap}.jupyter .text-lowercase{text-transform:lowercase}.jupyter .text-uppercase{text-transform:uppercase}.jupyter .text-capitalize{text-transform:capitalize}.jupyter .text-muted{color:#777}.jupyter .text-primary{color:#337ab7}a.jupyter .text-primary:focus,a.jupyter .text-primary:hover{color:#286090}.jupyter .text-success{color:#3c763d}a.jupyter .text-success:focus,a.jupyter .text-success:hover{color:#2b542c}.jupyter .text-info{color:#31708f}a.jupyter .text-info:focus,a.jupyter .text-info:hover{color:#245269}.jupyter .text-warning{color:#8a6d3b}a.jupyter .text-warning:focus,a.jupyter .text-warning:hover{color:#66512c}.jupyter .text-danger{color:#a94442}a.jupyter .text-danger:focus,a.jupyter .text-danger:hover{color:#843534}.jupyter .bg-primary{color:#fff;background-color:#337ab7}a.jupyter .bg-primary:focus,a.jupyter .bg-primary:hover{background-color:#286090}.jupyter .bg-success{background-color:#dff0d8}a.jupyter .bg-success:focus,a.jupyter .bg-success:hover{background-color:#c1e2b3}.jupyter .bg-info{background-color:#d9edf7}a.jupyter .bg-info:focus,a.jupyter .bg-info:hover{background-color:#afd9ee}.jupyter .bg-warning{background-color:#fcf8e3}a.jupyter .bg-warning:focus,a.jupyter .bg-warning:hover{background-color:#f7ecb5}.jupyter .bg-danger{background-color:#f2dede}a.jupyter .bg-danger:focus,a.jupyter .bg-danger:hover{background-color:#e4b9b9}.jupyter .page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #eee}.jupyter ol,.jupyter ul{margin-top:0;margin-bottom:9px}.jupyter ol ol,.jupyter ol ul,.jupyter ul ol,.jupyter ul ul{margin-bottom:0}.jupyter .list-unstyled{padding-left:0;list-style:none}.jupyter .list-inline{padding-left:0;list-style:none;margin-left:-5px}.jupyter .list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.jupyter dl{margin-top:0;margin-bottom:18px}.jupyter dd,.jupyter dt{line-height:1.42857143}.jupyter dt{font-weight:700}.jupyter dd{margin-left:0}@media (min-width:541px){.jupyter .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jupyter .dl-horizontal dd{margin-left:180px}}.jupyter abbr[data-original-title],.jupyter abbr[title]{cursor:help;border-bottom:1px dotted #777}.jupyter .initialism{font-size:90%;text-transform:uppercase}.jupyter blockquote{padding:9px 18px;margin:0 0 18px;font-size:inherit;border-left:5px solid #eee}.jupyter blockquote ol:last-child,.jupyter blockquote p:last-child,.jupyter blockquote ul:last-child{margin-bottom:0}.jupyter blockquote .small,.jupyter blockquote footer,.jupyter blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}.jupyter blockquote .small:before,.jupyter blockquote footer:before,.jupyter blockquote small:before{content:'\2014 \00A0'}.jupyter .blockquote-reverse,.jupyter blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.jupyter .blockquote-reverse .small:before,.jupyter .blockquote-reverse footer:before,.jupyter .blockquote-reverse small:before,.jupyter blockquote.pull-right .small:before,.jupyter blockquote.pull-right footer:before,.jupyter blockquote.pull-right small:before{content:''}.jupyter .blockquote-reverse .small:after,.jupyter .blockquote-reverse footer:after,.jupyter .blockquote-reverse small:after,.jupyter blockquote.pull-right .small:after,.jupyter blockquote.pull-right footer:after,.jupyter blockquote.pull-right small:after{content:'\00A0 \2014'}.jupyter address{margin-bottom:18px;font-style:normal;line-height:1.42857143}.jupyter code,.jupyter kbd,.jupyter pre,.jupyter samp{font-family:monospace}.jupyter code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:2px}.jupyter kbd{padding:2px 4px;font-size:90%;color:#888;background-color:transparent;border-radius:1px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}.jupyter kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}.jupyter pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}.jupyter pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.jupyter .pre-scrollable{max-height:340px;overflow-y:scroll}.jupyter .container{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}@media (min-width:768px){.jupyter .container{width:768px}}@media (min-width:992px){.jupyter .container{width:940px}}@media (min-width:1200px){.jupyter .container{width:1140px}}.jupyter .container-fluid{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.jupyter .row{margin-left:0;margin-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.jupyter .col-xs-1{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.jupyter .col-xs-1{float:left}.jupyter .col-xs-12{width:100%}.jupyter .col-xs-11{width:91.66666667%}.jupyter .col-xs-10{width:83.33333333%}.jupyter .col-xs-9{width:75%}.jupyter .col-xs-8{width:66.66666667%}.jupyter .col-xs-7{width:58.33333333%}.jupyter .col-xs-6{width:50%}.jupyter .col-xs-5{width:41.66666667%}.jupyter .col-xs-4{width:33.33333333%}.jupyter .col-xs-3{width:25%}.jupyter .col-xs-2{width:16.66666667%}.jupyter .col-xs-1{width:8.33333333%}.jupyter .col-xs-pull-12{right:100%}.jupyter .col-xs-pull-11{right:91.66666667%}.jupyter .col-xs-pull-10{right:83.33333333%}.jupyter .col-xs-pull-9{right:75%}.jupyter .col-xs-pull-8{right:66.66666667%}.jupyter .col-xs-pull-7{right:58.33333333%}.jupyter .col-xs-pull-6{right:50%}.jupyter .col-xs-pull-5{right:41.66666667%}.jupyter .col-xs-pull-4{right:33.33333333%}.jupyter .col-xs-pull-3{right:25%}.jupyter .col-xs-pull-2{right:16.66666667%}.jupyter .col-xs-pull-1{right:8.33333333%}.jupyter .col-xs-pull-0{right:auto}.jupyter .col-xs-push-12{left:100%}.jupyter .col-xs-push-11{left:91.66666667%}.jupyter .col-xs-push-10{left:83.33333333%}.jupyter .col-xs-push-9{left:75%}.jupyter .col-xs-push-8{left:66.66666667%}.jupyter .col-xs-push-7{left:58.33333333%}.jupyter .col-xs-push-6{left:50%}.jupyter .col-xs-push-5{left:41.66666667%}.jupyter .col-xs-push-4{left:33.33333333%}.jupyter .col-xs-push-3{left:25%}.jupyter .col-xs-push-2{left:16.66666667%}.jupyter .col-xs-push-1{left:8.33333333%}.jupyter .col-xs-push-0{left:auto}.jupyter .col-xs-offset-12{margin-left:100%}.jupyter .col-xs-offset-11{margin-left:91.66666667%}.jupyter .col-xs-offset-10{margin-left:83.33333333%}.jupyter .col-xs-offset-9{margin-left:75%}.jupyter .col-xs-offset-8{margin-left:66.66666667%}.jupyter .col-xs-offset-7{margin-left:58.33333333%}.jupyter .col-xs-offset-6{margin-left:50%}.jupyter .col-xs-offset-5{margin-left:41.66666667%}.jupyter .col-xs-offset-4{margin-left:33.33333333%}.jupyter .col-xs-offset-3{margin-left:25%}.jupyter .col-xs-offset-2{margin-left:16.66666667%}.jupyter .col-xs-offset-1{margin-left:8.33333333%}.jupyter .col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.jupyter .col-sm-1{float:left}.jupyter .col-sm-12{width:100%}.jupyter .col-sm-11{width:91.66666667%}.jupyter .col-sm-10{width:83.33333333%}.jupyter .col-sm-9{width:75%}.jupyter .col-sm-8{width:66.66666667%}.jupyter .col-sm-7{width:58.33333333%}.jupyter .col-sm-6{width:50%}.jupyter .col-sm-5{width:41.66666667%}.jupyter .col-sm-4{width:33.33333333%}.jupyter .col-sm-3{width:25%}.jupyter .col-sm-2{width:16.66666667%}.jupyter .col-sm-1{width:8.33333333%}.jupyter .col-sm-pull-12{right:100%}.jupyter .col-sm-pull-11{right:91.66666667%}.jupyter .col-sm-pull-10{right:83.33333333%}.jupyter .col-sm-pull-9{right:75%}.jupyter .col-sm-pull-8{right:66.66666667%}.jupyter .col-sm-pull-7{right:58.33333333%}.jupyter .col-sm-pull-6{right:50%}.jupyter .col-sm-pull-5{right:41.66666667%}.jupyter .col-sm-pull-4{right:33.33333333%}.jupyter .col-sm-pull-3{right:25%}.jupyter .col-sm-pull-2{right:16.66666667%}.jupyter .col-sm-pull-1{right:8.33333333%}.jupyter .col-sm-pull-0{right:auto}.jupyter .col-sm-push-12{left:100%}.jupyter .col-sm-push-11{left:91.66666667%}.jupyter .col-sm-push-10{left:83.33333333%}.jupyter .col-sm-push-9{left:75%}.jupyter .col-sm-push-8{left:66.66666667%}.jupyter .col-sm-push-7{left:58.33333333%}.jupyter .col-sm-push-6{left:50%}.jupyter .col-sm-push-5{left:41.66666667%}.jupyter .col-sm-push-4{left:33.33333333%}.jupyter .col-sm-push-3{left:25%}.jupyter .col-sm-push-2{left:16.66666667%}.jupyter .col-sm-push-1{left:8.33333333%}.jupyter .col-sm-push-0{left:auto}.jupyter .col-sm-offset-12{margin-left:100%}.jupyter .col-sm-offset-11{margin-left:91.66666667%}.jupyter .col-sm-offset-10{margin-left:83.33333333%}.jupyter .col-sm-offset-9{margin-left:75%}.jupyter .col-sm-offset-8{margin-left:66.66666667%}.jupyter .col-sm-offset-7{margin-left:58.33333333%}.jupyter .col-sm-offset-6{margin-left:50%}.jupyter .col-sm-offset-5{margin-left:41.66666667%}.jupyter .col-sm-offset-4{margin-left:33.33333333%}.jupyter .col-sm-offset-3{margin-left:25%}.jupyter .col-sm-offset-2{margin-left:16.66666667%}.jupyter .col-sm-offset-1{margin-left:8.33333333%}.jupyter .col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.jupyter .col-md-1{float:left}.jupyter .col-md-12{width:100%}.jupyter .col-md-11{width:91.66666667%}.jupyter .col-md-10{width:83.33333333%}.jupyter .col-md-9{width:75%}.jupyter .col-md-8{width:66.66666667%}.jupyter .col-md-7{width:58.33333333%}.jupyter .col-md-6{width:50%}.jupyter .col-md-5{width:41.66666667%}.jupyter .col-md-4{width:33.33333333%}.jupyter .col-md-3{width:25%}.jupyter .col-md-2{width:16.66666667%}.jupyter .col-md-1{width:8.33333333%}.jupyter .col-md-pull-12{right:100%}.jupyter .col-md-pull-11{right:91.66666667%}.jupyter .col-md-pull-10{right:83.33333333%}.jupyter .col-md-pull-9{right:75%}.jupyter .col-md-pull-8{right:66.66666667%}.jupyter .col-md-pull-7{right:58.33333333%}.jupyter .col-md-pull-6{right:50%}.jupyter .col-md-pull-5{right:41.66666667%}.jupyter .col-md-pull-4{right:33.33333333%}.jupyter .col-md-pull-3{right:25%}.jupyter .col-md-pull-2{right:16.66666667%}.jupyter .col-md-pull-1{right:8.33333333%}.jupyter .col-md-pull-0{right:auto}.jupyter .col-md-push-12{left:100%}.jupyter .col-md-push-11{left:91.66666667%}.jupyter .col-md-push-10{left:83.33333333%}.jupyter .col-md-push-9{left:75%}.jupyter .col-md-push-8{left:66.66666667%}.jupyter .col-md-push-7{left:58.33333333%}.jupyter .col-md-push-6{left:50%}.jupyter .col-md-push-5{left:41.66666667%}.jupyter .col-md-push-4{left:33.33333333%}.jupyter .col-md-push-3{left:25%}.jupyter .col-md-push-2{left:16.66666667%}.jupyter .col-md-push-1{left:8.33333333%}.jupyter .col-md-push-0{left:auto}.jupyter .col-md-offset-12{margin-left:100%}.jupyter .col-md-offset-11{margin-left:91.66666667%}.jupyter .col-md-offset-10{margin-left:83.33333333%}.jupyter .col-md-offset-9{margin-left:75%}.jupyter .col-md-offset-8{margin-left:66.66666667%}.jupyter .col-md-offset-7{margin-left:58.33333333%}.jupyter .col-md-offset-6{margin-left:50%}.jupyter .col-md-offset-5{margin-left:41.66666667%}.jupyter .col-md-offset-4{margin-left:33.33333333%}.jupyter .col-md-offset-3{margin-left:25%}.jupyter .col-md-offset-2{margin-left:16.66666667%}.jupyter .col-md-offset-1{margin-left:8.33333333%}.jupyter .col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.jupyter .col-lg-1{float:left}.jupyter .col-lg-12{width:100%}.jupyter .col-lg-11{width:91.66666667%}.jupyter .col-lg-10{width:83.33333333%}.jupyter .col-lg-9{width:75%}.jupyter .col-lg-8{width:66.66666667%}.jupyter .col-lg-7{width:58.33333333%}.jupyter .col-lg-6{width:50%}.jupyter .col-lg-5{width:41.66666667%}.jupyter .col-lg-4{width:33.33333333%}.jupyter .col-lg-3{width:25%}.jupyter .col-lg-2{width:16.66666667%}.jupyter .col-lg-1{width:8.33333333%}.jupyter .col-lg-pull-12{right:100%}.jupyter .col-lg-pull-11{right:91.66666667%}.jupyter .col-lg-pull-10{right:83.33333333%}.jupyter .col-lg-pull-9{right:75%}.jupyter .col-lg-pull-8{right:66.66666667%}.jupyter .col-lg-pull-7{right:58.33333333%}.jupyter .col-lg-pull-6{right:50%}.jupyter .col-lg-pull-5{right:41.66666667%}.jupyter .col-lg-pull-4{right:33.33333333%}.jupyter .col-lg-pull-3{right:25%}.jupyter .col-lg-pull-2{right:16.66666667%}.jupyter .col-lg-pull-1{right:8.33333333%}.jupyter .col-lg-pull-0{right:auto}.jupyter .col-lg-push-12{left:100%}.jupyter .col-lg-push-11{left:91.66666667%}.jupyter .col-lg-push-10{left:83.33333333%}.jupyter .col-lg-push-9{left:75%}.jupyter .col-lg-push-8{left:66.66666667%}.jupyter .col-lg-push-7{left:58.33333333%}.jupyter .col-lg-push-6{left:50%}.jupyter .col-lg-push-5{left:41.66666667%}.jupyter .col-lg-push-4{left:33.33333333%}.jupyter .col-lg-push-3{left:25%}.jupyter .col-lg-push-2{left:16.66666667%}.jupyter .col-lg-push-1{left:8.33333333%}.jupyter .col-lg-push-0{left:auto}.jupyter .col-lg-offset-12{margin-left:100%}.jupyter .col-lg-offset-11{margin-left:91.66666667%}.jupyter .col-lg-offset-10{margin-left:83.33333333%}.jupyter .col-lg-offset-9{margin-left:75%}.jupyter .col-lg-offset-8{margin-left:66.66666667%}.jupyter .col-lg-offset-7{margin-left:58.33333333%}.jupyter .col-lg-offset-6{margin-left:50%}.jupyter .col-lg-offset-5{margin-left:41.66666667%}.jupyter .col-lg-offset-4{margin-left:33.33333333%}.jupyter .col-lg-offset-3{margin-left:25%}.jupyter .col-lg-offset-2{margin-left:16.66666667%}.jupyter .col-lg-offset-1{margin-left:8.33333333%}.jupyter .col-lg-offset-0{margin-left:0}}.jupyter table{background-color:transparent}.jupyter caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}.jupyter th{text-align:left}.jupyter .table{width:100%;max-width:100%;margin-bottom:18px}.jupyter .table>tbody>tr>td,.jupyter .table>tbody>tr>th,.jupyter .table>tfoot>tr>td,.jupyter .table>tfoot>tr>th,.jupyter .table>thead>tr>td,.jupyter .table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.jupyter .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.jupyter .table>caption+thead>tr:first-child>td,.jupyter .table>caption+thead>tr:first-child>th,.jupyter .table>colgroup+thead>tr:first-child>td,.jupyter .table>colgroup+thead>tr:first-child>th,.jupyter .table>thead:first-child>tr:first-child>td,.jupyter .table>thead:first-child>tr:first-child>th{border-top:0}.jupyter .table>tbody+tbody{border-top:2px solid #ddd}.jupyter .table .table{background-color:#fff}.jupyter .table-condensed>tbody>tr>td,.jupyter .table-condensed>tbody>tr>th,.jupyter .table-condensed>tfoot>tr>td,.jupyter .table-condensed>tfoot>tr>th,.jupyter .table-condensed>thead>tr>td,.jupyter .table-condensed>thead>tr>th{padding:5px}.jupyter .table-bordered{border:1px solid #ddd}.jupyter .table-bordered>tbody>tr>td,.jupyter .table-bordered>tbody>tr>th,.jupyter .table-bordered>tfoot>tr>td,.jupyter .table-bordered>tfoot>tr>th,.jupyter .table-bordered>thead>tr>td,.jupyter .table-bordered>thead>tr>th{border:1px solid #ddd}.jupyter .table-bordered>thead>tr>td,.jupyter .table-bordered>thead>tr>th{border-bottom-width:2px}.jupyter .table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.jupyter .table-hover>tbody>tr:hover{background-color:#f5f5f5}.jupyter table col[class*=col-]{position:static;float:none;display:table-column}.jupyter table td[class*=col-],.jupyter table th[class*=col-]{position:static;float:none;display:table-cell}.jupyter .table>tbody>tr.active>td,.jupyter .table>tbody>tr.active>th,.jupyter .table>tbody>tr>td.active,.jupyter .table>tbody>tr>th.active,.jupyter .table>tfoot>tr.active>td,.jupyter .table>tfoot>tr.active>th,.jupyter .table>tfoot>tr>td.active,.jupyter .table>tfoot>tr>th.active,.jupyter .table>thead>tr.active>td,.jupyter .table>thead>tr.active>th,.jupyter .table>thead>tr>td.active,.jupyter .table>thead>tr>th.active{background-color:#f5f5f5}.jupyter .table-hover>tbody>tr.active:hover>td,.jupyter .table-hover>tbody>tr.active:hover>th,.jupyter .table-hover>tbody>tr:hover>.active,.jupyter .table-hover>tbody>tr>td.active:hover,.jupyter .table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.jupyter .table>tbody>tr.success>td,.jupyter .table>tbody>tr.success>th,.jupyter .table>tbody>tr>td.success,.jupyter .table>tbody>tr>th.success,.jupyter .table>tfoot>tr.success>td,.jupyter .table>tfoot>tr.success>th,.jupyter .table>tfoot>tr>td.success,.jupyter .table>tfoot>tr>th.success,.jupyter .table>thead>tr.success>td,.jupyter .table>thead>tr.success>th,.jupyter .table>thead>tr>td.success,.jupyter .table>thead>tr>th.success{background-color:#dff0d8}.jupyter .table-hover>tbody>tr.success:hover>td,.jupyter .table-hover>tbody>tr.success:hover>th,.jupyter .table-hover>tbody>tr:hover>.success,.jupyter .table-hover>tbody>tr>td.success:hover,.jupyter .table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.jupyter .table>tbody>tr.info>td,.jupyter .table>tbody>tr.info>th,.jupyter .table>tbody>tr>td.info,.jupyter .table>tbody>tr>th.info,.jupyter .table>tfoot>tr.info>td,.jupyter .table>tfoot>tr.info>th,.jupyter .table>tfoot>tr>td.info,.jupyter .table>tfoot>tr>th.info,.jupyter .table>thead>tr.info>td,.jupyter .table>thead>tr.info>th,.jupyter .table>thead>tr>td.info,.jupyter .table>thead>tr>th.info{background-color:#d9edf7}.jupyter .table-hover>tbody>tr.info:hover>td,.jupyter .table-hover>tbody>tr.info:hover>th,.jupyter .table-hover>tbody>tr:hover>.info,.jupyter .table-hover>tbody>tr>td.info:hover,.jupyter .table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.jupyter .table>tbody>tr.warning>td,.jupyter .table>tbody>tr.warning>th,.jupyter .table>tbody>tr>td.warning,.jupyter .table>tbody>tr>th.warning,.jupyter .table>tfoot>tr.warning>td,.jupyter .table>tfoot>tr.warning>th,.jupyter .table>tfoot>tr>td.warning,.jupyter .table>tfoot>tr>th.warning,.jupyter .table>thead>tr.warning>td,.jupyter .table>thead>tr.warning>th,.jupyter .table>thead>tr>td.warning,.jupyter .table>thead>tr>th.warning{background-color:#fcf8e3}.jupyter .table-hover>tbody>tr.warning:hover>td,.jupyter .table-hover>tbody>tr.warning:hover>th,.jupyter .table-hover>tbody>tr:hover>.warning,.jupyter .table-hover>tbody>tr>td.warning:hover,.jupyter .table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.jupyter .table>tbody>tr.danger>td,.jupyter .table>tbody>tr.danger>th,.jupyter .table>tbody>tr>td.danger,.jupyter .table>tbody>tr>th.danger,.jupyter .table>tfoot>tr.danger>td,.jupyter .table>tfoot>tr.danger>th,.jupyter .table>tfoot>tr>td.danger,.jupyter .table>tfoot>tr>th.danger,.jupyter .table>thead>tr.danger>td,.jupyter .table>thead>tr.danger>th,.jupyter .table>thead>tr>td.danger,.jupyter .table>thead>tr>th.danger{background-color:#f2dede}.jupyter .table-hover>tbody>tr.danger:hover>td,.jupyter .table-hover>tbody>tr.danger:hover>th,.jupyter .table-hover>tbody>tr:hover>.danger,.jupyter .table-hover>tbody>tr>td.danger:hover,.jupyter .table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.jupyter .table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.jupyter .table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.jupyter .table-responsive>.table{margin-bottom:0}.jupyter .table-responsive>.table>tbody>tr>td,.jupyter .table-responsive>.table>tbody>tr>th,.jupyter .table-responsive>.table>tfoot>tr>td,.jupyter .table-responsive>.table>tfoot>tr>th,.jupyter .table-responsive>.table>thead>tr>td,.jupyter .table-responsive>.table>thead>tr>th{white-space:nowrap}.jupyter .table-responsive>.table-bordered{border:0}.jupyter .table-responsive>.table-bordered>tbody>tr>td:first-child,.jupyter .table-responsive>.table-bordered>tbody>tr>th:first-child,.jupyter .table-responsive>.table-bordered>tfoot>tr>td:first-child,.jupyter .table-responsive>.table-bordered>tfoot>tr>th:first-child,.jupyter .table-responsive>.table-bordered>thead>tr>td:first-child,.jupyter .table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.jupyter .table-responsive>.table-bordered>tbody>tr>td:last-child,.jupyter .table-responsive>.table-bordered>tbody>tr>th:last-child,.jupyter .table-responsive>.table-bordered>tfoot>tr>td:last-child,.jupyter .table-responsive>.table-bordered>tfoot>tr>th:last-child,.jupyter .table-responsive>.table-bordered>thead>tr>td:last-child,.jupyter .table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.jupyter .table-responsive>.table-bordered>tbody>tr:last-child>td,.jupyter .table-responsive>.table-bordered>tbody>tr:last-child>th,.jupyter .table-responsive>.table-bordered>tfoot>tr:last-child>td,.jupyter .table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.jupyter fieldset{padding:0;margin:0;border:0;min-width:0}.jupyter legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:19.5px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}.jupyter label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}.jupyter input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jupyter input[type=checkbox],.jupyter input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.jupyter input[type=file]{display:block}.jupyter input[type=range]{display:block;width:100%}.jupyter select[multiple],.jupyter select[size]{height:auto}.jupyter input[type=file]:focus,.jupyter input[type=checkbox]:focus,.jupyter input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.jupyter output{display:block;padding-top:7px;font-size:13px;line-height:1.42857143;color:#555}.jupyter .form-control{display:block;width:100%;height:32px;padding:6px 12px;font-size:13px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.jupyter .form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.jupyter .form-control::-moz-placeholder{color:#999;opacity:1}.jupyter .form-control:-ms-input-placeholder{color:#999}.jupyter .form-control::-webkit-input-placeholder{color:#999}.jupyter .form-control[disabled],.jupyter .form-control[readonly],fieldset[disabled] .jupyter .form-control{background-color:#eee;opacity:1}.jupyter .form-control[disabled],fieldset[disabled] .jupyter .form-control{cursor:not-allowed}textarea.jupyter .form-control{height:auto}.jupyter input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){.jupyter input[type=date].form-control,.jupyter input[type=time].form-control,.jupyter input[type=datetime-local].form-control,.jupyter input[type=month].form-control{line-height:32px}.input-group-sm .jupyter input[type=date],.input-group-sm .jupyter input[type=time],.input-group-sm .jupyter input[type=datetime-local],.input-group-sm .jupyter input[type=month],.jupyter input[type=date].input-sm,.jupyter input[type=time].input-sm,.jupyter input[type=datetime-local].input-sm,.jupyter input[type=month].input-sm{line-height:30px}.input-group-lg .jupyter input[type=date],.input-group-lg .jupyter input[type=time],.input-group-lg .jupyter input[type=datetime-local],.input-group-lg .jupyter input[type=month],.jupyter input[type=date].input-lg,.jupyter input[type=time].input-lg,.jupyter input[type=datetime-local].input-lg,.jupyter input[type=month].input-lg{line-height:45px}}.jupyter .form-group{margin-bottom:15px}.jupyter .checkbox,.jupyter .radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.jupyter .checkbox label,.jupyter .radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.jupyter .checkbox input[type=checkbox],.jupyter .checkbox-inline input[type=checkbox],.jupyter .radio input[type=radio],.jupyter .radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.jupyter .checkbox+.checkbox,.jupyter .radio+.radio{margin-top:-5px}.jupyter .checkbox-inline,.jupyter .radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.jupyter .checkbox-inline+.checkbox-inline,.jupyter .radio-inline+.radio-inline{margin-top:0;margin-left:10px}.jupyter input[type=checkbox].disabled,.jupyter input[type=checkbox][disabled],.jupyter input[type=radio].disabled,.jupyter input[type=radio][disabled],fieldset[disabled] .jupyter input[type=checkbox],fieldset[disabled] .jupyter input[type=radio]{cursor:not-allowed}.jupyter .checkbox-inline.disabled,.jupyter .radio-inline.disabled,fieldset[disabled] .jupyter .checkbox-inline,fieldset[disabled] .jupyter .radio-inline{cursor:not-allowed}.jupyter .checkbox.disabled label,.jupyter .radio.disabled label,fieldset[disabled] .jupyter .checkbox label,fieldset[disabled] .jupyter .radio label{cursor:not-allowed}.jupyter .form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:31px}.jupyter .form-control-static.input-lg,.jupyter .form-control-static.input-sm{padding-left:0;padding-right:0}.jupyter .input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.jupyter .input-sm{height:30px;line-height:30px}select[multiple].jupyter .input-sm,textarea.jupyter .input-sm{height:auto}.jupyter .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}.jupyter .form-group-sm select.form-control{height:30px;line-height:30px}.jupyter .form-group-sm select[multiple].form-control,.jupyter .form-group-sm textarea.form-control{height:auto}.jupyter .form-group-sm .form-control-static{height:30px;min-height:30px;padding:6px 10px;font-size:12px;line-height:1.5}.jupyter .input-lg{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.jupyter .input-lg{height:45px;line-height:45px}select[multiple].jupyter .input-lg,textarea.jupyter .input-lg{height:auto}.jupyter .form-group-lg .form-control{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}.jupyter .form-group-lg select.form-control{height:45px;line-height:45px}.jupyter .form-group-lg select[multiple].form-control,.jupyter .form-group-lg textarea.form-control{height:auto}.jupyter .form-group-lg .form-control-static{height:45px;min-height:35px;padding:11px 16px;font-size:17px;line-height:1.3333333}.jupyter .has-feedback{position:relative}.jupyter .has-feedback .form-control{padding-right:40px}.jupyter .form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center;pointer-events:none}.jupyter .form-group-lg .form-control+.form-control-feedback,.jupyter .input-group-lg+.form-control-feedback,.jupyter .input-lg+.form-control-feedback{width:45px;height:45px;line-height:45px}.jupyter .form-group-sm .form-control+.form-control-feedback,.jupyter .input-group-sm+.form-control-feedback,.jupyter .input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.jupyter .has-success .checkbox,.jupyter .has-success .checkbox-inline,.jupyter .has-success .control-label,.jupyter .has-success .help-block,.jupyter .has-success .radio,.jupyter .has-success .radio-inline,.jupyter .has-success.checkbox label,.jupyter .has-success.checkbox-inline label,.jupyter .has-success.radio label,.jupyter .has-success.radio-inline label{color:#3c763d}.jupyter .has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.jupyter .has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.jupyter .has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.jupyter .has-success .form-control-feedback{color:#3c763d}.jupyter .has-warning .checkbox,.jupyter .has-warning .checkbox-inline,.jupyter .has-warning .control-label,.jupyter .has-warning .help-block,.jupyter .has-warning .radio,.jupyter .has-warning .radio-inline,.jupyter .has-warning.checkbox label,.jupyter .has-warning.checkbox-inline label,.jupyter .has-warning.radio label,.jupyter .has-warning.radio-inline label{color:#8a6d3b}.jupyter .has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.jupyter .has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.jupyter .has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.jupyter .has-warning .form-control-feedback{color:#8a6d3b}.jupyter .has-error .checkbox,.jupyter .has-error .checkbox-inline,.jupyter .has-error .control-label,.jupyter .has-error .help-block,.jupyter .has-error .radio,.jupyter .has-error .radio-inline,.jupyter .has-error.checkbox label,.jupyter .has-error.checkbox-inline label,.jupyter .has-error.radio label,.jupyter .has-error.radio-inline label{color:#a94442}.jupyter .has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.jupyter .has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.jupyter .has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.jupyter .has-error .form-control-feedback{color:#a94442}.jupyter .has-feedback label~.form-control-feedback{top:23px}.jupyter .has-feedback label.sr-only~.form-control-feedback{top:0}.jupyter .help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}@media (min-width:768px){.jupyter .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.jupyter .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.jupyter .form-inline .form-control-static{display:inline-block}.jupyter .form-inline .input-group{display:inline-table;vertical-align:middle}.jupyter .form-inline .input-group .form-control,.jupyter .form-inline .input-group .input-group-addon,.jupyter .form-inline .input-group .input-group-btn{width:auto}.jupyter .form-inline .input-group>.form-control{width:100%}.jupyter .form-inline .control-label{margin-bottom:0;vertical-align:middle}.jupyter .form-inline .checkbox,.jupyter .form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.jupyter .form-inline .checkbox label,.jupyter .form-inline .radio label{padding-left:0}.jupyter .form-inline .checkbox input[type=checkbox],.jupyter .form-inline .radio input[type=radio]{position:relative;margin-left:0}.jupyter .form-inline .has-feedback .form-control-feedback{top:0}}.jupyter .form-horizontal .checkbox,.jupyter .form-horizontal .checkbox-inline,.jupyter .form-horizontal .radio,.jupyter .form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.jupyter .form-horizontal .checkbox,.jupyter .form-horizontal .radio{min-height:25px}.jupyter .form-horizontal .form-group{margin-left:0;margin-right:0}@media (min-width:768px){.jupyter .form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.jupyter .form-horizontal .has-feedback .form-control-feedback{right:0}@media (min-width:768px){.jupyter .form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:17px}}@media (min-width:768px){.jupyter .form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.jupyter .btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:13px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jupyter .btn.active.focus,.jupyter .btn.active:focus,.jupyter .btn.focus,.jupyter .btn:active.focus,.jupyter .btn:active:focus,.jupyter .btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.jupyter .btn.focus,.jupyter .btn:focus,.jupyter .btn:hover{color:#333;text-decoration:none}.jupyter .btn.active,.jupyter .btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.jupyter .btn.disabled,.jupyter .btn[disabled],fieldset[disabled] .jupyter .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.jupyter .btn.disabled,fieldset[disabled] a.jupyter .btn{pointer-events:none}.jupyter .btn-default{color:#333;background-color:#fff;border-color:#ccc}.jupyter .btn-default.focus,.jupyter .btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.jupyter .btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter .btn-default.active,.jupyter .btn-default:active,.open>.dropdown-toggle.jupyter .btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter .btn-default.active.focus,.jupyter .btn-default.active:focus,.jupyter .btn-default.active:hover,.jupyter .btn-default:active.focus,.jupyter .btn-default:active:focus,.jupyter .btn-default:active:hover,.open>.dropdown-toggle.jupyter .btn-default.focus,.open>.dropdown-toggle.jupyter .btn-default:focus,.open>.dropdown-toggle.jupyter .btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.jupyter .btn-default.active,.jupyter .btn-default:active,.open>.dropdown-toggle.jupyter .btn-default{background-image:none}.jupyter .btn-default.disabled,.jupyter .btn-default.disabled.active,.jupyter .btn-default.disabled.focus,.jupyter .btn-default.disabled:active,.jupyter .btn-default.disabled:focus,.jupyter .btn-default.disabled:hover,.jupyter .btn-default[disabled],.jupyter .btn-default[disabled].active,.jupyter .btn-default[disabled].focus,.jupyter .btn-default[disabled]:active,.jupyter .btn-default[disabled]:focus,.jupyter .btn-default[disabled]:hover,fieldset[disabled] .jupyter .btn-default,fieldset[disabled] .jupyter .btn-default.active,fieldset[disabled] .jupyter .btn-default.focus,fieldset[disabled] .jupyter .btn-default:active,fieldset[disabled] .jupyter .btn-default:focus,fieldset[disabled] .jupyter .btn-default:hover{background-color:#fff;border-color:#ccc}.jupyter .btn-default .badge{color:#fff;background-color:#333}.jupyter .btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.jupyter .btn-primary.focus,.jupyter .btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.jupyter .btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.jupyter .btn-primary.active,.jupyter .btn-primary:active,.open>.dropdown-toggle.jupyter .btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.jupyter .btn-primary.active.focus,.jupyter .btn-primary.active:focus,.jupyter .btn-primary.active:hover,.jupyter .btn-primary:active.focus,.jupyter .btn-primary:active:focus,.jupyter .btn-primary:active:hover,.open>.dropdown-toggle.jupyter .btn-primary.focus,.open>.dropdown-toggle.jupyter .btn-primary:focus,.open>.dropdown-toggle.jupyter .btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.jupyter .btn-primary.active,.jupyter .btn-primary:active,.open>.dropdown-toggle.jupyter .btn-primary{background-image:none}.jupyter .btn-primary.disabled,.jupyter .btn-primary.disabled.active,.jupyter .btn-primary.disabled.focus,.jupyter .btn-primary.disabled:active,.jupyter .btn-primary.disabled:focus,.jupyter .btn-primary.disabled:hover,.jupyter .btn-primary[disabled],.jupyter .btn-primary[disabled].active,.jupyter .btn-primary[disabled].focus,.jupyter .btn-primary[disabled]:active,.jupyter .btn-primary[disabled]:focus,.jupyter .btn-primary[disabled]:hover,fieldset[disabled] .jupyter .btn-primary,fieldset[disabled] .jupyter .btn-primary.active,fieldset[disabled] .jupyter .btn-primary.focus,fieldset[disabled] .jupyter .btn-primary:active,fieldset[disabled] .jupyter .btn-primary:focus,fieldset[disabled] .jupyter .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.jupyter .btn-primary .badge{color:#337ab7;background-color:#fff}.jupyter .btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.jupyter .btn-success.focus,.jupyter .btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.jupyter .btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.jupyter .btn-success.active,.jupyter .btn-success:active,.open>.dropdown-toggle.jupyter .btn-success{color:#fff;background-color:#449d44;border-color:#398439}.jupyter .btn-success.active.focus,.jupyter .btn-success.active:focus,.jupyter .btn-success.active:hover,.jupyter .btn-success:active.focus,.jupyter .btn-success:active:focus,.jupyter .btn-success:active:hover,.open>.dropdown-toggle.jupyter .btn-success.focus,.open>.dropdown-toggle.jupyter .btn-success:focus,.open>.dropdown-toggle.jupyter .btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.jupyter .btn-success.active,.jupyter .btn-success:active,.open>.dropdown-toggle.jupyter .btn-success{background-image:none}.jupyter .btn-success.disabled,.jupyter .btn-success.disabled.active,.jupyter .btn-success.disabled.focus,.jupyter .btn-success.disabled:active,.jupyter .btn-success.disabled:focus,.jupyter .btn-success.disabled:hover,.jupyter .btn-success[disabled],.jupyter .btn-success[disabled].active,.jupyter .btn-success[disabled].focus,.jupyter .btn-success[disabled]:active,.jupyter .btn-success[disabled]:focus,.jupyter .btn-success[disabled]:hover,fieldset[disabled] .jupyter .btn-success,fieldset[disabled] .jupyter .btn-success.active,fieldset[disabled] .jupyter .btn-success.focus,fieldset[disabled] .jupyter .btn-success:active,fieldset[disabled] .jupyter .btn-success:focus,fieldset[disabled] .jupyter .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.jupyter .btn-success .badge{color:#5cb85c;background-color:#fff}.jupyter .btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.jupyter .btn-info.focus,.jupyter .btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.jupyter .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.jupyter .btn-info.active,.jupyter .btn-info:active,.open>.dropdown-toggle.jupyter .btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.jupyter .btn-info.active.focus,.jupyter .btn-info.active:focus,.jupyter .btn-info.active:hover,.jupyter .btn-info:active.focus,.jupyter .btn-info:active:focus,.jupyter .btn-info:active:hover,.open>.dropdown-toggle.jupyter .btn-info.focus,.open>.dropdown-toggle.jupyter .btn-info:focus,.open>.dropdown-toggle.jupyter .btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.jupyter .btn-info.active,.jupyter .btn-info:active,.open>.dropdown-toggle.jupyter .btn-info{background-image:none}.jupyter .btn-info.disabled,.jupyter .btn-info.disabled.active,.jupyter .btn-info.disabled.focus,.jupyter .btn-info.disabled:active,.jupyter .btn-info.disabled:focus,.jupyter .btn-info.disabled:hover,.jupyter .btn-info[disabled],.jupyter .btn-info[disabled].active,.jupyter .btn-info[disabled].focus,.jupyter .btn-info[disabled]:active,.jupyter .btn-info[disabled]:focus,.jupyter .btn-info[disabled]:hover,fieldset[disabled] .jupyter .btn-info,fieldset[disabled] .jupyter .btn-info.active,fieldset[disabled] .jupyter .btn-info.focus,fieldset[disabled] .jupyter .btn-info:active,fieldset[disabled] .jupyter .btn-info:focus,fieldset[disabled] .jupyter .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.jupyter .btn-info .badge{color:#5bc0de;background-color:#fff}.jupyter .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.jupyter .btn-warning.focus,.jupyter .btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.jupyter .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.jupyter .btn-warning.active,.jupyter .btn-warning:active,.open>.dropdown-toggle.jupyter .btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.jupyter .btn-warning.active.focus,.jupyter .btn-warning.active:focus,.jupyter .btn-warning.active:hover,.jupyter .btn-warning:active.focus,.jupyter .btn-warning:active:focus,.jupyter .btn-warning:active:hover,.open>.dropdown-toggle.jupyter .btn-warning.focus,.open>.dropdown-toggle.jupyter .btn-warning:focus,.open>.dropdown-toggle.jupyter .btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.jupyter .btn-warning.active,.jupyter .btn-warning:active,.open>.dropdown-toggle.jupyter .btn-warning{background-image:none}.jupyter .btn-warning.disabled,.jupyter .btn-warning.disabled.active,.jupyter .btn-warning.disabled.focus,.jupyter .btn-warning.disabled:active,.jupyter .btn-warning.disabled:focus,.jupyter .btn-warning.disabled:hover,.jupyter .btn-warning[disabled],.jupyter .btn-warning[disabled].active,.jupyter .btn-warning[disabled].focus,.jupyter .btn-warning[disabled]:active,.jupyter .btn-warning[disabled]:focus,.jupyter .btn-warning[disabled]:hover,fieldset[disabled] .jupyter .btn-warning,fieldset[disabled] .jupyter .btn-warning.active,fieldset[disabled] .jupyter .btn-warning.focus,fieldset[disabled] .jupyter .btn-warning:active,fieldset[disabled] .jupyter .btn-warning:focus,fieldset[disabled] .jupyter .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.jupyter .btn-warning .badge{color:#f0ad4e;background-color:#fff}.jupyter .btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.jupyter .btn-danger.focus,.jupyter .btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.jupyter .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.jupyter .btn-danger.active,.jupyter .btn-danger:active,.open>.dropdown-toggle.jupyter .btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.jupyter .btn-danger.active.focus,.jupyter .btn-danger.active:focus,.jupyter .btn-danger.active:hover,.jupyter .btn-danger:active.focus,.jupyter .btn-danger:active:focus,.jupyter .btn-danger:active:hover,.open>.dropdown-toggle.jupyter .btn-danger.focus,.open>.dropdown-toggle.jupyter .btn-danger:focus,.open>.dropdown-toggle.jupyter .btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.jupyter .btn-danger.active,.jupyter .btn-danger:active,.open>.dropdown-toggle.jupyter .btn-danger{background-image:none}.jupyter .btn-danger.disabled,.jupyter .btn-danger.disabled.active,.jupyter .btn-danger.disabled.focus,.jupyter .btn-danger.disabled:active,.jupyter .btn-danger.disabled:focus,.jupyter .btn-danger.disabled:hover,.jupyter .btn-danger[disabled],.jupyter .btn-danger[disabled].active,.jupyter .btn-danger[disabled].focus,.jupyter .btn-danger[disabled]:active,.jupyter .btn-danger[disabled]:focus,.jupyter .btn-danger[disabled]:hover,fieldset[disabled] .jupyter .btn-danger,fieldset[disabled] .jupyter .btn-danger.active,fieldset[disabled] .jupyter .btn-danger.focus,fieldset[disabled] .jupyter .btn-danger:active,fieldset[disabled] .jupyter .btn-danger:focus,fieldset[disabled] .jupyter .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.jupyter .btn-danger .badge{color:#d9534f;background-color:#fff}.jupyter .btn-link{color:#337ab7;font-weight:400;border-radius:0}.jupyter .btn-link,.jupyter .btn-link.active,.jupyter .btn-link:active,.jupyter .btn-link[disabled],fieldset[disabled] .jupyter .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.jupyter .btn-link,.jupyter .btn-link:active,.jupyter .btn-link:focus,.jupyter .btn-link:hover{border-color:transparent}.jupyter .btn-link:focus,.jupyter .btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.jupyter .btn-link[disabled]:focus,.jupyter .btn-link[disabled]:hover,fieldset[disabled] .jupyter .btn-link:focus,fieldset[disabled] .jupyter .btn-link:hover{color:#777;text-decoration:none}.jupyter .btn-lg{padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}.jupyter .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}.jupyter .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:1px}.jupyter .btn-block{display:block;width:100%}.jupyter .btn-block+.btn-block{margin-top:5px}.jupyter input[type=button].btn-block,.jupyter input[type=reset].btn-block,.jupyter input[type=submit].btn-block{width:100%}.jupyter .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.jupyter .fade.in{opacity:1}.jupyter .collapse{display:none}.jupyter .collapse.in{display:block}tr.jupyter .collapse.in{display:table-row}tbody.jupyter .collapse.in{display:table-row-group}.jupyter .collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.jupyter .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.jupyter .dropdown,.jupyter .dropup{position:relative}.jupyter .dropdown-toggle:focus{outline:0}.jupyter .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.jupyter .dropdown-menu.pull-right{right:0;left:auto}.jupyter .dropdown-menu .divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.jupyter .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.jupyter .dropdown-menu>li>a:focus,.jupyter .dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.jupyter .dropdown-menu>.active>a,.jupyter .dropdown-menu>.active>a:focus,.jupyter .dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.jupyter .dropdown-menu>.disabled>a,.jupyter .dropdown-menu>.disabled>a:focus,.jupyter .dropdown-menu>.disabled>a:hover{color:#777}.jupyter .dropdown-menu>.disabled>a:focus,.jupyter .dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.jupyter .open>.dropdown-menu{display:block}.jupyter .open>a{outline:0}.jupyter .dropdown-menu-right{left:auto;right:0}.jupyter .dropdown-menu-left{left:0;right:auto}.jupyter .dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.jupyter .dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.jupyter .pull-right>.dropdown-menu{right:0;left:auto}.jupyter .dropup .caret,.jupyter .navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.jupyter .dropup .dropdown-menu,.jupyter .navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:541px){.jupyter .navbar-right .dropdown-menu{left:auto;right:0}.jupyter .navbar-right .dropdown-menu-left{left:0;right:auto}}.jupyter .btn-group,.jupyter .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.jupyter .btn-group-vertical>.btn,.jupyter .btn-group>.btn{position:relative;float:left}.jupyter .btn-group-vertical>.btn.active,.jupyter .btn-group-vertical>.btn:active,.jupyter .btn-group-vertical>.btn:focus,.jupyter .btn-group-vertical>.btn:hover,.jupyter .btn-group>.btn.active,.jupyter .btn-group>.btn:active,.jupyter .btn-group>.btn:focus,.jupyter .btn-group>.btn:hover{z-index:2}.jupyter .btn-group .btn+.btn,.jupyter .btn-group .btn+.btn-group,.jupyter .btn-group .btn-group+.btn,.jupyter .btn-group .btn-group+.btn-group{margin-left:-1px}.jupyter .btn-toolbar{margin-left:-5px}.jupyter .btn-toolbar .btn,.jupyter .btn-toolbar .btn-group,.jupyter .btn-toolbar .input-group{float:left}.jupyter .btn-toolbar>.btn,.jupyter .btn-toolbar>.btn-group,.jupyter .btn-toolbar>.input-group{margin-left:5px}.jupyter .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.jupyter .btn-group>.btn:first-child{margin-left:0}.jupyter .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.jupyter .btn-group>.btn:last-child:not(:first-child),.jupyter .btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.jupyter .btn-group>.btn-group{float:left}.jupyter .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.jupyter .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.jupyter .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.jupyter .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.jupyter .btn-group .dropdown-toggle:active,.jupyter .btn-group.open .dropdown-toggle{outline:0}.jupyter .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.jupyter .btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.jupyter .btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.jupyter .btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.jupyter .btn .caret{margin-left:0}.jupyter .btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.jupyter .dropup .btn-lg .caret{border-width:0 5px 5px}.jupyter .btn-group-vertical>.btn,.jupyter .btn-group-vertical>.btn-group,.jupyter .btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.jupyter .btn-group-vertical>.btn-group>.btn{float:none}.jupyter .btn-group-vertical>.btn+.btn,.jupyter .btn-group-vertical>.btn+.btn-group,.jupyter .btn-group-vertical>.btn-group+.btn,.jupyter .btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.jupyter .btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.jupyter .btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.jupyter .btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:2px;border-top-right-radius:0;border-top-left-radius:0}.jupyter .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.jupyter .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.jupyter .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.jupyter .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.jupyter .btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.jupyter .btn-group-justified>.btn,.jupyter .btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.jupyter .btn-group-justified>.btn-group .btn{width:100%}.jupyter .btn-group-justified>.btn-group .dropdown-menu{left:auto}.jupyter [data-toggle=buttons]>.btn input[type=checkbox],.jupyter [data-toggle=buttons]>.btn input[type=radio],.jupyter [data-toggle=buttons]>.btn-group>.btn input[type=checkbox],.jupyter [data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.jupyter .input-group{position:relative;display:table;border-collapse:separate}.jupyter .input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.jupyter .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.jupyter .input-group-lg>.form-control,.jupyter .input-group-lg>.input-group-addon,.jupyter .input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.jupyter .input-group-lg>.form-control,select.jupyter .input-group-lg>.input-group-addon,select.jupyter .input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}select[multiple].jupyter .input-group-lg>.form-control,select[multiple].jupyter .input-group-lg>.input-group-addon,select[multiple].jupyter .input-group-lg>.input-group-btn>.btn,textarea.jupyter .input-group-lg>.form-control,textarea.jupyter .input-group-lg>.input-group-addon,textarea.jupyter .input-group-lg>.input-group-btn>.btn{height:auto}.jupyter .input-group-sm>.form-control,.jupyter .input-group-sm>.input-group-addon,.jupyter .input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.jupyter .input-group-sm>.form-control,select.jupyter .input-group-sm>.input-group-addon,select.jupyter .input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].jupyter .input-group-sm>.form-control,select[multiple].jupyter .input-group-sm>.input-group-addon,select[multiple].jupyter .input-group-sm>.input-group-btn>.btn,textarea.jupyter .input-group-sm>.form-control,textarea.jupyter .input-group-sm>.input-group-addon,textarea.jupyter .input-group-sm>.input-group-btn>.btn{height:auto}.jupyter .input-group .form-control,.jupyter .input-group-addon,.jupyter .input-group-btn{display:table-cell}.jupyter .input-group .form-control:not(:first-child):not(:last-child),.jupyter .input-group-addon:not(:first-child):not(:last-child),.jupyter .input-group-btn:not(:first-child):not(:last-child){border-radius:0}.jupyter .input-group-addon,.jupyter .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.jupyter .input-group-addon{padding:6px 12px;font-size:13px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:2px}.jupyter .input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:1px}.jupyter .input-group-addon.input-lg{padding:10px 16px;font-size:17px;border-radius:3px}.jupyter .input-group-addon input[type=checkbox],.jupyter .input-group-addon input[type=radio]{margin-top:0}.jupyter .input-group .form-control:first-child,.jupyter .input-group-addon:first-child,.jupyter .input-group-btn:first-child>.btn,.jupyter .input-group-btn:first-child>.btn-group>.btn,.jupyter .input-group-btn:first-child>.dropdown-toggle,.jupyter .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.jupyter .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.jupyter .input-group-addon:first-child{border-right:0}.jupyter .input-group .form-control:last-child,.jupyter .input-group-addon:last-child,.jupyter .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.jupyter .input-group-btn:first-child>.btn:not(:first-child),.jupyter .input-group-btn:last-child>.btn,.jupyter .input-group-btn:last-child>.btn-group>.btn,.jupyter .input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.jupyter .input-group-addon:last-child{border-left:0}.jupyter .input-group-btn{position:relative;font-size:0;white-space:nowrap}.jupyter .input-group-btn>.btn{position:relative}.jupyter .input-group-btn>.btn+.btn{margin-left:-1px}.jupyter .input-group-btn>.btn:active,.jupyter .input-group-btn>.btn:focus,.jupyter .input-group-btn>.btn:hover{z-index:2}.jupyter .input-group-btn:first-child>.btn,.jupyter .input-group-btn:first-child>.btn-group{margin-right:-1px}.jupyter .input-group-btn:last-child>.btn,.jupyter .input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.jupyter .nav{margin-bottom:0;padding-left:0;list-style:none}.jupyter .nav>li{position:relative;display:block}.jupyter .nav>li>a{position:relative;display:block;padding:10px 15px}.jupyter .nav>li>a:focus,.jupyter .nav>li>a:hover{text-decoration:none;background-color:#eee}.jupyter .nav>li.disabled>a{color:#777}.jupyter .nav>li.disabled>a:focus,.jupyter .nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.jupyter .nav .open>a,.jupyter .nav .open>a:focus,.jupyter .nav .open>a:hover{background-color:#eee;border-color:#337ab7}.jupyter .nav .nav-divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.jupyter .nav>li>a>img{max-width:none}.jupyter .nav-tabs{border-bottom:1px solid #ddd}.jupyter .nav-tabs>li{float:left;margin-bottom:-1px}.jupyter .nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:2px 2px 0 0}.jupyter .nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.jupyter .nav-tabs>li.active>a,.jupyter .nav-tabs>li.active>a:focus,.jupyter .nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.jupyter .nav-tabs.nav-justified{width:100%;border-bottom:0}.jupyter .nav-tabs.nav-justified>li{float:none}.jupyter .nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.jupyter .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.jupyter .nav-tabs.nav-justified>li{display:table-cell;width:1%}.jupyter .nav-tabs.nav-justified>li>a{margin-bottom:0}}.jupyter .nav-tabs.nav-justified>li>a{margin-right:0;border-radius:2px}.jupyter .nav-tabs.nav-justified>.active>a,.jupyter .nav-tabs.nav-justified>.active>a:focus,.jupyter .nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.jupyter .nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.jupyter .nav-tabs.nav-justified>.active>a,.jupyter .nav-tabs.nav-justified>.active>a:focus,.jupyter .nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.jupyter .nav-pills>li{float:left}.jupyter .nav-pills>li>a{border-radius:2px}.jupyter .nav-pills>li+li{margin-left:2px}.jupyter .nav-pills>li.active>a,.jupyter .nav-pills>li.active>a:focus,.jupyter .nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.jupyter .nav-stacked>li{float:none}.jupyter .nav-stacked>li+li{margin-top:2px;margin-left:0}.jupyter .nav-justified{width:100%}.jupyter .nav-justified>li{float:none}.jupyter .nav-justified>li>a{text-align:center;margin-bottom:5px}.jupyter .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.jupyter .nav-justified>li{display:table-cell;width:1%}.jupyter .nav-justified>li>a{margin-bottom:0}}.jupyter .nav-tabs-justified{border-bottom:0}.jupyter .nav-tabs-justified>li>a{margin-right:0;border-radius:2px}.jupyter .nav-tabs-justified>.active>a,.jupyter .nav-tabs-justified>.active>a:focus,.jupyter .nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.jupyter .nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.jupyter .nav-tabs-justified>.active>a,.jupyter .nav-tabs-justified>.active>a:focus,.jupyter .nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.jupyter .tab-content>.tab-pane{display:none}.jupyter .tab-content>.active{display:block}.jupyter .nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.jupyter .navbar{position:relative;min-height:30px;margin-bottom:18px;border:1px solid transparent}@media (min-width:541px){.jupyter .navbar{border-radius:2px}}@media (min-width:541px){.jupyter .navbar-header{float:left}}.jupyter .navbar-collapse{overflow-x:visible;padding-right:0;padding-left:0;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.jupyter .navbar-collapse.in{overflow-y:auto}@media (min-width:541px){.jupyter .navbar-collapse{width:auto;border-top:0;box-shadow:none}.jupyter .navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.jupyter .navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .jupyter .navbar-collapse,.navbar-fixed-top .jupyter .navbar-collapse,.navbar-static-top .jupyter .navbar-collapse{padding-left:0;padding-right:0}}.jupyter .navbar-fixed-bottom .navbar-collapse,.jupyter .navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:540px) and (orientation:landscape){.jupyter .navbar-fixed-bottom .navbar-collapse,.jupyter .navbar-fixed-top .navbar-collapse{max-height:200px}}.jupyter .container-fluid>.navbar-collapse,.jupyter .container-fluid>.navbar-header,.jupyter .container>.navbar-collapse,.jupyter .container>.navbar-header{margin-right:0;margin-left:0}@media (min-width:541px){.jupyter .container-fluid>.navbar-collapse,.jupyter .container-fluid>.navbar-header,.jupyter .container>.navbar-collapse,.jupyter .container>.navbar-header{margin-right:0;margin-left:0}}.jupyter .navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:541px){.jupyter .navbar-static-top{border-radius:0}}.jupyter .navbar-fixed-bottom,.jupyter .navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:541px){.jupyter .navbar-fixed-bottom,.jupyter .navbar-fixed-top{border-radius:0}}.jupyter .navbar-fixed-top{top:0;border-width:0 0 1px}.jupyter .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.jupyter .navbar-brand{float:left;padding:6px 0;font-size:17px;line-height:18px;height:30px}.jupyter .navbar-brand:focus,.jupyter .navbar-brand:hover{text-decoration:none}.jupyter .navbar-brand>img{display:block}@media (min-width:541px){.navbar>.container .jupyter .navbar-brand,.navbar>.container-fluid .jupyter .navbar-brand{margin-left:0}}.jupyter .navbar-toggle{position:relative;float:right;margin-right:0;padding:9px 10px;margin-top:-2px;margin-bottom:-2px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:2px}.jupyter .navbar-toggle:focus{outline:0}.jupyter .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.jupyter .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:541px){.jupyter .navbar-toggle{display:none}}.jupyter .navbar-nav{margin:3px 0}.jupyter .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:18px}@media (max-width:540px){.jupyter .navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.jupyter .navbar-nav .open .dropdown-menu .dropdown-header,.jupyter .navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.jupyter .navbar-nav .open .dropdown-menu>li>a{line-height:18px}.jupyter .navbar-nav .open .dropdown-menu>li>a:focus,.jupyter .navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:541px){.jupyter .navbar-nav{float:left;margin:0}.jupyter .navbar-nav>li{float:left}.jupyter .navbar-nav>li>a{padding-top:6px;padding-bottom:6px}}.jupyter .navbar-form{margin-left:0;margin-right:0;padding:10px 0;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:-1px;margin-bottom:-1px}@media (min-width:768px){.jupyter .navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.jupyter .navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.jupyter .navbar-form .form-control-static{display:inline-block}.jupyter .navbar-form .input-group{display:inline-table;vertical-align:middle}.jupyter .navbar-form .input-group .form-control,.jupyter .navbar-form .input-group .input-group-addon,.jupyter .navbar-form .input-group .input-group-btn{width:auto}.jupyter .navbar-form .input-group>.form-control{width:100%}.jupyter .navbar-form .control-label{margin-bottom:0;vertical-align:middle}.jupyter .navbar-form .checkbox,.jupyter .navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.jupyter .navbar-form .checkbox label,.jupyter .navbar-form .radio label{padding-left:0}.jupyter .navbar-form .checkbox input[type=checkbox],.jupyter .navbar-form .radio input[type=radio]{position:relative;margin-left:0}.jupyter .navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:540px){.jupyter .navbar-form .form-group{margin-bottom:5px}.jupyter .navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:541px){.jupyter .navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.jupyter .navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.jupyter .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:2px;border-top-left-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.jupyter .navbar-btn{margin-top:-1px;margin-bottom:-1px}.jupyter .navbar-btn.btn-sm{margin-top:0;margin-bottom:0}.jupyter .navbar-btn.btn-xs{margin-top:4px;margin-bottom:4px}.jupyter .navbar-text{margin-top:6px;margin-bottom:6px}@media (min-width:541px){.jupyter .navbar-text{float:left;margin-left:0;margin-right:0}}@media (min-width:541px){.jupyter .navbar-left{float:left!important;float:left}.jupyter .navbar-right{float:right!important;float:right;margin-right:0}.jupyter .navbar-right~.navbar-right{margin-right:0}}.jupyter .navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.jupyter .navbar-default .navbar-brand{color:#777}.jupyter .navbar-default .navbar-brand:focus,.jupyter .navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.jupyter .navbar-default .navbar-text{color:#777}.jupyter .navbar-default .navbar-nav>li>a{color:#777}.jupyter .navbar-default .navbar-nav>li>a:focus,.jupyter .navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.jupyter .navbar-default .navbar-nav>.active>a,.jupyter .navbar-default .navbar-nav>.active>a:focus,.jupyter .navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.jupyter .navbar-default .navbar-nav>.disabled>a,.jupyter .navbar-default .navbar-nav>.disabled>a:focus,.jupyter .navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.jupyter .navbar-default .navbar-toggle{border-color:#ddd}.jupyter .navbar-default .navbar-toggle:focus,.jupyter .navbar-default .navbar-toggle:hover{background-color:#ddd}.jupyter .navbar-default .navbar-toggle .icon-bar{background-color:#888}.jupyter .navbar-default .navbar-collapse,.jupyter .navbar-default .navbar-form{border-color:#e7e7e7}.jupyter .navbar-default .navbar-nav>.open>a,.jupyter .navbar-default .navbar-nav>.open>a:focus,.jupyter .navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:540px){.jupyter .navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.jupyter .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.jupyter .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.active>a,.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.jupyter .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.jupyter .navbar-default .navbar-link{color:#777}.jupyter .navbar-default .navbar-link:hover{color:#333}.jupyter .navbar-default .btn-link{color:#777}.jupyter .navbar-default .btn-link:focus,.jupyter .navbar-default .btn-link:hover{color:#333}.jupyter .navbar-default .btn-link[disabled]:focus,.jupyter .navbar-default .btn-link[disabled]:hover,fieldset[disabled] .jupyter .navbar-default .btn-link:focus,fieldset[disabled] .jupyter .navbar-default .btn-link:hover{color:#ccc}.jupyter .navbar-inverse{background-color:#222;border-color:#080808}.jupyter .navbar-inverse .navbar-brand{color:#9d9d9d}.jupyter .navbar-inverse .navbar-brand:focus,.jupyter .navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.jupyter .navbar-inverse .navbar-text{color:#9d9d9d}.jupyter .navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.jupyter .navbar-inverse .navbar-nav>li>a:focus,.jupyter .navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.jupyter .navbar-inverse .navbar-nav>.active>a,.jupyter .navbar-inverse .navbar-nav>.active>a:focus,.jupyter .navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.jupyter .navbar-inverse .navbar-nav>.disabled>a,.jupyter .navbar-inverse .navbar-nav>.disabled>a:focus,.jupyter .navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.jupyter .navbar-inverse .navbar-toggle{border-color:#333}.jupyter .navbar-inverse .navbar-toggle:focus,.jupyter .navbar-inverse .navbar-toggle:hover{background-color:#333}.jupyter .navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.jupyter .navbar-inverse .navbar-collapse,.jupyter .navbar-inverse .navbar-form{border-color:#101010}.jupyter .navbar-inverse .navbar-nav>.open>a,.jupyter .navbar-inverse .navbar-nav>.open>a:focus,.jupyter .navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:540px){.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.jupyter .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.jupyter .navbar-inverse .navbar-link{color:#9d9d9d}.jupyter .navbar-inverse .navbar-link:hover{color:#fff}.jupyter .navbar-inverse .btn-link{color:#9d9d9d}.jupyter .navbar-inverse .btn-link:focus,.jupyter .navbar-inverse .btn-link:hover{color:#fff}.jupyter .navbar-inverse .btn-link[disabled]:focus,.jupyter .navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .jupyter .navbar-inverse .btn-link:focus,fieldset[disabled] .jupyter .navbar-inverse .btn-link:hover{color:#444}.jupyter .breadcrumb{padding:8px 15px;margin-bottom:18px;list-style:none;background-color:#f5f5f5;border-radius:2px}.jupyter .breadcrumb>li{display:inline-block}.jupyter .breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#5e5e5e}.jupyter .breadcrumb>.active{color:#777}.jupyter .pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.jupyter .pagination>li{display:inline}.jupyter .pagination>li>a,.jupyter .pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.jupyter .pagination>li:first-child>a,.jupyter .pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.jupyter .pagination>li:last-child>a,.jupyter .pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.jupyter .pagination>li>a:focus,.jupyter .pagination>li>a:hover,.jupyter .pagination>li>span:focus,.jupyter .pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.jupyter .pagination>.active>a,.jupyter .pagination>.active>a:focus,.jupyter .pagination>.active>a:hover,.jupyter .pagination>.active>span,.jupyter .pagination>.active>span:focus,.jupyter .pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.jupyter .pagination>.disabled>a,.jupyter .pagination>.disabled>a:focus,.jupyter .pagination>.disabled>a:hover,.jupyter .pagination>.disabled>span,.jupyter .pagination>.disabled>span:focus,.jupyter .pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.jupyter .pagination-lg>li>a,.jupyter .pagination-lg>li>span{padding:10px 16px;font-size:17px;line-height:1.3333333}.jupyter .pagination-lg>li:first-child>a,.jupyter .pagination-lg>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.jupyter .pagination-lg>li:last-child>a,.jupyter .pagination-lg>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.jupyter .pagination-sm>li>a,.jupyter .pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.jupyter .pagination-sm>li:first-child>a,.jupyter .pagination-sm>li:first-child>span{border-bottom-left-radius:1px;border-top-left-radius:1px}.jupyter .pagination-sm>li:last-child>a,.jupyter .pagination-sm>li:last-child>span{border-bottom-right-radius:1px;border-top-right-radius:1px}.jupyter .pager{padding-left:0;margin:18px 0;list-style:none;text-align:center}.jupyter .pager li{display:inline}.jupyter .pager li>a,.jupyter .pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.jupyter .pager li>a:focus,.jupyter .pager li>a:hover{text-decoration:none;background-color:#eee}.jupyter .pager .next>a,.jupyter .pager .next>span{float:right}.jupyter .pager .previous>a,.jupyter .pager .previous>span{float:left}.jupyter .pager .disabled>a,.jupyter .pager .disabled>a:focus,.jupyter .pager .disabled>a:hover,.jupyter .pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.jupyter .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.jupyter .label:focus,a.jupyter .label:hover{color:#fff;text-decoration:none;cursor:pointer}.jupyter .label:empty{display:none}.btn .jupyter .label{position:relative;top:-1px}.jupyter .label-default{background-color:#777}.jupyter .label-default[href]:focus,.jupyter .label-default[href]:hover{background-color:#5e5e5e}.jupyter .label-primary{background-color:#337ab7}.jupyter .label-primary[href]:focus,.jupyter .label-primary[href]:hover{background-color:#286090}.jupyter .label-success{background-color:#5cb85c}.jupyter .label-success[href]:focus,.jupyter .label-success[href]:hover{background-color:#449d44}.jupyter .label-info{background-color:#5bc0de}.jupyter .label-info[href]:focus,.jupyter .label-info[href]:hover{background-color:#31b0d5}.jupyter .label-warning{background-color:#f0ad4e}.jupyter .label-warning[href]:focus,.jupyter .label-warning[href]:hover{background-color:#ec971f}.jupyter .label-danger{background-color:#d9534f}.jupyter .label-danger[href]:focus,.jupyter .label-danger[href]:hover{background-color:#c9302c}.jupyter .badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.jupyter .badge:empty{display:none}.btn .jupyter .badge{position:relative;top:-1px}.btn-group-xs>.btn .jupyter .badge,.btn-xs .jupyter .badge{top:0;padding:1px 5px}a.jupyter .badge:focus,a.jupyter .badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.jupyter .badge,.nav-pills>.active>a>.jupyter .badge{color:#337ab7;background-color:#fff}.list-group-item>.jupyter .badge{float:right}.list-group-item>.jupyter .badge+.jupyter .badge{margin-right:5px}.nav-pills>li>a>.jupyter .badge{margin-left:3px}.jupyter .jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jupyter .jumbotron .h1,.jupyter .jumbotron h1{color:inherit}.jupyter .jumbotron p{margin-bottom:15px;font-size:20px;font-weight:200}.jupyter .jumbotron>hr{border-top-color:#d5d5d5}.container .jupyter .jumbotron,.container-fluid .jupyter .jumbotron{border-radius:3px}.jupyter .jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jupyter .jumbotron{padding-top:48px;padding-bottom:48px}.container .jupyter .jumbotron,.container-fluid .jupyter .jumbotron{padding-left:60px;padding-right:60px}.jupyter .jumbotron .h1,.jupyter .jumbotron h1{font-size:59px}}.jupyter .thumbnail{display:block;padding:4px;margin-bottom:18px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.jupyter .thumbnail a>img,.jupyter .thumbnail>img{margin-left:auto;margin-right:auto}a.jupyter .thumbnail.active,a.jupyter .thumbnail:focus,a.jupyter .thumbnail:hover{border-color:#337ab7}.jupyter .thumbnail .caption{padding:9px;color:#000}.jupyter .alert{padding:15px;margin-bottom:18px;border:1px solid transparent;border-radius:2px}.jupyter .alert h4{margin-top:0;color:inherit}.jupyter .alert .alert-link{font-weight:700}.jupyter .alert>p,.jupyter .alert>ul{margin-bottom:0}.jupyter .alert>p+p{margin-top:5px}.jupyter .alert-dismissable,.jupyter .alert-dismissible{padding-right:35px}.jupyter .alert-dismissable .close,.jupyter .alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.jupyter .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.jupyter .alert-success hr{border-top-color:#c9e2b3}.jupyter .alert-success .alert-link{color:#2b542c}.jupyter .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.jupyter .alert-info hr{border-top-color:#a6e1ec}.jupyter .alert-info .alert-link{color:#245269}.jupyter .alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.jupyter .alert-warning hr{border-top-color:#f7e1b5}.jupyter .alert-warning .alert-link{color:#66512c}.jupyter .alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.jupyter .alert-danger hr{border-top-color:#e4b9c0}.jupyter .alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.jupyter .progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f5f5f5;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.jupyter .progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:18px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.jupyter .progress-bar-striped,.jupyter .progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.jupyter .progress-bar.active,.jupyter .progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.jupyter .progress-bar-success{background-color:#5cb85c}.progress-striped .jupyter .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.jupyter .progress-bar-info{background-color:#5bc0de}.progress-striped .jupyter .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.jupyter .progress-bar-warning{background-color:#f0ad4e}.progress-striped .jupyter .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.jupyter .progress-bar-danger{background-color:#d9534f}.progress-striped .jupyter .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.jupyter .media{margin-top:15px}.jupyter .media:first-child{margin-top:0}.jupyter .media,.jupyter .media-body{zoom:1;overflow:hidden}.jupyter .media-body{width:10000px}.jupyter .media-object{display:block}.jupyter .media-object.img-thumbnail{max-width:none}.jupyter .media-right,.jupyter .media>.pull-right{padding-left:10px}.jupyter .media-left,.jupyter .media>.pull-left{padding-right:10px}.jupyter .media-body,.jupyter .media-left,.jupyter .media-right{display:table-cell;vertical-align:top}.jupyter .media-middle{vertical-align:middle}.jupyter .media-bottom{vertical-align:bottom}.jupyter .media-heading{margin-top:0;margin-bottom:5px}.jupyter .media-list{padding-left:0;list-style:none}.jupyter .list-group{margin-bottom:20px;padding-left:0}.jupyter .list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.jupyter .list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.jupyter .list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.jupyter a.list-group-item,.jupyter button.list-group-item{color:#555}.jupyter a.list-group-item .list-group-item-heading,.jupyter button.list-group-item .list-group-item-heading{color:#333}.jupyter a.list-group-item:focus,.jupyter a.list-group-item:hover,.jupyter button.list-group-item:focus,.jupyter button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}.jupyter button.list-group-item{width:100%;text-align:left}.jupyter .list-group-item.disabled,.jupyter .list-group-item.disabled:focus,.jupyter .list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.jupyter .list-group-item.disabled .list-group-item-heading,.jupyter .list-group-item.disabled:focus .list-group-item-heading,.jupyter .list-group-item.disabled:hover .list-group-item-heading{color:inherit}.jupyter .list-group-item.disabled .list-group-item-text,.jupyter .list-group-item.disabled:focus .list-group-item-text,.jupyter .list-group-item.disabled:hover .list-group-item-text{color:#777}.jupyter .list-group-item.active,.jupyter .list-group-item.active:focus,.jupyter .list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.jupyter .list-group-item.active .list-group-item-heading,.jupyter .list-group-item.active .list-group-item-heading>.small,.jupyter .list-group-item.active .list-group-item-heading>small,.jupyter .list-group-item.active:focus .list-group-item-heading,.jupyter .list-group-item.active:focus .list-group-item-heading>.small,.jupyter .list-group-item.active:focus .list-group-item-heading>small,.jupyter .list-group-item.active:hover .list-group-item-heading,.jupyter .list-group-item.active:hover .list-group-item-heading>.small,.jupyter .list-group-item.active:hover .list-group-item-heading>small{color:inherit}.jupyter .list-group-item.active .list-group-item-text,.jupyter .list-group-item.active:focus .list-group-item-text,.jupyter .list-group-item.active:hover .list-group-item-text{color:#c7ddef}.jupyter .list-group-item-success{color:#3c763d;background-color:#dff0d8}a.jupyter .list-group-item-success,button.jupyter .list-group-item-success{color:#3c763d}a.jupyter .list-group-item-success .list-group-item-heading,button.jupyter .list-group-item-success .list-group-item-heading{color:inherit}a.jupyter .list-group-item-success:focus,a.jupyter .list-group-item-success:hover,button.jupyter .list-group-item-success:focus,button.jupyter .list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.jupyter .list-group-item-success.active,a.jupyter .list-group-item-success.active:focus,a.jupyter .list-group-item-success.active:hover,button.jupyter .list-group-item-success.active,button.jupyter .list-group-item-success.active:focus,button.jupyter .list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.jupyter .list-group-item-info{color:#31708f;background-color:#d9edf7}a.jupyter .list-group-item-info,button.jupyter .list-group-item-info{color:#31708f}a.jupyter .list-group-item-info .list-group-item-heading,button.jupyter .list-group-item-info .list-group-item-heading{color:inherit}a.jupyter .list-group-item-info:focus,a.jupyter .list-group-item-info:hover,button.jupyter .list-group-item-info:focus,button.jupyter .list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.jupyter .list-group-item-info.active,a.jupyter .list-group-item-info.active:focus,a.jupyter .list-group-item-info.active:hover,button.jupyter .list-group-item-info.active,button.jupyter .list-group-item-info.active:focus,button.jupyter .list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.jupyter .list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.jupyter .list-group-item-warning,button.jupyter .list-group-item-warning{color:#8a6d3b}a.jupyter .list-group-item-warning .list-group-item-heading,button.jupyter .list-group-item-warning .list-group-item-heading{color:inherit}a.jupyter .list-group-item-warning:focus,a.jupyter .list-group-item-warning:hover,button.jupyter .list-group-item-warning:focus,button.jupyter .list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.jupyter .list-group-item-warning.active,a.jupyter .list-group-item-warning.active:focus,a.jupyter .list-group-item-warning.active:hover,button.jupyter .list-group-item-warning.active,button.jupyter .list-group-item-warning.active:focus,button.jupyter .list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.jupyter .list-group-item-danger{color:#a94442;background-color:#f2dede}a.jupyter .list-group-item-danger,button.jupyter .list-group-item-danger{color:#a94442}a.jupyter .list-group-item-danger .list-group-item-heading,button.jupyter .list-group-item-danger .list-group-item-heading{color:inherit}a.jupyter .list-group-item-danger:focus,a.jupyter .list-group-item-danger:hover,button.jupyter .list-group-item-danger:focus,button.jupyter .list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.jupyter .list-group-item-danger.active,a.jupyter .list-group-item-danger.active:focus,a.jupyter .list-group-item-danger.active:hover,button.jupyter .list-group-item-danger.active,button.jupyter .list-group-item-danger.active:focus,button.jupyter .list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.jupyter .list-group-item-heading{margin-top:0;margin-bottom:5px}.jupyter .list-group-item-text{margin-bottom:0;line-height:1.3}.jupyter .panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.jupyter .panel-body{padding:15px}.jupyter .panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.jupyter .panel-heading>.dropdown .dropdown-toggle{color:inherit}.jupyter .panel-title{margin-top:0;margin-bottom:0;font-size:15px;color:inherit}.jupyter .panel-title>.small,.jupyter .panel-title>.small>a,.jupyter .panel-title>a,.jupyter .panel-title>small,.jupyter .panel-title>small>a{color:inherit}.jupyter .panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.jupyter .panel>.list-group,.jupyter .panel>.panel-collapse>.list-group{margin-bottom:0}.jupyter .panel>.list-group .list-group-item,.jupyter .panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.jupyter .panel>.list-group:first-child .list-group-item:first-child,.jupyter .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.jupyter .panel>.list-group:last-child .list-group-item:last-child,.jupyter .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.jupyter .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.jupyter .panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.jupyter .list-group+.panel-footer{border-top-width:0}.jupyter .panel>.panel-collapse>.table,.jupyter .panel>.table,.jupyter .panel>.table-responsive>.table{margin-bottom:0}.jupyter .panel>.panel-collapse>.table caption,.jupyter .panel>.table caption,.jupyter .panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.jupyter .panel>.table-responsive:first-child>.table:first-child,.jupyter .panel>.table:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.jupyter .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.jupyter .panel>.table:first-child>tbody:first-child>tr:first-child,.jupyter .panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:1px;border-top-right-radius:1px}.jupyter .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.jupyter .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.jupyter .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.jupyter .panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.jupyter .panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.jupyter .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.jupyter .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.jupyter .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.jupyter .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.jupyter .panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.jupyter .panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.jupyter .panel>.table-responsive:last-child>.table:last-child,.jupyter .panel>.table:last-child{border-bottom-right-radius:1px;border-bottom-left-radius:1px}.jupyter .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.jupyter .panel>.table:last-child>tbody:last-child>tr:last-child,.jupyter .panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.jupyter .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.jupyter .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.jupyter .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.jupyter .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.jupyter .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.jupyter .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.jupyter .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.jupyter .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.jupyter .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.jupyter .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.jupyter .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.jupyter .panel>.panel-body+.table,.jupyter .panel>.panel-body+.table-responsive,.jupyter .panel>.table+.panel-body,.jupyter .panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.jupyter .panel>.table>tbody:first-child>tr:first-child td,.jupyter .panel>.table>tbody:first-child>tr:first-child th{border-top:0}.jupyter .panel>.table-bordered,.jupyter .panel>.table-responsive>.table-bordered{border:0}.jupyter .panel>.table-bordered>tbody>tr>td:first-child,.jupyter .panel>.table-bordered>tbody>tr>th:first-child,.jupyter .panel>.table-bordered>tfoot>tr>td:first-child,.jupyter .panel>.table-bordered>tfoot>tr>th:first-child,.jupyter .panel>.table-bordered>thead>tr>td:first-child,.jupyter .panel>.table-bordered>thead>tr>th:first-child,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.jupyter .panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.jupyter .panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.jupyter .panel>.table-bordered>tbody>tr>td:last-child,.jupyter .panel>.table-bordered>tbody>tr>th:last-child,.jupyter .panel>.table-bordered>tfoot>tr>td:last-child,.jupyter .panel>.table-bordered>tfoot>tr>th:last-child,.jupyter .panel>.table-bordered>thead>tr>td:last-child,.jupyter .panel>.table-bordered>thead>tr>th:last-child,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.jupyter .panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.jupyter .panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.jupyter .panel>.table-bordered>tbody>tr:first-child>td,.jupyter .panel>.table-bordered>tbody>tr:first-child>th,.jupyter .panel>.table-bordered>thead>tr:first-child>td,.jupyter .panel>.table-bordered>thead>tr:first-child>th,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.jupyter .panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.jupyter .panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.jupyter .panel>.table-bordered>tbody>tr:last-child>td,.jupyter .panel>.table-bordered>tbody>tr:last-child>th,.jupyter .panel>.table-bordered>tfoot>tr:last-child>td,.jupyter .panel>.table-bordered>tfoot>tr:last-child>th,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.jupyter .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.jupyter .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.jupyter .panel>.table-responsive{border:0;margin-bottom:0}.jupyter .panel-group{margin-bottom:18px}.jupyter .panel-group .panel{margin-bottom:0;border-radius:2px}.jupyter .panel-group .panel+.panel{margin-top:5px}.jupyter .panel-group .panel-heading{border-bottom:0}.jupyter .panel-group .panel-heading+.panel-collapse>.list-group,.jupyter .panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.jupyter .panel-group .panel-footer{border-top:0}.jupyter .panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.jupyter .panel-default{border-color:#ddd}.jupyter .panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.jupyter .panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.jupyter .panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.jupyter .panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.jupyter .panel-primary{border-color:#337ab7}.jupyter .panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.jupyter .panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.jupyter .panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.jupyter .panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.jupyter .panel-success{border-color:#d6e9c6}.jupyter .panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.jupyter .panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.jupyter .panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.jupyter .panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.jupyter .panel-info{border-color:#bce8f1}.jupyter .panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.jupyter .panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.jupyter .panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.jupyter .panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.jupyter .panel-warning{border-color:#faebcc}.jupyter .panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.jupyter .panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.jupyter .panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.jupyter .panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.jupyter .panel-danger{border-color:#ebccd1}.jupyter .panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.jupyter .panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.jupyter .panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.jupyter .panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.jupyter .embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.jupyter .embed-responsive .embed-responsive-item,.jupyter .embed-responsive embed,.jupyter .embed-responsive iframe,.jupyter .embed-responsive object,.jupyter .embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.jupyter .embed-responsive-16by9{padding-bottom:56.25%}.jupyter .embed-responsive-4by3{padding-bottom:75%}.jupyter .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.jupyter .well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.jupyter .well-lg{padding:24px;border-radius:3px}.jupyter .well-sm{padding:9px;border-radius:1px}.jupyter .close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.jupyter .close:focus,.jupyter .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.jupyter .close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.jupyter .modal-open{overflow:hidden}.jupyter .modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.jupyter .modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.jupyter .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.jupyter .modal-open .modal{overflow-x:hidden;overflow-y:auto}.jupyter .modal-dialog{position:relative;width:auto;margin:10px}.jupyter .modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.jupyter .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.jupyter .modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.jupyter .modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.jupyter .modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px}.jupyter .modal-header .close{margin-top:-2px}.jupyter .modal-title{margin:0;line-height:1.42857143}.jupyter .modal-body{position:relative;padding:15px}.jupyter .modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.jupyter .modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.jupyter .modal-footer .btn-group .btn+.btn{margin-left:-1px}.jupyter .modal-footer .btn-block+.btn-block{margin-left:0}.jupyter .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.jupyter .modal-dialog{width:600px;margin:30px auto}.jupyter .modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.jupyter .modal-sm{width:300px}}@media (min-width:992px){.jupyter .modal-lg{width:900px}}.jupyter .tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.jupyter .tooltip.in{opacity:.9;filter:alpha(opacity=90)}.jupyter .tooltip.top{margin-top:-3px;padding:5px 0}.jupyter .tooltip.right{margin-left:3px;padding:0 5px}.jupyter .tooltip.bottom{margin-top:3px;padding:5px 0}.jupyter .tooltip.left{margin-left:-3px;padding:0 5px}.jupyter .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:2px}.jupyter .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.jupyter .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.jupyter .tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.jupyter .tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.jupyter .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.jupyter .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.jupyter .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.jupyter .tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.jupyter .tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.jupyter .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:13px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.jupyter .popover.top{margin-top:-10px}.jupyter .popover.right{margin-left:10px}.jupyter .popover.bottom{margin-top:10px}.jupyter .popover.left{margin-left:-10px}.jupyter .popover-title{margin:0;padding:8px 14px;font-size:13px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:2px 2px 0 0}.jupyter .popover-content{padding:9px 14px}.jupyter .popover>.arrow,.jupyter .popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.jupyter .popover>.arrow{border-width:11px}.jupyter .popover>.arrow:after{border-width:10px;content:""}.jupyter .popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.jupyter .popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.jupyter .popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.jupyter .popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.jupyter .popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.jupyter .popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.jupyter .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.jupyter .popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.jupyter .carousel{position:relative}.jupyter .carousel-inner{position:relative;overflow:hidden;width:100%}.jupyter .carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.jupyter .carousel-inner>.item>a>img,.jupyter .carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.jupyter .carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.jupyter .carousel-inner>.item.active.right,.jupyter .carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.jupyter .carousel-inner>.item.active.left,.jupyter .carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.jupyter .carousel-inner>.item.active,.jupyter .carousel-inner>.item.next.left,.jupyter .carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.jupyter .carousel-inner>.active,.jupyter .carousel-inner>.next,.jupyter .carousel-inner>.prev{display:block}.jupyter .carousel-inner>.active{left:0}.jupyter .carousel-inner>.next,.jupyter .carousel-inner>.prev{position:absolute;top:0;width:100%}.jupyter .carousel-inner>.next{left:100%}.jupyter .carousel-inner>.prev{left:-100%}.jupyter .carousel-inner>.next.left,.jupyter .carousel-inner>.prev.right{left:0}.jupyter .carousel-inner>.active.left{left:-100%}.jupyter .carousel-inner>.active.right{left:100%}.jupyter .carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.jupyter .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.jupyter .carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.jupyter .carousel-control:focus,.jupyter .carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.jupyter .carousel-control .glyphicon-chevron-left,.jupyter .carousel-control .glyphicon-chevron-right,.jupyter .carousel-control .icon-next,.jupyter .carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.jupyter .carousel-control .glyphicon-chevron-left,.jupyter .carousel-control .icon-prev{left:50%;margin-left:-10px}.jupyter .carousel-control .glyphicon-chevron-right,.jupyter .carousel-control .icon-next{right:50%;margin-right:-10px}.jupyter .carousel-control .icon-next,.jupyter .carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.jupyter .carousel-control .icon-prev:before{content:'\2039'}.jupyter .carousel-control .icon-next:before{content:'\203a'}.jupyter .carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.jupyter .carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}.jupyter .carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.jupyter .carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.jupyter .carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.jupyter .carousel-control .glyphicon-chevron-left,.jupyter .carousel-control .glyphicon-chevron-right,.jupyter .carousel-control .icon-next,.jupyter .carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.jupyter .carousel-control .glyphicon-chevron-left,.jupyter .carousel-control .icon-prev{margin-left:-15px}.jupyter .carousel-control .glyphicon-chevron-right,.jupyter .carousel-control .icon-next{margin-right:-15px}.jupyter .carousel-caption{left:20%;right:20%;padding-bottom:30px}.jupyter .carousel-indicators{bottom:20px}}.jupyter .clearfix:after,.jupyter .clearfix:before,.jupyter .jupyter .btn-group-vertical>.btn-group:after,.jupyter .jupyter .btn-group-vertical>.btn-group:before,.jupyter .jupyter .btn-toolbar:after,.jupyter .jupyter .btn-toolbar:before,.jupyter .jupyter .container-fluid:after,.jupyter .jupyter .container-fluid:before,.jupyter .jupyter .container:after,.jupyter .jupyter .container:before,.jupyter .jupyter .dl-horizontal dd:after,.jupyter .jupyter .dl-horizontal dd:before,.jupyter .jupyter .form-horizontal .form-group:after,.jupyter .jupyter .form-horizontal .form-group:before,.jupyter .jupyter .item_buttons:after,.jupyter .jupyter .item_buttons:before,.jupyter .jupyter .modal-footer:after,.jupyter .jupyter .modal-footer:before,.jupyter .jupyter .nav:after,.jupyter .jupyter .nav:before,.jupyter .jupyter .navbar-collapse:after,.jupyter .jupyter .navbar-collapse:before,.jupyter .jupyter .navbar-header:after,.jupyter .jupyter .navbar-header:before,.jupyter .jupyter .navbar:after,.jupyter .jupyter .navbar:before,.jupyter .jupyter .pager:after,.jupyter .jupyter .pager:before,.jupyter .jupyter .panel-body:after,.jupyter .jupyter .panel-body:before,.jupyter .jupyter .row:after,.jupyter .jupyter .row:before{content:" ";display:table}.jupyter .clearfix:after,.jupyter .jupyter .btn-group-vertical>.btn-group:after,.jupyter .jupyter .btn-toolbar:after,.jupyter .jupyter .container-fluid:after,.jupyter .jupyter .container:after,.jupyter .jupyter .dl-horizontal dd:after,.jupyter .jupyter .form-horizontal .form-group:after,.jupyter .jupyter .item_buttons:after,.jupyter .jupyter .modal-footer:after,.jupyter .jupyter .nav:after,.jupyter .jupyter .navbar-collapse:after,.jupyter .jupyter .navbar-header:after,.jupyter .jupyter .navbar:after,.jupyter .jupyter .pager:after,.jupyter .jupyter .panel-body:after,.jupyter .jupyter .row:after{clear:both}.jupyter .center-block{display:block;margin-left:auto;margin-right:auto}.jupyter .pull-right{float:right!important}.jupyter .pull-left{float:left!important}.jupyter .hide{display:none!important}.jupyter .show{display:block!important}.jupyter .invisible{visibility:hidden}.jupyter .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.jupyter .hidden{display:none!important}.jupyter .affix{position:fixed}@-ms-viewport{width:device-width}.jupyter .visible-lg,.jupyter .visible-md,.jupyter .visible-sm,.jupyter .visible-xs{display:none!important}.jupyter .visible-lg-block,.jupyter .visible-lg-inline,.jupyter .visible-lg-inline-block,.jupyter .visible-md-block,.jupyter .visible-md-inline,.jupyter .visible-md-inline-block,.jupyter .visible-sm-block,.jupyter .visible-sm-inline,.jupyter .visible-sm-inline-block,.jupyter .visible-xs-block,.jupyter .visible-xs-inline,.jupyter .visible-xs-inline-block{display:none!important}@media (max-width:767px){.jupyter .visible-xs{display:block!important}table.jupyter .visible-xs{display:table!important}tr.jupyter .visible-xs{display:table-row!important}td.jupyter .visible-xs,th.jupyter .visible-xs{display:table-cell!important}}@media (max-width:767px){.jupyter .visible-xs-block{display:block!important}}@media (max-width:767px){.jupyter .visible-xs-inline{display:inline!important}}@media (max-width:767px){.jupyter .visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.jupyter .visible-sm{display:block!important}table.jupyter .visible-sm{display:table!important}tr.jupyter .visible-sm{display:table-row!important}td.jupyter .visible-sm,th.jupyter .visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.jupyter .visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.jupyter .visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.jupyter .visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.jupyter .visible-md{display:block!important}table.jupyter .visible-md{display:table!important}tr.jupyter .visible-md{display:table-row!important}td.jupyter .visible-md,th.jupyter .visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.jupyter .visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.jupyter .visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.jupyter .visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.jupyter .visible-lg{display:block!important}table.jupyter .visible-lg{display:table!important}tr.jupyter .visible-lg{display:table-row!important}td.jupyter .visible-lg,th.jupyter .visible-lg{display:table-cell!important}}@media (min-width:1200px){.jupyter .visible-lg-block{display:block!important}}@media (min-width:1200px){.jupyter .visible-lg-inline{display:inline!important}}@media (min-width:1200px){.jupyter .visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.jupyter .hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.jupyter .hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.jupyter .hidden-md{display:none!important}}@media (min-width:1200px){.jupyter .hidden-lg{display:none!important}}.jupyter .visible-print{display:none!important}@media print{.jupyter .visible-print{display:block!important}table.jupyter .visible-print{display:table!important}tr.jupyter .visible-print{display:table-row!important}td.jupyter .visible-print,th.jupyter .visible-print{display:table-cell!important}}.jupyter .visible-print-block{display:none!important}@media print{.jupyter .visible-print-block{display:block!important}}.jupyter .visible-print-inline{display:none!important}@media print{.jupyter .visible-print-inline{display:inline!important}}.jupyter .visible-print-inline-block{display:none!important}@media print{.jupyter .visible-print-inline-block{display:inline-block!important}}@media print{.jupyter .hidden-print{display:none!important}}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.2.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff?v=4.2.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.2.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.jupyter .fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.jupyter .fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.jupyter .fa-2x{font-size:2em}.jupyter .fa-3x{font-size:3em}.jupyter .fa-4x{font-size:4em}.jupyter .fa-5x{font-size:5em}.jupyter .fa-fw{width:1.28571429em;text-align:center}.jupyter .fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.jupyter .fa-ul>li{position:relative}.jupyter .fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.jupyter .fa-li.fa-lg{left:-1.85714286em}.jupyter .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.jupyter .pull-right{float:right}.jupyter .pull-left{float:left}.jupyter .fa.pull-left{margin-right:.3em}.jupyter .fa.pull-right{margin-left:.3em}.jupyter .fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.jupyter .fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.jupyter .fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.jupyter .fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.jupyter .fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.jupyter .fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.jupyter :root .fa-flip-horizontal,.jupyter :root .fa-flip-vertical,.jupyter :root .fa-rotate-180,.jupyter :root .fa-rotate-270,.jupyter :root .fa-rotate-90{filter:none}.jupyter .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.jupyter .fa-stack-1x,.jupyter .fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.jupyter .fa-stack-1x{line-height:inherit}.jupyter .fa-stack-2x{font-size:2em}.jupyter .fa-inverse{color:#fff}.jupyter .fa-glass:before{content:"\f000"}.jupyter .fa-music:before{content:"\f001"}.jupyter .fa-search:before{content:"\f002"}.jupyter .fa-envelope-o:before{content:"\f003"}.jupyter .fa-heart:before{content:"\f004"}.jupyter .fa-star:before{content:"\f005"}.jupyter .fa-star-o:before{content:"\f006"}.jupyter .fa-user:before{content:"\f007"}.jupyter .fa-film:before{content:"\f008"}.jupyter .fa-th-large:before{content:"\f009"}.jupyter .fa-th:before{content:"\f00a"}.jupyter .fa-th-list:before{content:"\f00b"}.jupyter .fa-check:before{content:"\f00c"}.jupyter .fa-close:before,.jupyter .fa-remove:before,.jupyter .fa-times:before{content:"\f00d"}.jupyter .fa-search-plus:before{content:"\f00e"}.jupyter .fa-search-minus:before{content:"\f010"}.jupyter .fa-power-off:before{content:"\f011"}.jupyter .fa-signal:before{content:"\f012"}.jupyter .fa-cog:before,.jupyter .fa-gear:before{content:"\f013"}.jupyter .fa-trash-o:before{content:"\f014"}.jupyter .fa-home:before{content:"\f015"}.jupyter .fa-file-o:before{content:"\f016"}.jupyter .fa-clock-o:before{content:"\f017"}.jupyter .fa-road:before{content:"\f018"}.jupyter .fa-download:before{content:"\f019"}.jupyter .fa-arrow-circle-o-down:before{content:"\f01a"}.jupyter .fa-arrow-circle-o-up:before{content:"\f01b"}.jupyter .fa-inbox:before{content:"\f01c"}.jupyter .fa-play-circle-o:before{content:"\f01d"}.jupyter .fa-repeat:before,.jupyter .fa-rotate-right:before{content:"\f01e"}.jupyter .fa-refresh:before{content:"\f021"}.jupyter .fa-list-alt:before{content:"\f022"}.jupyter .fa-lock:before{content:"\f023"}.jupyter .fa-flag:before{content:"\f024"}.jupyter .fa-headphones:before{content:"\f025"}.jupyter .fa-volume-off:before{content:"\f026"}.jupyter .fa-volume-down:before{content:"\f027"}.jupyter .fa-volume-up:before{content:"\f028"}.jupyter .fa-qrcode:before{content:"\f029"}.jupyter .fa-barcode:before{content:"\f02a"}.jupyter .fa-tag:before{content:"\f02b"}.jupyter .fa-tags:before{content:"\f02c"}.jupyter .fa-book:before{content:"\f02d"}.jupyter .fa-bookmark:before{content:"\f02e"}.jupyter .fa-print:before{content:"\f02f"}.jupyter .fa-camera:before{content:"\f030"}.jupyter .fa-font:before{content:"\f031"}.jupyter .fa-bold:before{content:"\f032"}.jupyter .fa-italic:before{content:"\f033"}.jupyter .fa-text-height:before{content:"\f034"}.jupyter .fa-text-width:before{content:"\f035"}.jupyter .fa-align-left:before{content:"\f036"}.jupyter .fa-align-center:before{content:"\f037"}.jupyter .fa-align-right:before{content:"\f038"}.jupyter .fa-align-justify:before{content:"\f039"}.jupyter .fa-list:before{content:"\f03a"}.jupyter .fa-dedent:before,.jupyter .fa-outdent:before{content:"\f03b"}.jupyter .fa-indent:before{content:"\f03c"}.jupyter .fa-video-camera:before{content:"\f03d"}.jupyter .fa-image:before,.jupyter .fa-photo:before,.jupyter .fa-picture-o:before{content:"\f03e"}.jupyter .fa-pencil:before{content:"\f040"}.jupyter .fa-map-marker:before{content:"\f041"}.jupyter .fa-adjust:before{content:"\f042"}.jupyter .fa-tint:before{content:"\f043"}.jupyter .fa-edit:before,.jupyter .fa-pencil-square-o:before{content:"\f044"}.jupyter .fa-share-square-o:before{content:"\f045"}.jupyter .fa-check-square-o:before{content:"\f046"}.jupyter .fa-arrows:before{content:"\f047"}.jupyter .fa-step-backward:before{content:"\f048"}.jupyter .fa-fast-backward:before{content:"\f049"}.jupyter .fa-backward:before{content:"\f04a"}.jupyter .fa-play:before{content:"\f04b"}.jupyter .fa-pause:before{content:"\f04c"}.jupyter .fa-stop:before{content:"\f04d"}.jupyter .fa-forward:before{content:"\f04e"}.jupyter .fa-fast-forward:before{content:"\f050"}.jupyter .fa-step-forward:before{content:"\f051"}.jupyter .fa-eject:before{content:"\f052"}.jupyter .fa-chevron-left:before{content:"\f053"}.jupyter .fa-chevron-right:before{content:"\f054"}.jupyter .fa-plus-circle:before{content:"\f055"}.jupyter .fa-minus-circle:before{content:"\f056"}.jupyter .fa-times-circle:before{content:"\f057"}.jupyter .fa-check-circle:before{content:"\f058"}.jupyter .fa-question-circle:before{content:"\f059"}.jupyter .fa-info-circle:before{content:"\f05a"}.jupyter .fa-crosshairs:before{content:"\f05b"}.jupyter .fa-times-circle-o:before{content:"\f05c"}.jupyter .fa-check-circle-o:before{content:"\f05d"}.jupyter .fa-ban:before{content:"\f05e"}.jupyter .fa-arrow-left:before{content:"\f060"}.jupyter .fa-arrow-right:before{content:"\f061"}.jupyter .fa-arrow-up:before{content:"\f062"}.jupyter .fa-arrow-down:before{content:"\f063"}.jupyter .fa-mail-forward:before,.jupyter .fa-share:before{content:"\f064"}.jupyter .fa-expand:before{content:"\f065"}.jupyter .fa-compress:before{content:"\f066"}.jupyter .fa-plus:before{content:"\f067"}.jupyter .fa-minus:before{content:"\f068"}.jupyter .fa-asterisk:before{content:"\f069"}.jupyter .fa-exclamation-circle:before{content:"\f06a"}.jupyter .fa-gift:before{content:"\f06b"}.jupyter .fa-leaf:before{content:"\f06c"}.jupyter .fa-fire:before{content:"\f06d"}.jupyter .fa-eye:before{content:"\f06e"}.jupyter .fa-eye-slash:before{content:"\f070"}.jupyter .fa-exclamation-triangle:before,.jupyter .fa-warning:before{content:"\f071"}.jupyter .fa-plane:before{content:"\f072"}.jupyter .fa-calendar:before{content:"\f073"}.jupyter .fa-random:before{content:"\f074"}.jupyter .fa-comment:before{content:"\f075"}.jupyter .fa-magnet:before{content:"\f076"}.jupyter .fa-chevron-up:before{content:"\f077"}.jupyter .fa-chevron-down:before{content:"\f078"}.jupyter .fa-retweet:before{content:"\f079"}.jupyter .fa-shopping-cart:before{content:"\f07a"}.jupyter .fa-folder:before{content:"\f07b"}.jupyter .fa-folder-open:before{content:"\f07c"}.jupyter .fa-arrows-v:before{content:"\f07d"}.jupyter .fa-arrows-h:before{content:"\f07e"}.jupyter .fa-bar-chart-o:before,.jupyter .fa-bar-chart:before{content:"\f080"}.jupyter .fa-twitter-square:before{content:"\f081"}.jupyter .fa-facebook-square:before{content:"\f082"}.jupyter .fa-camera-retro:before{content:"\f083"}.jupyter .fa-key:before{content:"\f084"}.jupyter .fa-cogs:before,.jupyter .fa-gears:before{content:"\f085"}.jupyter .fa-comments:before{content:"\f086"}.jupyter .fa-thumbs-o-up:before{content:"\f087"}.jupyter .fa-thumbs-o-down:before{content:"\f088"}.jupyter .fa-star-half:before{content:"\f089"}.jupyter .fa-heart-o:before{content:"\f08a"}.jupyter .fa-sign-out:before{content:"\f08b"}.jupyter .fa-linkedin-square:before{content:"\f08c"}.jupyter .fa-thumb-tack:before{content:"\f08d"}.jupyter .fa-external-link:before{content:"\f08e"}.jupyter .fa-sign-in:before{content:"\f090"}.jupyter .fa-trophy:before{content:"\f091"}.jupyter .fa-github-square:before{content:"\f092"}.jupyter .fa-upload:before{content:"\f093"}.jupyter .fa-lemon-o:before{content:"\f094"}.jupyter .fa-phone:before{content:"\f095"}.jupyter .fa-square-o:before{content:"\f096"}.jupyter .fa-bookmark-o:before{content:"\f097"}.jupyter .fa-phone-square:before{content:"\f098"}.jupyter .fa-twitter:before{content:"\f099"}.jupyter .fa-facebook:before{content:"\f09a"}.jupyter .fa-github:before{content:"\f09b"}.jupyter .fa-unlock:before{content:"\f09c"}.jupyter .fa-credit-card:before{content:"\f09d"}.jupyter .fa-rss:before{content:"\f09e"}.jupyter .fa-hdd-o:before{content:"\f0a0"}.jupyter .fa-bullhorn:before{content:"\f0a1"}.jupyter .fa-bell:before{content:"\f0f3"}.jupyter .fa-certificate:before{content:"\f0a3"}.jupyter .fa-hand-o-right:before{content:"\f0a4"}.jupyter .fa-hand-o-left:before{content:"\f0a5"}.jupyter .fa-hand-o-up:before{content:"\f0a6"}.jupyter .fa-hand-o-down:before{content:"\f0a7"}.jupyter .fa-arrow-circle-left:before{content:"\f0a8"}.jupyter .fa-arrow-circle-right:before{content:"\f0a9"}.jupyter .fa-arrow-circle-up:before{content:"\f0aa"}.jupyter .fa-arrow-circle-down:before{content:"\f0ab"}.jupyter .fa-globe:before{content:"\f0ac"}.jupyter .fa-wrench:before{content:"\f0ad"}.jupyter .fa-tasks:before{content:"\f0ae"}.jupyter .fa-filter:before{content:"\f0b0"}.jupyter .fa-briefcase:before{content:"\f0b1"}.jupyter .fa-arrows-alt:before{content:"\f0b2"}.jupyter .fa-group:before,.jupyter .fa-users:before{content:"\f0c0"}.jupyter .fa-chain:before,.jupyter .fa-link:before{content:"\f0c1"}.jupyter .fa-cloud:before{content:"\f0c2"}.jupyter .fa-flask:before{content:"\f0c3"}.jupyter .fa-cut:before,.jupyter .fa-scissors:before{content:"\f0c4"}.jupyter .fa-copy:before,.jupyter .fa-files-o:before{content:"\f0c5"}.jupyter .fa-paperclip:before{content:"\f0c6"}.jupyter .fa-floppy-o:before,.jupyter .fa-save:before{content:"\f0c7"}.jupyter .fa-square:before{content:"\f0c8"}.jupyter .fa-bars:before,.jupyter .fa-navicon:before,.jupyter .fa-reorder:before{content:"\f0c9"}.jupyter .fa-list-ul:before{content:"\f0ca"}.jupyter .fa-list-ol:before{content:"\f0cb"}.jupyter .fa-strikethrough:before{content:"\f0cc"}.jupyter .fa-underline:before{content:"\f0cd"}.jupyter .fa-table:before{content:"\f0ce"}.jupyter .fa-magic:before{content:"\f0d0"}.jupyter .fa-truck:before{content:"\f0d1"}.jupyter .fa-pinterest:before{content:"\f0d2"}.jupyter .fa-pinterest-square:before{content:"\f0d3"}.jupyter .fa-google-plus-square:before{content:"\f0d4"}.jupyter .fa-google-plus:before{content:"\f0d5"}.jupyter .fa-money:before{content:"\f0d6"}.jupyter .fa-caret-down:before{content:"\f0d7"}.jupyter .fa-caret-up:before{content:"\f0d8"}.jupyter .fa-caret-left:before{content:"\f0d9"}.jupyter .fa-caret-right:before{content:"\f0da"}.jupyter .fa-columns:before{content:"\f0db"}.jupyter .fa-sort:before,.jupyter .fa-unsorted:before{content:"\f0dc"}.jupyter .fa-sort-desc:before,.jupyter .fa-sort-down:before{content:"\f0dd"}.jupyter .fa-sort-asc:before,.jupyter .fa-sort-up:before{content:"\f0de"}.jupyter .fa-envelope:before{content:"\f0e0"}.jupyter .fa-linkedin:before{content:"\f0e1"}.jupyter .fa-rotate-left:before,.jupyter .fa-undo:before{content:"\f0e2"}.jupyter .fa-gavel:before,.jupyter .fa-legal:before{content:"\f0e3"}.jupyter .fa-dashboard:before,.jupyter .fa-tachometer:before{content:"\f0e4"}.jupyter .fa-comment-o:before{content:"\f0e5"}.jupyter .fa-comments-o:before{content:"\f0e6"}.jupyter .fa-bolt:before,.jupyter .fa-flash:before{content:"\f0e7"}.jupyter .fa-sitemap:before{content:"\f0e8"}.jupyter .fa-umbrella:before{content:"\f0e9"}.jupyter .fa-clipboard:before,.jupyter .fa-paste:before{content:"\f0ea"}.jupyter .fa-lightbulb-o:before{content:"\f0eb"}.jupyter .fa-exchange:before{content:"\f0ec"}.jupyter .fa-cloud-download:before{content:"\f0ed"}.jupyter .fa-cloud-upload:before{content:"\f0ee"}.jupyter .fa-user-md:before{content:"\f0f0"}.jupyter .fa-stethoscope:before{content:"\f0f1"}.jupyter .fa-suitcase:before{content:"\f0f2"}.jupyter .fa-bell-o:before{content:"\f0a2"}.jupyter .fa-coffee:before{content:"\f0f4"}.jupyter .fa-cutlery:before{content:"\f0f5"}.jupyter .fa-file-text-o:before{content:"\f0f6"}.jupyter .fa-building-o:before{content:"\f0f7"}.jupyter .fa-hospital-o:before{content:"\f0f8"}.jupyter .fa-ambulance:before{content:"\f0f9"}.jupyter .fa-medkit:before{content:"\f0fa"}.jupyter .fa-fighter-jet:before{content:"\f0fb"}.jupyter .fa-beer:before{content:"\f0fc"}.jupyter .fa-h-square:before{content:"\f0fd"}.jupyter .fa-plus-square:before{content:"\f0fe"}.jupyter .fa-angle-double-left:before{content:"\f100"}.jupyter .fa-angle-double-right:before{content:"\f101"}.jupyter .fa-angle-double-up:before{content:"\f102"}.jupyter .fa-angle-double-down:before{content:"\f103"}.jupyter .fa-angle-left:before{content:"\f104"}.jupyter .fa-angle-right:before{content:"\f105"}.jupyter .fa-angle-up:before{content:"\f106"}.jupyter .fa-angle-down:before{content:"\f107"}.jupyter .fa-desktop:before{content:"\f108"}.jupyter .fa-laptop:before{content:"\f109"}.jupyter .fa-tablet:before{content:"\f10a"}.jupyter .fa-mobile-phone:before,.jupyter .fa-mobile:before{content:"\f10b"}.jupyter .fa-circle-o:before{content:"\f10c"}.jupyter .fa-quote-left:before{content:"\f10d"}.jupyter .fa-quote-right:before{content:"\f10e"}.jupyter .fa-spinner:before{content:"\f110"}.jupyter .fa-circle:before{content:"\f111"}.jupyter .fa-mail-reply:before,.jupyter .fa-reply:before{content:"\f112"}.jupyter .fa-github-alt:before{content:"\f113"}.jupyter .fa-folder-o:before{content:"\f114"}.jupyter .fa-folder-open-o:before{content:"\f115"}.jupyter .fa-smile-o:before{content:"\f118"}.jupyter .fa-frown-o:before{content:"\f119"}.jupyter .fa-meh-o:before{content:"\f11a"}.jupyter .fa-gamepad:before{content:"\f11b"}.jupyter .fa-keyboard-o:before{content:"\f11c"}.jupyter .fa-flag-o:before{content:"\f11d"}.jupyter .fa-flag-checkered:before{content:"\f11e"}.jupyter .fa-terminal:before{content:"\f120"}.jupyter .fa-code:before{content:"\f121"}.jupyter .fa-mail-reply-all:before,.jupyter .fa-reply-all:before{content:"\f122"}.jupyter .fa-star-half-empty:before,.jupyter .fa-star-half-full:before,.jupyter .fa-star-half-o:before{content:"\f123"}.jupyter .fa-location-arrow:before{content:"\f124"}.jupyter .fa-crop:before{content:"\f125"}.jupyter .fa-code-fork:before{content:"\f126"}.jupyter .fa-chain-broken:before,.jupyter .fa-unlink:before{content:"\f127"}.jupyter .fa-question:before{content:"\f128"}.jupyter .fa-info:before{content:"\f129"}.jupyter .fa-exclamation:before{content:"\f12a"}.jupyter .fa-superscript:before{content:"\f12b"}.jupyter .fa-subscript:before{content:"\f12c"}.jupyter .fa-eraser:before{content:"\f12d"}.jupyter .fa-puzzle-piece:before{content:"\f12e"}.jupyter .fa-microphone:before{content:"\f130"}.jupyter .fa-microphone-slash:before{content:"\f131"}.jupyter .fa-shield:before{content:"\f132"}.jupyter .fa-calendar-o:before{content:"\f133"}.jupyter .fa-fire-extinguisher:before{content:"\f134"}.jupyter .fa-rocket:before{content:"\f135"}.jupyter .fa-maxcdn:before{content:"\f136"}.jupyter .fa-chevron-circle-left:before{content:"\f137"}.jupyter .fa-chevron-circle-right:before{content:"\f138"}.jupyter .fa-chevron-circle-up:before{content:"\f139"}.jupyter .fa-chevron-circle-down:before{content:"\f13a"}.jupyter .fa-html5:before{content:"\f13b"}.jupyter .fa-css3:before{content:"\f13c"}.jupyter .fa-anchor:before{content:"\f13d"}.jupyter .fa-unlock-alt:before{content:"\f13e"}.jupyter .fa-bullseye:before{content:"\f140"}.jupyter .fa-ellipsis-h:before{content:"\f141"}.jupyter .fa-ellipsis-v:before{content:"\f142"}.jupyter .fa-rss-square:before{content:"\f143"}.jupyter .fa-play-circle:before{content:"\f144"}.jupyter .fa-ticket:before{content:"\f145"}.jupyter .fa-minus-square:before{content:"\f146"}.jupyter .fa-minus-square-o:before{content:"\f147"}.jupyter .fa-level-up:before{content:"\f148"}.jupyter .fa-level-down:before{content:"\f149"}.jupyter .fa-check-square:before{content:"\f14a"}.jupyter .fa-pencil-square:before{content:"\f14b"}.jupyter .fa-external-link-square:before{content:"\f14c"}.jupyter .fa-share-square:before{content:"\f14d"}.jupyter .fa-compass:before{content:"\f14e"}.jupyter .fa-caret-square-o-down:before,.jupyter .fa-toggle-down:before{content:"\f150"}.jupyter .fa-caret-square-o-up:before,.jupyter .fa-toggle-up:before{content:"\f151"}.jupyter .fa-caret-square-o-right:before,.jupyter .fa-toggle-right:before{content:"\f152"}.jupyter .fa-eur:before,.jupyter .fa-euro:before{content:"\f153"}.jupyter .fa-gbp:before{content:"\f154"}.jupyter .fa-dollar:before,.jupyter .fa-usd:before{content:"\f155"}.jupyter .fa-inr:before,.jupyter .fa-rupee:before{content:"\f156"}.jupyter .fa-cny:before,.jupyter .fa-jpy:before,.jupyter .fa-rmb:before,.jupyter .fa-yen:before{content:"\f157"}.jupyter .fa-rouble:before,.jupyter .fa-rub:before,.jupyter .fa-ruble:before{content:"\f158"}.jupyter .fa-krw:before,.jupyter .fa-won:before{content:"\f159"}.jupyter .fa-bitcoin:before,.jupyter .fa-btc:before{content:"\f15a"}.jupyter .fa-file:before{content:"\f15b"}.jupyter .fa-file-text:before{content:"\f15c"}.jupyter .fa-sort-alpha-asc:before{content:"\f15d"}.jupyter .fa-sort-alpha-desc:before{content:"\f15e"}.jupyter .fa-sort-amount-asc:before{content:"\f160"}.jupyter .fa-sort-amount-desc:before{content:"\f161"}.jupyter .fa-sort-numeric-asc:before{content:"\f162"}.jupyter .fa-sort-numeric-desc:before{content:"\f163"}.jupyter .fa-thumbs-up:before{content:"\f164"}.jupyter .fa-thumbs-down:before{content:"\f165"}.jupyter .fa-youtube-square:before{content:"\f166"}.jupyter .fa-youtube:before{content:"\f167"}.jupyter .fa-xing:before{content:"\f168"}.jupyter .fa-xing-square:before{content:"\f169"}.jupyter .fa-youtube-play:before{content:"\f16a"}.jupyter .fa-dropbox:before{content:"\f16b"}.jupyter .fa-stack-overflow:before{content:"\f16c"}.jupyter .fa-instagram:before{content:"\f16d"}.jupyter .fa-flickr:before{content:"\f16e"}.jupyter .fa-adn:before{content:"\f170"}.jupyter .fa-bitbucket:before{content:"\f171"}.jupyter .fa-bitbucket-square:before{content:"\f172"}.jupyter .fa-tumblr:before{content:"\f173"}.jupyter .fa-tumblr-square:before{content:"\f174"}.jupyter .fa-long-arrow-down:before{content:"\f175"}.jupyter .fa-long-arrow-up:before{content:"\f176"}.jupyter .fa-long-arrow-left:before{content:"\f177"}.jupyter .fa-long-arrow-right:before{content:"\f178"}.jupyter .fa-apple:before{content:"\f179"}.jupyter .fa-windows:before{content:"\f17a"}.jupyter .fa-android:before{content:"\f17b"}.jupyter .fa-linux:before{content:"\f17c"}.jupyter .fa-dribbble:before{content:"\f17d"}.jupyter .fa-skype:before{content:"\f17e"}.jupyter .fa-foursquare:before{content:"\f180"}.jupyter .fa-trello:before{content:"\f181"}.jupyter .fa-female:before{content:"\f182"}.jupyter .fa-male:before{content:"\f183"}.jupyter .fa-gittip:before{content:"\f184"}.jupyter .fa-sun-o:before{content:"\f185"}.jupyter .fa-moon-o:before{content:"\f186"}.jupyter .fa-archive:before{content:"\f187"}.jupyter .fa-bug:before{content:"\f188"}.jupyter .fa-vk:before{content:"\f189"}.jupyter .fa-weibo:before{content:"\f18a"}.jupyter .fa-renren:before{content:"\f18b"}.jupyter .fa-pagelines:before{content:"\f18c"}.jupyter .fa-stack-exchange:before{content:"\f18d"}.jupyter .fa-arrow-circle-o-right:before{content:"\f18e"}.jupyter .fa-arrow-circle-o-left:before{content:"\f190"}.jupyter .fa-caret-square-o-left:before,.jupyter .fa-toggle-left:before{content:"\f191"}.jupyter .fa-dot-circle-o:before{content:"\f192"}.jupyter .fa-wheelchair:before{content:"\f193"}.jupyter .fa-vimeo-square:before{content:"\f194"}.jupyter .fa-try:before,.jupyter .fa-turkish-lira:before{content:"\f195"}.jupyter .fa-plus-square-o:before{content:"\f196"}.jupyter .fa-space-shuttle:before{content:"\f197"}.jupyter .fa-slack:before{content:"\f198"}.jupyter .fa-envelope-square:before{content:"\f199"}.jupyter .fa-wordpress:before{content:"\f19a"}.jupyter .fa-openid:before{content:"\f19b"}.jupyter .fa-bank:before,.jupyter .fa-institution:before,.jupyter .fa-university:before{content:"\f19c"}.jupyter .fa-graduation-cap:before,.jupyter .fa-mortar-board:before{content:"\f19d"}.jupyter .fa-yahoo:before{content:"\f19e"}.jupyter .fa-google:before{content:"\f1a0"}.jupyter .fa-reddit:before{content:"\f1a1"}.jupyter .fa-reddit-square:before{content:"\f1a2"}.jupyter .fa-stumbleupon-circle:before{content:"\f1a3"}.jupyter .fa-stumbleupon:before{content:"\f1a4"}.jupyter .fa-delicious:before{content:"\f1a5"}.jupyter .fa-digg:before{content:"\f1a6"}.jupyter .fa-pied-piper:before{content:"\f1a7"}.jupyter .fa-pied-piper-alt:before{content:"\f1a8"}.jupyter .fa-drupal:before{content:"\f1a9"}.jupyter .fa-joomla:before{content:"\f1aa"}.jupyter .fa-language:before{content:"\f1ab"}.jupyter .fa-fax:before{content:"\f1ac"}.jupyter .fa-building:before{content:"\f1ad"}.jupyter .fa-child:before{content:"\f1ae"}.jupyter .fa-paw:before{content:"\f1b0"}.jupyter .fa-spoon:before{content:"\f1b1"}.jupyter .fa-cube:before{content:"\f1b2"}.jupyter .fa-cubes:before{content:"\f1b3"}.jupyter .fa-behance:before{content:"\f1b4"}.jupyter .fa-behance-square:before{content:"\f1b5"}.jupyter .fa-steam:before{content:"\f1b6"}.jupyter .fa-steam-square:before{content:"\f1b7"}.jupyter .fa-recycle:before{content:"\f1b8"}.jupyter .fa-automobile:before,.jupyter .fa-car:before{content:"\f1b9"}.jupyter .fa-cab:before,.jupyter .fa-taxi:before{content:"\f1ba"}.jupyter .fa-tree:before{content:"\f1bb"}.jupyter .fa-spotify:before{content:"\f1bc"}.jupyter .fa-deviantart:before{content:"\f1bd"}.jupyter .fa-soundcloud:before{content:"\f1be"}.jupyter .fa-database:before{content:"\f1c0"}.jupyter .fa-file-pdf-o:before{content:"\f1c1"}.jupyter .fa-file-word-o:before{content:"\f1c2"}.jupyter .fa-file-excel-o:before{content:"\f1c3"}.jupyter .fa-file-powerpoint-o:before{content:"\f1c4"}.jupyter .fa-file-image-o:before,.jupyter .fa-file-photo-o:before,.jupyter .fa-file-picture-o:before{content:"\f1c5"}.jupyter .fa-file-archive-o:before,.jupyter .fa-file-zip-o:before{content:"\f1c6"}.jupyter .fa-file-audio-o:before,.jupyter .fa-file-sound-o:before{content:"\f1c7"}.jupyter .fa-file-movie-o:before,.jupyter .fa-file-video-o:before{content:"\f1c8"}.jupyter .fa-file-code-o:before{content:"\f1c9"}.jupyter .fa-vine:before{content:"\f1ca"}.jupyter .fa-codepen:before{content:"\f1cb"}.jupyter .fa-jsfiddle:before{content:"\f1cc"}.jupyter .fa-life-bouy:before,.jupyter .fa-life-buoy:before,.jupyter .fa-life-ring:before,.jupyter .fa-life-saver:before,.jupyter .fa-support:before{content:"\f1cd"}.jupyter .fa-circle-o-notch:before{content:"\f1ce"}.jupyter .fa-ra:before,.jupyter .fa-rebel:before{content:"\f1d0"}.jupyter .fa-empire:before,.jupyter .fa-ge:before{content:"\f1d1"}.jupyter .fa-git-square:before{content:"\f1d2"}.jupyter .fa-git:before{content:"\f1d3"}.jupyter .fa-hacker-news:before{content:"\f1d4"}.jupyter .fa-tencent-weibo:before{content:"\f1d5"}.jupyter .fa-qq:before{content:"\f1d6"}.jupyter .fa-wechat:before,.jupyter .fa-weixin:before{content:"\f1d7"}.jupyter .fa-paper-plane:before,.jupyter .fa-send:before{content:"\f1d8"}.jupyter .fa-paper-plane-o:before,.jupyter .fa-send-o:before{content:"\f1d9"}.jupyter .fa-history:before{content:"\f1da"}.jupyter .fa-circle-thin:before{content:"\f1db"}.jupyter .fa-header:before{content:"\f1dc"}.jupyter .fa-paragraph:before{content:"\f1dd"}.jupyter .fa-sliders:before{content:"\f1de"}.jupyter .fa-share-alt:before{content:"\f1e0"}.jupyter .fa-share-alt-square:before{content:"\f1e1"}.jupyter .fa-bomb:before{content:"\f1e2"}.jupyter .fa-futbol-o:before,.jupyter .fa-soccer-ball-o:before{content:"\f1e3"}.jupyter .fa-tty:before{content:"\f1e4"}.jupyter .fa-binoculars:before{content:"\f1e5"}.jupyter .fa-plug:before{content:"\f1e6"}.jupyter .fa-slideshare:before{content:"\f1e7"}.jupyter .fa-twitch:before{content:"\f1e8"}.jupyter .fa-yelp:before{content:"\f1e9"}.jupyter .fa-newspaper-o:before{content:"\f1ea"}.jupyter .fa-wifi:before{content:"\f1eb"}.jupyter .fa-calculator:before{content:"\f1ec"}.jupyter .fa-paypal:before{content:"\f1ed"}.jupyter .fa-google-wallet:before{content:"\f1ee"}.jupyter .fa-cc-visa:before{content:"\f1f0"}.jupyter .fa-cc-mastercard:before{content:"\f1f1"}.jupyter .fa-cc-discover:before{content:"\f1f2"}.jupyter .fa-cc-amex:before{content:"\f1f3"}.jupyter .fa-cc-paypal:before{content:"\f1f4"}.jupyter .fa-cc-stripe:before{content:"\f1f5"}.jupyter .fa-bell-slash:before{content:"\f1f6"}.jupyter .fa-bell-slash-o:before{content:"\f1f7"}.jupyter .fa-trash:before{content:"\f1f8"}.jupyter .fa-copyright:before{content:"\f1f9"}.jupyter .fa-at:before{content:"\f1fa"}.jupyter .fa-eyedropper:before{content:"\f1fb"}.jupyter .fa-paint-brush:before{content:"\f1fc"}.jupyter .fa-birthday-cake:before{content:"\f1fd"}.jupyter .fa-area-chart:before{content:"\f1fe"}.jupyter .fa-pie-chart:before{content:"\f200"}.jupyter .fa-line-chart:before{content:"\f201"}.jupyter .fa-lastfm:before{content:"\f202"}.jupyter .fa-lastfm-square:before{content:"\f203"}.jupyter .fa-toggle-off:before{content:"\f204"}.jupyter .fa-toggle-on:before{content:"\f205"}.jupyter .fa-bicycle:before{content:"\f206"}.jupyter .fa-bus:before{content:"\f207"}.jupyter .fa-ioxhost:before{content:"\f208"}.jupyter .fa-angellist:before{content:"\f209"}.jupyter .fa-cc:before{content:"\f20a"}.jupyter .fa-ils:before,.jupyter .fa-shekel:before,.jupyter .fa-sheqel:before{content:"\f20b"}.jupyter .fa-meanpath:before{content:"\f20c"}.jupyter .modal.fade .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.jupyter code{color:#000}.jupyter pre{font-size:inherit;line-height:inherit}.jupyter label{font-weight:400}.jupyter .border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.jupyter .corner-all{border-radius:2px}.jupyter .no-padding{padding:0}.jupyter .hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.jupyter .hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.jupyter .vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.jupyter .vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.jupyter .hbox.reverse,.jupyter .reverse,.jupyter .vbox.reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse}.jupyter .box-flex0,.jupyter .hbox.box-flex0,.jupyter .vbox.box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none;width:auto}.jupyter .box-flex1,.jupyter .hbox.box-flex1,.jupyter .vbox.box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.jupyter .box-flex,.jupyter .hbox.box-flex,.jupyter .vbox.box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.jupyter .box-flex2,.jupyter .hbox.box-flex2,.jupyter .vbox.box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}.jupyter .box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1}.jupyter .box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2}.jupyter .hbox.start,.jupyter .start,.jupyter .vbox.start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start}.jupyter .end,.jupyter .hbox.end,.jupyter .vbox.end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end}.jupyter .center,.jupyter .hbox.center,.jupyter .vbox.center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center}.jupyter .baseline,.jupyter .hbox.baseline,.jupyter .vbox.baseline{-webkit-box-pack:baseline;-moz-box-pack:baseline;box-pack:baseline;justify-content:baseline}.jupyter .hbox.stretch,.jupyter .stretch,.jupyter .vbox.stretch{-webkit-box-pack:stretch;-moz-box-pack:stretch;box-pack:stretch;justify-content:stretch}.jupyter .align-start,.jupyter .hbox.align-start,.jupyter .vbox.align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}.jupyter .align-end,.jupyter .hbox.align-end,.jupyter .vbox.align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-items:flex-end}.jupyter .align-center,.jupyter .hbox.align-center,.jupyter .vbox.align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-items:center}.jupyter .align-baseline,.jupyter .hbox.align-baseline,.jupyter .vbox.align-baseline{-webkit-box-align:baseline;-moz-box-align:baseline;box-align:baseline;align-items:baseline}.jupyter .align-stretch,.jupyter .hbox.align-stretch,.jupyter .vbox.align-stretch{-webkit-box-align:stretch;-moz-box-align:stretch;box-align:stretch;align-items:stretch}.jupyter div.error{margin:2em;text-align:center}.jupyter div.error>h1{font-size:500%;line-height:normal}.jupyter div.error>p{font-size:200%;line-height:normal}.jupyter div.traceback-wrapper{text-align:left;max-width:800px;margin:auto}.jupyter body{background-color:#fff;position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible}.jupyter body>#header{display:none;background-color:#fff;position:relative;z-index:100}.jupyter body>#header #header-container{padding-bottom:5px;padding-top:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.jupyter body>#header .header-bar{width:100%;height:1px;background:#e7e7e7;margin-bottom:-1px}@media print{.jupyter body>#header{display:none!important}}.jupyter #header-spacer{width:100%;visibility:hidden}@media print{.jupyter #header-spacer{display:none}}.jupyter #ipython_notebook{padding-left:0;padding-top:1px;padding-bottom:1px}@media (max-width:991px){.jupyter #ipython_notebook{margin-left:10px}}.jupyter #noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:red;font-weight:700}.jupyter #ipython_notebook img{height:28px}.jupyter #site{width:100%;display:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;overflow:auto}@media print{.jupyter #site{height:auto!important}}.jupyter .ui-button .ui-button-text{padding:.2em .8em;font-size:77%}.jupyter input.ui-button{padding:.3em .9em}.jupyter span#login_widget{float:right}.jupyter #logout,.jupyter span#login_widget>.button{color:#333;background-color:#fff;border-color:#ccc}.jupyter #logout.focus,.jupyter #logout:focus,.jupyter span#login_widget>.button.focus,.jupyter span#login_widget>.button:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.jupyter #logout:hover,.jupyter span#login_widget>.button:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter #logout.active,.jupyter #logout:active,.jupyter span#login_widget>.button.active,.jupyter span#login_widget>.button:active,.open>.dropdown-toggle.jupyter #logout,.open>.dropdown-toggle.jupyter span#login_widget>.button{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter #logout.active.focus,.jupyter #logout.active:focus,.jupyter #logout.active:hover,.jupyter #logout:active.focus,.jupyter #logout:active:focus,.jupyter #logout:active:hover,.jupyter span#login_widget>.button.active.focus,.jupyter span#login_widget>.button.active:focus,.jupyter span#login_widget>.button.active:hover,.jupyter span#login_widget>.button:active.focus,.jupyter span#login_widget>.button:active:focus,.jupyter span#login_widget>.button:active:hover,.open>.dropdown-toggle.jupyter #logout.focus,.open>.dropdown-toggle.jupyter #logout:focus,.open>.dropdown-toggle.jupyter #logout:hover,.open>.dropdown-toggle.jupyter span#login_widget>.button.focus,.open>.dropdown-toggle.jupyter span#login_widget>.button:focus,.open>.dropdown-toggle.jupyter span#login_widget>.button:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.jupyter #logout.active,.jupyter #logout:active,.jupyter span#login_widget>.button.active,.jupyter span#login_widget>.button:active,.open>.dropdown-toggle.jupyter #logout,.open>.dropdown-toggle.jupyter span#login_widget>.button{background-image:none}.jupyter #logout.disabled,.jupyter #logout.disabled.active,.jupyter #logout.disabled.focus,.jupyter #logout.disabled:active,.jupyter #logout.disabled:focus,.jupyter #logout.disabled:hover,.jupyter #logout[disabled],.jupyter #logout[disabled].active,.jupyter #logout[disabled].focus,.jupyter #logout[disabled]:active,.jupyter #logout[disabled]:focus,.jupyter #logout[disabled]:hover,.jupyter span#login_widget>.button.disabled,.jupyter span#login_widget>.button.disabled.active,.jupyter span#login_widget>.button.disabled.focus,.jupyter span#login_widget>.button.disabled:active,.jupyter span#login_widget>.button.disabled:focus,.jupyter span#login_widget>.button.disabled:hover,.jupyter span#login_widget>.button[disabled],.jupyter span#login_widget>.button[disabled].active,.jupyter span#login_widget>.button[disabled].focus,.jupyter span#login_widget>.button[disabled]:active,.jupyter span#login_widget>.button[disabled]:focus,.jupyter span#login_widget>.button[disabled]:hover,fieldset[disabled] .jupyter #logout,fieldset[disabled] .jupyter #logout.active,fieldset[disabled] .jupyter #logout.focus,fieldset[disabled] .jupyter #logout:active,fieldset[disabled] .jupyter #logout:focus,fieldset[disabled] .jupyter #logout:hover,fieldset[disabled] .jupyter span#login_widget>.button,fieldset[disabled] .jupyter span#login_widget>.button.active,fieldset[disabled] .jupyter span#login_widget>.button.focus,fieldset[disabled] .jupyter span#login_widget>.button:active,fieldset[disabled] .jupyter span#login_widget>.button:focus,fieldset[disabled] .jupyter span#login_widget>.button:hover{background-color:#fff;border-color:#ccc}.jupyter #logout .badge,.jupyter span#login_widget>.button .badge{color:#fff;background-color:#333}.jupyter .nav-header{text-transform:none}.jupyter #header>span{margin-top:10px}.jupyter .modal_stretch .modal-dialog{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;min-height:80vh}.jupyter .modal_stretch .modal-dialog .modal-body{max-height:calc(100vh - 200px);overflow:auto;flex:1}@media (min-width:768px){.jupyter .modal .modal-dialog{width:700px}}@media (min-width:768px){.jupyter select.form-control{margin-left:12px;margin-right:12px}}.jupyter .center-nav{display:inline-block;margin-bottom:-4px}.jupyter .alternate_upload{background-color:none;display:inline}.jupyter .alternate_upload.form{padding:0;margin:0}.jupyter .alternate_upload input.fileinput{text-align:center;vertical-align:middle;display:inline;opacity:0;z-index:2;width:12ex;margin-right:-12ex}.jupyter .alternate_upload .btn-upload{height:22px}.jupyter ul#tabs{margin-bottom:4px}.jupyter ul#tabs a{padding-top:6px;padding-bottom:4px}.jupyter ul.breadcrumb a:focus,.jupyter ul.breadcrumb a:hover{text-decoration:none}.jupyter ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px}.jupyter ul.breadcrumb span{color:#5e5e5e}.jupyter .list_toolbar{padding:4px 0 4px 0;vertical-align:middle}.jupyter .list_toolbar .tree-buttons{padding-top:1px}.jupyter .dynamic-buttons{padding-top:3px;display:inline-block}.jupyter .list_toolbar [class*=span]{min-height:24px}.jupyter .list_header{font-weight:700;background-color:#EEE}.jupyter .list_placeholder{font-weight:700;padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px}.jupyter .list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ddd;border-radius:2px}.jupyter .list_container>div{border-bottom:1px solid #ddd}.jupyter .list_container>div:hover .list-item{background-color:red}.jupyter .list_container>div:last-child{border:none}.jupyter .list_item:hover .list_item{background-color:#ddd}.jupyter .list_item a{text-decoration:none}.jupyter .list_item:hover{background-color:#fafafa}.jupyter .list_header>div,.jupyter .list_item>div{padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px;line-height:22px}.jupyter .list_header>div input,.jupyter .list_item>div input{margin-right:7px;margin-left:14px;vertical-align:baseline;line-height:22px;position:relative;top:-1px}.jupyter .list_header>div .item_link,.jupyter .list_item>div .item_link{margin-left:-1px;vertical-align:baseline;line-height:22px}.jupyter .new-file input[type=checkbox]{visibility:hidden}.jupyter .item_name{line-height:22px;height:24px}.jupyter .item_icon{font-size:14px;color:#5e5e5e;margin-right:7px;margin-left:7px;line-height:22px;vertical-align:baseline}.jupyter .item_buttons{line-height:1em;margin-left:-5px}.jupyter .item_buttons .btn,.jupyter .item_buttons .btn-group,.jupyter .item_buttons .input-group{float:left}.jupyter .item_buttons>.btn,.jupyter .item_buttons>.btn-group,.jupyter .item_buttons>.input-group{margin-left:5px}.jupyter .item_buttons .btn{min-width:13ex}.jupyter .item_buttons .running-indicator{padding-top:4px;color:#5cb85c}.jupyter .item_buttons .kernel-name{padding-top:4px;color:#5bc0de;margin-right:7px;float:left}.jupyter .toolbar_info{height:24px;line-height:24px}.jupyter .list_item input:not([type=checkbox]){padding-top:3px;padding-bottom:3px;height:22px;line-height:14px;margin:0}.jupyter .highlight_text{color:#00f}.jupyter #project_name{display:inline-block;padding-left:7px;margin-left:-2px}.jupyter #project_name>.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:700}.jupyter #tree-selector{padding-right:0}.jupyter #button-select-all{min-width:50px}.jupyter #select-all{margin-left:7px;margin-right:2px}.jupyter .menu_icon{margin-right:2px}.jupyter .tab-content .row{margin-left:0;margin-right:0}.jupyter .folder_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f114"}.jupyter .folder_icon:before.pull-left{margin-right:.3em}.jupyter .folder_icon:before.pull-right{margin-left:.3em}.jupyter .notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px}.jupyter .notebook_icon:before.pull-left{margin-right:.3em}.jupyter .notebook_icon:before.pull-right{margin-left:.3em}.jupyter .running_notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px;color:#5cb85c}.jupyter .running_notebook_icon:before.pull-left{margin-right:.3em}.jupyter .running_notebook_icon:before.pull-right{margin-left:.3em}.jupyter .file_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f016";position:relative;top:-2px}.jupyter .file_icon:before.pull-left{margin-right:.3em}.jupyter .file_icon:before.pull-right{margin-left:.3em}.jupyter #notebook_toolbar .pull-right{padding-top:0;margin-right:-1px}.jupyter ul#new-menu{left:auto;right:0}.jupyter .kernel-menu-icon{padding-right:12px;width:24px;content:"\f096"}.jupyter .kernel-menu-icon:before{content:"\f096"}.jupyter .kernel-menu-icon-current:before{content:"\f00c"}.jupyter #tab_content{padding-top:20px}.jupyter #running .panel-group .panel{margin-top:3px;margin-bottom:1em}.jupyter #running .panel-group .panel .panel-heading{background-color:#EEE;padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px;line-height:22px}.jupyter #running .panel-group .panel .panel-heading a:focus,.jupyter #running .panel-group .panel .panel-heading a:hover{text-decoration:none}.jupyter #running .panel-group .panel .panel-body{padding:0}.jupyter #running .panel-group .panel .panel-body .list_container{margin-top:0;margin-bottom:0;border:0;border-radius:0}.jupyter #running .panel-group .panel .panel-body .list_container .list_item{border-bottom:1px solid #ddd}.jupyter #running .panel-group .panel .panel-body .list_container .list_item:last-child{border-bottom:0}.jupyter .delete-button{display:none}.jupyter .duplicate-button{display:none}.jupyter .rename-button{display:none}.jupyter .shutdown-button{display:none}.jupyter .dynamic-instructions{display:inline-block;padding-top:4px}.jupyter .selected-keymap i.fa{padding:0 5px}.jupyter .selected-keymap i.fa:before{content:"\f00c"}.jupyter #mode-menu{overflow:auto;max-height:20em}.jupyter .edit_app #header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.jupyter .edit_app #menubar .navbar{margin-bottom:-1px}.jupyter .dirty-indicator{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.jupyter .dirty-indicator.pull-left{margin-right:.3em}.jupyter .dirty-indicator.pull-right{margin-left:.3em}.jupyter .dirty-indicator-dirty{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.jupyter .dirty-indicator-dirty.pull-left{margin-right:.3em}.jupyter .dirty-indicator-dirty.pull-right{margin-left:.3em}.jupyter .dirty-indicator-clean{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.jupyter .dirty-indicator-clean.pull-left{margin-right:.3em}.jupyter .dirty-indicator-clean.pull-right{margin-left:.3em}.jupyter .dirty-indicator-clean:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f00c"}.jupyter .dirty-indicator-clean:before.pull-left{margin-right:.3em}.jupyter .dirty-indicator-clean:before.pull-right{margin-left:.3em}.jupyter #filename{font-size:16pt;display:table;padding:0 5px}.jupyter #current-mode{padding-left:5px;padding-right:5px}.jupyter #texteditor-backdrop{padding-top:20px;padding-bottom:20px}@media not print{.jupyter #texteditor-backdrop{background-color:#EEE}}@media print{.jupyter #texteditor-backdrop #texteditor-container .CodeMirror-gutter,.jupyter #texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}}@media not print{.jupyter #texteditor-backdrop #texteditor-container .CodeMirror-gutter,.jupyter #texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}}@media not print{.jupyter #texteditor-backdrop #texteditor-container{padding:0;background-color:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}.jupyter .ansibold{font-weight:700}.jupyter .ansiblack{color:#000}.jupyter .ansired{color:#8b0000}.jupyter .ansigreen{color:#006400}.jupyter .ansiyellow{color:#c4a000}.jupyter .ansiblue{color:#00008b}.jupyter .ansipurple{color:#9400d3}.jupyter .ansicyan{color:#4682b4}.jupyter .ansigray{color:gray}.jupyter .ansibgblack{background-color:#000}.jupyter .ansibgred{background-color:red}.jupyter .ansibggreen{background-color:green}.jupyter .ansibgyellow{background-color:#ff0}.jupyter .ansibgblue{background-color:#00f}.jupyter .ansibgpurple{background-color:#ff00ff}.jupyter .ansibgcyan{background-color:#0ff}.jupyter .ansibggray{background-color:gray}.jupyter div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;border-radius:2px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-width:thin;border-style:solid;width:100%;padding:5px;margin:0;outline:0}.jupyter div.cell.selected{border-color:#ababab}@media print{.jupyter div.cell.selected{border-color:transparent}}.edit_mode .jupyter div.cell.selected{border-color:green}@media print{.edit_mode .jupyter div.cell.selected{border-color:transparent}}.jupyter .prompt{min-width:14ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.21429em}@media (max-width:540px){.jupyter .prompt{text-align:left}}.jupyter div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}@-moz-document url-prefix(){.jupyter div.inner_cell{overflow-x:hidden}}.jupyter div.input_area{border:1px solid #cfcfcf;border-radius:2px;background:#f7f7f7;line-height:1.21429em}.jupyter div.prompt:empty{padding-top:0;padding-bottom:0}.jupyter div.unrecognized_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.jupyter div.unrecognized_cell .inner_cell{border-radius:2px;padding:5px;font-weight:700;color:red;border:1px solid #cfcfcf;background:#eaeaea}.jupyter div.unrecognized_cell .inner_cell a{color:inherit;text-decoration:none}.jupyter div.unrecognized_cell .inner_cell a:hover{color:inherit;text-decoration:none}@media (max-width:540px){.jupyter div.unrecognized_cell>div.prompt{display:none}}@media print{.jupyter div.code_cell{page-break-inside:avoid}}.jupyter div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){.jupyter div.input{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}.jupyter div.input_prompt{color:navy;border-top:1px solid transparent}.jupyter div.input_area>div.highlight{margin:.4em;border:none;padding:0;background-color:transparent}.jupyter div.input_area>div.highlight>pre{margin:0;border:none;padding:0;background-color:transparent}.jupyter .CodeMirror{line-height:1.21429em;font-size:14px;height:auto;background:0 0}.jupyter .CodeMirror-scroll{overflow-y:hidden;overflow-x:auto}.jupyter .CodeMirror-lines{padding:.4em}.jupyter .CodeMirror-linenumber{padding:0 8px 0 4px}.jupyter .CodeMirror-gutters{border-bottom-left-radius:2px;border-top-left-radius:2px}.jupyter .CodeMirror pre{padding:0;border:0;border-radius:0}.jupyter .CodeMirror{font-family:monospace;height:300px;color:#000}.jupyter .CodeMirror-lines{padding:4px 0}.jupyter .CodeMirror pre{padding:0 4px}.jupyter .CodeMirror-gutter-filler,.jupyter .CodeMirror-scrollbar-filler{background-color:#fff}.jupyter .CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.jupyter .CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.jupyter .CodeMirror-guttermarker{color:#000}.jupyter .CodeMirror-guttermarker-subtle{color:#999}.jupyter .CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.jupyter .CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.jupyter .cm-fat-cursor .CodeMirror-cursor{width:auto;border:0;background:#7e7}.jupyter .cm-fat-cursor div.CodeMirror-cursors{z-index:1}.jupyter .cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}.jupyter .cm-tab{display:inline-block;text-decoration:inherit}.jupyter .CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.jupyter .cm-s-default .cm-header{color:#00f}.jupyter .cm-s-default .cm-quote{color:#090}.jupyter .cm-negative{color:#d44}.jupyter .cm-positive{color:#292}.jupyter .cm-header,.jupyter .cm-strong{font-weight:700}.jupyter .cm-em{font-style:italic}.jupyter .cm-link{text-decoration:underline}.jupyter .cm-strikethrough{text-decoration:line-through}.jupyter .cm-s-default .cm-keyword{color:#708}.jupyter .cm-s-default .cm-atom{color:#219}.jupyter .cm-s-default .cm-number{color:#164}.jupyter .cm-s-default .cm-def{color:#00f}.jupyter .cm-s-default .cm-variable-2{color:#05a}.jupyter .cm-s-default .cm-variable-3{color:#085}.jupyter .cm-s-default .cm-comment{color:#a50}.jupyter .cm-s-default .cm-string{color:#a11}.jupyter .cm-s-default .cm-string-2{color:#f50}.jupyter .cm-s-default .cm-meta{color:#555}.jupyter .cm-s-default .cm-qualifier{color:#555}.jupyter .cm-s-default .cm-builtin{color:#30a}.jupyter .cm-s-default .cm-bracket{color:#997}.jupyter .cm-s-default .cm-tag{color:#170}.jupyter .cm-s-default .cm-attribute{color:#00c}.jupyter .cm-s-default .cm-hr{color:#999}.jupyter .cm-s-default .cm-link{color:#00c}.jupyter .cm-s-default .cm-error{color:red}.jupyter .cm-invalidchar{color:red}.jupyter .CodeMirror-composing{border-bottom:2px solid}.jupyter div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}.jupyter div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.jupyter .CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.jupyter .CodeMirror-activeline-background{background:#e8f2ff}.jupyter .CodeMirror{position:relative;overflow:hidden;background:#fff}.jupyter .CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.jupyter .CodeMirror-sizer{position:relative;border-right:30px solid transparent}.jupyter .CodeMirror-gutter-filler,.jupyter .CodeMirror-hscrollbar,.jupyter .CodeMirror-scrollbar-filler,.jupyter .CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.jupyter .CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.jupyter .CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.jupyter .CodeMirror-scrollbar-filler{right:0;bottom:0}.jupyter .CodeMirror-gutter-filler{left:0;bottom:0}.jupyter .CodeMirror-gutters{position:absolute;left:0;top:0;z-index:3}.jupyter .CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;margin-bottom:-30px}.jupyter .CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.jupyter .CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.jupyter .CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.jupyter .CodeMirror-gutter-wrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}.jupyter .CodeMirror-lines{cursor:text;min-height:1px}.jupyter .CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent}.jupyter .CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.jupyter .CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.jupyter .CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.jupyter .CodeMirror-code{outline:0}.jupyter .CodeMirror-gutter,.jupyter .CodeMirror-gutters,.jupyter .CodeMirror-linenumber,.jupyter .CodeMirror-scroll,.jupyter .CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.jupyter .CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.jupyter .CodeMirror-cursor{position:absolute}.jupyter .CodeMirror-measure pre{position:static}.jupyter div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.jupyter div.CodeMirror-dragcursors{visibility:visible}.jupyter .CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.jupyter .CodeMirror-selected{background:#d9d9d9}.jupyter .CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.jupyter .CodeMirror-crosshair{cursor:crosshair}.jupyter .CodeMirror-line::selection,.jupyter .CodeMirror-line>span::selection,.jupyter .CodeMirror-line>span>span::selection{background:#d7d4f0}.jupyter .CodeMirror-line::-moz-selection,.jupyter .CodeMirror-line>span::-moz-selection,.jupyter .CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.jupyter .cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.jupyter .cm-force-border{padding-right:.1px}.jupyter .cm-tab-wrap-hack:after{content:''}.jupyter span.CodeMirror-selectedtext{background:0 0}.jupyter .highlight-base{color:#000}.jupyter .highlight-variable{color:#000}.jupyter .highlight-variable-2{color:#1a1a1a}.jupyter .highlight-variable-3{color:#333}.jupyter .highlight-string{color:#BA2121}.jupyter .highlight-comment{color:#408080;font-style:italic}.jupyter .highlight-number{color:#080}.jupyter .highlight-atom{color:#88F}.jupyter .highlight-keyword{color:green;font-weight:700}.jupyter .highlight-builtin{color:green}.jupyter .highlight-error{color:red}.jupyter .highlight-operator{color:#A2F;font-weight:700}.jupyter .highlight-meta{color:#A2F}.jupyter .highlight-def{color:#00f}.jupyter .highlight-string-2{color:#f50}.jupyter .highlight-qualifier{color:#555}.jupyter .highlight-bracket{color:#997}.jupyter .highlight-tag{color:#170}.jupyter .highlight-attribute{color:#00c}.jupyter .highlight-header{color:#00f}.jupyter .highlight-quote{color:#090}.jupyter .highlight-link{color:#00c}.jupyter .cm-s-ipython span.cm-keyword{color:green;font-weight:700}.jupyter .cm-s-ipython span.cm-atom{color:#88F}.jupyter .cm-s-ipython span.cm-number{color:#080}.jupyter .cm-s-ipython span.cm-def{color:#00f}.jupyter .cm-s-ipython span.cm-variable{color:#000}.jupyter .cm-s-ipython span.cm-operator{color:#A2F;font-weight:700}.jupyter .cm-s-ipython span.cm-variable-2{color:#1a1a1a}.jupyter .cm-s-ipython span.cm-variable-3{color:#333}.jupyter .cm-s-ipython span.cm-comment{color:#408080;font-style:italic}.jupyter .cm-s-ipython span.cm-string{color:#BA2121}.jupyter .cm-s-ipython span.cm-string-2{color:#f50}.jupyter .cm-s-ipython span.cm-meta{color:#A2F}.jupyter .cm-s-ipython span.cm-qualifier{color:#555}.jupyter .cm-s-ipython span.cm-builtin{color:green}.jupyter .cm-s-ipython span.cm-bracket{color:#997}.jupyter .cm-s-ipython span.cm-tag{color:#170}.jupyter .cm-s-ipython span.cm-attribute{color:#00c}.jupyter .cm-s-ipython span.cm-header{color:#00f}.jupyter .cm-s-ipython span.cm-quote{color:#090}.jupyter .cm-s-ipython span.cm-link{color:#00c}.jupyter .cm-s-ipython span.cm-error{color:red}.jupyter .cm-s-ipython span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}.jupyter div.output_wrapper{position:relative;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;z-index:1}.jupyter div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:2px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,.8);box-shadow:inset 0 2px 8px rgba(0,0,0,.8);display:block}.jupyter div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.jupyter div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:2px}.jupyter div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,.5)}.jupyter div.output_prompt{color:#8b0000}.jupyter div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.jupyter div.output_area .MathJax_Display{text-align:left!important}.jupyter div.output_area .rendered_html table{margin-left:0;margin-right:0}.jupyter div.output_area .rendered_html img{margin-left:0;margin-right:0}.jupyter div.output_area img,.jupyter div.output_area svg{max-width:100%;height:auto}.jupyter div.output_area img.unconfined,.jupyter div.output_area svg.unconfined{max-width:none}.jupyter .output{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}@media (max-width:540px){.jupyter div.output_area{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}.jupyter div.output_area pre{margin:0;padding:0;border:0;vertical-align:baseline;color:#000;background-color:transparent;border-radius:0}.jupyter div.output_subarea{overflow-x:auto;padding:.4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1;max-width:calc(100% - 14ex)}.jupyter div.output_scroll div.output_subarea{overflow-x:visible}.jupyter div.output_text{text-align:left;color:#000;line-height:1.21429em}.jupyter div.output_stderr{background:#fdd}.jupyter div.output_latex{text-align:left}.jupyter div.output_javascript:empty{padding:0}.jupyter .js-error{color:#8b0000}.jupyter div.raw_input_container{line-height:1.21429em;padding-top:5px}.jupyter input.raw_input{font-family:monospace;font-size:inherit;color:inherit;width:auto;vertical-align:baseline;padding:0 .25em;margin:0 .25em}.jupyter input.raw_input:focus{box-shadow:none}.jupyter p.p-space{margin-bottom:10px}.jupyter div.output_unrecognized{padding:5px;font-weight:700;color:red}.jupyter div.output_unrecognized a{color:inherit;text-decoration:none}.jupyter div.output_unrecognized a:hover{color:inherit;text-decoration:none}.jupyter .rendered_html{color:#000}.jupyter .rendered_html em{font-style:italic}.jupyter .rendered_html strong{font-weight:700}.jupyter .rendered_html u{text-decoration:underline}.jupyter .rendered_html :link{text-decoration:underline}.jupyter .rendered_html :visited{text-decoration:underline}.jupyter .rendered_html h1{font-size:185.7%;margin:1.08em 0 0 0;font-weight:700;line-height:1}.jupyter .rendered_html h2{font-size:157.1%;margin:1.27em 0 0 0;font-weight:700;line-height:1}.jupyter .rendered_html h3{font-size:128.6%;margin:1.55em 0 0 0;font-weight:700;line-height:1}.jupyter .rendered_html h4{font-size:100%;margin:2em 0 0 0;font-weight:700;line-height:1}.jupyter .rendered_html h5{font-size:100%;margin:2em 0 0 0;font-weight:700;line-height:1;font-style:italic}.jupyter .rendered_html h6{font-size:100%;margin:2em 0 0 0;font-weight:700;line-height:1;font-style:italic}.jupyter .rendered_html h1:first-child{margin-top:.538em}.jupyter .rendered_html h2:first-child{margin-top:.636em}.jupyter .rendered_html h3:first-child{margin-top:.777em}.jupyter .rendered_html h4:first-child{margin-top:1em}.jupyter .rendered_html h5:first-child{margin-top:1em}.jupyter .rendered_html h6:first-child{margin-top:1em}.jupyter .rendered_html ul{list-style:disc;margin:0 2em;padding-left:0}.jupyter .rendered_html ul ul{list-style:square;margin:0 2em}.jupyter .rendered_html ul ul ul{list-style:circle;margin:0 2em}.jupyter .rendered_html ol{list-style:decimal;margin:0 2em;padding-left:0}.jupyter .rendered_html ol ol{list-style:upper-alpha;margin:0 2em}.jupyter .rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em}.jupyter .rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em}.jupyter .rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em}.jupyter .rendered_html *+ul{margin-top:1em}.jupyter .rendered_html *+ol{margin-top:1em}.jupyter .rendered_html hr{color:#000;background-color:#000}.jupyter .rendered_html pre{margin:1em 2em}.jupyter .rendered_html code,.jupyter .rendered_html pre{border:0;background-color:#fff;color:#000;font-size:100%;padding:0}.jupyter .rendered_html blockquote{margin:1em 2em}.jupyter .rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse}.jupyter .rendered_html td,.jupyter .rendered_html th,.jupyter .rendered_html tr{border:1px solid #000;border-collapse:collapse;margin:1em 2em}.jupyter .rendered_html td,.jupyter .rendered_html th{text-align:left;vertical-align:middle;padding:4px}.jupyter .rendered_html th{font-weight:700}.jupyter .rendered_html *+table{margin-top:1em}.jupyter .rendered_html p{text-align:left}.jupyter .rendered_html *+p{margin-top:1em}.jupyter .rendered_html img{display:block;margin-left:auto;margin-right:auto}.jupyter .rendered_html *+img{margin-top:1em}.jupyter .rendered_html img,.jupyter .rendered_html svg{max-width:100%;height:auto}.jupyter .rendered_html img.unconfined,.jupyter .rendered_html svg.unconfined{max-width:none}.jupyter div.text_cell{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){.jupyter div.text_cell>div.prompt{display:none}}.jupyter div.text_cell_render{outline:0;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.jupyter a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden}.jupyter h1:hover .anchor-link,.jupyter h2:hover .anchor-link,.jupyter h3:hover .anchor-link,.jupyter h4:hover .anchor-link,.jupyter h5:hover .anchor-link,.jupyter h6:hover .anchor-link{visibility:visible}.jupyter .text_cell.rendered .input_area{display:none}.jupyter .text_cell.rendered .rendered_html{overflow-x:auto}.jupyter .text_cell.unrendered .text_cell_render{display:none}.jupyter .cm-header-1,.jupyter .cm-header-2,.jupyter .cm-header-3,.jupyter .cm-header-4,.jupyter .cm-header-5,.jupyter .cm-header-6{font-weight:700;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.jupyter .cm-header-1{font-size:185.7%}.jupyter .cm-header-2{font-size:157.1%}.jupyter .cm-header-3{font-size:128.6%}.jupyter .cm-header-4{font-size:110%}.jupyter .cm-header-5{font-size:100%;font-style:italic}.jupyter .cm-header-6{font-size:100%;font-style:italic}@media (max-width:767px){.jupyter .notebook_app{padding-left:0;padding-right:0}}.jupyter #ipython-main-app{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}.jupyter div#notebook_panel{margin:0;padding:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}.jupyter div#notebook{font-size:14px;line-height:20px;overflow-y:hidden;overflow-x:auto;width:100%;padding-top:20px;margin:0;outline:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;min-height:100%}@media not print{.jupyter #notebook-container{padding:15px;background-color:#fff;min-height:0;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}@media print{.jupyter #notebook-container{width:100%}}.jupyter div.ui-widget-content{border:1px solid #ababab;outline:0}.jupyter pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:2px;padding:.4em;padding-left:2em}.jupyter p.dialog{padding:.2em}.jupyter code,.jupyter kbd,.jupyter pre,.jupyter samp{white-space:pre-wrap}.jupyter #fonttest{font-family:monospace}.jupyter p{margin-bottom:0}.jupyter .end_space{min-height:100px;transition:height .2s ease}.jupyter .notebook_app>#header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}@media not print{.jupyter .notebook_app{background-color:#EEE}}.jupyter kbd{border-style:solid;border-width:1px;box-shadow:none;margin:2px;padding-left:2px;padding-right:2px;padding-top:1px;padding-bottom:1px}.jupyter .celltoolbar{border:thin solid #CFCFCF;border-bottom:none;background:#EEE;border-radius:2px 2px 0 0;width:100%;height:29px;padding-right:4px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end;display:-webkit-flex}@media print{.jupyter .celltoolbar{display:none}}.jupyter .ctb_hideshow{display:none;vertical-align:bottom}.jupyter .ctb_global_show .ctb_show.ctb_hideshow{display:block}.jupyter .ctb_global_show .ctb_show+.input_area,.jupyter .ctb_global_show .ctb_show+div.text_cell_input,.jupyter .ctb_global_show .ctb_show~div.text_cell_render{border-top-right-radius:0;border-top-left-radius:0}.jupyter .ctb_global_show .ctb_show~div.text_cell_render{border:1px solid #cfcfcf}.jupyter .celltoolbar{font-size:87%;padding-top:3px}.jupyter .celltoolbar select{display:block;width:100%;height:32px;padding:6px 12px;font-size:13px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px;width:inherit;font-size:inherit;height:22px;padding:0;display:inline-block}.jupyter .celltoolbar select:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.jupyter .celltoolbar select::-moz-placeholder{color:#999;opacity:1}.jupyter .celltoolbar select:-ms-input-placeholder{color:#999}.jupyter .celltoolbar select::-webkit-input-placeholder{color:#999}.jupyter .celltoolbar select[disabled],.jupyter .celltoolbar select[readonly],fieldset[disabled] .jupyter .celltoolbar select{background-color:#eee;opacity:1}.jupyter .celltoolbar select[disabled],fieldset[disabled] .jupyter .celltoolbar select{cursor:not-allowed}textarea.jupyter .celltoolbar select{height:auto}select.jupyter .celltoolbar select{height:30px;line-height:30px}select[multiple].jupyter .celltoolbar select,textarea.jupyter .celltoolbar select{height:auto}.jupyter .celltoolbar label{margin-left:5px;margin-right:5px}.jupyter .completions{position:absolute;z-index:110;overflow:hidden;border:1px solid #ababab;border-radius:2px;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;line-height:1}.jupyter .completions select{background:#fff;outline:0;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000;width:auto}.jupyter .completions select option.context{color:#286090}.jupyter #kernel_logo_widget{float:right!important;float:right}.jupyter #kernel_logo_widget .current_kernel_logo{display:none;margin-top:-1px;margin-bottom:-1px;width:32px;height:32px}.jupyter #menubar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin-top:1px}.jupyter #menubar .navbar{border-top:1px;border-radius:0 0 2px 2px;margin-bottom:0}.jupyter #menubar .navbar-toggle{float:left;padding-top:7px;padding-bottom:7px;border:none}.jupyter #menubar .navbar-collapse{clear:left}.jupyter .nav-wrapper{border-bottom:1px solid #e7e7e7}.jupyter i.menu-icon{padding-top:4px}.jupyter ul#help_menu li a{overflow:hidden;padding-right:2.2em}.jupyter ul#help_menu li a i{margin-right:-1.2em}.jupyter .dropdown-submenu{position:relative}.jupyter .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.jupyter .dropdown-submenu:hover>.dropdown-menu{display:block}.jupyter .dropdown-submenu>a:after{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;content:"\f0da";float:right;color:#333;margin-top:2px;margin-right:-10px}.jupyter .dropdown-submenu>a:after.pull-left{margin-right:.3em}.jupyter .dropdown-submenu>a:after.pull-right{margin-left:.3em}.jupyter .dropdown-submenu:hover>a:after{color:#262626}.jupyter .dropdown-submenu.pull-left{float:none}.jupyter .dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.jupyter #notification_area{float:right!important;float:right;z-index:10}.jupyter .indicator_area{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;width:11px;z-index:10;text-align:center;width:auto}.jupyter #kernel_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;width:11px;z-index:10;text-align:center;width:auto;border-left:1px solid}.jupyter #kernel_indicator .kernel_indicator_name{padding-left:5px;padding-right:5px}.jupyter #modal_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;width:11px;z-index:10;text-align:center;width:auto}.jupyter #readonly-indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;width:11px;z-index:10;text-align:center;width:auto;margin-top:2px;margin-bottom:0;margin-left:0;margin-right:0;display:none}.jupyter .modal_indicator:before{width:1.28571429em;text-align:center}.jupyter .edit_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f040"}.jupyter .edit_mode .modal_indicator:before.pull-left{margin-right:.3em}.jupyter .edit_mode .modal_indicator:before.pull-right{margin-left:.3em}.jupyter .command_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:' '}.jupyter .command_mode .modal_indicator:before.pull-left{margin-right:.3em}.jupyter .command_mode .modal_indicator:before.pull-right{margin-left:.3em}.jupyter .kernel_idle_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f10c"}.jupyter .kernel_idle_icon:before.pull-left{margin-right:.3em}.jupyter .kernel_idle_icon:before.pull-right{margin-left:.3em}.jupyter .kernel_busy_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f111"}.jupyter .kernel_busy_icon:before.pull-left{margin-right:.3em}.jupyter .kernel_busy_icon:before.pull-right{margin-left:.3em}.jupyter .kernel_dead_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f1e2"}.jupyter .kernel_dead_icon:before.pull-left{margin-right:.3em}.jupyter .kernel_dead_icon:before.pull-right{margin-left:.3em}.jupyter .kernel_disconnected_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f127"}.jupyter .kernel_disconnected_icon:before.pull-left{margin-right:.3em}.jupyter .kernel_disconnected_icon:before.pull-right{margin-left:.3em}.jupyter .notification_widget{color:#777;z-index:10;background:rgba(240,240,240,.5);margin-right:4px;color:#333;background-color:#fff;border-color:#ccc}.jupyter .notification_widget.focus,.jupyter .notification_widget:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.jupyter .notification_widget:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter .notification_widget.active,.jupyter .notification_widget:active,.open>.dropdown-toggle.jupyter .notification_widget{color:#333;background-color:#e6e6e6;border-color:#adadad}.jupyter .notification_widget.active.focus,.jupyter .notification_widget.active:focus,.jupyter .notification_widget.active:hover,.jupyter .notification_widget:active.focus,.jupyter .notification_widget:active:focus,.jupyter .notification_widget:active:hover,.open>.dropdown-toggle.jupyter .notification_widget.focus,.open>.dropdown-toggle.jupyter .notification_widget:focus,.open>.dropdown-toggle.jupyter .notification_widget:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.jupyter .notification_widget.active,.jupyter .notification_widget:active,.open>.dropdown-toggle.jupyter .notification_widget{background-image:none}.jupyter .notification_widget.disabled,.jupyter .notification_widget.disabled.active,.jupyter .notification_widget.disabled.focus,.jupyter .notification_widget.disabled:active,.jupyter .notification_widget.disabled:focus,.jupyter .notification_widget.disabled:hover,.jupyter .notification_widget[disabled],.jupyter .notification_widget[disabled].active,.jupyter .notification_widget[disabled].focus,.jupyter .notification_widget[disabled]:active,.jupyter .notification_widget[disabled]:focus,.jupyter .notification_widget[disabled]:hover,fieldset[disabled] .jupyter .notification_widget,fieldset[disabled] .jupyter .notification_widget.active,fieldset[disabled] .jupyter .notification_widget.focus,fieldset[disabled] .jupyter .notification_widget:active,fieldset[disabled] .jupyter .notification_widget:focus,fieldset[disabled] .jupyter .notification_widget:hover{background-color:#fff;border-color:#ccc}.jupyter .notification_widget .badge{color:#fff;background-color:#333}.jupyter .notification_widget.warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.jupyter .notification_widget.warning.focus,.jupyter .notification_widget.warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.jupyter .notification_widget.warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.jupyter .notification_widget.warning.active,.jupyter .notification_widget.warning:active,.open>.dropdown-toggle.jupyter .notification_widget.warning{color:#fff;background-color:#ec971f;border-color:#d58512}.jupyter .notification_widget.warning.active.focus,.jupyter .notification_widget.warning.active:focus,.jupyter .notification_widget.warning.active:hover,.jupyter .notification_widget.warning:active.focus,.jupyter .notification_widget.warning:active:focus,.jupyter .notification_widget.warning:active:hover,.open>.dropdown-toggle.jupyter .notification_widget.warning.focus,.open>.dropdown-toggle.jupyter .notification_widget.warning:focus,.open>.dropdown-toggle.jupyter .notification_widget.warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.jupyter .notification_widget.warning.active,.jupyter .notification_widget.warning:active,.open>.dropdown-toggle.jupyter .notification_widget.warning{background-image:none}.jupyter .notification_widget.warning.disabled,.jupyter .notification_widget.warning.disabled.active,.jupyter .notification_widget.warning.disabled.focus,.jupyter .notification_widget.warning.disabled:active,.jupyter .notification_widget.warning.disabled:focus,.jupyter .notification_widget.warning.disabled:hover,.jupyter .notification_widget.warning[disabled],.jupyter .notification_widget.warning[disabled].active,.jupyter .notification_widget.warning[disabled].focus,.jupyter .notification_widget.warning[disabled]:active,.jupyter .notification_widget.warning[disabled]:focus,.jupyter .notification_widget.warning[disabled]:hover,fieldset[disabled] .jupyter .notification_widget.warning,fieldset[disabled] .jupyter .notification_widget.warning.active,fieldset[disabled] .jupyter .notification_widget.warning.focus,fieldset[disabled] .jupyter .notification_widget.warning:active,fieldset[disabled] .jupyter .notification_widget.warning:focus,fieldset[disabled] .jupyter .notification_widget.warning:hover{background-color:#f0ad4e;border-color:#eea236}.jupyter .notification_widget.warning .badge{color:#f0ad4e;background-color:#fff}.jupyter .notification_widget.success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.jupyter .notification_widget.success.focus,.jupyter .notification_widget.success:focus{color:#fff;background-color:#449d44;border-color:#255625}.jupyter .notification_widget.success:hover{color:#fff;background-color:#449d44;border-color:#398439}.jupyter .notification_widget.success.active,.jupyter .notification_widget.success:active,.open>.dropdown-toggle.jupyter .notification_widget.success{color:#fff;background-color:#449d44;border-color:#398439}.jupyter .notification_widget.success.active.focus,.jupyter .notification_widget.success.active:focus,.jupyter .notification_widget.success.active:hover,.jupyter .notification_widget.success:active.focus,.jupyter .notification_widget.success:active:focus,.jupyter .notification_widget.success:active:hover,.open>.dropdown-toggle.jupyter .notification_widget.success.focus,.open>.dropdown-toggle.jupyter .notification_widget.success:focus,.open>.dropdown-toggle.jupyter .notification_widget.success:hover{color:#fff;background-color:#398439;border-color:#255625}.jupyter .notification_widget.success.active,.jupyter .notification_widget.success:active,.open>.dropdown-toggle.jupyter .notification_widget.success{background-image:none}.jupyter .notification_widget.success.disabled,.jupyter .notification_widget.success.disabled.active,.jupyter .notification_widget.success.disabled.focus,.jupyter .notification_widget.success.disabled:active,.jupyter .notification_widget.success.disabled:focus,.jupyter .notification_widget.success.disabled:hover,.jupyter .notification_widget.success[disabled],.jupyter .notification_widget.success[disabled].active,.jupyter .notification_widget.success[disabled].focus,.jupyter .notification_widget.success[disabled]:active,.jupyter .notification_widget.success[disabled]:focus,.jupyter .notification_widget.success[disabled]:hover,fieldset[disabled] .jupyter .notification_widget.success,fieldset[disabled] .jupyter .notification_widget.success.active,fieldset[disabled] .jupyter .notification_widget.success.focus,fieldset[disabled] .jupyter .notification_widget.success:active,fieldset[disabled] .jupyter .notification_widget.success:focus,fieldset[disabled] .jupyter .notification_widget.success:hover{background-color:#5cb85c;border-color:#4cae4c}.jupyter .notification_widget.success .badge{color:#5cb85c;background-color:#fff}.jupyter .notification_widget.info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.jupyter .notification_widget.info.focus,.jupyter .notification_widget.info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.jupyter .notification_widget.info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.jupyter .notification_widget.info.active,.jupyter .notification_widget.info:active,.open>.dropdown-toggle.jupyter .notification_widget.info{color:#fff;background-color:#31b0d5;border-color:#269abc}.jupyter .notification_widget.info.active.focus,.jupyter .notification_widget.info.active:focus,.jupyter .notification_widget.info.active:hover,.jupyter .notification_widget.info:active.focus,.jupyter .notification_widget.info:active:focus,.jupyter .notification_widget.info:active:hover,.open>.dropdown-toggle.jupyter .notification_widget.info.focus,.open>.dropdown-toggle.jupyter .notification_widget.info:focus,.open>.dropdown-toggle.jupyter .notification_widget.info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.jupyter .notification_widget.info.active,.jupyter .notification_widget.info:active,.open>.dropdown-toggle.jupyter .notification_widget.info{background-image:none}.jupyter .notification_widget.info.disabled,.jupyter .notification_widget.info.disabled.active,.jupyter .notification_widget.info.disabled.focus,.jupyter .notification_widget.info.disabled:active,.jupyter .notification_widget.info.disabled:focus,.jupyter .notification_widget.info.disabled:hover,.jupyter .notification_widget.info[disabled],.jupyter .notification_widget.info[disabled].active,.jupyter .notification_widget.info[disabled].focus,.jupyter .notification_widget.info[disabled]:active,.jupyter .notification_widget.info[disabled]:focus,.jupyter .notification_widget.info[disabled]:hover,fieldset[disabled] .jupyter .notification_widget.info,fieldset[disabled] .jupyter .notification_widget.info.active,fieldset[disabled] .jupyter .notification_widget.info.focus,fieldset[disabled] .jupyter .notification_widget.info:active,fieldset[disabled] .jupyter .notification_widget.info:focus,fieldset[disabled] .jupyter .notification_widget.info:hover{background-color:#5bc0de;border-color:#46b8da}.jupyter .notification_widget.info .badge{color:#5bc0de;background-color:#fff}.jupyter .notification_widget.danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.jupyter .notification_widget.danger.focus,.jupyter .notification_widget.danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.jupyter .notification_widget.danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.jupyter .notification_widget.danger.active,.jupyter .notification_widget.danger:active,.open>.dropdown-toggle.jupyter .notification_widget.danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.jupyter .notification_widget.danger.active.focus,.jupyter .notification_widget.danger.active:focus,.jupyter .notification_widget.danger.active:hover,.jupyter .notification_widget.danger:active.focus,.jupyter .notification_widget.danger:active:focus,.jupyter .notification_widget.danger:active:hover,.open>.dropdown-toggle.jupyter .notification_widget.danger.focus,.open>.dropdown-toggle.jupyter .notification_widget.danger:focus,.open>.dropdown-toggle.jupyter .notification_widget.danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.jupyter .notification_widget.danger.active,.jupyter .notification_widget.danger:active,.open>.dropdown-toggle.jupyter .notification_widget.danger{background-image:none}.jupyter .notification_widget.danger.disabled,.jupyter .notification_widget.danger.disabled.active,.jupyter .notification_widget.danger.disabled.focus,.jupyter .notification_widget.danger.disabled:active,.jupyter .notification_widget.danger.disabled:focus,.jupyter .notification_widget.danger.disabled:hover,.jupyter .notification_widget.danger[disabled],.jupyter .notification_widget.danger[disabled].active,.jupyter .notification_widget.danger[disabled].focus,.jupyter .notification_widget.danger[disabled]:active,.jupyter .notification_widget.danger[disabled]:focus,.jupyter .notification_widget.danger[disabled]:hover,fieldset[disabled] .jupyter .notification_widget.danger,fieldset[disabled] .jupyter .notification_widget.danger.active,fieldset[disabled] .jupyter .notification_widget.danger.focus,fieldset[disabled] .jupyter .notification_widget.danger:active,fieldset[disabled] .jupyter .notification_widget.danger:focus,fieldset[disabled] .jupyter .notification_widget.danger:hover{background-color:#d9534f;border-color:#d43f3a}.jupyter .notification_widget.danger .badge{color:#d9534f;background-color:#fff}.jupyter div#pager{background-color:#fff;font-size:14px;line-height:20px;overflow:hidden;display:none;position:fixed;bottom:0;width:100%;max-height:50%;padding-top:8px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2);z-index:100;top:auto!important}.jupyter div#pager pre{line-height:1.21429em;color:#000;background-color:#f7f7f7;padding:.4em}.jupyter div#pager #pager-button-area{position:absolute;top:8px;right:20px}.jupyter div#pager #pager-contents{position:relative;overflow:auto;width:100%;height:100%}.jupyter div#pager #pager-contents #pager-container{position:relative;padding:15px 0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.jupyter div#pager .ui-resizable-handle{top:0;height:8px;background:#f7f7f7;border-top:1px solid #cfcfcf;border-bottom:1px solid #cfcfcf}.jupyter div#pager .ui-resizable-handle::after{content:'';top:2px;left:50%;height:3px;width:30px;margin-left:-15px;position:absolute;border-top:1px solid #cfcfcf}.jupyter .quickhelp{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;line-height:1.8em}.jupyter .shortcut_key{display:inline-block;width:20ex;text-align:right;font-family:monospace}.jupyter .shortcut_descr{display:inline-block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.jupyter span.save_widget{margin-top:6px}.jupyter span.save_widget span.filename{height:1em;line-height:1em;padding:3px;margin-left:16px;border:none;font-size:146.5%;border-radius:2px}.jupyter span.save_widget span.filename:hover{background-color:#e6e6e6}.jupyter span.autosave_status,.jupyter span.checkpoint_status{font-size:small}@media (max-width:767px){.jupyter span.save_widget{font-size:small}.jupyter span.autosave_status,.jupyter span.checkpoint_status{display:none}}@media (min-width:768px) and (max-width:991px){.jupyter span.checkpoint_status{display:none}.jupyter span.autosave_status{font-size:x-small}}.jupyter .toolbar{padding:0;margin-left:-5px;margin-top:2px;margin-bottom:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.jupyter .toolbar label,.jupyter .toolbar select{width:auto;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:0;padding-top:3px}.jupyter .toolbar .btn{padding:2px 8px}.jupyter .toolbar .btn-group{margin-top:0;margin-left:5px}.jupyter #maintoolbar{margin-bottom:-3px;margin-top:-8px;border:0;min-height:27px;margin-left:0;padding-top:11px;padding-bottom:3px}.jupyter #maintoolbar .navbar-text{float:none;vertical-align:middle;text-align:right;margin-left:5px;margin-right:0;margin-top:0}.jupyter .select-xs{height:24px}@-moz-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}.jupyter .bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:.5s;-moz-transition-property:height;-moz-transition-duration:.5s;transition-property:height;transition-duration:.5s}.jupyter .smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:.5s;-moz-transition-property:height;-moz-transition-duration:.5s;transition-property:height;transition-duration:.5s;text-overflow:ellipsis;overflow:hidden;height:80px}.jupyter .tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0}.jupyter .tooltiptext{padding-right:30px}.jupyter .ipython_tooltip{max-width:700px;-webkit-animation:fadeOut .4s;-moz-animation:fadeOut .4s;animation:fadeOut .4s;-webkit-animation:fadeIn .4s;-moz-animation:fadeIn .4s;animation:fadeIn .4s;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:0;padding:3px;margin:0;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:2px;position:absolute;z-index:1000}.jupyter .ipython_tooltip a{float:right}.jupyter .ipython_tooltip .tooltiptext pre{border:0;border-radius:0;font-size:100%;background-color:#f7f7f7}.jupyter .pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute}.jupyter .pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.jupyter ul.typeahead-list i{margin-left:-10px;width:18px}.jupyter ul.typeahead-list{max-height:80vh;overflow:auto}.jupyter .cmd-palette .modal-body{padding:7px}.jupyter .cmd-palette form{background:#fff}.jupyter .cmd-palette input{outline:0}.jupyter .no-shortcut{display:none}.jupyter .command-shortcut:before{content:"(command)";padding-right:3px;color:#777}.jupyter .edit-shortcut:before{content:"(edit)";padding-right:3px;color:#777}.jupyter #find-and-replace #replace-preview .insert,.jupyter #find-and-replace #replace-preview .match{background-color:#add8e6;border-color:#5fb3ce;border-style:solid;border-width:1px;border-radius:2px}.jupyter #find-and-replace #replace-preview .replace .match{background-color:salmon;text-decoration:line-through;border-color:#f7270f}.jupyter #find-and-replace #replace-preview .replace .insert{background-color:green;background-color:#90ee90;border-color:#38e038}.jupyter #find-and-replace #replace-preview{max-height:60vh;overflow:auto}.jupyter #find-and-replace input:last-child{border-left:none}.jupyter .terminal-app{background:#EEE}.jupyter .terminal-app #header{background:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.jupyter .terminal-app .terminal{float:left;font-family:monospace;color:#fff;background:#000;padding:.4em;border-radius:2px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.4);box-shadow:0 0 12px 1px rgba(87,87,87,.4)}.jupyter .terminal-app .terminal,.jupyter .terminal-app .terminal dummy-screen{line-height:1em;font-size:14px}.jupyter .terminal-app .terminal-cursor{color:#000;background:#fff}.jupyter .terminal-app #terminado-container{margin-top:20px} \ No newline at end of file diff --git a/2.7.0-dev0/_static/css/msmb.css b/2.7.0-dev0/_static/css/msmb.css new file mode 100644 index 0000000000..23b82afb52 --- /dev/null +++ b/2.7.0-dev0/_static/css/msmb.css @@ -0,0 +1,27 @@ +@import 'theme.css'; +@import 'jupyter.min.css'; + +.wy-side-nav-search { + background-color: #ffffff; +} + +.wy-side-nav-search > div.version { + color: rgba(0, 0, 0, 0.74); +} + +.wy-table-responsive table td { + white-space: normal; +} + +.rst-content .align-right { + width: 300px; +} + +.rst-content p.caption { + font-size: 100%; + font-weight: unset; +} + +.rst-content .section ol li { + margin-bottom: 0.3em; +} diff --git a/2.7.0-dev0/_static/css/theme.css b/2.7.0-dev0/_static/css/theme.css new file mode 100644 index 0000000000..19a446a0e7 --- /dev/null +++ b/2.7.0-dev0/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/2.7.0-dev0/_static/custom.css b/2.7.0-dev0/_static/custom.css new file mode 100644 index 0000000000..480aa325f0 --- /dev/null +++ b/2.7.0-dev0/_static/custom.css @@ -0,0 +1,206 @@ +/* override css for readable.css */ + +/* styles/fonts to match http://mdanalysis.org (see public/css) */ +/* MDAnalysis orange: #FF9200 */ +/* MDAnalysis gray: #808080 */ +/* MDAnalysis white: #FFFFFF */ +/* MDAnalysis black: #000000 */ +/* Darker orange: e76900 */ +/* Even darker orange: #a24900 */ +/* RTD dark grey: #343131 */ +/* RTD light grey: #e6e6e6 */ + +/* -- page layout --------------------------------------------------------- */ + +body { + font-family: 'PT Sans', Helvetica, Arial, 'sans-serif'; + font-size: 17px; +} + +div.body { + color: #000000; +} + +div.sphinxsidebar a:hover { + text-decoration: none !important; +} + +div.sphinxsidebar p { + color: #808080; +} + +/* Home MDAnalysis colour */ +.wy-side-nav-search > a { + color: #343131; +} + +/* Side MDAnalysis version colour */ +.wy-side-nav-search > div.version { + color: #808080; +} + +/* Menubar caption colour */ +div.wy-menu-vertical span.caption-text { + color: #FF9200; +} + +/* Mobile layout menubar option */ +nav.wy-nav-top { + background: #343131; +} + +/* Menu search bar outline (default blue) */ +.wy-side-nav-search input[type="text"] { + border-color: #808080; +} + + +/* -- body styles --------------------------------------------------------- */ + +/* Different coloured links for sidebar vs body) */ +div.rst-content a { + color: #FF9200; + text-decoration: none; +} + +div.rst-content a:visited { + color: #FF9200; +} + +a:hover { + color: #FF9200 !important; + text-decoration: underline; +} + + +pre, tt, code { + font-family: Menlo, Monaco, 'Courier New', monospace +} + + +div.body h1 { + font-weight: bolder; +} + +a.headerlink { + color: #808080; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #808080; + color: #fff; +} + +/* ------- admonition boxes ------- */ + +div.admonition { + margin: 10px 0px; + padding: 10px 10px; +} + +div.admonition p.admonition-title { + font-size: 100%; + font-weight: bolder; +} + +/* ----- Tables ----- */ + +/* override table width restrictions */ +/* wrap tables instead of scrolling */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td, .wy-table-responsive table th { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + .wy-table-responsive { + overflow: visible !important; + max-width: 100% !important; + } + } + +/* ----- Field lists ------ */ + +.section > dl.field-list { + display: flex; + flex-wrap: wrap; + margin: 0; + padding: 0; +} + +dl.field-list > dt::after { + content: ":"; +} + +.rst-content dl:not(.docutils) dt { + background: none; + color: #000000; + border-top: none; +} + +.section > dl.field-list dt { + margin: 0; + padding: 0; + flex-basis: 20%; + display: block; +} + +.section > dl.field-list > dd { + flex-basis: 70%; + margin: 0; +} + +.section > dl.field-list > dd p { + margin: 0; +} + +/* ----- MDAnalysis coloured elements ------ */ + +.rst-content dl.class dt, .rst-content dl.function dt { + color: #ca6500; + background: #FFEBD0; + border-top: solid 3px #FF9200; +} + +.rst-content .viewcode-link, .rst-content .viewcode-back { + color: #808080; +} + +.rst-content .guilabel { + background: #efefef; + border: 1px solid #808080; +} + + +.rst-content .seealso p.admonition-title { + background: #808080; +} + +.rst-content .seealso { + background: #e3e3e3; +} + +.rst-content .error p.admonition-title, .rst-content .warning p.admonition-title { + background: #F45F4B; +} + +.rst-content .error, .rst-content .warning { + background: #FFEEED; +} + +.rst-content .caution p.admonition-title, .rst-content .note p.admonition-title, .rst-content .important p.admonition-title { + background: #FF9200; +} + +.rst-content .caution, .rst-content .note, .rst-content .important { + background: #FFEBD0; +} + +.rst-content code:not(.xref).literal { + color: #ca6500; +} \ No newline at end of file diff --git a/2.7.0-dev0/_static/doctools.js b/2.7.0-dev0/_static/doctools.js new file mode 100644 index 0000000000..527b876ca6 --- /dev/null +++ b/2.7.0-dev0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/2.7.0-dev0/_static/documentation_options.js b/2.7.0-dev0/_static/documentation_options.js new file mode 100644 index 0000000000..8e4a626664 --- /dev/null +++ b/2.7.0-dev0/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '2.7.0-dev0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/2.7.0-dev0/_static/file.png b/2.7.0-dev0/_static/file.png new file mode 100644 index 0000000000..a858a410e4 Binary files /dev/null and b/2.7.0-dev0/_static/file.png differ diff --git a/2.7.0-dev0/_static/jquery-3.6.0.js b/2.7.0-dev0/_static/jquery-3.6.0.js new file mode 100644 index 0000000000..fc6c299b73 --- /dev/null +++ b/2.7.0-dev0/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.1. Coordinate fitting and alignment — MDAnalysis.analysis.align

+
+
Author
+

Oliver Beckstein, Joshua Adelman

+
+
Year
+

2010–2013

+
+
Copyright
+

GNU Public License v3

+
+
+

The module contains functions to fit a target structure to a reference +structure. They use the fast QCP algorithm to calculate the root mean +square distance (RMSD) between two coordinate sets [Theobald2005] and +the rotation matrix R that minimizes the RMSD [Liu2010]. (Please +cite these references when using this module.).

+

Typically, one selects a group of atoms (such as the C-alphas), +calculates the RMSD and transformation matrix, and applys the +transformation to the current frame of a trajectory to obtain the +rotated structure. The alignto() and AlignTraj +functions can be used to do this for individual frames and +trajectories respectively.

+

The RMS-fitting tutorial shows how to do the individual steps +manually and explains the intermediate steps.

+
+

See also

+
+
MDAnalysis.analysis.rms

contains functions to compute RMSD (when structural alignment is not required)

+
+
MDAnalysis.lib.qcprot

implements the fast RMSD algorithm.

+
+
+
+
+

4.2.1.1. RMS-fitting tutorial

+

The example uses files provided as part of the MDAnalysis test suite +(in the variables PSF, +DCD, and +PDB_small). For all further +examples execute first

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.analysis import align
+>>> from MDAnalysis.analysis.rms import rmsd
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, PDB_small
+
+
+

In the simplest case, we can simply calculate the C-alpha RMSD between +two structures, using rmsd():

+
>>> ref = mda.Universe(PDB_small)
+>>> mobile = mda.Universe(PSF, DCD)
+>>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions)
+28.20178579474479
+
+
+

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:

+
>>> 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.

+
>>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions,
+...      superposition=True)
+6.809396586471815
+
+
+

The rotation matrix that superimposes mobile on ref while +minimizing the CA-RMSD is obtained with the rotation_matrix() +function

+
>>> mobile0 = mobile.select_atoms('name CA').positions - mobile.select_atoms('name CA').center_of_mass()
+>>> ref0 = ref.select_atoms('name CA').positions - ref.select_atoms('name CA').center_of_mass()
+>>> R, rmsd = align.rotation_matrix(mobile0, ref0)
+>>> rmsd
+6.809396586471805
+>>> R
+array([[ 0.14514539, -0.27259113,  0.95111876],
+...    [ 0.88652593,  0.46267112, -0.00268642],
+...    [-0.43932289,  0.84358136,  0.30881368]])
+
+
+

Putting all this together one can superimpose all of mobile onto ref:

+
>>> mobile.atoms.translate(-mobile.select_atoms('name CA').center_of_mass())
+<AtomGroup with 3341 atoms>
+>>> mobile.atoms.rotate(R)
+<AtomGroup with 3341 atoms>
+>>> mobile.atoms.translate(ref.select_atoms('name CA').center_of_mass())
+<AtomGroup with 3341 atoms>
+>>> mobile.atoms.write("mobile_on_ref.pdb")
+
+
+
+
+

4.2.1.2. Common usage

+

To fit a single structure with alignto():

+
>>> ref = mda.Universe(PSF, PDB_small)
+>>> mobile = mda.Universe(PSF, DCD)     # we use the first frame
+>>> align.alignto(mobile, ref, select="protein and name CA", weights="mass")
+(21.892591663632704, 6.809396586471809)
+
+
+

This will change all coordinates in mobile so that the protein +C-alpha atoms are optimally superimposed (translation and rotation).

+

To fit a whole trajectory to a reference structure with the +AlignTraj class:

+
>>> ref = mda.Universe(PSF, PDB_small)   # reference structure 1AKE
+>>> trj = mda.Universe(PSF, DCD)         # trajectory of change 1AKE->4AKE
+>>> alignment = align.AlignTraj(trj, ref, filename='rmsfit.dcd')
+>>> alignment.run()
+<MDAnalysis.analysis.align.AlignTraj object at ...>
+
+
+

It is also possible to align two arbitrary structures by providing a +mapping between atoms based on a sequence alignment. This allows +fitting of structural homologs or wild type and mutant.

+

If a alignment was provided as “sequences.aln” one would first produce +the appropriate MDAnalysis selections with the fasta2select() +function and then feed the resulting dictionary to AlignTraj:

+
>>> seldict = align.fasta2select('sequences.aln') 
+>>> alignment = align.AlignTraj(trj, ref, filename='rmsfit.dcd', select=seldict) 
+>>> alignment.run() 
+
+
+

(See the documentation of the functions for this advanced usage.)

+
+
+

4.2.1.3. Functions and Classes

+
+

Changed in version 0.10.0: Function rmsd() was removed from +this module and is now exclusively accessible as +rmsd().

+
+
+

Changed in version 0.16.0: Function rms_fit_trj() deprecated +in favor of AlignTraj class.

+
+
+

Changed in version 0.17.0: removed deprecated rms_fit_trj()

+
+
+
+MDAnalysis.analysis.align.alignto(mobile, reference, select=None, weights=None, subselection=None, tol_mass=0.1, strict=False, match_atoms=True)[source]
+

Perform a spatial superposition by minimizing the RMSD.

+

Spatially align the group of atoms mobile to reference by +doing a RMSD fit on select atoms.

+

The superposition is done in the following way:

+
    +
  1. A rotation matrix is computed that minimizes the RMSD between +the coordinates of mobile.select_atoms(sel1) and +reference.select_atoms(sel2); before the rotation, mobile is +translated so that its center of geometry (or center of mass) +coincides with the one of reference. (See below for explanation of +how sel1 and sel2 are derived from select.)

  2. +
  3. All atoms in Universe that +contain mobile are shifted and rotated. (See below for how +to change this behavior through the subselection keyword.)

  4. +
+

The mobile and reference atom groups can be constructed so that they +already match atom by atom. In this case, select should be set to “all” +(or None) so that no further selections are applied to mobile and +reference, therefore preserving the exact atom ordering (see +Ordered selections).

+
+

Warning

+

The atom order for mobile and reference is only +preserved when select is either “all” or None. In any other case, +a new selection will be made that will sort the resulting AtomGroup by +index and therefore destroy the correspondence between the two groups. +It is safest not to mix ordered AtomGroups with selection strings.

+
+
+
Parameters
+
    +
  • mobile (Universe or AtomGroup) – structure to be aligned, a +AtomGroup or a whole +Universe

  • +
  • reference (Universe or AtomGroup) – reference structure, a AtomGroup +or a whole Universe

  • +
  • select (str or dict or tuple (optional)) –

    The selection to operate on; can be one of:

    +
      +
    1. any valid selection string for +select_atoms() that +produces identical selections in mobile and reference; or

    2. +
    3. a dictionary {'mobile': sel1, 'reference': sel2} where sel1 +and sel2 are valid selection strings that are applied to +mobile and reference respectively (the +MDAnalysis.analysis.align.fasta2select() function returns such +a dictionary based on a ClustalW or STAMP sequence alignment); or

    4. +
    5. a tuple (sel1, sel2)

    6. +
    +

    When using 2. or 3. with sel1 and sel2 then these selection strings +are applied to atomgroup and reference respectively and should +generate groups of equivalent atoms. sel1 and sel2 can each also +be a list of selection strings to generate a +AtomGroup with defined atom order as +described under Ordered selections).

    +

  • +
  • match_atoms (bool (optional)) – Whether to match the mobile and reference atom-by-atom. Default True.

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses as weights; with None +weigh each atom equally. If a float array of the same length as +mobile is provided, use each element of the array_like as a +weight for the corresponding atom in mobile.

  • +
  • tol_mass (float (optional)) – Reject match if the atomic masses for matched atoms differ by more than +tol_mass, default [0.1]

  • +
  • strict (bool (optional)) –

    +
    True

    Will raise SelectionError if a single atom does not +match between the two selections.

    +
    +
    False [default]

    Will try to prepare a matching selection by dropping +residues with non-matching atoms. See get_matching_atoms() +for details.

    +
    +
    +

  • +
  • subselection (str or AtomGroup or None (optional)) –

    Apply the transformation only to this selection.

    +
    +
    None [default]

    Apply to mobile.universe.atoms (i.e., all atoms in the +context of the selection from mobile such as the rest of a +protein, ligands and the surrounding water)

    +
    +
    selection-string

    Apply to mobile.select_atoms(selection-string)

    +
    +
    AtomGroup

    Apply to the arbitrary group of atoms

    +
    +
    +

  • +
+
+
Returns
+

    +
  • old_rmsd (float) – RMSD before spatial alignment

  • +
  • new_rmsd (float) – RMSD after spatial alignment

  • +
+

+
+
+
+

See also

+
+
AlignTraj

More efficient method for RMSD-fitting trajectories.

+
+
+
+
+

Changed in version 1.0.0: Added match_atoms keyword to toggle atom matching.

+
+
+

Changed in version 0.8: Added check that the two groups describe the same atoms including +the new tol_mass keyword.

+
+
+

Changed in version 0.10.0: Uses get_matching_atoms() to work with incomplete selections +and new strict keyword. The new default is to be lenient whereas +the old behavior was the equivalent of strict = True.

+
+
+

Changed in version 0.16.0: new general ‘weights’ kwarg replace mass_weighted, deprecated mass_weighted

+
+
+

Deprecated since version 0.16.0: Instead of mass_weighted=True use new weights='mass'

+
+
+

Changed in version 0.17.0: Deprecated keyword mass_weighted was removed.

+
+
+ +
+
+class MDAnalysis.analysis.align.AlignTraj(mobile, reference, select='all', filename=None, prefix='rmsfit_', weights=None, tol_mass=0.1, match_atoms=True, strict=False, force=True, in_memory=False, **kwargs)[source]
+

RMS-align trajectory to a reference structure using a selection.

+

Both the reference reference and the trajectory mobile must be +MDAnalysis.Universe instances. If they contain a trajectory then +it is used. The output file format is determined by the file extension of +filename. One can also use the same universe if one wants to fit to the +current frame.

+
+

Changed in version 1.0.0: save() has now been removed, as an alternative use np.savetxt() +on results.rmsd.

+
+
+
Parameters
+
    +
  • mobile (Universe) – Universe containing trajectory to be fitted to reference

  • +
  • reference (Universe) – Universe containing trajectory frame to be used as reference

  • +
  • select (str (optional)) – Set as default to all, is used for Universe.select_atoms to choose +subdomain to be fitted against

  • +
  • filename (str (optional)) – Provide a filename for results to be written to

  • +
  • prefix (str (optional)) – Provide a string to prepend to filename for results to be written +to

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses of reference as +weights; with None weigh each atom equally. If a float array of +the same length as the selection is provided, use each element of +the array_like as a weight for the corresponding atom in the +selection.

  • +
  • tol_mass (float (optional)) – Tolerance given to get_matching_atoms to find appropriate atoms

  • +
  • match_atoms (bool (optional)) – Whether to match the mobile and reference atom-by-atom. Default True.

  • +
  • strict (bool (optional)) – Force get_matching_atoms to fail if atoms can’t be found using +exact methods

  • +
  • force (bool (optional)) – Force overwrite of filename for rmsd-fitting

  • +
  • in_memory (bool (optional)) – Permanently switch mobile to an in-memory trajectory +so that alignment can be done in-place, which can improve +performance substantially in some cases. In this case, no file +is written out (filename and prefix are ignored) and only +the coordinates of mobile are changed in memory.

  • +
  • verbose (bool (optional)) – Set logger to show more information and show detailed progress of +the calculation if set to True; the default is False.

  • +
+
+
+
+
+reference_atoms
+

Atoms of the reference structure to be aligned against

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+mobile_atoms
+

Atoms inside each trajectory frame to be rmsd_aligned

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+results.rmsd
+

Array of the rmsd values of the least rmsd between the mobile_atoms +and reference_atoms after superposition and minimimization of rmsd

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+rmsd
+

Alias to the results.rmsd attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.rmsd instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+filename
+

String reflecting the filename of the file where the aligned +positions will be written to upon running RMSD alignment

+
+
Type
+

str

+
+
+
+ +

Notes

+
    +
  • If set to verbose=False, it is recommended to wrap the statement +in a try ...  finally to guarantee restoring of the log level in +the case of an exception.

  • +
  • The in_memory option changes the mobile universe to an +in-memory representation (see MDAnalysis.coordinates.memory) +for the remainder of the Python session. If mobile.trajectory is +already a MemoryReader then it is always treated as if +in_memory had been set to True.

  • +
+
+

Changed in version 1.0.0: Default filename has now been changed to the current directory.

+
+
+

Deprecated since version 0.19.1: Default filename directory will change in 1.0 to the current directory.

+
+
+

Changed in version 0.16.0: new general weights kwarg replace mass_weights

+
+
+

Deprecated since version 0.16.0: Instead of mass_weighted=True use new weights='mass'

+
+
+

Changed in version 0.17.0: removed deprecated mass_weighted keyword

+
+
+

Changed in version 1.0.0: Support for the start, stop, and step keywords has been +removed. These should instead be passed to AlignTraj.run().

+
+
+

Changed in version 2.0.0: rmsd results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+ +
+
+class MDAnalysis.analysis.align.AverageStructure(mobile, reference=None, select='all', filename=None, weights=None, tol_mass=0.1, match_atoms=True, strict=False, force=True, in_memory=False, ref_frame=0, **kwargs)[source]
+

RMS-align trajectory to a reference structure using a selection, +and calculate the average coordinates of the trajectory.

+

Both the reference reference and the trajectory mobile must be +MDAnalysis.Universe instances. If they contain a trajectory, then +it is used. You can also use the same universe if you want to fit to the +current frame.

+

The output file format is determined by the file extension of +filename.

+

Example

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PSF, DCD
+from MDAnalysis.analysis import align
+
+u = mda.Universe(PSF, DCD)
+
+# align to the third frame and average structure
+av = align.AverageStructure(u, ref_frame=3).run()
+averaged_universe = av.results.universe
+
+
+
+
Parameters
+
    +
  • mobile (Universe) – Universe containing trajectory to be fitted to reference

  • +
  • reference (Universe (optional)) – Universe containing trajectory frame to be used as reference

  • +
  • select (str (optional)) – Set as default to all, is used for Universe.select_atoms to choose +subdomain to be fitted against

  • +
  • filename (str (optional)) – Provide a filename for results to be written to

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses of reference as +weights; with None weigh each atom equally. If a float array of +the same length as the selection is provided, use each element of +the array_like as a weight for the corresponding atom in the +selection.

  • +
  • tol_mass (float (optional)) – Tolerance given to get_matching_atoms to find appropriate atoms

  • +
  • match_atoms (bool (optional)) – Whether to match the mobile and reference atom-by-atom. Default True.

  • +
  • strict (bool (optional)) – Force get_matching_atoms to fail if atoms can’t be found using +exact methods

  • +
  • force (bool (optional)) – Force overwrite of filename for rmsd-fitting

  • +
  • in_memory (bool (optional)) – Permanently switch mobile to an in-memory trajectory +so that alignment can be done in-place, which can improve +performance substantially in some cases. In this case, no file +is written out (filename and prefix are ignored) and only +the coordinates of mobile are changed in memory.

  • +
  • ref_frame (int (optional)) – frame index to select frame from reference

  • +
  • verbose (bool (optional)) – Set logger to show more information and show detailed progress of +the calculation if set to True; the default is False.

  • +
+
+
+
+
+reference_atoms
+

Atoms of the reference structure to be aligned against

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+mobile_atoms
+

Atoms inside each trajectory frame to be rmsd_aligned

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+results.universe
+

New Universe with average positions

+
+

New in version 2.0.0.

+
+
+
Type
+

MDAnalysis.Universe

+
+
+
+ +
+
+universe
+

Alias to the results.universe attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.universe instead.

+
+
+
Type
+

MDAnalysis.Universe

+
+
+
+ +
+
+results.positions
+

Average positions

+
+

New in version 2.0.0.

+
+
+
Type
+

np.ndarray(dtype=float)

+
+
+
+ +
+
+positions
+

Alias to the results.positions attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.positions instead.

+
+
+
Type
+

np.ndarray(dtype=float)

+
+
+
+ +
+
+results.rmsd
+

Average RMSD per frame

+
+

New in version 2.0.0.

+
+
+
Type
+

float

+
+
+
+ +
+
+rmsd
+

Alias to the results.rmsd attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.rmsd instead.

+
+
+
Type
+

float

+
+
+
+ +
+
+filename
+

String reflecting the filename of the file where the average +structure is written

+
+
Type
+

str

+
+
+
+ +

Notes

+
    +
  • If set to verbose=False, it is recommended to wrap the statement +in a try ...  finally to guarantee restoring of the log level in +the case of an exception.

  • +
  • The in_memory option changes the mobile universe to an +in-memory representation (see MDAnalysis.coordinates.memory) +for the remainder of the Python session. If mobile.trajectory is +already a MemoryReader then it is always treated as if +in_memory had been set to True.

  • +
+
+

New in version 1.0.0.

+
+
+

Changed in version 2.0.0: universe, positions, and rmsd are now +stored in a MDAnalysis.analysis.base.Results instance.

+
+
+ +
+
+MDAnalysis.analysis.align.rotation_matrix(a, b, weights=None)[source]
+

Returns the 3x3 rotation matrix R for RMSD fitting coordinate +sets a and b.

+

The rotation matrix R transforms vector a to overlap with +vector b (i.e., b is the reference structure):

+
+\[\mathbf{b} = \mathsf{R} \cdot \mathbf{a}\]
+
+
Parameters
+
    +
  • a (array_like) – coordinates that are to be rotated (“mobile set”); array of N atoms +of shape N*3 as generated by, e.g., +MDAnalysis.core.groups.AtomGroup.positions.

  • +
  • b (array_like) – reference coordinates; array of N atoms of shape N*3 as generated by, +e.g., MDAnalysis.core.groups.AtomGroup.positions.

  • +
  • weights (array_like (optional)) – array of floats of size N for doing weighted RMSD fitting (e.g. the +masses of the atoms)

  • +
+
+
Returns
+

    +
  • R (ndarray) – rotation matrix

  • +
  • rmsd (float) – RMSD between a and b before rotation

  • +
  • (R, rmsd) rmsd and rotation matrix R

  • +
+

+
+
+

Example

+

R can be used as an argument for +MDAnalysis.core.groups.AtomGroup.rotate() to generate a rotated +selection, e.g.

+
>>> from MDAnalysisTests.datafiles import TPR, TRR
+>>> from MDAnalysis.analysis import align
+>>> A = mda.Universe(TPR,TRR)
+>>> B = A.copy()
+>>> R = rotation_matrix(A.select_atoms('backbone').positions,
+...                     B.select_atoms('backbone').positions)[0]
+>>> A.atoms.rotate(R)
+<AtomGroup with 47681 atoms>
+>>> A.atoms.write("rotated.pdb")
+
+
+

Notes

+

The function does not shift the centers of mass or geometry; +this needs to be done by the user.

+
+

See also

+
+
MDAnalysis.analysis.rms.rmsd

Calculates the RMSD between a and b.

+
+
alignto

A complete fit of two structures.

+
+
AlignTraj

Fit a whole trajectory.

+
+
+
+
+ +
+
+

4.2.1.4. Helper functions

+

The following functions are used by the other functions in this +module. They are probably of more interest to developers than to +normal users.

+
+
+MDAnalysis.analysis.align._fit_to(mobile_coordinates, ref_coordinates, mobile_atoms, mobile_com, ref_com, weights=None)[source]
+

Perform an rmsd-fitting to determine rotation matrix and align atoms

+
+
Parameters
+
    +
  • mobile_coordinates (ndarray) – Coordinates of atoms to be aligned

  • +
  • ref_coordinates (ndarray) – Coordinates of atoms to be fit against

  • +
  • mobile_atoms (AtomGroup) – Atoms to be translated

  • +
  • mobile_com (ndarray) – array of xyz coordinate of mobile center of mass

  • +
  • ref_com (ndarray) – array of xyz coordinate of reference center of mass

  • +
  • weights (array_like (optional)) – choose weights. With None weigh each atom equally. If a float array +of the same length as mobile_coordinates is provided, use each element +of the array_like as a weight for the corresponding atom in +mobile_coordinates.

  • +
+
+
Returns
+

    +
  • mobile_atoms (AtomGroup) – AtomGroup of translated and rotated atoms

  • +
  • min_rmsd (float) – Minimum rmsd of coordinates

  • +
+

+
+
+

Notes

+

This function assumes that mobile_coordinates and ref_coordinates have +already been shifted so that their centers of geometry (or centers of mass, +depending on weights) coincide at the origin. mobile_com and ref_com +are the centers before this shift.

+
    +
  1. The rotation matrix \(\mathsf{R}\) is determined with +rotation_matrix() directly from mobile_coordinates and +ref_coordinates.

  2. +
  3. mobile_atoms \(X\) is rotated according to the +rotation matrix and the centers according to

    +
    +\[X' = \mathsf{R}(X - \bar{X}) + \bar{X}_{\text{ref}}\]
    +

    where \(\bar{X}\) is the center.

    +
  4. +
+
+ +
+
+MDAnalysis.analysis.align.fasta2select(fastafilename, is_aligned=False, ref_resids=None, target_resids=None, ref_offset=0, target_offset=0, verbosity=3, alnfilename=None, treefilename=None, clustalw='clustalw2')[source]
+

Return selection strings that will select equivalent residues.

+

The function aligns two sequences provided in a FASTA file and +constructs MDAnalysis selection strings of the common atoms. When +these two strings are applied to the two different proteins they +will generate AtomGroups of the aligned residues.

+

fastafilename contains the two un-aligned sequences in FASTA +format. The reference is assumed to be the first sequence, the +target the second. ClustalW produces a pairwise +alignment (which is written to a file with suffix .aln). The +output contains atom selection strings that select the same atoms +in the two structures.

+

Unless ref_offset and/or target_offset are specified, the resids +in the structure are assumed to correspond to the positions in the +un-aligned sequence, namely the first residue has resid == 1.

+

In more complicated cases (e.g., when the resid numbering in the +input structure has gaps due to missing parts), simply provide the +sequence of resids as they appear in the topology in ref_resids or +target_resids, e.g.

+
target_resids = [a.resid for a in trj.select_atoms('name CA')]
+
+
+

(This translation table is combined with any value for +ref_offset or target_offset!)

+
+
Parameters
+
    +
  • fastafilename (str, path to filename) – FASTA file with first sequence as reference and +second the one to be aligned (ORDER IS IMPORTANT!)

  • +
  • is_aligned (bool (optional)) –

    +
    False (default)

    run clustalw for sequence alignment;

    +
    +
    True

    use the alignment in the file (e.g. from STAMP) [False]

    +
    +
    +

  • +
  • ref_offset (int (optional)) – add this number to the column number in the FASTA file +to get the original residue number, default: 0

  • +
  • target_offset (int (optional)) – add this number to the column number in the FASTA file +to get the original residue number, default: 0

  • +
  • ref_resids (str (optional)) – sequence of resids as they appear in the reference structure

  • +
  • target_resids (str (optional)) – sequence of resids as they appear in the target

  • +
  • alnfilename (str (optional)) – filename of ClustalW alignment (clustal format) that is +produced by clustalw when is_aligned = False. +default None uses the name and path of fastafilename and +substitutes the suffix with ‘.aln’.

  • +
  • treefilename (str (optional)) – filename of ClustalW guide tree (Newick format); +if default None the the filename is generated from alnfilename +with the suffix ‘.dnd’ instead of ‘.aln’

  • +
  • clustalw (str (optional)) – path to the ClustalW (or ClustalW2) binary; only +needed for is_aligned = False, default: “ClustalW2”

  • +
+
+
Returns
+

select_dict – dictionary with ‘reference’ and ‘mobile’ selection string +that can be used immediately in AlignTraj as +select=select_dict.

+
+
Return type
+

dict

+
+
+
+

See also

+

sequence_alignment(), which, programs.

+
+
+

Changed in version 1.0.0: Passing alnfilename or treefilename as None will create a file in +the current working directory.

+
+
+ +
+
+MDAnalysis.analysis.align.sequence_alignment(*args, **kwds)
+

sequence_alignment is deprecated!

+

Generate a global sequence alignment between two residue groups.

+

The residues in reference and mobile will be globally aligned. +The global alignment uses the Needleman-Wunsch algorithm as +implemented in Bio.Align.PairwiseAligner. The parameters of the dynamic +programming algorithm can be tuned with the keywords. The defaults +should be suitable for two similar sequences. For sequences with +low sequence identity, more specialized tools such as clustalw, +muscle, tcoffee, or similar should be used.

+
+
Parameters
+
    +
  • mobile (AtomGroup) – Atom group to be aligned

  • +
  • reference (AtomGroup) – Atom group to be aligned against

  • +
  • match_score (float (optional), default 2) – score for matching residues, default 2

  • +
  • mismatch_penalty (float (optional), default -1) – penalty for residues that do not match , default : -1

  • +
  • gap_penalty (float (optional), default -2) – penalty for opening a gap; the high default value creates compact +alignments for highly identical sequences but might not be suitable +for sequences with low identity, default : -2

  • +
  • gapextension_penalty (float (optional), default -0.1) – penalty for extending a gap, default: -0.1

  • +
+
+
Returns
+

alignment – Tuple of top sequence matching output (‘Sequence A’, ‘Sequence B’, score, +begin, end)

+
+
Return type
+

tuple

+
+
+

Notes

+

If you prefer to work directly with Bio.Align objects then you can +run your alignment with Bio.Alig.PairwiseAligner as

+
import Bio.Align.PairwiseAligner
+
+aligner = Bio.Align.PairwiseAligner(
+   mode="global",
+   match_score=match_score,
+   mismatch_score=mismatch_penalty,
+   open_gap_score=gap_penalty,
+   extend_gap_score=gapextension_penalty)
+aln = aligner.align(reference.residues.sequence(format="Seq"),
+                    mobile.residues.sequence(format="Seq"))
+
+# choose top alignment with highest score
+topalignment = aln[0]
+
+
+

The topalignment is a Bio.Align.PairwiseAlignment instance +that can be used in your bioinformatics workflows.

+
+

See also

+

BioPython documentation for PairwiseAligner. Alternatively, use +fasta2select() with clustalw2 and the option +is_aligned=False.

+
+
+

New in version 0.10.0.

+
+
+

Changed in version 2.4.0: Replace use of deprecated Bio.pairwise2.align.globalms() with +Bio.Align.PairwiseAligner.

+
+
+

Deprecated since version 2.4.0: See the documentation under Notes on how to directly useBio.Align.PairwiseAligner with ResidueGroups. +sequence_alignment will be removed in release 3.0.

+
+
+ +
+
+MDAnalysis.analysis.align.get_matching_atoms(ag1, ag2, tol_mass=0.1, strict=False, match_atoms=True)[source]
+

Return two atom groups with one-to-one matched atoms.

+

The function takes two AtomGroup +instances ag1 and ag2 and returns two atom groups g1 and g2 that +consist of atoms so that the mass of atom g1[0] is the same as the mass +of atom g2[0], g1[1] and g2[1] etc.

+

The current implementation is very simplistic and works on a per-residue basis:

+
    +
  1. The two groups must contain the same number of residues.

  2. +
  3. Any residues in each group that have differing number of atoms are discarded.

  4. +
  5. The masses of corresponding atoms are compared. and if any masses differ +by more than tol_mass the test is considered failed and a +SelectionError is raised.

  6. +
+

The log file (see MDAnalysis.start_logging()) will contain detailed +information about mismatches.

+
+
Parameters
+
    +
  • ag1 (AtomGroup) – First AtomGroup instance that is +compared

  • +
  • ag2 (AtomGroup) – Second AtomGroup instance that is +compared

  • +
  • tol_mass (float (optional)) – Reject if the atomic masses for matched atoms differ by more than +tol_mass [0.1]

  • +
  • strict (bool (optional)) –

    +
    True

    Will raise SelectionError if a single atom does not +match between the two selections.

    +
    +
    False [default]

    Will try to prepare a matching selection by dropping +residues with non-matching atoms. See get_matching_atoms() +for details.

    +
    +
    +

  • +
  • match_atoms (bool (optional)) –

    +
    True

    Will attempt to match atoms based on mass

    +
    +
    False

    Will not attempt to match atoms based on mass

    +
    +
    +

  • +
+
+
Returns
+

(g1, g2) – Tuple with AtomGroup +instances that match, atom by atom. The groups are either the +original groups if all matched or slices of the original +groups.

+
+
Return type
+

tuple

+
+
Raises
+

SelectionError – Error raised if the number of residues does not match or if in the final + matching masses differ by more than tol.

+
+
+

Notes

+

The algorithm could be improved by using e.g. the Needleman-Wunsch +algorithm in Bio.profile2 to align atoms in each residue (doing a +global alignment is too expensive).

+
+

New in version 0.8.

+
+
+

Changed in version 0.10.0: Renamed from check_same_atoms() to +get_matching_atoms() and now returns matching atomgroups +(possibly with residues removed)

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/atomicdistances.html b/2.7.0-dev0/documentation_pages/analysis/atomicdistances.html new file mode 100644 index 0000000000..83dca7a129 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/atomicdistances.html @@ -0,0 +1,324 @@ + + + + + + + 4.2.4. Simple atomic distance analysis — MDAnalysis.analysis.atomicdistances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.4. Simple atomic distance analysis — MDAnalysis.analysis.atomicdistances

+
+
Author
+

Xu Hong Chen

+
+
Year
+

2023

+
+
Copyright
+

GNU Public License v3

+
+
+

This module provides a class to efficiently compute distances between +two groups of atoms with an equal number of atoms over a trajectory. +Specifically, for two atom groups ag1 and ag2, it will return +the distances

+
+\[|ag1[i] - ag2[i]|\]
+

for all \(i\) from \(0\) to n_atoms \(- 1\), where +n_atoms is the number of atoms in each atom group. By default, +this computation is done with periodic boundary conditions, but this +can be easily turned off. These distances are grouped by time step in +a NumPy array.

+

For more general functions on computing distances between atoms or +groups of atoms, please see MDAnalysis.analysis.distances.

+ +
+

4.2.4.1. Basic usage

+

This example uses files from the MDAnalysis test suite +(GRO and +XTC). To get started, execute

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import GRO, XTC
+>>> import MDAnalysis.analysis.atomicdistances as ad
+
+
+

We will calculate the distances between an atom group of atoms 101-105 +and an atom group of atoms 4001-4005 with periodic boundary conditions. +To select these atoms:

+
>>> u = mda.Universe(GRO, XTC)
+>>> ag1 = u.atoms[100:105]
+>>> ag2 = u.atoms[4000:4005]
+
+
+

We can run the calculations using any variable of choice such as +my_dists and access our results using my_dists.results:

+
>>> my_dists = ad.AtomicDistances(ag1, ag2).run()
+>>> my_dists.results
+array([[37.80813681, 33.2594864 , 34.93676414, 34.51183299, 34.96340209],
+    [27.11746625, 31.19878079, 31.69439435, 32.63446126, 33.10451345],
+    [23.27210749, 30.38714688, 32.48269361, 31.91444505, 31.84583838],
+    [18.40607922, 39.21993135, 39.33468192, 41.0133789 , 39.46885946],
+    [26.26006981, 37.9966713 , 39.14991106, 38.13423586, 38.95451427],
+    [26.83845081, 34.66255735, 35.59335027, 34.8926705 , 34.27175056],
+    [37.51994763, 38.12161091, 37.56481743, 36.8488121 , 35.75278065],
+    [37.27275501, 37.7831456 , 35.74359073, 34.54893794, 34.76495816],
+    [38.76272761, 41.31816555, 38.81588421, 39.82491432, 38.890219  ],
+    [39.20012515, 40.00563374, 40.83857688, 38.77886735, 41.45775864]])
+
+
+

To do the computation without periodic boundary conditions, we can enter +the keyword argument pbc=False after ag2. The result is different +in this case:

+
>>> my_dists_nopbc = ad.AtomicDistances(ag1, ag2, pbc=False).run()
+>>> my_dists_nopbc.results
+array([[37.80813681, 33.2594864 , 34.93676414, 34.51183299, 34.96340209],
+    [27.11746625, 31.19878079, 31.69439435, 32.63446126, 33.10451345],
+    [23.27210749, 30.38714688, 32.482695  , 31.91444505, 31.84583838],
+    [18.40607922, 39.21992825, 39.33468192, 41.0133757 , 39.46885946],
+    [26.26006981, 37.99666906, 39.14990985, 38.13423708, 38.95451311],
+    [26.83845081, 34.66255625, 35.59335027, 34.8926705 , 34.27174827],
+    [51.86981409, 48.10347964, 48.39570072, 49.14423513, 50.44804292],
+    [37.27275501, 37.7831456 , 35.74359073, 34.54893794, 34.76495816],
+    [56.39657447, 41.31816555, 38.81588421, 39.82491432, 38.890219  ],
+    [39.20012515, 40.00563374, 40.83857688, 38.77886735, 41.45775864]])
+
+
+
+
+
+
+class MDAnalysis.analysis.atomicdistances.AtomicDistances(ag1, ag2, pbc=True, **kwargs)[source]
+

Class to calculate atomic distances between two AtomGroups over a +trajectory.

+
+
Parameters
+
    +
  • ag1 (AtomGroup) – AtomGroup with the +same number of atoms

  • +
  • ag2 (AtomGroup) – AtomGroup with the +same number of atoms

  • +
  • pbc (bool, optional) – If True, calculates atomic distances with periodic boundary +conditions (PBCs). Setting pbc to False, calculates atomic +distances without considering PBCs. Defaults to True.

  • +
+
+
+
+
+results
+

The distances \(|ag1[i] - ag2[i]|\) for all \(i\) +from \(0\) to n_atoms \(- 1\) for each frame over +the trajectory.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+n_frames
+

Number of frames included in the analysis.

+
+
Type
+

int

+
+
+
+ +
+
+n_atoms
+

Number of atoms in each atom group.

+
+
Type
+

int

+
+
+
+ +
+

New in version 2.5.0.

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/base.html b/2.7.0-dev0/documentation_pages/analysis/base.html new file mode 100644 index 0000000000..caa102c234 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/base.html @@ -0,0 +1,590 @@ + + + + + + + 4.1.1. Analysis building blocks — MDAnalysis.analysis.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.1.1. Analysis building blocks — MDAnalysis.analysis.base

+

MDAnalysis provides building blocks for creating analysis classes. One can +think of each analysis class as a “tool” that performs a specific analysis over +the trajectory frames and stores the results in the tool.

+

Analysis classes are derived from AnalysisBase by subclassing. This +inheritance provides a common workflow and API for users and makes many +additional features automatically available (such as frame selections and a +verbose progressbar). The important points for analysis classes are:

+
    +
  1. Analysis tools are Python classes derived from AnalysisBase.

  2. +
  3. When instantiating an analysis, the Universe or AtomGroup +that the analysis operates on is provided together with any other parameters +that are kept fixed for the specific analysis.

  4. +
  5. The analysis is performed with run() method. It has a +common set of arguments such as being able to select the frames the analysis +is performed on. The verbose keyword argument enables additional output. A +progressbar is shown by default that also shows an estimate for the +remaining time until the end of the analysis.

  6. +
  7. Results are always stored in the attribute AnalysisBase.results, +which is an instance of Results, a kind of dictionary that allows +allows item access via attributes. Each analysis class decides what and how +to store in Results and needs to document it. For time series, the +AnalysisBase.times contains the time stamps of the analyzed frames.

  8. +
+
+

4.1.1.1. Example of using a standard analysis tool

+

For example, the MDAnalysis.analysis.rms.RMSD performs a +root-mean-square distance analysis in the following way:

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import TPR, XTC
+
+from MDAnalysis.analysis import rms
+
+u = mda.Universe(TPR, XTC)
+
+# (2) instantiate analysis
+rmsd = rms.RMSD(u, select='name CA')
+
+# (3) the run() method can select frames in different ways
+# run on all frames (with progressbar)
+rmsd.run(verbose=True)
+
+# or start, stop, and step can be used
+rmsd.run(start=2, stop=8, step=2)
+
+# a list of frames to run the analysis on can be passed
+rmsd.run(frames=[0,2,3,6,9])
+
+# a list of booleans the same length of the trajectory can be used
+rmsd.run(frames=[True, False, True, True, False, False, True, False,
+                 False, True])
+
+# (4) analyze the results, e.g., plot
+t = rmsd.times
+y = rmsd.results.rmsd[:, 2]   # RMSD at column index 2, see docs
+
+import matplotlib.pyplot as plt
+plt.plot(t, y)
+plt.xlabel("time (ps)")
+plt.ylabel("RMSD (Å)")
+
+
+
+
+

4.1.1.2. Writing new analysis tools

+

In order to write new analysis tools, derive a class from AnalysisBase +and define at least the _single_frame() method, as described in +AnalysisBase.

+
+

See also

+

The chapter Writing your own trajectory analysis in the User Guide +contains a step-by-step example for writing analysis tools with +AnalysisBase.

+
+
+
+

4.1.1.3. Classes

+

The Results and AnalysisBase classes are the essential +building blocks for almost all MDAnalysis tools in the +MDAnalysis.analysis module. They aim to be easily useable and +extendable.

+

AnalysisFromFunction and the analysis_class() functions are +simple wrappers that make it even easier to create fully-featured analysis +tools if only the single-frame analysis function needs to be written.

+
+
+
+
+class MDAnalysis.analysis.base.AnalysisBase(trajectory, verbose=False, **kwargs)[source]
+

Base class for defining multi-frame analysis

+

The class is designed as a template for creating multi-frame analyses. +This class will automatically take care of setting up the trajectory +reader for iterating, and it offers to show a progress meter. +Computed results are stored inside the results attribute.

+

To define a new Analysis, AnalysisBase needs to be subclassed +and _single_frame() must be defined. It is also possible to define +_prepare() and _conclude() for pre- and post-processing. +All results should be stored as attributes of the Results +container.

+
+
Parameters
+
+
+
+
+
+times
+

array of Timestep times. Only exists after calling +AnalysisBase.run()

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+frames
+

array of Timestep frame indices. Only exists after calling +AnalysisBase.run()

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results
+

results of calculation are stored after call +to AnalysisBase.run()

+
+
Type
+

Results

+
+
+
+ +

Example

+
from MDAnalysis.analysis.base import AnalysisBase
+
+class NewAnalysis(AnalysisBase):
+    def __init__(self, atomgroup, parameter, **kwargs):
+        super(NewAnalysis, self).__init__(atomgroup.universe.trajectory,
+                                          **kwargs)
+        self._parameter = parameter
+        self._ag = atomgroup
+
+    def _prepare(self):
+        # OPTIONAL
+        # Called before iteration on the trajectory has begun.
+        # Data structures can be set up at this time
+        self.results.example_result = []
+
+    def _single_frame(self):
+        # REQUIRED
+        # Called after the trajectory is moved onto each new frame.
+        # store an example_result of `some_function` for a single frame
+        self.results.example_result.append(some_function(self._ag,
+                                                         self._parameter))
+
+    def _conclude(self):
+        # OPTIONAL
+        # Called once iteration on the trajectory is finished.
+        # Apply normalisation and averaging to results here.
+        self.results.example_result = np.asarray(self.example_result)
+        self.results.example_result /=  np.sum(self.result)
+
+
+

Afterwards the new analysis can be run like this

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import PSF, DCD
+
+u = mda.Universe(PSF, DCD)
+
+na = NewAnalysis(u.select_atoms('name CA'), 35)
+na.run(start=10, stop=20)
+print(na.results.example_result)
+# results can also be accessed by key
+print(na.results["example_result"])
+
+
+
+

Changed in version 1.0.0: Support for setting start, stop, and step has been removed. These +should now be directly passed to AnalysisBase.run().

+
+
+

Changed in version 2.0.0: Added results

+
+
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})[source]
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+class MDAnalysis.analysis.base.AnalysisFromFunction(function, trajectory=None, *args, **kwargs)[source]
+

Create an AnalysisBase from a function working on AtomGroups

+
+
Parameters
+
    +
  • function (callable) – function to evaluate at each frame

  • +
  • trajectory (MDAnalysis.coordinates.Reader, optional) – trajectory to iterate over. If None the first AtomGroup found in +args and kwargs is used as a source for the trajectory.

  • +
  • *args (list) – arguments for function

  • +
  • **kwargs (dict) – arguments for function and AnalysisBase

  • +
+
+
+
+
+results.frames
+

simulation frames used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.times
+

simulation times used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.timeseries
+

Results for each frame of the wrapped function, +stored after call to AnalysisFromFunction.run().

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
Raises
+

ValueError – if function has the same kwargs as AnalysisBase

+
+
+

Example

+
def rotation_matrix(mobile, ref):
+    return mda.analysis.align.rotation_matrix(mobile, ref)[0]
+
+rot = AnalysisFromFunction(rotation_matrix, trajectory,
+                            mobile, ref).run()
+print(rot.results.timeseries)
+
+
+
+

Changed in version 1.0.0: Support for directly passing the start, stop, and step arguments +has been removed. These should instead be passed to +AnalysisFromFunction.run().

+
+
+

Changed in version 2.0.0: Former results are now stored as results.timeseries

+
+
+ +
+
+class MDAnalysis.analysis.base.Results(*args, **kwargs)[source]
+

Container object for storing results.

+

Results are dictionaries that provide two ways by which values +can be accessed: by dictionary key results["value_key"] or by object +attribute, results.value_key. Results stores all results +obtained from an analysis after calling run().

+

The implementation is similar to the sklearn.utils.Bunch +class in scikit-learn.

+
+
Raises
+
    +
  • AttributeError – If an assigned attribute has the same name as a default attribute.

  • +
  • ValueError – If a key is not of type str and therefore is not able to be + accessed by attribute.

  • +
+
+
+

Examples

+
>>> from MDAnalysis.analysis.base import Results
+>>> results = Results(a=1, b=2)
+>>> results['b']
+2
+>>> results.b
+2
+>>> results.a = 3
+>>> results['a']
+3
+>>> results.c = [1, 2, 3, 4]
+>>> results['c']
+[1, 2, 3, 4]
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.analysis.base.analysis_class(function)[source]
+

Transform a function operating on a single frame to an +AnalysisBase class.

+
+
Parameters
+

function (callable) – function to evaluate at each frame

+
+
+
+
+results.frames
+

simulation frames used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.times
+

simulation times used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.timeseries
+

Results for each frame of the wrapped function, +stored after call to AnalysisFromFunction.run().

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
Raises
+

ValueError – if function has the same kwargs as AnalysisBase

+
+
+

Examples

+

For use in a library, we recommend the following style

+
def rotation_matrix(mobile, ref):
+    return mda.analysis.align.rotation_matrix(mobile, ref)[0]
+RotationMatrix = analysis_class(rotation_matrix)
+
+
+

It can also be used as a decorator

+
@analysis_class
+def RotationMatrix(mobile, ref):
+    return mda.analysis.align.rotation_matrix(mobile, ref)[0]
+
+rot = RotationMatrix(u.trajectory, mobile, ref).run(step=2)
+print(rot.results.timeseries)
+
+
+
+

Changed in version 2.0.0: Former results are now stored as results.timeseries

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/bat.html b/2.7.0-dev0/documentation_pages/analysis/bat.html new file mode 100644 index 0000000000..399c63dc2c --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/bat.html @@ -0,0 +1,463 @@ + + + + + + + 4.2.8. Bond-Angle-Torsion coordinates analysis — MDAnalysis.analysis.bat — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.8. Bond-Angle-Torsion coordinates analysis — MDAnalysis.analysis.bat

+
+
Author
+

Soohaeng Yoo Willow and David Minh

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License, v2 or any higher version

+
+
+
+

New in version 2.0.0.

+
+

This module contains classes for interconverting between Cartesian and an +internal coordinate system, Bond-Angle-Torsion (BAT) coordinates +[Chang2003], for a given set of atoms or residues. This coordinate +system is designed to be complete, non-redundant, and minimize correlations +between degrees of freedom. Complete and non-redundant means that for N atoms +there will be 3N Cartesian coordinates and 3N BAT coordinates. Correlations are +minimized by using improper torsions, as described in [Hikiri2016].

+

More specifically, bond refers to the bond length, or distance between +a pair of bonded atoms. Angle refers to the bond angle, the angle between +a pair of bonds to a central atom. Torsion refers to the torsion angle. +For a set of four atoms a, b, c, and d, a torsion requires bonds between +a and b, b and c, and c and d. The torsion is the angle between a plane +containing atoms a, b, and c and another plane containing b, c, and d. +For a set of torsions that share atoms b and c, one torsion is defined as +the primary torsion. The others are defined as improper torsions, differences +between the raw torsion angle and the primary torsion. This definition reduces +the correlation between the torsion angles.

+

Each molecule also has six external coordinates that define its translation and +rotation in space. The three Cartesian coordinates of the first atom are the +molecule’s translational degrees of freedom. Rotational degrees of freedom are +specified by the axis-angle convention. The rotation axis is a normalized vector +pointing from the first to second atom. It is described by the polar angle, +\(\phi\), and azimuthal angle, \(\theta\). \(\omega\) is a third angle +that describes the rotation of the third atom about the axis.

+

This module was adapted from AlGDock [Minh2020].

+
+

See also

+
+
Dihedral

class to calculate dihedral angles for a given set of atoms or residues

+
+
MDAnalysis.lib.distances.calc_dihedrals()

function to calculate dihedral angles from atom positions

+
+
+
+
+

4.2.8.1. Example applications

+

The BAT class defines bond-angle-torsion +coordinates based on the topology of an atom group and interconverts between +Cartesian and BAT coordinate systems.

+

For example, we can determine internal coordinates for residues 5-10 +of adenylate kinase (AdK). The trajectory is included within the test data files:

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import PSF, DCD
+import numpy as np
+
+u = mda.Universe(PSF, DCD)
+
+# selection of atomgroups
+selected_residues = u.select_atoms("resid 5-10")
+
+from MDAnalysis.analysis.bat import BAT
+R = BAT(selected_residues)
+
+# Calculate BAT coordinates for a trajectory
+R.run()
+
+
+

After R.run(), the coordinates can be accessed with +R.results.bat. The following code snippets assume that the +previous snippet has been executed.

+

Reconstruct Cartesian coordinates for the first frame:

+
# Reconstruct Cartesian coordinates from BAT coordinates
+# of the first frame
+XYZ = R.Cartesian(R.results.bat[0,:])
+
+# The original and reconstructed Cartesian coordinates should all be close
+print(np.allclose(XYZ, selected_residues.positions, atol=1e-6))
+
+
+

Change a single torsion angle by \(\pi\):

+
bat = R.results.bat[0,:]
+bat[bat.shape[0]-12] += np.pi
+XYZ = R.Cartesian(bat)
+
+# A good number of Cartesian coordinates should have been modified
+np.sum((XYZ - selected_residues.positions)>1E-5)
+
+
+

Store data to the disk and load it again:

+
# BAT coordinates can be saved to disk in the numpy binary format
+R.save('test.npy')
+
+# The BAT coordinates in a new BAT instance can be loaded from disk
+# instead of using the run() method.
+Rnew = BAT(selected_residues, filename='test.npy')
+
+# The BAT coordinates before and after disk I/O should be close
+print(np.allclose(Rnew.results.bat, R.results.bat))
+
+
+
+
+

4.2.8.2. Analysis classes

+
+
+
+class MDAnalysis.analysis.bat.BAT(ag, initial_atom=None, filename=None, **kwargs)[source]
+

Calculate BAT coordinates for the specified AtomGroup.

+

Bond-Angle-Torsions (BAT) internal coordinates will be computed for +the group of atoms and all frame in the trajectory belonging to ag.

+
+
Parameters
+
    +
  • ag (AtomGroup or Universe) – Group of atoms for which the BAT coordinates are calculated. +ag must have a bonds attribute. +If unavailable, bonds may be guessed using +AtomGroup.guess_bonds. +ag must only include one molecule. +If a trajectory is associated with the atoms, then the computation +iterates over the trajectory.

  • +
  • initial_atom (Atom) – The atom whose Cartesian coordinates define the translation +of the molecule. If not specified, the heaviest terminal atom +will be selected.

  • +
  • filename (str) – Name of a numpy binary file containing a saved bat array. +If filename is not None, the data will be loaded from this file +instead of being recalculated using the run() method.

  • +
+
+
Raises
+
+
+
+
+
+results.bat
+

Contains the time series of the Bond-Angle-Torsion coordinates as a +(nframes, 3N) numpy.ndarray array. Each row corresponds to +a frame in the trajectory. In each column, the first six elements +describe external degrees of freedom. The first three are the center +of mass of the initial atom. The next three specify the external angles +according to the axis-angle convention: \(\phi\), the polar angle, +\(\theta\), the azimuthal angle, and \(\omega\), a third angle +that describes the rotation of the third atom about the axis. The next +three degrees of freedom are internal degrees of freedom for the root +atoms: \(r_{01}\), the distance between atoms 0 and 1, +\(r_{12}\), the distance between atoms 1 and 2, +and \(a_{012}\), the angle between the three atoms. +The rest of the array consists of all the other bond distances, +all the other bond angles, and then all the other torsion angles.

+
+ +
+
+Cartesian(bat_frame)[source]
+

Conversion of a single frame from BAT to Cartesian coordinates

+

One application of this function is to determine the new +Cartesian coordinates after modifying a specific torsion angle.

+
+
Parameters
+

bat_frame (numpy.ndarray) – an array with dimensions (3N,) with external then internal +degrees of freedom based on the root atoms, followed by the bond, +angle, and (proper and improper) torsion coordinates.

+
+
Returns
+

XYZ – an array with dimensions (N,3) with Cartesian coordinates. The first +dimension has the same ordering as the AtomGroup used to initialize +the class. The molecule will be whole opposed to wrapped around a +periodic boundary.

+
+
Return type
+

numpy.ndarray

+
+
+
+ +
+
+property atoms
+

The atomgroup for which BAT are computed (read-only property)

+
+ +
+
+load(filename, start=None, stop=None, step=None)[source]
+

Loads the bat trajectory from a file in numpy binary format

+
+
Parameters
+
    +
  • filename (str) – name of numpy binary file

  • +
  • 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

  • +
+
+
+
+

See also

+
+
save

Saves the bat trajectory in a file in numpy binary format

+
+
+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+
+save(filename)[source]
+

Saves the bat trajectory in a file in numpy binary format

+
+

See also

+
+
load

Loads the bat trajectory from a file in numpy binary format

+
+
+
+
+ +
+ +
+

References

+
+
+
Chang2003
+

Chia-En Chang, Michael J. Potter, and Michael K. Gilson. Calculation of molecular configuration integrals. The Journal of Physical Chemistry B, 107(4):1048–1055, 2003. doi:10.1021/jp027149c.

+
+
Hikiri2016
+

Simon Hikiri, Takashi Yoshidome, and Mitsunori Ikeguchi. Computational methods for configurational entropy using internal and cartesian coordinates. Journal of Chemical Theory and Computation, 12(12):5990–6000, 2016. PMID: 27951672. doi:10.1021/acs.jctc.6b00563.

+
+
Minh2020
+

David D. L. Minh. Alchemical grid dock (algdock): binding free energy calculations between flexible ligands and rigid receptors. Journal of Computational Chemistry, 41(7):715–730, 2020. doi:https://doi.org/10.1002/jcc.26036.

+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/contacts.html b/2.7.0-dev0/documentation_pages/analysis/contacts.html new file mode 100644 index 0000000000..b17160e23e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/contacts.html @@ -0,0 +1,556 @@ + + + + + + + 4.2.2. Native contacts analysis — MDAnalysis.analysis.contacts — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.2. Native contacts analysis — MDAnalysis.analysis.contacts

+

This module contains classes to analyze native contacts Q over a +trajectory. Native contacts of a conformation are contacts that exist +in a reference structure and in the conformation. Contacts in the +reference structure are always defined as being closer than a distance +radius. The fraction of native contacts for a conformation can be +calculated in different ways. This module supports 3 different metrics +listed below, as well as custom metrics.

+
    +
  1. Hard Cut: To count as a contact the atoms i and j have to be at least +as close as in the reference structure.

  2. +
  3. Soft Cut: The atom pair i and j is assigned based on a soft potential +that is 1 if the distance is 0, 1/2 if the distance is the same as in +the reference and 0 for large distances. For the exact definition of the +potential and parameters have a look at function soft_cut_q().

  4. +
  5. Radius Cut: To count as a contact the atoms i and j cannot be further +apart than some distance radius.

  6. +
+

The “fraction of native contacts” Q(t) is a number between 0 and 1 and +calculated as the total number of native contacts for a given time frame +divided by the total number of contacts in the reference structure.

+
+

4.2.2.1. Examples for contact analysis

+
+

4.2.2.1.1. One-dimensional contact analysis

+

As an example we analyze the opening (“unzipping”) of salt bridges +when the AdK enzyme opens up; this is one of the example trajectories +in MDAnalysis.

+
import numpy as np
+import matplotlib.pyplot as plt
+import MDAnalysis as mda
+from MDAnalysis.analysis import contacts
+from MDAnalysis.tests.datafiles import PSF,DCD
+# example trajectory (transition of AdK from closed to open)
+u = mda.Universe(PSF,DCD)
+# crude definition of salt bridges as contacts between NH/NZ in ARG/LYS and
+# OE*/OD* in ASP/GLU. You might want to think a little bit harder about the
+# problem before using this for real work.
+sel_basic = "(resname ARG LYS) and (name NH* NZ)"
+sel_acidic = "(resname ASP GLU) and (name OE* OD*)"
+# reference groups (first frame of the trajectory, but you could also use a
+# separate PDB, eg crystal structure)
+acidic = u.select_atoms(sel_acidic)
+basic = u.select_atoms(sel_basic)
+# set up analysis of native contacts ("salt bridges"); salt bridges have a
+# distance <6 A
+ca1 = contacts.Contacts(u, select=(sel_acidic, sel_basic),
+                        refgroup=(acidic, basic), radius=6.0)
+# iterate through trajectory and perform analysis of "native contacts" Q
+ca1.run()
+# print number of averave contacts
+average_contacts = np.mean(ca1.results.timeseries[:, 1])
+print('average contacts = {}'.format(average_contacts))
+# plot time series q(t)
+fig, ax = plt.subplots()
+ax.plot(ca1.results.timeseries[:, 0], ca1.results.timeseries[:, 1])
+ax.set(xlabel='frame', ylabel='fraction of native contacts',
+       title='Native Contacts, average = {:.2f}'.format(average_contacts))
+fig.show()
+
+
+

The first graph shows that when AdK opens, about 20% of the salt +bridges that existed in the closed state disappear when the enzyme +opens. They open in a step-wise fashion (made more clear by the movie +AdK_zipper_cartoon.avi).

+

Notes

+

Suggested cutoff distances for different simulations

+
    +
  • For all-atom simulations, cutoff = 4.5 Å

  • +
  • For coarse-grained simulations, cutoff = 6.0 Å

  • +
+
+
+

4.2.2.1.2. Two-dimensional contact analysis (q1-q2)

+

Analyze a single DIMS transition of AdK between its closed and open +conformation and plot the trajectory projected on q1-q2 +[Franklin2007]

+
import MDAnalysis as mda
+from MDAnalysis.analysis import contacts
+from MDAnalysisTests.datafiles import PSF, DCD
+u = mda.Universe(PSF, DCD)
+q1q2 = contacts.q1q2(u, 'name CA', radius=8)
+q1q2.run()
+
+f, ax = plt.subplots(1, 2, figsize=plt.figaspect(0.5))
+ax[0].plot(q1q2.results.timeseries[:, 0], q1q2.results.timeseries[:, 1],
+           label='q1')
+ax[0].plot(q1q2.results.timeseries[:, 0], q1q2.results.timeseries[:, 2],
+           label='q2')
+ax[0].legend(loc='best')
+ax[1].plot(q1q2.results.timeseries[:, 1],
+           q1q2.results.timeseries[:, 2], '.-')
+f.show()
+
+
+

Compare the resulting pathway to the MinActionPath result for AdK +[Franklin2007].

+
+
+

4.2.2.1.3. Writing your own contact analysis

+

The Contacts class has been designed to be extensible for your own +analysis. As an example we will analyze when the acidic and basic groups of AdK +are in contact which each other; this means that at least one of the contacts +formed in the reference is closer than 2.5 Å.

+

For this we define a new function to determine if any contact is closer than +2.5 Å; this function must implement the API prescribed by Contacts:

+
def is_any_closer(r, r0, dist=2.5):
+    return np.any(r < dist)
+
+
+

The first two parameters r and r0 are provided by Contacts when it +calls is_any_closer() while the others can be passed as keyword args +using the kwargs parameter in Contacts.

+

Next we are creating an instance of the Contacts class and use the +is_any_closer() function as an argument to method and run the analysis:

+
# crude definition of salt bridges as contacts between NH/NZ in ARG/LYS and
+# OE*/OD* in ASP/GLU. You might want to think a little bit harder about the
+# problem before using this for real work.
+sel_basic = "(resname ARG LYS) and (name NH* NZ)"
+sel_acidic = "(resname ASP GLU) and (name OE* OD*)"
+
+# reference groups (first frame of the trajectory, but you could also use a
+# separate PDB, eg crystal structure)
+acidic = u.select_atoms(sel_acidic)
+basic = u.select_atoms(sel_basic)
+
+nc = contacts.Contacts(u, select=(sel_acidic, sel_basic),
+                       method=is_any_closer,
+                       refgroup=(acidic, basic), kwargs={'dist': 2.5})
+nc.run()
+
+bound = nc.results.timeseries[:, 1]
+frames = nc.results.timeseries[:, 0]
+
+f, ax = plt.subplots()
+
+ax.plot(frames, bound, '.')
+ax.set(xlabel='frame', ylabel='is Bound',
+       ylim=(-0.1, 1.1))
+
+f.show()
+
+
+
+
+
+

4.2.2.2. Functions

+
+
+MDAnalysis.analysis.contacts.hard_cut_q(r, cutoff)[source]
+

Calculate fraction of native contacts Q for a hard cut off.

+

The cutoff can either be a float or a ndarray of the same +shape as r.

+
+
Parameters
+
    +
  • r (ndarray) – distance matrix

  • +
  • cutoff (ndarray | float) – cut off value to count distances. Can either be a float of a ndarray of +the same size as distances

  • +
+
+
Returns
+

Q – fraction of contacts

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.contacts.soft_cut_q(r, r0, beta=5.0, lambda_constant=1.8)[source]
+

Calculate fraction of native contacts Q for a soft cut off

+

The native contact function is defined as [Best2013]

+
+\[Q(r, r_0) = \frac{1}{1 + e^{\beta (r - \lambda r_0)}}\]
+

Reasonable values for different simulation types are

+
    +
  • All Atom: lambda_constant = 1.8 (unitless)

  • +
  • Coarse Grained: lambda_constant = 1.5 (unitless)

  • +
+
+
Parameters
+
    +
  • r (array) – Contact distances at time t

  • +
  • r0 (array) – Contact distances at time t=0, reference distances

  • +
  • beta (float (default 5.0 Angstrom)) – Softness of the switching function

  • +
  • lambda_constant (float (default 1.8, unitless)) – Reference distance tolerance

  • +
+
+
Returns
+

Q – fraction of native contacts

+
+
Return type
+

float

+
+
+

References

+
+
+
Best2013
+

Robert B. Best, Gerhard Hummer, and William A. Eaton. Native contacts determine protein folding mechanisms in atomistic simulations. Proceedings of the National Academy of Sciences, 110(44):17874–17879, 2013. doi:10.1073/pnas.1311599110.

+
+
+
+
+ +
+
+MDAnalysis.analysis.contacts.radius_cut_q(r, r0, radius)[source]
+

calculate native contacts Q based on the single distance radius.

+
+
Parameters
+
    +
  • r (ndarray) – distance array between atoms

  • +
  • r0 (ndarray) – unused to fullfill Contacts API

  • +
  • radius (float) – Distance between atoms at which a contact is formed

  • +
+
+
Returns
+

Q – fraction of contacts

+
+
Return type
+

float

+
+
+

References

+
+
+
Franklin2007(1,2,3)
+

Joel Franklin, Patrice Koehl, Sebastian Doniach, and Marc Delarue. MinActionPath: maximum likelihood trajectory for large-scale structural transitions in a coarse-grained locally harmonic energy landscape. Nucleic Acids Research, 35(suppl_2):W477–W482, 2007. doi:10.1093/nar/gkm342.

+
+
+
+
+ +
+
+MDAnalysis.analysis.contacts.contact_matrix(d, radius, out=None)[source]
+

calculate contacts from distance matrix

+
+
Parameters
+
    +
  • d (array-like) – distance matrix

  • +
  • radius (float) – distance below which a contact is formed.

  • +
  • out (array (optional)) – If out is supplied as a pre-allocated array of the correct +shape then it is filled instead of allocating a new one in +order to increase performance.

  • +
+
+
Returns
+

contacts – boolean array of formed contacts

+
+
Return type
+

ndarray

+
+
+
+ +
+
+MDAnalysis.analysis.contacts.q1q2(u, select='all', radius=4.5)[source]
+

Perform a q1-q2 analysis.

+

Compares native contacts between the starting structure and final structure +of a trajectory [Franklin2007].

+
+
Parameters
+
    +
  • u (Universe) – Universe with a trajectory

  • +
  • select (string, optional) – atoms to do analysis on

  • +
  • radius (float, optional) – distance at which contact is formed

  • +
+
+
Returns
+

contacts – Contact Analysis that is set up for a q1-q2 analysis

+
+
Return type
+

Contacts

+
+
+
+

Changed in version 1.0.0: Changed selection keyword to select +Support for setting start, stop, and step has been removed. +These should now be directly passed to Contacts.run().

+
+
+ +
+
+

4.2.2.3. Classes

+
+
+class MDAnalysis.analysis.contacts.Contacts(u, select, refgroup, method='hard_cut', radius=4.5, pbc=True, kwargs=None, **basekwargs)[source]
+

Calculate contacts based observables.

+

The standard methods used in this class calculate the fraction of native +contacts Q from a trajectory.

+

Contact API

+

By defining your own method it is possible to calculate other observables +that only depend on the distances and a possible reference distance. The +Contact API prescribes that this method must be a function with call +signature func(r, r0, **kwargs) and must be provided in the keyword +argument method.

+
+
+results.timeseries
+

2D array containing Q for all refgroup pairs and analyzed frames

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+timeseries
+

Alias to the results.timeseries attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.timeseries instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+

Changed in version 1.0.0: save() method has been removed. Use np.savetxt() on +Contacts.results.timeseries instead.

+
+
+

Changed in version 1.0.0: added pbc attribute to calculate distances using PBC.

+
+
+

Changed in version 2.0.0: timeseries results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+

Changed in version 2.2.0: Contacts accepts both AtomGroup and string for select

+
+
+
Parameters
+
    +
  • u (Universe) – trajectory

  • +
  • select (tuple(AtomGroup, AtomGroup) | tuple(string, string)) – two contacting groups that change over time

  • +
  • refgroup (tuple(AtomGroup, AtomGroup)) – two contacting atomgroups in their reference conformation. This +can also be a list of tuples containing different atom groups

  • +
  • radius (float, optional (4.5 Angstroms)) – radius within which contacts exist in refgroup

  • +
  • method (string | callable (optional)) – Can either be one of ['hard_cut' , 'soft_cut', 'radius_cut'] or a callable +with call signature func(r, r0, **kwargs) (the “Contacts API”).

  • +
  • pbc (bool (optional)) – Uses periodic boundary conditions to calculate distances if set to True; the +default is True.

  • +
  • kwargs (dict, optional) – dictionary of additional kwargs passed to method. Check +respective functions for reasonable values.

  • +
  • verbose (bool (optional)) – Show detailed progress of the calculation if set to True; the +default is False.

  • +
+
+
+

Notes

+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/data.html b/2.7.0-dev0/documentation_pages/analysis/data.html new file mode 100644 index 0000000000..ac09e8e5ec --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/data.html @@ -0,0 +1,251 @@ + + + + + + + 4.11.1. Analysis data files — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.11.1. Analysis data files

+

MDAnalysis.analysis.data contains data files that are used as part of +analysis. These can be experimental or theoretical data. Files are stored +inside the package and made accessible via variables in +MDAnalysis.analysis.data.filenames. These variables are documented +below, including references to the literature and where they are used inside +MDAnalysis.analysis.

+
+

4.11.1.1. Data files

+
+
+MDAnalysis.analysis.data.filenames.Rama_ref
+

Reference Ramachandran histogram for +MDAnalysis.analysis.dihedrals.Ramachandran. The data were +calculated on a data set of 500 PDB structures taken from +[Lovell2003]. This is a numpy array in the \(\phi\) and +\(\psi\) backbone dihedral angles.

+

Load and plot it with

+
import numpy as np
+import matplotlib.pyplot as plt
+from MDAnalysis.analysis.data.filenames import Rama_ref
+X, Y = np.meshgrid(np.arange(-180, 180, 4), np.arange(-180, 180, 4))
+Z = np.load(Rama_ref)
+ax.contourf(X, Y, Z, levels=[1, 17, 15000])
+
+
+

The given levels will draw contours that contain 90% and 99% of the data +points.The reference data are shown in +Ramachandran reference plot figure. An example +of analyzed data together with the reference data are shown in +Ramachandran plot figure as an example.

+
+ +
+Ramachandran Ref Plot +
+

Reference Ramachandran plot, with contours that contain 90% +(“allowed region”) and 99% (“generously allowed region”) of the data points +from the reference data set.

+
+
+
+
+MDAnalysis.analysis.data.filenames.Janin_ref
+

Reference Janin histogram for MDAnalysis.analysis.dihedrals.Janin. +The data were calculated on a data set of 500 PDB structures taken from +[Lovell2003]. This is a numpy array in the \(\chi_1\) and +\(\chi_2\) sidechain dihedral angles.

+

Load and plot it with

+
import numpy as np
+import matplotlib.pyplot as plt
+from MDAnalysis.analysis.data.filenames import Janin_ref
+X, Y = np.meshgrid(np.arange(0, 360, 6), np.arange(0, 360, 6))
+Z = np.load(Janin_ref)
+ax.contourf(X, Y, Z, levels=[1, 6, 600])
+
+
+

The given levels will draw contours that contain 90% and 98% of the +data. The reference data are shown in +Janin reference plot figure. An example of +analyzed data together with the reference data are shown in +Janin plot figure as an example.

+
+ +
+Janin Ref Plot +
+

Janin reference plot with contours that contain 90% (“allowed region”) and +98% (“generously allowed region”) of the data points from the reference data +set.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/density.html b/2.7.0-dev0/documentation_pages/analysis/density.html new file mode 100644 index 0000000000..f4cb1f0f2b --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/density.html @@ -0,0 +1,1049 @@ + + + + + + + 4.8.1. Generating densities from trajectories — MDAnalysis.analysis.density — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.8.1. Generating densities from trajectories — MDAnalysis.analysis.density

+
+
Author
+

Oliver Beckstein

+
+
Year
+

2011

+
+
Copyright
+

GNU Public License v3

+
+
+

The module provides classes and functions to generate and represent +volumetric data, in particular densities.

+
+

Changed in version 2.0.0: Deprecated density_from_Universe(), density_from_PDB(), and +Bfactor2RMSF() have now been removed.

+
+
+

4.8.1.1. Generating a density from a MD trajectory

+

A common use case is to analyze the solvent density around a protein of +interest. The density is calculated with DensityAnalysis in the +fixed coordinate system of the simulation unit cell. It is therefore necessary +to orient and fix the protein with respect to the box coordinate system. In +practice this means centering and superimposing the protein, frame by frame, on +a reference structure and translating and rotating all other components of the +simulation with the protein. In this way, the solvent will appear in the +reference frame of the protein.

+

An input trajectory must

+
    +
  1. have been centered on the protein of interest;

  2. +
  3. have all molecules made whole that have been broken across periodic +boundaries 1;

  4. +
  5. have the solvent molecules remapped so that they are closest to the +solute (this is important when using triclinic unit cells such as +a dodecahedron or a truncated octahedron) 1.

  6. +
  7. have a fixed frame of reference; for instance, by superimposing a protein +on a reference structure so that one can study the solvent density around +it 2.

  8. +
+

To generate the density of water molecules around a protein (assuming that the +trajectory is already appropriately treated for periodic boundary artifacts and +is suitably superimposed to provide a fixed reference frame) 3

+
from MDAnalysis.analysis.density import DensityAnalysis
+u = Universe(TPR, XTC)
+ow = u.select_atoms("name OW")
+D = DensityAnalysis(ow, delta=1.0)
+D.run()
+D.results.density.convert_density('TIP4P')
+D.results.density.export("water.dx", type="double")
+
+
+

The positions of all water oxygens (the AtomGroup ow) are +histogrammed on a grid with spacing delta = 1 Å. Initially the density is +measured in \(\text{Å}^{-3}\). With the Density.convert_density() +method, the units of measurement are changed. In the example we are now +measuring the density relative to the literature value of the TIP4P water model +at ambient conditions (see the values in MDAnalysis.units.water for +details). Finally, the density is written as an OpenDX compatible file that +can be read in VMD, Chimera, or PyMOL.

+

The Density object is accessible as the +DensityAnalysis.results.density attribute. In particular, the data +for the density is stored as a NumPy array in Density.grid, which can +be processed in any manner.

+
+
+

4.8.1.2. Creating densities

+

The DensityAnalysis class generates a Density from an +atomgroup.

+
+
+class MDAnalysis.analysis.density.DensityAnalysis(atomgroup, delta=1.0, metadata=None, padding=2.0, gridcenter=None, xdim=None, ydim=None, zdim=None)[source]
+

Volumetric density analysis.

+

The trajectory is read, frame by frame, and the atoms in atomgroup are +histogrammed on a 3D grid with spacing delta.

+
+
Parameters
+
    +
  • atomgroup (AtomGroup or UpdatingAtomGroup) – Group of atoms (such as all the water oxygen atoms) being analyzed. +This can be an UpdatingAtomGroup for +selections that change every time step.

  • +
  • delta (float (optional)) – Bin size for the density grid in ångström (same in x,y,z).

  • +
  • padding (float (optional)) – Increase histogram dimensions by padding (on top of initial box +size) in ångström. Padding is ignored when setting a user defined +grid.

  • +
  • gridcenter (numpy ndarray, float32 (optional)) – 3 element numpy array detailing the x, y and z coordinates of the +center of a user defined grid box in ångström.

  • +
  • xdim (float (optional)) – User defined x dimension box edge in ångström.

  • +
  • ydim (float (optional)) – User defined y dimension box edge in ångström.

  • +
  • zdim (float (optional)) – User defined z dimension box edge in ångström.

  • +
+
+
+
+
+results.density
+

A Density instance containing a physical density of units +\(Angstrom^{-3}\).

+

After the analysis (see the run() method), +the resulting density is stored in the results.density +attribute as a Density instance. Note: this replaces the +now deprecated density attribute.

+
+
Type
+

Density

+
+
+
+ +
+
+density
+

Alias to the results.density.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.density instead.

+
+
+
Type
+

Density

+
+
+
+ +
+
Raises
+
    +
  • ValueError – if AtomGroup is empty and no user defined grid is provided, or + if the user defined grid is not or incorrectly provided

  • +
  • UserWarning – if AtomGroup is empty and a user defined grid is provided

  • +
+
+
+
+

See also

+
+
pmda.density.DensityAnalysis

A parallel version of DensityAnalysis

+
+
+
+

Notes

+

If the gridcenter and x/y/zdim arguments are not provided, +DensityAnalysis will attempt to automatically generate +a gridbox from the atoms in ‘atomgroup’ (See Examples).

+

Normal AtomGroup instances represent a static selection of +atoms. If you want dynamically changing selections (such as “name OW and +around 4.0 (protein and not name H*)”, i.e., the water oxygen atoms that +are within 4 Å of the protein heavy atoms) then create an +UpdatingAtomGroup (see Examples).

+

DensityAnalysis will fail when the AtomGroup instance +does not contain any selection of atoms, even when updating is set to +True. In such a situation, user defined box limits can be provided to +generate a Density. Although, it remains the user’s responsibility +to ensure that the provided grid limits encompass atoms to be selected +on all trajectory frames.

+

Examples

+

A common use case is to analyze the solvent density around a protein of +interest. The density is calculated with DensityAnalysis in the +fixed coordinate system of the simulation unit cell. It is therefore +necessary to orient and fix the protein with respect to the box coordinate +system. In practice this means centering and superimposing the protein, +frame by frame, on a reference structure and translating and rotating all +other components of the simulation with the protein. In this way, the +solvent will appear in the reference frame of the protein.

+

An input trajectory must

+
    +
  1. have been centered on the protein of interest;

  2. +
  3. have all molecules made whole that have been broken across periodic +boundaries 1;

  4. +
  5. have the solvent molecules remapped so that they are closest to the +solute (this is important when using triclinic unit cells such as +a dodecahedron or a truncated octahedron) 1;

  6. +
  7. have a fixed frame of reference; for instance, by superimposing a +protein on a reference structure so that one can study the solvent +density around it 2.

  8. +
+

Generate the density

+

To generate the density of water molecules around a protein (assuming that +the trajectory is already appropriately treated for periodic boundary +artifacts and is suitably superimposed to provide a fixed reference frame) +3, first create the DensityAnalysis object by +supplying an AtomGroup, then use the run() method:

+
from MDAnalysis.analysis import density
+u = Universe(TPR, XTC)
+ow = u.select_atoms("name OW")
+D = density.DensityAnalysis(ow, delta=1.0)
+D.run()
+D.results.density.convert_density('TIP4P')
+
+
+

The positions of all water oxygens are histogrammed on a grid with spacing +delta = 1 Å and stored as a Density object in the attribute +DensityAnalysis.results.density.

+

Working with a density

+

A Density contains a large number of methods and attributes that +are listed in the documentation. Here we use the +Density.convert_density() to convert the density from inverse cubic +ångström to a density relative to the bulk density of TIP4P water at +standard conditions. (MDAnalysis stores a number of literature values in +MDAnalysis.units.water.)

+

One can directly access the density as a 3D NumPy array through +Density.grid.

+

By default, the Density object returned contains a physical +density in units of Å-3. If you are interested in recovering the +underlying probability density, simply divide by the sum:

+
probability_density = D.results.density.grid / D.results.density.grid.sum()
+
+
+

Similarly, if you would like to recover a grid containing a histogram of +atom counts, simply multiply by the volume dV of each bin (or voxel); +in this case you need to ensure that the physical density is measured in +Å-3 by converting it:

+
import numpy as np
+
+# ensure that the density is A^{-3}
+D.results.density.convert_density("A^{-3}")
+
+dV = np.prod(D.results.density.delta)
+atom_count_histogram = D.results.density.grid * dV
+
+
+

Writing the density to a file

+

A density can be exported to different formats with +Density.export() (thanks to the fact that Density is a +subclass gridData.core.Grid, which provides the functionality). +For example, to write a DX file +water.dx that can be read with VMD, PyMOL, or Chimera:

+
D.results.density.export("water.dx", type="double")
+
+
+

Example: Water density in the whole simulation

+

Basic use for creating a water density (just using the water oxygen +atoms “OW”):

+
D = DensityAnalysis(universe.select_atoms('name OW')).run()
+
+
+

Example: Water in a binding site (updating selection)

+

If you are only interested in water within a certain region, e.g., within +a vicinity around a binding site, you can use a selection that updates +every step by using an UpdatingAtomGroup:

+
near_waters = universe.select_atoms('name OW and around 5 (resid 156 157 305)',
+              updating=True)
+D_site = DensityAnalysis(near_waters).run()
+
+
+

Example: Small region around a ligand (manual box selection)

+

If you are interested in explicitly setting a grid box of a given edge size +and origin, you can use the gridcenter and xdim/ydim/zdim +arguments. For example to plot the density of waters within 5 Å of a +ligand (in this case the ligand has been assigned the residue name “LIG”) +in a cubic grid with 20 Å edges which is centered on the center of mass +(COM) of the ligand:

+
# Create a selection based on the ligand
+ligand_selection = universe.select_atoms("resname LIG")
+
+# Extract the COM of the ligand
+ligand_COM = ligand_selection.center_of_mass()
+
+# Create a density of waters on a cubic grid centered on the ligand COM
+# In this case, we update the atom selection as shown above.
+ligand_waters = universe.select_atoms('name OW and around 5 resname LIG',
+                                      updating=True)
+D_water = DensityAnalysis(ligand_waters,
+                          delta=1.0,
+                          gridcenter=ligand_COM,
+                          xdim=20, ydim=20, zdim=20)
+
+
+

(It should be noted that the padding keyword is not used when a user +defined grid is assigned).

+
+

New in version 1.0.0.

+
+
+

Changed in version 2.0.0: _set_user_grid() is now a method of DensityAnalysis. +Density results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
+static _set_user_grid(gridcenter, xdim, ydim, zdim, smin, smax)[source]
+

Helper function to set the grid dimensions to user defined values

+
+
Parameters
+
    +
  • gridcenter (numpy ndarray, float32) – 3 element ndarray containing the x, y and z coordinates of the +grid box center

  • +
  • xdim (float) – Box edge length in the x dimension

  • +
  • ydim (float) – Box edge length in the y dimension

  • +
  • zdim (float) – Box edge length in the y dimension

  • +
  • smin (numpy ndarray, float32) – Minimum x,y,z coordinates for the input selection

  • +
  • smax (numpy ndarray, float32) – Maximum x,y,z coordinates for the input selection

  • +
+
+
Returns
+

    +
  • umin (numpy ndarray, float32) – Minimum x,y,z coordinates of the user defined grid

  • +
  • umax (numpy ndarray, float32) – Maximum x,y,z coordinates of the user defined grid

  • +
+

+
+
+
+

Changed in version 2.0.0: Now a staticmethod of DensityAnalysis.

+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+

4.8.1.3. Density object

+

The main output of the density creation functions is a Density +instance, which is derived from a gridData.core.Grid. A +Density is essentially a 3D array with origin and lengths.

+
+
+class MDAnalysis.analysis.density.Density(*args, **kwargs)[source]
+

Bases: Grid

+

Class representing a density on a regular cartesian grid.

+
+
Parameters
+
    +
  • grid (array_like) – histogram or density, typically a numpy.ndarray

  • +
  • edges (list) – list of arrays, the lower and upper bin edges along the axes

  • +
  • parameters (dict) –

    dictionary of class parameters; saved with +Density.save(). The following keys are meaningful to +the class. Meaning of the values are listed:

    +
    +

    isDensity

    +
    +
      +
    • False: grid is a histogram with counts [default]

    • +
    • True: a density

    • +
    +

    Applying Density.make_density`() sets it to True.

    +
    +
    +

  • +
  • units (dict) –

    A dict with the keys

    +
      +
    • length: physical unit of grid edges (Angstrom or nm) [Angstrom]

    • +
    • density: unit of the density if isDensity=True or None +otherwise; the default is “Angstrom^{-3}” for densities +(meaning \(\text{Å}^{-3}\)).

    • +
    +

  • +
  • metadata (dict) – a user defined dictionary of arbitrary values associated with the +density; the class does not touch Density.metadata but +stores it with Density.save()

  • +
+
+
+
+
+grid
+

counts or density

+
+
Type
+

array

+
+
+
+ +
+
+edges
+

The boundaries of each cell in grid along all axes (equivalent +to what numpy.histogramdd() returns).

+
+
Type
+

list of 1d-arrays

+
+
+
+ +
+
+delta
+

Cell size in each dimension.

+
+
Type
+

array

+
+
+
+ +
+
+origin
+

Coordinates of the center of the cell at index grid[0, 0, 0, …, +0], which is considered to be the front lower left corner.

+
+
Type
+

array

+
+
+
+ +
+
+units
+

The units for lengths and density; change units with the method +convert_length() or convert_density().

+
+
Type
+

dict

+
+
+
+ +

Notes

+

The data (Density.grid) can be manipulated as a standard numpy +array. Changes can be saved to a file using the Density.save() method. The +grid can be restored using the Density.load() method or by supplying the +filename to the constructor.

+

The attribute Density.metadata holds a user-defined dictionary that +can be used to annotate the data. It is also saved with Density.save().

+

The Density.export() method always exports a 3D object (written in +such a way to be readable in VMD, Chimera, and PyMOL), the rest should +work for an array of any dimension. Note that PyMOL only understands DX +files with the DX data type “double” in the “array” object (see known +issues when writing OpenDX files and issue +MDAnalysis/GridDataFormats#35 for details). Using the keyword +type="double" for the method Density.export(), the user can +ensure that the DX file is written in a format suitable for PyMOL.

+

If the input histogram consists of counts per cell then the +Density.make_density() method converts the grid to a physical density. For +a probability density, divide it by Density.grid.sum() or use density=True +right away in histogramdd().

+

The user should set the parameters keyword (see docs for the +constructor); in particular, if the data are already a density, one must +set isDensity=True because there is no reliable way to detect if +data represent counts or a density. As a special convenience, if data are +read from a file and the user has not set isDensity then it is assumed +that the data are in fact a density.

+
+

See also

+

gridData.core.Grid

+
+

Examples

+

Typical use:

+
    +
  1. From a histogram (i.e. counts on a grid):

    +
    h,edges = numpy.histogramdd(...)
    +D = Density(h, edges, parameters={'isDensity': False}, units={'length': 'A'})
    +D.make_density()
    +
    +
    +
  2. +
  3. From a saved density file (e.g. in OpenDX format), where the lengths are +in Angstrom and the density in 1/A**3:

    +
    D = Density("density.dx")
    +
    +
    +
  4. +
  5. From a saved density file (e.g. in OpenDX format), where the lengths are +in Angstrom and the density is measured relative to the density of water +at ambient conditions:

    +
    D = Density("density.dx", units={'density': 'water'})
    +
    +
    +
  6. +
  7. From a saved histogram (less common, but in order to demonstrate the +parameters keyword) where the lengths are in nm:

    +
    D = Density("counts.dx", parameters={'isDensity': False}, units={'length': 'nm'})
    +D.make_density()
    +D.convert_length('Angstrom^{-3}')
    +D.convert_density('water')
    +
    +
    +

    After the final step, D will contain a density on a grid measured in +ångström, with the density values itself measured relative to the +density of water.

    +
  8. +
+

Density objects can be algebraically manipulated (added, +subtracted, multiplied, …) but there are no sanity checks in place to +make sure that units, metadata, etc are compatible!

+
+

Note

+

It is suggested to construct the Grid object from a histogram, +to supply the appropriate length unit, and to use +Density.make_density() to obtain a density. This ensures +that the length- and the density unit correspond to each other.

+
+
+
+centers()
+

Returns the coordinates of the centers of all grid cells as an iterator.

+
+

See also

+

numpy.ndindex()

+
+
+ +
+
+check_compatible(other)
+

Check if other can be used in an arithmetic operation.

+

other is compatible if

+
    +
  1. other is a scalar

  2. +
  3. other is a grid defined on the same edges

  4. +
+

In order to make other compatible, resample it on the same +grid as this one using resample().

+
+
Parameters
+

other (Grid or float or int) – Another object to be used for standard arithmetic +operations with this Grid

+
+
Raises
+

TypeError – if not compatible

+
+
+
+

See also

+

resample()

+
+
+ +
+
+convert_density(unit='Angstrom')[source]
+

Convert the density to the physical units given by unit.

+
+
Parameters
+

unit (str (optional)) –

The target unit that the density should be converted to.

+

unit can be one of the following:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

name

description of the unit

Angstrom^{-3}

particles/A**3

nm^{-3}

particles/nm**3

SPC

density of SPC water at standard conditions

TIP3P

… see MDAnalysis.units.water

TIP4P

… see MDAnalysis.units.water

water

density of real water at standard conditions (0.997 g/cm**3)

Molar

mol/l

+

+
+
Raises
+
    +
  • RuntimeError – If the density does not have a unit associated with it to begin + with (i.e., is not a density) then no conversion can take place.

  • +
  • ValueError – for unknown unit.

  • +
+
+
+

Notes

+
    +
  1. This method only works if there is already a length unit associated with the +density; otherwise raises RuntimeError

  2. +
  3. Conversions always go back to unity so there can be rounding +and floating point artifacts for multiple conversions.

  4. +
+
+ +
+
+convert_length(unit='Angstrom')[source]
+

Convert Grid object to the new unit.

+
+
Parameters
+

unit (str (optional)) – unit that the grid should be converted to: one of +“Angstrom”, “nm”

+
+
+

Notes

+

This changes the edges but will not change the density; it is the +user’s responsibility to supply the appropriate unit if the Grid object +is constructed from a density. It is suggested to start from a +histogram and a length unit and use make_density().

+
+ +
+
+default_format = 'DX'
+

Default format for exporting with export().

+
+ +
+
+export(filename, file_format=None, type=None, typequote='"')
+

export density to file using the given format.

+

The format can also be deduced from the suffix of the filename +although the file_format keyword takes precedence.

+

The default format for export() is ‘dx’. Use ‘dx’ for +visualization.

+

Implemented formats:

+
+
dx

OpenDX

+
+
pickle

pickle (use Grid.load() to restore); Grid.save() +is simpler than export(format='python').

+
+
+
+
Parameters
+
    +
  • filename (str) – name of the output file

  • +
  • file_format ({'dx', 'pickle', None} (optional)) – output file format, the default is “dx”

  • +
  • type (str (optional)) –

    for DX, set the output DX array type, e.g., “double” or “float”. +By default (None), the DX type is determined from the numpy +dtype of the array of the grid (and this will typically result in +“double”).

    +
    +

    New in version 0.4.0.

    +
    +

  • +
  • typequote (str (optional)) –

    For DX, set the character used to quote the type string; +by default this is a double-quote character, ‘”’. +Custom parsers like the one from NAMD-GridForces (backend for MDFF) +expect no quotes, and typequote=’’ may be used to appease them.

    +
    +

    New in version 0.5.0.

    +
    +

  • +
+
+
+
+ +
+
+property interpolated
+

B-spline function over the data grid(x,y,z).

+

The interpolated() function allows one to obtain data +values for any values of the coordinates:

+
interpolated([x1,x2,...],[y1,y2,...],[z1,z2,...]) -> F[x1,y1,z1],F[x2,y2,z2],...
+
+
+

The interpolation order is set in +Grid.interpolation_spline_order.

+

The interpolated function is computed once and is cached for better +performance. Whenever interpolation_spline_order is +modified, Grid.interpolated() is recomputed.

+

The value for unknown data is set in Grid.interpolation_cval +(TODO: also recompute when interpolation_cval value is changed.)

+

Example

+

Example usage for resampling:

+
XX, YY, ZZ = numpy.mgrid[40:75:0.5, 96:150:0.5, 20:50:0.5]
+FF = interpolated(XX, YY, ZZ)
+
+
+
+

Note

+

Values are interpolated with a spline function. It is possible +that the spline will generate values that would not normally +appear in the data. For example, a density is non-negative but +a cubic spline interpolation can generate negative values, +especially at the boundary between 0 and high values.

+

Internally, the function uses scipy.ndimage.map_coordinates() +with mode="constant" whereby interpolated values outside +the interpolated grid are determined by filling all values beyond +the edge with the same constant value, defined by the +interpolation_cval parameter, which when not set defaults +to the minimum value in the interpolated grid.

+
+
+

Changed in version 0.6.0: Interpolation outside the grid is now performed with +mode="constant" rather than mode="nearest", eliminating +extruded volumes when interpolating beyond the grid.

+
+
+ +
+
+property interpolation_spline_order
+

Order of the B-spline interpolation of the data.

+

3 = cubic; 4 & 5 are also supported

+

Only choose values that are acceptable to +scipy.ndimage.spline_filter()!

+
+

See also

+

interpolated

+
+
+ +
+
+load(filename, file_format=None)
+

Load saved grid and edges from filename

+

The load() method calls the class’s constructor method and +completely resets all values, based on the loaded data.

+
+ +
+
+make_density()[source]
+

Convert the grid (a histogram, counts in a cell) to a density (counts/volume).

+

This method changes the grid irrevocably.

+

For a probability density, manually divide by grid.sum().

+

If this is already a density, then a warning is issued and nothing is +done, so calling make_density multiple times does not do any harm.

+
+ +
+
+resample(edges)
+

Resample data to a new grid with edges edges.

+

This method creates a new grid with the data from the current +grid resampled to a regular grid specified by edges. The +order of the interpolation is set by +Grid.interpolation_spline_order: change the value +before calling resample().

+
+
Parameters
+

edges (tuple of arrays or Grid) – edges of the new grid or a Grid instance that +provides Grid.edges

+
+
Returns
+

a new Grid with the data interpolated over the +new grid cells

+
+
Return type
+

Grid

+
+
+

Examples

+

Providing edges (a tuple of three arrays, indicating the +boundaries of each grid cell):

+
g = grid.resample(edges)
+
+
+

As a convenience, one can also supply another Grid as +the argument for this method

+
g = grid.resample(othergrid)
+
+
+

and the edges are taken from Grid.edges.

+
+ +
+
+resample_factor(factor)
+

Resample to a new regular grid.

+
+
Parameters
+

factor (float) – The number of grid cells are scaled with factor in each +dimension, i.e., factor * N_i cells along each +dimension i. Must be positive, and cannot result in fewer +than 2 cells along a dimension.

+
+
Returns
+

interpolated grid – The resampled data are represented on a Grid with the new +grid cell sizes.

+
+
Return type
+

Grid

+
+
+
+

See also

+

resample

+
+
+

Changed in version 0.6.0: Previous implementations would not alter the range of the grid edges +being resampled on. As a result, values at the grid edges would creep +steadily inward. The new implementation recalculates the extent of +grid edges for every resampling.

+
+
+ +
+
+save(filename)
+

Save a grid object to filename and add “.pickle” extension.

+

Internally, this calls +Grid.export(filename, format="python"). A grid can be +regenerated from the saved data with

+
g = Grid(filename="grid.pickle")
+
+
+
+

Note

+

The pickle format depends on the Python version and +therefore it is not guaranteed that a grid saved with, say, +Python 2.7 can also be read with Python 3.5. The OpenDX format +is a better alternative for portability.

+
+
+ +
+ +

Footnotes

+
+
1(1,2,3,4)
+

Making molecules whole can be accomplished with the +MDAnalysis.core.groups.AtomGroup.wrap() of +Universe.atoms (use compound="fragments"). or the +PBC-wrapping transformations in +MDAnalysis.transformations.wrap.

+
+
2(1,2)
+

Superposition can be performed with +MDAnalysis.analysis.align.AlignTraj or the fitting +transformations in MDAnalysis.transformations.fit.

+
+
3(1,2)
+

Note that the trajectory in the example (XTC) is not +properly made whole and fitted to a reference structure; +these steps were omitted to clearly show the steps necessary +for the actual density calculation.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/dielectric.html b/2.7.0-dev0/documentation_pages/analysis/dielectric.html new file mode 100644 index 0000000000..8cb7574859 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/dielectric.html @@ -0,0 +1,298 @@ + + + + + + + 4.8.4. Dielectric — MDAnalysis.analysis.dielectric — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.8.4. Dielectric — MDAnalysis.analysis.dielectric

+
+
Authors
+

Mattia Felice Palermo, Philip Loche

+
+
Year
+

2022

+
+
Copyright
+

GNU Public License v3

+
+
+
+
+
+class MDAnalysis.analysis.dielectric.DielectricConstant(atomgroup, temperature=300, make_whole=True, **kwargs)[source]
+

Computes the average dipole moment

+
+\[\boldsymbol M = \sum_i q_i \boldsymbol r_i\]
+

where \(q_i\) is the charge and \(\boldsymbol r_i\) the position of +atom \(i\) in the given MDAnalysis.core.groups.AtomGroup. +Also, the static dielectric constant

+
+\[\varepsilon = 1 + \frac{\langle M^2 \rangle - \langle M \rangle^2} + {3 \varepsilon_ 0 V k_B T}\]
+

is calculated for a system in tin foil boundary conditions, which is +the usual case if electrostatics are handled with a Ewald summation +technique. See [Neumann1983] for details on the derivation.

+
+
Parameters
+
    +
  • atomgroup (MDAnalysis.core.groups.AtomGroup) – Atomgroup on which the analysis is executed

  • +
  • temperature (float) – Temperature (Kelvin) at which the system has been simulated

  • +
  • make_whole (bool) – Make molecules whole; If the input already contains whole molecules +this can be disabled to gain speedup

  • +
  • verbose (bool) – Show detailed progress of the calculation

  • +
+
+
+
+
+results.M
+

Directional dependant dipole moment +\(\langle \boldsymbol M \rangle\) in \(eÅ\).

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.M2
+

Directional dependant squared dipole moment +\(\langle \boldsymbol M^2 \rangle\) in \((eÅ)^2\)

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.fluct
+

Directional dependant dipole moment fluctuation +\(\langle \boldsymbol M^2 \rangle - \langle \boldsymbol M \rangle^2\) +in \((eÅ)^2\)

+
+
Type
+

float

+
+
+
+ +
+
+results.eps
+

Directional dependant static dielectric constant

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.eps_mean
+

Static dielectric constant

+
+
Type
+

float

+
+
+
+ +

Example

+

Create a DielectricConstant instance by supplying an +AtomGroup, +then use the run() method:

+
import MDAnalysis as mda
+from MDAnalysis.analysis.dielectric import DielectricConstant
+from MDAnalysisTests.datafiles import PSF_TRICLINIC, DCD_TRICLINIC
+
+# Load a pure water system
+universe = mda.Universe(PSF_TRICLINIC, DCD_TRICLINIC)
+
+diel = DielectricConstant(universe.atoms)
+diel.run()
+print(diel.results)
+
+
+

The static dielectric constant of the provided atomgroup is saved +within the Results attribute.

+
+

New in version 2.1.0.

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/diffusionmap.html b/2.7.0-dev0/documentation_pages/analysis/diffusionmap.html new file mode 100644 index 0000000000..cf25787d43 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/diffusionmap.html @@ -0,0 +1,448 @@ + + + + + + + 4.9.1. Diffusion map — MDAnalysis.analysis.diffusionmap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.9.1. Diffusion map — MDAnalysis.analysis.diffusionmap

+
+
Authors
+

Eugen Hruska, John Detlefs

+
+
Year
+

2016

+
+
Copyright
+

GNU Public License v2

+
+
+

This module contains the non-linear dimension reduction method diffusion map. +The eigenvectors of a diffusion matrix represent the ‘collective coordinates’ +of a molecule; the largest eigenvalues are the more dominant collective +coordinates. Assigning physical meaning to the ‘collective coordinates’ is a +fundamentally difficult problem. The time complexity of the diffusion map is +\(O(N^3)\), where N is the number of frames in the trajectory, and the in-memory +storage complexity is \(O(N^2)\). Instead of a single trajectory a sample of +protein structures can be used. The sample should be equilibrated, at least +locally. The order of the sampled structures in the trajectory is irrelevant.

+

The Diffusion Map tutorial shows how to use diffusion map for dimension +reduction.

+

More details about diffusion maps are in +[Porte2008, Coifman2006, Ferguson2011, Rohrdanz2011].

+
+

4.9.1.1. Diffusion Map tutorial

+

The example uses files provided as part of the MDAnalysis test suite +(in the variables PSF and +DCD). This tutorial shows how to use the +Diffusion Map class.

+

First load all modules and test data

+
import MDAnalysis as mda
+import MDAnalysis.analysis.diffusionmap as diffusionmap
+from MDAnalysis.tests.datafiles import PSF, DCD
+
+
+

Given a universe or atom group, we can create and eigenvalue decompose +the Diffusion Matrix from that trajectory using DiffusionMap:: and get +the corresponding eigenvalues and eigenvectors.

+
u = mda.Universe(PSF,DCD)
+
+
+

We leave determination of the appropriate scale parameter epsilon to the user, +[Rohrdanz2011] uses a complex method involving the k-nearest-neighbors +of a trajectory frame, whereas others simple use a trial-and-error approach +with a constant epsilon. Currently, the constant epsilon method is implemented +by MDAnalysis.

+
dmap = diffusionmap.DiffusionMap(u, select='backbone', epsilon=2)
+dmap.run()
+
+
+

From here we can perform an embedding onto the k dominant eigenvectors. The +non-linearity of the map means there is no explicit relationship between the +lower dimensional space and our original trajectory. However, this is an +isometry (distance preserving map), which means that points close in the lower +dimensional space are close in the higher-dimensional space and vice versa. +In order to embed into the most relevant low-dimensional space, there should +exist some number of dominant eigenvectors, whose corresponding eigenvalues +diminish at a constant rate until falling off, this is referred to as a +spectral gap and should be somewhat apparent for a system at equilibrium with a +high number of frames.

+
import matplotlib.pyplot as plt
+f, ax = plt.subplots()
+upper_limit = # some reasonably high number less than the n_eigenvectors
+ax.plot(dmap.eigenvalues[:upper_limit])
+ax.set(xlabel ='eigenvalue index', ylabel='eigenvalue')
+plt.tight_layout()
+
+
+

From here we can transform into the diffusion space

+
num_eigenvectors = # some number less than the number of frames after
+# inspecting for the spectral gap
+fit = dmap.transform(num_eigenvectors, time=1)
+
+
+

It can be difficult to interpret the data, and is left as a task +for the user. The diffusion distance between frames i and j is best +approximated by the euclidean distance between rows i and j of +self.diffusion_space.

+
+
+

4.9.1.2. Classes

+
+
+class MDAnalysis.analysis.diffusionmap.DiffusionMap(u, epsilon=1, **kwargs)[source]
+

Non-linear dimension reduction method

+

Dimension reduction with diffusion mapping of selected structures in a +trajectory.

+
+
+eigenvalues
+

Eigenvalues of the diffusion map

+
+
Type
+

array (n_frames,)

+
+
+
+ +
+
+run()[source]
+

Constructs an anisotropic diffusion kernel and performs eigenvalue +decomposition on it.

+
+ +
+
+transform(n_eigenvectors, time)[source]
+

Perform an embedding of a frame into the eigenvectors representing +the collective coordinates.

+
+ +
+

Changed in version 2.2.0: DiffusionMap now also accepts AtomGroup.

+
+
+
Parameters
+
    +
  • u (MDAnalysis Universe or AtomGroup or DistanceMatrix object.) – Can be a Universe or AtomGroup, in which case one must supply kwargs for the +initialization of a DistanceMatrix. Otherwise, this can be a +DistanceMatrix already initialized. Either way, this will be made +into a diffusion kernel.

  • +
  • epsilon (Float) – Specifies the method used for the choice of scale parameter in the +diffusion map. More information in +[Coifman2006, Ferguson2011, Rohrdanz2011], Default: 1.

  • +
  • **kwargs – Parameters to be passed for the initialization of a +DistanceMatrix.

  • +
+
+
+
+ +
+
+class MDAnalysis.analysis.diffusionmap.DistanceMatrix(universe, select='all', metric=<function rmsd>, cutoff=-4.0, weights=None, **kwargs)[source]
+

Calculate the pairwise distance between each frame in a trajectory +using a given metric

+

A distance matrix can be initialized on its own and used as an +initialization argument in DiffusionMap.

+
+
Parameters
+
    +
  • universe (~MDAnalysis.core.universe.Universe or ~MDAnalysis.core.groups.AtomGroup) – The MD Trajectory for dimension reduction, remember that +computational cost of eigenvalue decomposition +scales at O(N^3) where N is the number of frames. +Cost can be reduced by increasing step interval or specifying a +start and stop value when calling DistanceMatrix.run().

  • +
  • select (str, optional) – Any valid selection string for +select_atoms() +This selection of atoms is used to calculate the RMSD between +different frames. Water should be excluded.

  • +
  • metric (function, optional) – Maps two numpy arrays to a float, is positive definite and +symmetric. The API for a metric requires that the arrays must have +equal length, and that the function should have weights as an +optional argument. Weights give each index value its own weight for +the metric calculation over the entire arrays. Default: metric is +set to rms.rmsd().

  • +
  • cutoff (float, optional) – Specify a given cutoff for metric values to be considered equal, +Default: 1EO-5

  • +
  • weights (array, optional) – Weights to be given to coordinates for metric calculation

  • +
  • verbose (bool, optional) – Show detailed progress of the calculation if set to True; the +default is False.

  • +
+
+
+
+
+atoms
+

Selected atoms in trajectory subject to dimension reduction

+
+
Type
+

~MDAnalysis.core.groups.AtomGroup

+
+
+
+ +
+
+results.dist_matrix
+

Array of all possible ij metric distances between frames in trajectory. +This matrix is symmetric with zeros on the diagonal.

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray, (n_frames, n_frames)

+
+
+
+ +
+
+dist_matrix
+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.dist_matrix instead.

+
+
+
Type
+

numpy.ndarray, (n_frames, n_frames)

+
+
+
+ +

Example

+

Often, a custom distance matrix could be useful for local +epsilon determination or other manipulations on the diffusion +map method. The DistanceMatrix exists in +diffusionmap and can be passed +as an initialization argument for DiffusionMap.

+
import MDAnalysis as mda
+import MDAnalysis.analysis.diffusionmap as diffusionmap
+from MDAnalysis.tests.datafiles import PSF, DCD
+
+
+

Now create the distance matrix and pass it as an argument to +DiffusionMap.

+
+

u = mda.Universe(PSF,DCD) +dist_matrix = diffusionmap.DistanceMatrix(u, select=’all’) +dist_matrix.run() +dmap = diffusionmap.DiffusionMap(dist_matrix) +dmap.run()

+
+
+

Changed in version 1.0.0: save() method has been removed. You can use np.save() on +DistanceMatrix.results.dist_matrix instead.

+
+
+

Changed in version 2.0.0: dist_matrix is now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+

Changed in version 2.2.0: DistanceMatrix now also accepts AtomGroup.

+
+
+ +

References

+

If you use this Dimension Reduction method in a publication, please +cite [Coifman2006].

+

If you choose the default metric, this module uses the fast QCP algorithm +[Theobald2005] to calculate the root mean square distance (RMSD) +between two coordinate sets (as implemented in +MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix()). When using this +module in published work please [Theobald2005].

+
+
+
Porte2008
+

J Porte, Ben Herbst, Willy Hereman, and Stéfan van der Walt. An introduction to diffusion maps. In 11 2008.

+
+
Coifman2006(1,2,3)
+

Ronald R. Coifman and Stéphane Lafon. Diffusion maps. Applied and Computational Harmonic Analysis, 21(1):5–30, 2006. Special Issue: Diffusion Maps and Wavelets. URL: https://www.sciencedirect.com/science/article/pii/S1063520306000546, doi:https://doi.org/10.1016/j.acha.2006.04.006.

+
+
Ferguson2011(1,2)
+

Andrew L. Ferguson, Athanassios Z. Panagiotopoulos, Ioannis G. Kevrekidis, and Pablo G. Debenedetti. Nonlinear dimensionality reduction in molecular simulation: the diffusion map approach. Chemical Physics Letters, 509(1):1–11, 2011. URL: https://www.sciencedirect.com/science/article/pii/S0009261411004957, doi:https://doi.org/10.1016/j.cplett.2011.04.066.

+
+
Rohrdanz2011(1,2,3)
+

Mary A. Rohrdanz, Wenwei Zheng, Mauro Maggioni, and Cecilia Clementi. Determination of reaction coordinates via locally scaled diffusion map. The Journal of Chemical Physics, 134(12):124116, 2011. doi:10.1063/1.3569857.

+
+
Theobald2005(1,2)
+

Douglas L. Theobald. Rapid calculation of RMSDs using a quaternion-based characteristic polynomial. Acta Crystallographica Section A, 61(4):478–480, Jul 2005. doi:10.1107/S0108767305015266.

+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/dihedrals.html b/2.7.0-dev0/documentation_pages/analysis/dihedrals.html new file mode 100644 index 0000000000..73520299e2 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/dihedrals.html @@ -0,0 +1,691 @@ + + + + + + + 4.7.1.3. Dihedral angles analysis — MDAnalysis.analysis.dihedrals — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.7.1.3. Dihedral angles analysis — MDAnalysis.analysis.dihedrals

+
+
Author
+

Henry Mull

+
+
Year
+

2018

+
+
Copyright
+

GNU Public License v2

+
+
+
+

New in version 0.19.0.

+
+

This module contains classes for calculating dihedral angles for a given set of +atoms or residues. This can be done for selected frames or whole trajectories.

+

A list of time steps that contain angles of interest is generated and can be +easily plotted if desired. For the Ramachandran +and Janin classes, basic plots can be +generated using the method Ramachandran.plot() or Janin.plot(). +These plots are best used as references, but they also allow for user customization.

+
+

See also

+
+
MDAnalysis.lib.distances.calc_dihedrals()

function to calculate dihedral angles from atom positions

+
+
+
+
+

4.7.1.3.1. Example applications

+
+

4.7.1.3.1.1. General dihedral analysis

+

The Dihedral class is useful for calculating +angles for many dihedrals of interest. For example, we can find the phi angles +for residues 5-10 of adenylate kinase (AdK). The trajectory is included within +the test data files:

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import GRO, XTC
+u = mda.Universe(GRO, XTC)
+
+# selection of atomgroups
+ags = [res.phi_selection() for res in u.residues[4:9]]
+
+from MDAnalysis.analysis.dihedrals import Dihedral
+R = Dihedral(ags).run()
+
+
+

The angles can then be accessed with Dihedral.results.angles.

+
+
+

4.7.1.3.1.2. Ramachandran analysis

+

The Ramachandran class allows for the +quick calculation of classical Ramachandran plots [Ramachandran1963] in +the backbone \(phi\) and \(psi\) angles. Unlike the +Dihedral class which takes a list of +atomgroups, this class only needs a list of residues or atoms from those +residues. The previous example can repeated with:

+
u = mda.Universe(GRO, XTC)
+r = u.select_atoms("resid 5-10")
+
+R = Ramachandran(r).run()
+
+
+

Then it can be plotted using the built-in plotting method Ramachandran.plot():

+
import matplotlib.pyplot as plt
+fig, ax = plt.subplots(figsize=plt.figaspect(1))
+R.plot(ax=ax, color='k', marker='o', ref=True)
+fig.tight_layout()
+
+
+

as shown in the example Ramachandran plot figure.

+
+Ramachandran plot +
+

Ramachandran plot for residues 5 to 10 of AdK, sampled from the AdK test +trajectory (XTC). The contours in the background are the “allowed region” +and the “marginally allowed” regions.

+
+
+

To plot the data yourself, the angles can be accessed using +Ramachandran.results.angles.

+
+

Note

+

The Ramachandran analysis is prone to errors if the topology contains +duplicate or missing atoms (e.g. atoms with altloc or incomplete +residues). If the topology has as an altloc attribute, you must specify +only one altloc for the atoms with more than one ("protein and not +altloc B").

+
+
+
+

4.7.1.3.1.3. Janin analysis

+

Janin plots [Janin1978] for side chain conformations (\(\chi_1\) +and \(chi_2\) angles) can be created with the +Janin class. It works in the same way, +only needing a list of residues; see the Janin plot figure as an example.

+

The data for the angles can be accessed in the attribute +Janin.results.angles.

+
+Janin plot +
+

Janin plot for all residues of AdK, sampled from the AdK test trajectory +(XTC). The contours in the background are the “allowed region” and the +“marginally allowed” regions for all possible residues.

+
+
+
+

Note

+

The Janin analysis is prone to errors if the topology contains duplicate or +missing atoms (e.g. atoms with altloc or incomplete residues). If the +topology has as an altloc attribute, you must specify only one altloc +for the atoms with more than one ("protein and not altloc B").

+

Furthermore, many residues do not have a \(\chi_2\) dihedral and if the +selections of residues is not carefully filtered to only include those +residues with both sidechain dihedrals then a ValueError with the +message Too many or too few atoms selected is raised.

+
+
+
+

4.7.1.3.1.4. Reference plots

+

Reference plots can be added to the axes for both the Ramachandran and Janin +classes using the kwarg ref=True for the Ramachandran.plot() +and Janin.plot() methods. The Ramachandran reference data +(Rama_ref) and Janin reference data +(Janin_ref) were made using data +obtained from a large selection of 500 PDB files, and were analyzed using these +classes [Mull2018]. The allowed and marginally allowed regions of the +Ramachandran reference plot have cutoffs set to include 90% and 99% of the data +points, and the Janin reference plot has cutoffs for 90% and 98% of the data +points. The list of PDB files used for the reference plots was taken from +[Lovell2003] and information about general Janin regions was taken from +[Janin1978].

+
+
+
+

4.7.1.3.2. Analysis Classes

+
+
+class MDAnalysis.analysis.dihedrals.Dihedral(atomgroups, **kwargs)[source]
+

Calculate dihedral angles for specified atomgroups.

+

Dihedral angles will be calculated for each atomgroup that is given for +each step in the trajectory. Each AtomGroup +must contain 4 atoms.

+
+

Note

+

This class takes a list as an input and is most useful for a large +selection of atomgroups. If there is only one atomgroup of interest, then +it must be given as a list of one atomgroup.

+
+
+

Changed in version 2.0.0: angles results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
Parameters
+

atomgroups (list[AtomGroup]) – a list of AtomGroup for which +the dihedral angles are calculated

+
+
Raises
+

ValueError – If any atomgroups do not contain 4 atoms

+
+
+
+
+results.angles
+

Contains the time steps of the angles for each atomgroup in the list as +an n_frames×len(atomgroups) numpy.ndarray with content +[[angle 1, angle 2, ...], [time step 2], ...].

+
+

New in version 2.0.0.

+
+
+ +
+
+angles
+

Alias to the results.angles attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.angles instead.

+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+class MDAnalysis.analysis.dihedrals.Ramachandran(atomgroup, c_name='C', n_name='N', ca_name='CA', check_protein=True, **kwargs)[source]
+

Calculate \(\phi\) and \(\psi\) dihedral angles of selected +residues.

+

\(\phi\) and \(\psi\) angles will be calculated for each residue +corresponding to atomgroup for each time step in the trajectory. A +ResidueGroup is generated from atomgroup which is +compared to the protein to determine if it is a legitimate selection.

+
+
Parameters
+
    +
  • atomgroup (AtomGroup or ResidueGroup) – atoms for residues for which \(\phi\) and \(\psi\) are +calculated

  • +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
  • check_protein (bool (optional)) – whether to raise an error if the provided atomgroup is not a +subset of protein atoms

  • +
+
+
+

Example

+

For standard proteins, the default arguments will suffice to run a +Ramachandran analysis:

+
r = Ramachandran(u.select_atoms('protein')).run()
+
+
+

For proteins with non-standard residues, or for calculating dihedral +angles for other linear polymers, you can switch off the protein checking +and provide your own atom names in place of the typical peptide backbone +atoms:

+
r = Ramachandran(u.atoms, c_name='CX', n_name='NT', ca_name='S',
+                 check_protein=False).run()
+
+
+

The above analysis will calculate angles from a “phi” selection of +CX’-NT-S-CX and “psi” selections of NT-S-CX-NT’.

+
+
Raises
+

ValueError – If the selection of residues is not contained within the protein + and check_protein is True

+
+
+
+

Note

+

If check_protein is True and the residue selection is beyond +the scope of the protein and, then an error will be raised. +If the residue selection includes the first or last residue, +then a warning will be raised and they will be removed from the list of +residues, but the analysis will still run. If a \(\phi\) or \(\psi\) +selection cannot be made, that residue will be removed from the analysis.

+
+
+

Changed in version 1.0.0: added c_name, n_name, ca_name, and check_protein keyword arguments

+
+
+

Changed in version 2.0.0: angles results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
+results.angles
+

Contains the time steps of the \(\phi\) and \(\psi\) angles for +each residue as an n_frames×n_residues×2 numpy.ndarray with +content [[[phi, psi], [residue 2], ...], [time step 2], ...].

+
+

New in version 2.0.0.

+
+
+ +
+
+angles
+

Alias to the results.angles attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.angles instead.

+
+
+ +
+
+plot(ax=None, ref=False, **kwargs)[source]
+

Plots data into standard Ramachandran plot.

+

Each time step in Ramachandran.results.angles is plotted onto +the same graph.

+
+
Parameters
+
    +
  • ax (matplotlib.axes.Axes) – If no ax is supplied or set to None then the plot will +be added to the current active axes.

  • +
  • ref (bool, optional) – Adds a general Ramachandran plot which shows allowed and +marginally allowed regions

  • +
  • kwargs (optional) – All other kwargs are passed to matplotlib.pyplot.scatter().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

matplotlib.axes.Axes

+
+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+class MDAnalysis.analysis.dihedrals.Janin(atomgroup, select_remove='resname ALA CYS* GLY PRO SER THR VAL', select_protein='protein', **kwargs)[source]
+

Calculate \(\chi_1\) and \(\chi_2\) dihedral angles of selected +residues.

+

\(\chi_1\) and \(\chi_2\) angles will be calculated for each residue +corresponding to atomgroup for each time step in the trajectory. A +ResidueGroup is generated from atomgroup which is +compared to the protein to determine if it is a legitimate selection.

+
+

Note

+

If the residue selection is beyond the scope of the protein, then an error +will be raised. If the residue selection includes the residues ALA, CYS*, +GLY, PRO, SER, THR, or VAL (the default of the select_remove keyword +argument) then a warning will be raised and they will be removed from the +list of residues, but the analysis will still run. Some topologies have +altloc attributes which can add duplicate atoms to the selection and must +be removed.

+
+
+
Parameters
+
    +
  • atomgroup (AtomGroup or ResidueGroup) – atoms for residues for which \(\chi_1\) and \(\chi_2\) are +calculated

  • +
  • select_remove (str) – selection string to remove residues that do not have \(chi_2\) +angles

  • +
  • select_protein (str) – selection string to subselect protein-only residues from +atomgroup to check that only amino acids are selected; if you +have non-standard amino acids then adjust this selection to include +them

  • +
+
+
Raises
+
    +
  • ValueError – if the final selection of residues is not contained within the + protein (as determined by + atomgroup.select_atoms(select_protein))

  • +
  • ValueError – if not enough or too many atoms are found for a residue in the + selection, usually due to missing atoms or alternative locations, + or due to non-standard residues

  • +
+
+
+
+

Changed in version 2.0.0: select_remove and select_protein keywords were added. +angles results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
+results.angles
+

Contains the time steps of the \(\chi_1\) and \(\chi_2\) angles +for each residue as an n_frames×n_residues×2 numpy.ndarray +with content [[[chi1, chi2], [residue 2], ...], [time step 2], ...].

+
+

New in version 2.0.0.

+
+
+ +
+
+angles
+

Alias to the results.angles attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.angles instead.

+
+
+ +
+
+plot(ax=None, ref=False, **kwargs)[source]
+

Plots data into standard Janin plot.

+

Each time step in Janin.results.angles is plotted onto the +same graph.

+
+
Parameters
+
    +
  • ax (matplotlib.axes.Axes) – If no ax is supplied or set to None then the plot will +be added to the current active axes.

  • +
  • ref (bool, optional) – Adds a general Janin plot which shows allowed and marginally +allowed regions

  • +
  • kwargs (optional) – All other kwargs are passed to matplotlib.pyplot.scatter().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

matplotlib.axes.Axes

+
+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +

References

+
+
+
Ramachandran1963
+

G.N. Ramachandran, C. Ramakrishnan, and V. Sasisekharan. Stereochemistry of polypeptide chain configurations. Journal of Molecular Biology, 7(1):95–99, 1963. URL: https://www.sciencedirect.com/science/article/pii/S0022283663800236, doi:https://doi.org/10.1016/S0022-2836(63)80023-6.

+
+
Janin1978(1,2)
+

Joël Janin, Shoshanna Wodak, Michael Levitt, and Bernard Maigret. Conformation of amino acid side-chains in proteins. Journal of Molecular Biology, 125(3):357–386, 1978. URL: https://www.sciencedirect.com/science/article/pii/0022283678904084, doi:https://doi.org/10.1016/0022-2836(78)90408-4.

+
+
Mull2018
+

Henry Mull and Oliver Beckstein. Technical Report: SPIDAL Summer REU 2018 Dihedral Analysis in MDAnalysis. 8 2018. URL: https://figshare.com/articles/journal_contribution/Technical_Report_SPIDAL_Summer_REU_2018_Dihedral_Analysis_in_MDAnalysis/6957296, doi:10.6084/m9.figshare.6957296.v1.

+
+
Lovell2003
+

Simon C. Lovell, Ian W. Davis, W. Bryan Arendall III, Paul I. W. de Bakker, J. Michael Word, Michael G. Prisant, Jane S. Richardson, and David C. Richardson. Structure validation by c$/alpha$ geometry: ψ,φ and cβ deviation. Proteins: Structure, Function, and Bioinformatics, 50(3):437–450, 2003. doi:https://doi.org/10.1002/prot.10286.

+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/distances.html b/2.7.0-dev0/documentation_pages/analysis/distances.html new file mode 100644 index 0000000000..490d6884d6 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/distances.html @@ -0,0 +1,402 @@ + + + + + + + 4.2.3. Distance analysis — MDAnalysis.analysis.distances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.3. Distance analysis — MDAnalysis.analysis.distances

+

This module provides functions to rapidly compute distances between +atoms or groups of atoms.

+

dist() and between() can take atom groups that do not even +have to be from the same Universe.

+ +
+
+
+MDAnalysis.analysis.distances.between(group, A, B, distance)[source]
+

Return sub group of group that is within distance of both A and B

+

This function is not aware of periodic boundary conditions.

+

Can be used to find bridging waters or molecules in an interface.

+

Similar to “group and (AROUND A distance and AROUND B distance)”.

+
+
Parameters
+
    +
  • group (AtomGroup) – Find members of group that are between A and B

  • +
  • A (AtomGroup) –

  • +
  • B (AtomGroup) – A and B are the groups of atoms between which atoms in +group are searched for. The function works is more +efficient if group is bigger than either A or B.

  • +
  • distance (float) – maximum distance for an atom to be counted as in the vicinity of +A or B

  • +
+
+
Returns
+

AtomGroup of atoms that +fulfill the criterion

+
+
Return type
+

AtomGroup

+
+
+
+ +
+
+MDAnalysis.analysis.distances.contact_matrix(coord, cutoff=15.0, returntype='numpy', box=None)[source]
+

Calculates a matrix of contacts.

+

There is a fast, high-memory-usage version for small systems +(returntype = ‘numpy’), and a slower, low-memory-usage version for +larger systems (returntype = ‘sparse’).

+

If box dimensions are passed then periodic boundary conditions +are applied.

+
+
Parameters
+
    +
  • coord (array) – Array of coordinates of shape (N, 3) and dtype float32.

  • +
  • cutoff (float, optional, default 15) – Particles within cutoff are considered to form a contact.

  • +
  • returntype (string, optional, default "numpy") – Select how the contact matrix is returned. +* "numpy": return as an (N. N) numpy.ndarray +* "sparse": return as a scipy.sparse.lil_matrix

  • +
  • box (array-like or None, optional, default None) – Simulation cell dimensions in the form of +MDAnalysis.trajectory.timestep.Timestep.dimensions when +periodic boundary conditions should be taken into account for +the calculation of contacts.

  • +
+
+
Returns
+

The contact matrix is returned in a format determined by the returntype +keyword.

+
+
Return type
+

array or sparse matrix

+
+
+ +
+

Changed in version 0.11.0: Keyword suppress_progmet and progress_meter_freq were removed.

+
+
+ +
+
+MDAnalysis.analysis.distances.dist(A, B, offset=0, box=None)[source]
+

Return distance between atoms in two atom groups.

+

The distance is calculated atom-wise. The residue ids are also +returned because a typical use case is to look at CA distances +before and after an alignment. Using the offset keyword one can +also add a constant offset to the resids which facilitates +comparison with PDB numbering.

+
+
Parameters
+
    +
  • A (AtomGroup) – AtomGroup with the +same number of atoms

  • +
  • B (AtomGroup) – AtomGroup with the +same number of atoms

  • +
  • offset (integer or tuple, optional, default 0) –

    An integer offset is added to resids_A and resids_B (see +below) in order to produce PDB numbers.

    +

    If offset is tuple then offset[0] is added to +resids_A and offset[1] to resids_B. Note that one can +actually supply numpy arrays of the same length as the atom +group so that an individual offset is added to each resid.

    +

  • +
+
+
Returns
+

    +
  • resids_A (array) – residue ids of the A group (possibly changed with offset)

  • +
  • resids_B (array) – residue ids of the B group (possibly changed with offset)

  • +
  • distances (array) – distances between the atoms

  • +
+

+
+
+
+ +
+
+MDAnalysis.analysis.distances.distance_array(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], configuration: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculate all possible distances between a reference set and another +configuration.

+

If there are n positions in reference and m positions in +configuration, a distance array of shape (n, m) will be computed.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

If a 2D numpy array of dtype numpy.float64 with the shape (n, m) +is provided in result, then this preallocated array is filled. This can +speed up calculations.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array of shape (3,) or (n, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • configuration (numpy.ndarray or AtomGroup) – Configuration coordinate array of shape (3,) or (m, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array which must have the shape (n, m) and dtype +numpy.float64. +Avoids creating the array which saves time when the function +is called repeatedly.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

d – Array containing the distances d[i,j] between reference coordinates +i and configuration coordinates j.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n, m))

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts single coordinates as input.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.analysis.distances.self_distance_array(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculate all possible distances within a configuration reference.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

If a 1D numpy array of dtype numpy.float64 with the shape +(n*(n-1)/2,) is provided in result, then this preallocated array is +filled. This can speed up calculations.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array of shape (3,) or (n, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array which must have the shape (n*(n-1)/2,) and +dtype numpy.float64. Avoids creating the array which saves time when +the function is called repeatedly.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

d – Array containing the distances dist[i,j] between reference +coordinates i and j at position d[k]. Loop through d:

+
for i in range(n):
+    for j in range(i + 1, n):
+        k += 1
+        dist[i, j] = d[k]
+
+
+

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n*(n-1)/2,))

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore.html b/2.7.0-dev0/documentation_pages/analysis/encore.html new file mode 100644 index 0000000000..4da8c909be --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore.html @@ -0,0 +1,252 @@ + + + + + + + 4.2.7. ENCORE Ensemble Similarity Calculations — MDAnalysis.analysis.encore — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.7. ENCORE Ensemble Similarity Calculations — MDAnalysis.analysis.encore

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
Year
+

2015-2017

+
+
Copyright
+

GNU Public License v3

+
+
Maintainer
+

Matteo Tiberti <matteo.tiberti@gmail.com>, mtiberti on github

+
+
+
+

New in version 0.16.0.

+
+

The module contains implementations of similarity measures between protein +ensembles described in [ᵃLindorff-Larsen2009]. The implementation and examples +are described in [ᵃTiberti2015].

+

The module includes facilities for handling ensembles and trajectories through +the Universe class, performing clustering or dimensionality reduction +of the ensemble space, estimating multivariate probability distributions from +the input data, and more. ENCORE can be used to compare experimental and +simulation-derived ensembles, as well as estimate the convergence of +trajectories from time-dependent simulations.

+

ENCORE includes three different methods for calculations of similarity measures +between ensembles implemented in individual functions:

+
    +
  • Harmonic Ensemble Similarity : hes()

  • +
  • Clustering Ensemble Similarity : ces()

  • +
  • Dimensional Reduction Ensemble Similarity : dres()

  • +
+

as well as two methods to evaluate the convergence of trajectories:

+ +

When using this module in published work please cite [ᵃTiberti2015].

+
+

4.2.7.1. Modules

+ +
+
+

4.2.7.2. References

+
+
+
ᵃLindorff-Larsen2009
+

Kresten Lindorff-Larsen and Jesper Ferkinghoff-Borg. Similarity measures for protein ensembles. PLOS ONE, 4(1):1–13, 01 2009. doi:10.1371/journal.pone.0004203.

+
+
ᵃTiberti2015(1,2)
+

Matteo Tiberti, Elena Papaleo, Tone Bengtsen, Wouter Boomsma, and Kresten Lindorff-Larsen. Encore: software for quantitative ensemble comparison. PLOS Computational Biology, 11(10):1–16, 10 2015. doi:10.1371/journal.pcbi.1004415.

+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/bootstrap.html b/2.7.0-dev0/documentation_pages/analysis/encore/bootstrap.html new file mode 100644 index 0000000000..49972998bb --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/bootstrap.html @@ -0,0 +1,260 @@ + + + + + + + 4.2.7.1.6. bootstrap procedures — MDAnalysis.analysis.ensemble.bootstrap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.7.1.6. bootstrap procedures — MDAnalysis.analysis.ensemble.bootstrap

+

The module contains functions for bootstrapping either ensembles (Universe +objects) or distance matrices, by resampling with replacement.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+MDAnalysis.analysis.encore.bootstrap.bootstrapped_matrix(matrix, ensemble_assignment)[source]
+

Bootstrap an input square matrix. The resulting matrix will have the same +shape as the original one, but the order of its elements will be drawn +(with repetition). Separately bootstraps each ensemble.

+
+
Parameters
+
    +
  • matrix (encore.utils.TriangularMatrix) – similarity/dissimilarity matrix

  • +
  • ensemble_assignment (numpy.array) – array of ensemble assignments. This array must be matrix.size long.

  • +
+
+
Returns
+

this_m – bootstrapped similarity/dissimilarity matrix

+
+
Return type
+

encore.utils.TriangularMatrix

+
+
+
+ +
+
+MDAnalysis.analysis.encore.bootstrap.get_distance_matrix_bootstrap_samples(distance_matrix, ensemble_assignment, samples=100, ncores=1)[source]
+

Calculates distance matrices corresponding to bootstrapped ensembles, by +resampling with replacement.

+
+
Parameters
+
    +
  • distance_matrix (encore.utils.TriangularMatrix) – Conformational distance matrix

  • +
  • ensemble_assignment (str) – Mapping from frames to which ensemble they are from (necessary because +ensembles are bootstrapped independently)

  • +
  • samples (int, optional) – How many bootstrap samples to create.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1)

  • +
+
+
Returns
+

confdistmatrix

+
+
Return type
+

list of encore.utils.TriangularMatrix

+
+
+
+ +
+
+MDAnalysis.analysis.encore.bootstrap.get_ensemble_bootstrap_samples(ensemble, samples=100)[source]
+

Generates a bootstrapped ensemble by resampling with replacement.

+
+
Parameters
+
    +
  • ensemble (MDAnalysis.Universe) – Conformational distance matrix

  • +
  • samples (int, optional) – How many bootstrap samples to create.

  • +
+
+
Return type
+

list of MDAnalysis.Universe objects

+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/clustering.html b/2.7.0-dev0/documentation_pages/analysis/encore/clustering.html new file mode 100644 index 0000000000..aec1505bf3 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/clustering.html @@ -0,0 +1,656 @@ + + + + + + + 4.2.7.1.2. Clustering — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

4.2.7.1.2. Clustering

+
+

4.2.7.1.2.1. clustering frontend — MDAnalysis.analysis.encore.clustering.cluster

+

The module defines a function serving as front-end for various clustering +algorithms, wrapping them to allow them to be used interchangably.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+MDAnalysis.analysis.encore.clustering.cluster.cluster(ensembles, method=<MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative object>, select='name CA', distance_matrix=None, allow_collapsed_result=True, ncores=1, **kwargs)[source]
+

Cluster frames from one or more ensembles, using one or more +clustering methods. The function optionally takes pre-calculated distances +matrices as an argument. Note that not all clustering procedure can work +directly on distance matrices, so the distance matrices might be ignored +for particular choices of method.

+
+
Parameters
+
    +
  • ensembles (MDAnalysis.Universe, or list, or list of list thereof) – The function takes either a single Universe object, a list of Universe +objects or a list of lists of Universe objects. If given a single +universe, it simply clusters the conformations in the trajectory. If +given a list of ensembles, it will merge them and cluster them together, +keeping track of the ensemble to which each of the conformations belong. +Finally, if passed a list of list of ensembles, the function will just +repeat the functionality just described - merging ensembles for each +ensemble in the outer loop.

  • +
  • method (encore.ClusteringMethod or list thereof, optional) – A single or a list of instances of the Clustering classes from +the clustering module. A separate analysis will be run for each +method. Note that different parameters for the same clustering method +can be explored by adding different instances of the same clustering +class.

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • distance_matrix (encore.utils.TriangularMatrix or list thereof, optional) – Distance matrix used for clustering. If this parameter +is not supplied the matrix will be calculated on the fly. +If several distance matrices are supplied, an analysis will be done +for each of them. The number of provided distance matrices should +match the number of provided ensembles.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
+
+
Returns
+

    +
  • list of ClustersCollection objects (or potentially a single

  • +
  • ClusteringCollection object if allow_collapsed_result is set to True)

  • +
+

+
+
+

Example

+

Two ensembles are created as Universe object using a topology file and +two trajectories. The topology- and trajectory files used are obtained +from the MDAnalysis test suite for two different simulations of the protein +AdK. +Here, we cluster two ensembles

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> cluster_collection = encore.cluster([ens1,ens2])
+>>> print cluster_collection
+
+
+

You can change the parameters of the clustering method by explicitly +specifying the method

+
>>> cluster_collection =
+        encore.cluster(
+             [ens1,ens2],
+             method=encore.AffinityPropagationNative(preference=-2.))
+
+
+

Here is an illustration using DBSCAN algorithm, instead +of the default clustering method

+
>>> cluster_collection =
+        encore.cluster(
+             [ens1,ens2],
+             method=encore.DBSCAN())
+
+
+

You can also combine multiple methods in one call

+
>>> cluster_collection =
+        encore.cluster(
+             [ens1,ens2],
+             method=[encore.AffinityPropagationNative(preference=-1.),
+                     encore.AffinityPropagationNative(preference=-2.)])
+
+
+

In addition to standard cluster membership information, the +cluster_collection output keep track of the origin of each +conformation, so you check how the different trajectories are +represented in each cluster. Here, for brevity, we print just the +members of the two first clusters

+
>>> print [cluster.metadata["ensemble_membership"]
+             for cluster in cluster_collection][:2]
+[array([1, 1, 1, 1, 2]), array([1, 1, 1, 1, 1])]
+
+
+
+ +
+

4.2.7.1.2.2. Cluster representation — MDAnalysis.analysis.encore.clustering.ClusterCollection

+

The module contains the Cluster and ClusterCollection classes which are +designed to store results from clustering algorithms.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+class MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster(elem_list=None, centroid=None, idn=None, metadata=None)[source]
+

Generic Cluster class for clusters with centroids.

+
+
+id
+

Cluster ID number. Useful for the ClustersCollection class

+
+
Type
+

int

+
+
+
+ +
+
+metadata
+

dict of lists or numpy.array, containing metadata for the cluster +elements. The iterable must return the same number of elements as +those that belong to the cluster.

+
+
Type
+

iterable

+
+
+
+ +
+
+size
+

number of elements.

+
+
Type
+

int

+
+
+
+ +
+
+centroid
+

cluster centroid.

+
+
Type
+

element object

+
+
+
+ +
+
+elements
+

array containing the cluster elements.

+
+
Type
+

numpy.array

+
+
+
+ +
+
Class constructor. If elem_list is None, an empty cluster is created

and the remaining arguments ignored.

+
+
+
+
Parameters
+
    +
  • elem_list (numpy.array or None) – numpy array of cluster elements

  • +
  • centroid (None or element object) – centroid

  • +
  • idn (int) – cluster ID

  • +
  • metadata (iterable) – metadata, one value for each cluster element. The iterable +must have the same length as the elements array.

  • +
+
+
+
+ +
+
+class MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection(elements=None, metadata=None)[source]
+

Clusters collection class; this class represents the results of a full +clustering run. It stores a group of clusters defined as +encore.clustering.Cluster objects.

+
+
+clusters
+

list of of Cluster objects which are part of the Cluster collection

+
+
Type
+

list

+
+
+
+ +

Class constructor. If elements is None, an empty cluster collection +will be created. Otherwise, the constructor takes as input an +iterable of ints, for instance:

+

[ a, a, a, a, b, b, b, c, c, … , z, z ]

+

the variables a,b,c,…,z are cluster centroids, here as cluster +element numbers (i.e. 3 means the 4th element of the ordered input +for clustering). The array maps a correspondence between +cluster elements (which are implicitly associated with the +position in the array) with centroids, i. e. defines clusters. +For instance:

+

[ 1, 1, 1, 4, 4, 5 ]

+

means that elements 0, 1, 2 form a cluster which has 1 as centroid, +elements 3 and 4 form a cluster which has 4 as centroid, and +element 5 has its own cluster.

+
+
Parameters
+
    +
  • elements (iterable of ints or None) – clustering results. See the previous description for details

  • +
  • metadata ({str:list, str:list,...} or None) – metadata for the data elements. The list must be of the same +size as the elements array, with one value per element.

  • +
+
+
+
+
+get_centroids()[source]
+

Get the centroids of the clusters

+
+
Returns
+

    +
  • centroids (list of cluster element objects)

  • +
  • list of cluster centroids

  • +
+

+
+
+
+ +
+
+get_ids()[source]
+

Get the ID numbers of the clusters

+
+
Returns
+

    +
  • ids (list of int)

  • +
  • list of cluster ids

  • +
+

+
+
+
+ +
+ +
+

4.2.7.1.2.3. clustering frontend — MDAnalysis.analysis.encore.clustering.ClusteringMethod

+

The module defines classes for interfacing to various clustering algorithms. +One has been implemented natively, and will always be available, while +others are available only if scikit-learn is installed

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+class MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagation(damping=0.9, preference=-1.0, max_iter=500, convergence_iter=50, **kwargs)[source]
+

Interface to the Affinity propagation clustering procedure implemented +in sklearn.

+
+
Parameters
+
    +
  • damping (float, optional) – Damping factor (default is 0.9). Parameter for the Affinity +Propagation for clustering.

  • +
  • preference (float, optional) – Preference parameter used in the Affinity Propagation algorithm +for clustering (default -1.0). A high preference value results +in many clusters, a low preference will result in fewer numbers +of clusters.

  • +
  • max_iter (int, optional) – Maximum number of iterations for affinity propagation (default +is 500).

  • +
  • convergence_iter (int, optional) – Minimum number of unchanging iterations to achieve convergence +(default is 50). Parameter in the Affinity Propagation for +clustering.

  • +
  • **kwargs (optional) – Other keyword arguments are passed to sklearn.cluster.AffinityPropagation.

  • +
+
+
+
+ +
+
+class MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative(damping=0.9, preference=-1.0, max_iter=500, convergence_iter=50, add_noise=True)[source]
+

Interface to the natively implemented Affinity propagation procedure.

+
+
Parameters
+
    +
  • damping (float, optional) – Damping factor (default is 0.9). Parameter for the Affinity +Propagation for clustering.

  • +
  • preference (float, optional) – Preference parameter used in the Affinity Propagation algorithm for +clustering (default -1.0). A high preference value results in +many clusters, a low preference will result in fewer numbers of +clusters.

  • +
  • max_iter (int, optional) – Maximum number of iterations for affinity propagation (default is +500).

  • +
  • convergence_iter (int, optional) – Minimum number of unchanging iterations to achieve convergence +(default is 50). Parameter in the Affinity Propagation for +clustering.

  • +
  • add_noise (bool, optional) – Apply noise to similarity matrix before running clustering +(default is True)

  • +
+
+
+
+ +
+
+class MDAnalysis.analysis.encore.clustering.ClusteringMethod.ClusteringMethod[source]
+

Base class for any Clustering Method

+
+ +
+
+class MDAnalysis.analysis.encore.clustering.ClusteringMethod.DBSCAN(eps=0.5, min_samples=5, algorithm='auto', leaf_size=30, **kwargs)[source]
+

Interface to the DBSCAN clustering procedure implemented in sklearn.

+
+
Parameters
+
    +
  • eps (float, optional (default = 0.5)) – The maximum distance between two samples for them to be +considered as in the same neighborhood.

  • +
  • min_samples (int, optional (default = 5)) – The number of samples (or total weight) in a neighborhood for +a point to be considered as a core point. This includes the +point itself.

  • +
  • algorithm ({'auto', 'ball_tree', 'kd_tree', 'brute'}, optional) – The algorithm to be used by the NearestNeighbors module +to compute pointwise distances and find nearest neighbors. +See NearestNeighbors module documentation for details.

  • +
  • leaf_size (int, optional (default = 30)) – Leaf size passed to BallTree or cKDTree. This can affect the +speed of the construction and query, as well as the memory +required to store the tree. The optimal value depends +on the nature of the problem.

  • +
  • sample_weight (array, shape (n_samples,), optional) – Weight of each sample, such that a sample with a weight of at +least min_samples is by itself a core sample; a sample with +negative weight may inhibit its eps-neighbor from being core. +Note that weights are absolute, and default to 1.

  • +
+
+
+
+ +
+
+class MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans(n_clusters, max_iter=300, n_init=10, init='k-means++', algorithm='auto', tol=0.0001, verbose=False, random_state=None, copy_x=True, **kwargs)[source]
+
+
Parameters
+
    +
  • n_clusters (int) – The number of clusters to form as well as the number of +centroids to generate.

  • +
  • max_iter (int, optional (default 300)) – Maximum number of iterations of the k-means algorithm to run.

  • +
  • n_init (int, optional (default 10)) – Number of time the k-means algorithm will be run with different +centroid seeds. The final results will be the best output of +n_init consecutive runs in terms of inertia.

  • +
  • init ({'k-means++', 'random', or ndarray, or a callable}, optional) – Method for initialization, default to ‘k-means++’: +‘k-means++’ : selects initial cluster centers for k-mean +clustering in a smart way to speed up convergence. See section +Notes in k_init for more details. +‘random’: generate k centroids from a Gaussian with mean and +variance estimated from the data. +If an ndarray is passed, it should be of shape +(n_clusters, n_features) and gives the initial centers. +If a callable is passed, it should take arguments X, k and +and a random state and return an initialization.

  • +
  • tol (float, optional (default 1e-4)) – The relative increment in the results before declaring +convergence.

  • +
  • verbose (boolean, optional (default False)) – Verbosity mode.

  • +
  • random_state (integer or numpy.RandomState, optional) – The generator used to initialize the centers. If an integer is +given, it fixes the seed. Defaults to the global numpy random +number generator.

  • +
  • copy_x (boolean, optional) – When pre-computing distances it is more numerically accurate to +center the data first. If copy_x is True, then the original +data is not modified. If False, the original data is modified, +and put back before the function returns, but small numerical +differences may be introduced by subtracting and then adding +the data mean.

  • +
+
+
+
+
+accepts_distance_matrix = False
+

Interface to the KMeans clustering procedure implemented in sklearn.

+
+ +
+ +
+
+MDAnalysis.analysis.encore.clustering.ClusteringMethod.encode_centroid_info(clusters, cluster_centers_indices)[source]
+

Adjust cluster indices to include centroid information +as described in documentation for ClusterCollection

+
+ +
+

4.2.7.1.2.4. Clustering algorithms

+

The following clustering algorithms are always available:

+

Cython wrapper for the C implementation of the Affinity Perturbation clustering algorithm.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+
+MDAnalysis.analysis.encore.clustering.affinityprop.AffinityPropagation(s, preference, lam, max_iterations, convergence, noise=1)
+

Affinity propagation clustering algorithm. This class is a Cython wrapper around the Affinity propagation algorithm, which is implement as a C library (see ap.c). The implemented algorithm is described in the paper:

+

Clustering by Passing Messages Between Data Points. +Brendan J. Frey and Delbert Dueck, University of Toronto +Science 315, 972–976, February 2007

+
+
Parameters
+
    +
  • s (encore.utils.TriangularMatrix object) – Triangular matrix containing the similarity values for each pair of +clustering elements. Notice that the current implementation does not +allow for asymmetric values (i.e. similarity(a,b) is assumed to be +equal to similarity(b,a))

  • +
  • preference (numpy.array of floats or float) – Preference values, which the determine the number of clusters. If a +single value is given, all the preference values are set to that. +Otherwise, the list is used to set the preference values (one value per +element, so the list must be of the same size as the number of +elements)

  • +
  • lam (float) – Floating point value that defines how much damping is applied to the +solution at each iteration. Must be ]0,1]

  • +
  • max_iterations (int) – Maximum number of iterations

  • +
  • convergence (int) – Number of iterations in which the cluster centers must remain the same +in order to reach convergence

  • +
  • noise (int) – Whether to apply noise to the input s matrix, such there are no equal +values. 1 is for yes, 0 is for no.

  • +
+
+
Returns
+

elements – List of cluster-assigned elements, which can be used by +encore.utils.ClustersCollection to generate Cluster objects. See these +classes for more details.

+
+
Return type
+

list of int or None

+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/confdistmatrix.html b/2.7.0-dev0/documentation_pages/analysis/encore/confdistmatrix.html new file mode 100644 index 0000000000..b9856c5dc9 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/confdistmatrix.html @@ -0,0 +1,309 @@ + + + + + + + 4.2.7.1.4. Distance Matrix calculation — MDAnalysis.analysis.ensemble.confdistmatrix — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.7.1.4. Distance Matrix calculation — MDAnalysis.analysis.ensemble.confdistmatrix

+

The module contains a base class to easily compute, using +parallelization and shared memory, matrices of conformational +distance between the structures stored as frames in a Universe. A +class to compute an RMSD matrix in such a way is also available.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+MDAnalysis.analysis.encore.confdistmatrix.conformational_distance_matrix(ensemble, conf_dist_function, select='', superimposition_select='', n_jobs=1, pairwise_align=True, weights='mass', metadata=True, verbose=False, max_nbytes=None)[source]
+

Run the conformational distance matrix calculation. +args and kwargs are passed to conf_dist_function.

+
+
Parameters
+
    +
  • ensemble (Universe object) – Universe object for which the conformational distance matrix will +be computed.

  • +
  • conf_dist_function (function object) – Function that fills the matrix with conformational distance +values. See set_rmsd_matrix_elements for an example.

  • +
  • select (str, optional) – use this selection for the calculation of conformational distance

  • +
  • superimposition_select (str, optional) – use atoms from this selection for fitting instead of those of +select

  • +
  • pairwise_align (bool, optional) – Whether to perform pairwise alignment between conformations. +Default is True (do the superimposition)

  • +
  • weights (str/array_like, optional) – weights to be used for fit. Can be either ‘mass’ or an array_like

  • +
  • metadata (bool, optional) – Whether to build a metadata dataset for the calculated matrix. +Default is True.

  • +
  • n_jobs (int, optional) – Number of cores to be used for parallel calculation +Default is 1. -1 uses all available cores

  • +
  • max_nbytes (str, optional) – Threshold on the size of arrays passed to the workers that triggers automated memory mapping in temp_folder (default is None). +See https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html for detailed documentation.

  • +
  • verbose (bool, optional) – enable verbose output

  • +
+
+
Returns
+

conf_dist_matrix – Conformational distance matrix in triangular representation.

+
+
Return type
+

encore.utils.TriangularMatrix object

+
+
+
+ +
+
+MDAnalysis.analysis.encore.confdistmatrix.get_distance_matrix(ensemble, select='name CA', load_matrix=None, save_matrix=None, superimpose=True, superimposition_subset='name CA', weights='mass', n_jobs=1, max_nbytes=None, verbose=False, *conf_dist_args, **conf_dist_kwargs)[source]
+

Retrieves or calculates the conformational distance (RMSD) +matrix. The distance matrix is calculated between all the frames of all +the Universe objects given as input. +The order of the matrix elements depends on the order of the coordinates +of the ensembles and on the order of the input ensembles themselves, +therefore the order of the input list is significant.

+

The distance matrix can either be calculated from input ensembles or +loaded from an input numpy binary file.

+

Please notice that the .npz file does not contain a bi-dimensional array, +but a flattened representation that is meant to represent the elements of +an encore.utils.TriangularMatrix object.

+
+
Parameters
+
    +
  • ensemble (Universe) –

  • +
  • select (str) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • load_matrix (str, optional) – Load similarity/dissimilarity matrix from numpy binary file instead +of calculating it (default is None). A filename is required.

  • +
  • save_matrix (bool, optional) – Save calculated matrix as numpy binary file (default is None). A +filename is required.

  • +
  • superimpose (bool, optional) – Whether to superimpose structures before calculating distance +(default is True).

  • +
  • superimposition_subset (str, optional) – Group for superimposition using MDAnalysis selection syntax +(default is CA atoms: “name CA”)

  • +
  • weights (str/array_like, optional) – weights to be used for fit. Can be either ‘mass’ or an array_like

  • +
  • n_jobs (int, optional) – Maximum number of cores to be used (default is 1). If -1 use all cores.

  • +
  • max_nbytes (str, optional) – Threshold on the size of arrays passed to the workers that triggers automated memory mapping in temp_folder (default is None). +See https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html for detailed documentation.

  • +
  • verbose (bool, optional) – print progress

  • +
+
+
Returns
+

confdistmatrix – Conformational distance matrix. .

+
+
Return type
+

encore.utils.TriangularMatrix

+
+
+
+ +
+
+MDAnalysis.analysis.encore.confdistmatrix.set_rmsd_matrix_elements(tasks, coords, rmsdmat, weights, fit_coords=None, fit_weights=None, *args, **kwargs)[source]
+

RMSD Matrix calculator

+
+
Parameters
+
    +
  • tasks (iterator of int of length 2) –

    Given a triangular matrix, this function will calculate RMSD +values from element tasks[0] to tasks[1]. Since the matrix +is triangular, the trm_indices matrix automatically +calculates the corrisponding i,j matrix indices. +The matrix is written as an array in a row-major +order (see the TriangularMatrix class for details).

    +

    If fit_coords and fit_weights are specified, the structures +will be superimposed before calculating RMSD, and fit_coords and fit_weights +will be used to place both structures at their center of mass and +compute the rotation matrix. In this case, both fit_coords and fit_weights +must be specified.

    +

  • +
  • coords (numpy.array) – Array of the ensemble coordinates

  • +
  • weights (numpy.array) – Array of atomic weights, having the same order as the +coordinates array

  • +
  • rmsdmat (encore.utils.TriangularMatrix) – Memory-shared triangular matrix object

  • +
  • fit_coords (numpy.array or None, optional) – Array of the coordinates used for fitting

  • +
  • fit_weights (numpy.array. optional) – Array of atomic weights, having the same order as the +fit_coords array

  • +
+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/covariance.html b/2.7.0-dev0/documentation_pages/analysis/encore/covariance.html new file mode 100644 index 0000000000..a84ffcce4a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/covariance.html @@ -0,0 +1,271 @@ + + + + + + + 4.2.7.1.5. Covariance calculation — encore.covariance — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.7.1.5. Covariance calculation — encore.covariance

+

The module contains functions to estimate the covariance matrix of +an ensemble of structures.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+MDAnalysis.analysis.encore.covariance.covariance_matrix(ensemble, select='name CA', estimator=<function shrinkage_covariance_estimator>, weights='mass', reference=None)[source]
+

Calculates (optionally mass weighted) covariance matrix

+
+
Parameters
+
    +
  • ensemble (Universe object) – The structural ensemble

  • +
  • select (str (optional)) – Atom selection string in the MDAnalysis format.

  • +
  • estimator (function (optional)) – Function that estimates the covariance matrix. It requires at least +a “coordinates” numpy array (of shape (N,M,3), where N is the number +of frames and M the number of atoms). See ml_covariance_estimator and +shrinkage_covariance_estimator for reference.

  • +
  • weights (str/array_like (optional)) – specify weights. If 'mass' then chose masses of ensemble atoms, if None chose uniform weights

  • +
  • reference (MDAnalysis.Universe object (optional)) – Use the distances to a specific reference structure rather than the +distance to the mean.

  • +
+
+
Returns
+

cov_mat – Covariance matrix

+
+
Return type
+

numpy.array

+
+
+
+ +
+
+MDAnalysis.analysis.encore.covariance.ml_covariance_estimator(coordinates, reference_coordinates=None)[source]
+

Standard maximum likelihood estimator of the covariance matrix.

+
+
Parameters
+
    +
  • coordinates (numpy.array) – Flattened array of coordiantes

  • +
  • reference_coordinates (numpy.array) – Optional reference to use instead of mean

  • +
+
+
Returns
+

cov_mat – Estimate of covariance matrix

+
+
Return type
+

numpy.array

+
+
+
+ +
+
+MDAnalysis.analysis.encore.covariance.shrinkage_covariance_estimator(coordinates, reference_coordinates=None, shrinkage_parameter=None)[source]
+

Shrinkage estimator of the covariance matrix using the method described in

+

Improved Estimation of the Covariance Matrix of Stock Returns With an +Application to Portfolio Selection. Ledoit, O.; Wolf, M., Journal of +Empirical Finance, 10, 5, 2003

+

This implementation is based on the matlab code made available by Olivier +Ledoit on his website: +http://www.ledoit.net/ole2_abstract.htm

+
+
Parameters
+
    +
  • coordinates (numpy.array) – Flattened array of coordinates

  • +
  • reference_coordinates (numpy.array) – Optional reference to use instead of mean

  • +
  • shrinkage_parameter (None or float) – Optional shrinkage parameter

  • +
+
+
Returns
+

cov_mat – Covariance matrix

+
+
Return type
+

nump.array

+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.html b/2.7.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.html new file mode 100644 index 0000000000..f47983ea13 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.html @@ -0,0 +1,388 @@ + + + + + + + 4.2.7.1.3. Dimensionality reduction — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

4.2.7.1.3. Dimensionality reduction

+
+

4.2.7.1.3.1. dimensionality reduction frontend — MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality

+

The module defines a function serving as front-end for various dimensionality +reduction algorithms, wrapping them to allow them to be used interchangably.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality.reduce_dimensionality(ensembles, method=<MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative object>, select='name CA', distance_matrix=None, allow_collapsed_result=True, ncores=1, **kwargs)[source]
+

Reduce dimensions in frames from one or more ensembles, using one or more +dimensionality reduction methods. The function optionally takes +pre-calculated distances matrices as an argument. Note that not all +dimensionality reduction procedure can work directly on distance matrices, +so the distance matrices might be ignored for particular choices of +method.

+
+
Parameters
+
    +
  • ensembles (MDAnalysis.Universe, or list or list of list thereof) – The function takes either a single Universe object, a list of Universe +objects or a list of lists of Universe objects. If given a single +universe, it simply works on the conformations in the trajectory. If +given a list of ensembles, it will merge them and analyse them together, +keeping track of the ensemble to which each of the conformations belong. +Finally, if passed a list of list of ensembles, the function will just +repeat the functionality just described - merging ensembles for each +ensemble in the outer loop.

  • +
  • method (MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod or list) – A single or a list of instances of the DimensionalityReductionMethod +classes from the dimensionality_reduction module. A separate analysis +will be run for each method. Note that different parameters for the +same method can be explored by adding different instances of +the same dimensionality reduction class. Options are Stochastic +Proximity Embedding or Principal Component Analysis.

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format (default is “name CA”)

  • +
  • distance_matrix (encore.utils.TriangularMatrix, optional) – Distance matrix for stochastic proximity embedding. If this parameter +is not supplied an RMSD distance matrix will be calculated on the fly (default). +If several distance matrices are supplied, an analysis will be done +for each of them. The number of provided distance matrices should +match the number of provided ensembles.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value (default = True).

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
+
+
Returns
+

    +
  • list of coordinate arrays in the reduced dimensions (or potentially a single

  • +
  • coordinate array object if allow_collapsed_result is set to True)

  • +
+

+
+
+

Example

+

Two ensembles are created as Universe object using a topology file and +two trajectories. The topology- and trajectory files used are obtained +from the MDAnalysis test suite for two different simulations of the protein +AdK. +Here, we reduce two ensembles to two dimensions, and plot the result using +matplotlib:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> coordinates, details = encore.reduce_dimensionality([ens1,ens2])
+>>> plt.scatter(coordinates[0], coordinates[1],
+                color=[["red", "blue"][m-1] for m
+                in details["ensemble_membership"]])
+
+
+

Note how we extracted information about which conformation belonged to +which ensemble from the details variable.

+

You can change the parameters of the dimensionality reduction method +by explicitly specifying the method

+
>>> coordinates, details =
+        encore.reduce_dimensionality([ens1,ens2],
+             method=encore.StochasticProximityEmbeddingNative(dimension=3))
+
+
+

Here is an illustration using Principal Component Analysis, instead +of the default dimensionality reduction method

+
>>> coordinates, details =
+        encore.reduce_dimensionality(
+             [ens1,ens2],
+             method=encore.PrincipalComponentAnalysis(dimension=2))
+
+
+

You can also combine multiple methods in one call

+
>>> coordinates, details =
+        encore.reduce_dimensionality(
+             [ens1,ens2],
+             method=[encore.PrincipalComponentAnalysis(dimension=2),
+                     encore.StochasticProximityEmbeddingNative(dimension=2)])
+
+
+
+ +
+

4.2.7.1.3.2. dimensionality reduction frontend — MDAnalysis.analysis.encore.clustering.DimensionalityReductionMethod

+

The module defines classes for interfacing to various dimensionality reduction +algorithms. One has been implemented natively, and will always be available, +while others are available only if scikit-learn is installed

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+
+
+
+class MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.DimensionalityReductionMethod[source]
+

Base class for any Dimensionality Reduction Method

+
+ +
+
+class MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.PrincipalComponentAnalysis(dimension=2, **kwargs)[source]
+

Interface to the PCA dimensionality reduction method implemented in +sklearn.

+
+
Parameters
+

dimension (int) – Number of dimensions to which the conformational space will be +reduced to (default is 3).

+
+
+
+ +
+
+class MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative(dimension=2, distance_cutoff=1.5, min_lam=0.1, max_lam=2.0, ncycle=100, nstep=10000)[source]
+

Interface to the natively implemented Affinity propagation procedure.

+
+
Parameters
+
    +
  • dimension (int) – Number of dimensions to which the conformational space will be +reduced to (default is 3).

  • +
  • min_lam (float, optional) – Final lambda learning rate (default is 0.1).

  • +
  • max_lam (float, optional) – Starting lambda learning rate parameter (default is 2.0).

  • +
  • ncycle (int, optional) – Number of cycles per run (default is 100). At the end of every +cycle, lambda is updated.

  • +
  • nstep (int, optional) – Number of steps per cycle (default is 10000)

  • +
+
+
+
+ +
+

4.2.7.1.3.3. Dimensionality reduction algorithms

+

The following dimensionality reduction algorithms are always natively +available:

+

Cython wrapper for the C implementation of the Stochastic Proximity Embedding +dimensionality reduction algorithm.

+
+
Author
+

Matteo Tiberti, Wouter Boomsma

+
+
+
+
+MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed.StochasticProximityEmbedding(s, double rco, int dim, double maxlam, double minlam, int ncycle, int nstep, int stressfreq)
+

Stochastic proximity embedding dimensionality reduction algorithm. The +algorithm implemented here is described in this paper:

+

Dmitrii N. Rassokhin, Dimitris K. Agrafiotis +A modified update rule for stochastic proximity embedding +Journal of Molecular Graphics and Modelling 22 (2003) 133–140

+

This class is a Cython wrapper for a C implementation (see spe.c)

+
+
Parameters
+
    +
  • s (encore.utils.TriangularMatrix object) – Triangular matrix containing the distance values for each pair of +elements in the original space.

  • +
  • rco (float) – neighborhood distance cut-off

  • +
  • dim (int) – number of dimensions for the embedded space

  • +
  • minlam (float) – final learning parameter

  • +
  • maxlam (float) – starting learning parameter

  • +
  • ncycle (int) – number of cycles. Each cycle is composed of nstep steps. At the end +of each cycle, the lerning parameter lambda is updated.

  • +
  • nstep (int) – number of coordinate update steps for each cycle

  • +
+
+
Returns
+

    +
  • space ((float, numpy.array)) – float is the final stress obtained; the array are the coordinates of +the elements in the embedded space

  • +
  • stressfreq (int) – calculate and report stress value every stressfreq cycle

  • +
+

+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/similarity.html b/2.7.0-dev0/documentation_pages/analysis/encore/similarity.html new file mode 100644 index 0000000000..1d9cb64885 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/similarity.html @@ -0,0 +1,1292 @@ + + + + + + + 4.2.7.1.1. Ensemble Similarity Calculations — MDAnalysis.analysis.encore.similarity — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.7.1.1. Ensemble Similarity Calculations — MDAnalysis.analysis.encore.similarity

+
+
Author
+

Matteo Tiberti, Wouter Boomsma, Tone Bengtsen

+
+
+
+

New in version 0.16.0.

+
+

The module contains implementations of similarity measures between protein +ensembles described in [ᵇLindorff-Larsen2009]. The implementation and +examples are described in [ᵇTiberti2015].

+

The module includes facilities for handling ensembles and trajectories through +the Universe class, performing clustering or dimensionality reduction +of the ensemble space, estimating multivariate probability distributions from +the input data, and more. ENCORE can be used to compare experimental and +simulation-derived ensembles, as well as estimate the convergence of +trajectories from time-dependent simulations.

+

ENCORE includes three different methods for calculations of similarity measures +between ensembles implemented in individual functions:

+
    +
  • Harmonic Ensemble Similarity : hes()

  • +
  • Clustering Ensemble Similarity : ces()

  • +
  • Dimensional Reduction Ensemble Similarity : dres()

  • +
+

as well as two methods to evaluate the convergence of trajectories:

+ +

When using this module in published work please cite [ᵇTiberti2015].

+

References

+
+
+
ᵇLindorff-Larsen2009
+

Kresten Lindorff-Larsen and Jesper Ferkinghoff-Borg. Similarity measures for protein ensembles. PLOS ONE, 4(1):1–13, 01 2009. doi:10.1371/journal.pone.0004203.

+
+
ᵇTiberti2015(1,2,3,4,5,6,7,8,9)
+

Matteo Tiberti, Elena Papaleo, Tone Bengtsen, Wouter Boomsma, and Kresten Lindorff-Larsen. Encore: software for quantitative ensemble comparison. PLOS Computational Biology, 11(10):1–16, 10 2015. doi:10.1371/journal.pcbi.1004415.

+
+
+
+

Examples

+

The examples show how to use ENCORE to calculate a similarity measurement +of two simple ensembles. The ensembles are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK.

+

To calculate the Harmonic Ensemble Similarity (hes()) +two ensemble objects are first created and then used for calculation:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> HES, details = encore.hes([ens1, ens2])
+>>> print(HES)
+[[       0.         38279540.04524205]
+ [38279540.04524205        0.        ]]
+
+
+

HES can assume any non-negative value, i.e. no upper bound exists and the +measurement can therefore be used as an absolute scale.

+

The calculation of the Clustering Ensemble Similarity (ces()) +is computationally more expensive. It is based on clustering algorithms that in +turn require a similarity matrix between the frames the ensembles are made +of. The similarity matrix is derived from a distance matrix (By default a RMSD +matrix; a full RMSD matrix between each pairs of elements needs to be computed). +The RMSD matrix is automatically calculated:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> CES, details = encore.ces([ens1, ens2])
+>>> print(CES)
+[[0.         0.68070702]
+ [0.68070702 0.        ]]
+
+
+

The RMSD matrix can also be separately calculated to reuse it, e.g. for running +CES with different parameters or running the +Dimensional Reduction Ensemble Similarity (dres()) method. +DRES is based on the estimation of the probability density in +a dimensionally-reduced conformational space of the ensembles, obtained from +the original space using either the Stochastic Proximity Embedding algorithm or +the Principal Component Analysis. +In the following example the dimensions are reduced to 3 using the +RMSD matrix and the default SPE dimensional reduction method:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> rmsd_matrix = encore.get_distance_matrix(
+...                             encore.utils.merge_universes([ens1, ens2]))
+>>> DRES,details = encore.dres([ens1, ens2],
+...                             distance_matrix = rmsd_matrix)
+
+
+

The RMSD matrix can also be saved on disk with the option save_matrix:

+
rmsd_matrix = encore.get_distance_matrix(
+                                encore.utils.merge_universes([ens1, ens2]),
+                                save_matrix="rmsd.npz")
+
+
+

It can then be loaded and reused at a later time instead of being recalculated:

+
rmsd_matrix = encore.get_distance_matrix(
+                                encore.utils.merge_universes([ens1, ens2]),
+                                load_matrix="rmsd.npz")
+
+
+

In addition to the quantitative similarity estimate, the dimensional reduction +can easily be visualized, see the Example section in +MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality. +Due to the stochastic nature of SPE, two identical ensembles will not +necessarily result in an exactly 0 estimate of the similarity, but will be very +close. For the same reason, calculating the similarity with the dres() +twice will not result in necessarily identical values but rather two very close +values.

+

It should be noted that both in ces() and dres() the similarity is +evaluated using the Jensen-Shannon divergence resulting in an upper bound of +ln(2), which indicates no similarity between the ensembles and a lower bound +of 0.0 signifying two identical ensembles. In contrast, the hes() function uses +a symmetrized version of the Kullback-Leibler divergence, which is unbounded.

+
+

4.2.7.1.1.1. Functions for ensemble comparisons

+
+
+MDAnalysis.analysis.encore.similarity.hes(ensembles, select='name CA', cov_estimator='shrinkage', weights='mass', align=False, estimate_error=False, bootstrapping_samples=100, calc_diagonal=False)[source]
+

Calculates the Harmonic Ensemble Similarity (HES) between ensembles.

+

The HES is calculated with the symmetrized version of Kullback-Leibler +divergence as described in [ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of Universe objects for similarity measurements.

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • cov_estimator (str, optional) – Covariance matrix estimator method, either shrinkage, shrinkage, +or Maximum Likelyhood, ml. Default is shrinkage.

  • +
  • weights (str/array_like, optional) – specify optional weights. If mass then chose masses of ensemble atoms

  • +
  • align (bool, optional) – Whether to align the ensembles before calculating their similarity. +Note: this changes the ensembles in-place, and will thus leave your +ensembles in an altered state. +(default is False)

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False).

  • +
  • bootstrapping_samples (int, optional) – Number of times the similarity matrix will be bootstrapped (default +is 100), only if estimate_error is True.

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the similarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
+
+
Returns
+

hes, details – Harmonic similarity measurements between each pair of ensembles, +and dict containing mean and covariance matrix for each ensemble

+
+
Return type
+

numpy.array, dictionary

+
+
+

Notes

+

The method assumes that each ensemble is derived from a multivariate normal +distribution. The mean and covariance matrix are, thus, estimatated from +the distribution of each ensemble and used for comparision by the +symmetrized version of Kullback-Leibler divergence defined as:

+
+\[D_{KL}(P(x) || Q(x)) = + \int_{-\infty}^{\infty}P(x_i) ln(P(x_i)/Q(x_i)) = + \langle{}ln(P(x))\rangle{}_P - \langle{}ln(Q(x))\rangle{}_P\]
+

where the \(\langle{}.\rangle{}_P\) denotes an expectation +calculated under the distribution \(P\).

+

For each ensemble, the mean conformation is estimated as the average over +the ensemble, and the covariance matrix is calculated by default using a +shrinkage estimation method (or by a maximum-likelihood method, +optionally).

+

Note that the symmetrized version of the Kullback-Leibler divergence has no +upper bound (unlike the Jensen-Shannon divergence used by for instance CES and DRES).

+

When using this similarity measure, consider whether you want to align +the ensembles first (see example below).

+

Example

+

To calculate the Harmonic Ensemble similarity, two ensembles are created +as Universe objects from a topology file and two trajectories. The +topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +You can use the align=True option to align the ensembles first. This will +align everything to the current timestep in the first ensemble. Note that +this changes the ens1 and ens2 objects:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> HES, details = encore.hes([ens1, ens2])
+>>> print(HES)
+[[       0.         38279540.04524205]
+ [38279540.04524205        0.        ]]
+>>> print(encore.hes([ens1, ens2], align=True)[0])
+[[   0.         6889.89729056]
+ [6889.89729056    0.        ]]
+
+
+

Alternatively, for greater flexibility in how the alignment should be done +you can call use an AlignTraj object +manually:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> from MDAnalysis.analysis import align
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> _ = align.AlignTraj(ens1, ens1, select="name CA", in_memory=True).run()
+>>> _ = align.AlignTraj(ens2, ens1, select="name CA", in_memory=True).run()
+>>> print(encore.hes([ens1, ens2])[0])
+[[   0.         6889.89729056]
+ [6889.89729056    0.        ]]
+
+
+
+

Changed in version 1.0.0: hes doesn’t accept the details argument anymore, it always returns +the details of the calculation instead, in the form of a dictionary

+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.ces(ensembles, select='name CA', clustering_method=<MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative object>, distance_matrix=None, estimate_error=False, bootstrapping_samples=10, ncores=1, calc_diagonal=False, allow_collapsed_result=True)[source]
+

Calculates the Clustering Ensemble Similarity (CES) between ensembles +using the Jensen-Shannon divergence as described in +[ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of ensemble objects for similarity measurements

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • clustering_method – A single or a list of instances of the +MDAnalysis.analysis.encore.clustering.ClusteringMethod classes +from the clustering module. Different parameters for the same clustering +method can be explored by adding different instances of the same +clustering class. Clustering methods options are the +Affinity Propagation (default), the DBSCAN and the KMeans. The latter +two methods need the sklearn python module installed.

  • +
  • distance_matrix (encore.utils.TriangularMatrix) – Distance matrix clustering methods. If this parameter +is not supplied the matrix will be calculated on the fly.

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False). +Only bootstrapping mode is supported.

  • +
  • bootstrapping_samples (int, optional) – number of samples to be used for estimating error.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the similarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value.

  • +
+
+
Returns
+

ces, details – ces contains the similarity values, arranged in a numpy.array. +If only one clustering_method is provided the output will be a +2-dimensional square symmetrical numpy.array. The order of the matrix +elements depends on the order of the input ensembles: for instance, if

+
+

ensemble = [ens1, ens2, ens3]

+
+

the matrix elements [0,2] and [2,0] will both contain the similarity +value between ensembles ens1 and ens3. +Elaborating on the previous example, if n ensembles are given and m +clustering_methods are provided the output will be a list of m arrays +ordered by the input sequence of methods, each with a n*x*n +symmetrical similarity matrix.

+

details contains information on the clustering: the individual size of +each cluster, the centroids and the frames associated with each cluster.

+

+
+
Return type
+

numpy.array, numpy.array

+
+
+

Notes

+

In the Jensen-Shannon divergence the upper bound of ln(2) signifies +no similarity between the two ensembles, the lower bound, 0.0, +signifies identical ensembles.

+

To calculate the CES, the affinity propagation method (or others, if +specified) is used to partition the whole space of conformations. The +population of each ensemble in each cluster is then taken as a probability +density function. Different probability density functions from each +ensemble are finally compared using the Jensen-Shannon divergence measure.

+

Examples

+

To calculate the Clustering Ensemble similarity, two ensembles are +created as Universe object using a topology file and two trajectories. The +topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +To use a different clustering method, set the parameter clustering_method +(Note that the sklearn module must be installed). Likewise, different parameters +for the same clustering method can be explored by adding different +instances of the same clustering class. +Here the simplest case of just two instances of Universe is illustrated:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> CES, details = encore.ces([ens1,ens2])
+>>> print(CES)
+[[0.         0.68070702]
+ [0.68070702 0.        ]]
+>>> CES, details = encore.ces([ens1,ens2],
+...                           clustering_method = [encore.DBSCAN(eps=0.45),
+...                                                encore.DBSCAN(eps=0.50)])
+>>> print("eps=0.45: ", CES[0])
+eps=0.45:  [[0.         0.20447236]
+ [0.20447236 0.        ]]
+
+
+
>>> print("eps=0.5: ", CES[1])
+eps=0.5:  [[0.         0.25331629]
+ [0.25331629 0.        ]]
+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.dres(ensembles, select='name CA', dimensionality_reduction_method=<MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative object>, distance_matrix=None, nsamples=1000, estimate_error=False, bootstrapping_samples=100, ncores=1, calc_diagonal=False, allow_collapsed_result=True)[source]
+

Calculates the Dimensional Reduction Ensemble Similarity (DRES) between +ensembles using the Jensen-Shannon divergence as described in +[ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of ensemble objects for similarity measurements

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • dimensionality_reduction_method – A single or a list of instances of the DimensionalityReductionMethod +classes from the dimensionality_reduction module. Different parameters +for the same method can be explored by adding different instances of +the same dimensionality reduction class. Provided methods are the +Stochastic Proximity Embedding (default) and the Principal Component +Analysis.

  • +
  • distance_matrix (encore.utils.TriangularMatrix) – conformational distance matrix, It will be calculated on the fly +from the ensemble data if it is not provided.

  • +
  • nsamples (int, optional) – Number of samples to be drawn from the ensembles (default is 1000). +This is used to resample the density estimates and calculate the +Jensen-Shannon divergence between ensembles.

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False)

  • +
  • bootstrapping_samples (int, optional) – number of samples to be used for estimating error.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the simlarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value.

  • +
+
+
Returns
+

dres, details – dres contains the similarity values, arranged in numpy.array. +If one number of dimensions is provided as an integer, +the output will be a 2-dimensional square symmetrical numpy.array. +The order of the matrix elements depends on the order of the +input ensemble: for instance, if

+
+

ensemble = [ens1, ens2, ens3]

+
+

then the matrix elements [0,2] and [2,0] will both contain the +similarity value between ensembles ens1 and ens3. +Elaborating on the previous example, if n ensembles are given and m +methods are provided the output will be a list of m arrays +ordered by the input sequence of methods, each with a n*x*n +symmetrical similarity matrix.

+

details provide an array of the reduced_coordinates.

+

+
+
Return type
+

numpy.array, numpy.array

+
+
+

Notes

+

To calculate the similarity, the method first projects the ensembles into +lower dimensions by using the Stochastic Proximity Embedding (or others) +algorithm. A gaussian kernel-based density estimation method is then used +to estimate the probability density for each ensemble which is then used +to compute the Jensen-Shannon divergence between each pair of ensembles.

+

In the Jensen-Shannon divergence the upper bound of ln(2) signifies +no similarity between the two ensembles, the lower bound, 0.0, +signifies identical ensembles. However, due to the stochastic nature of +the dimensional reduction in dres(), two identical ensembles will +not necessarily result in an exact 0.0 estimate of the similarity but +will be very close. For the same reason, calculating the similarity with +the dres() twice will not result in two identical numbers; small +differences have to be expected.

+

Examples

+

To calculate the Dimensional Reduction Ensemble similarity, two ensembles +are created as Universe objects from a topology file and two trajectories. +The topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +To use a different dimensional reduction methods, simply set the +parameter dimensionality_reduction_method. Likewise, different parameters +for the same clustering method can be explored by adding different +instances of the same method class. +Here the simplest case of comparing just two instances of Universe is +illustrated:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF,DCD)
+>>> ens2 = Universe(PSF,DCD2)
+>>> DRES, details = encore.dres([ens1,ens2])
+>>> PCA_method = encore.PrincipalComponentAnalysis(dimension=2)
+>>> DRES, details = encore.dres([ens1,ens2],
+...                             dimensionality_reduction_method=PCA_method)
+
+
+

In addition to the quantitative similarity estimate, the dimensional +reduction can easily be visualized, see the Example section in +MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality`

+
+ +
+
+

4.2.7.1.1.2. Function reference

+
+
+
+
+MDAnalysis.analysis.encore.similarity.ces(ensembles, select='name CA', clustering_method=<MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative object>, distance_matrix=None, estimate_error=False, bootstrapping_samples=10, ncores=1, calc_diagonal=False, allow_collapsed_result=True)[source]
+

Calculates the Clustering Ensemble Similarity (CES) between ensembles +using the Jensen-Shannon divergence as described in +[ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of ensemble objects for similarity measurements

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • clustering_method – A single or a list of instances of the +MDAnalysis.analysis.encore.clustering.ClusteringMethod classes +from the clustering module. Different parameters for the same clustering +method can be explored by adding different instances of the same +clustering class. Clustering methods options are the +Affinity Propagation (default), the DBSCAN and the KMeans. The latter +two methods need the sklearn python module installed.

  • +
  • distance_matrix (encore.utils.TriangularMatrix) – Distance matrix clustering methods. If this parameter +is not supplied the matrix will be calculated on the fly.

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False). +Only bootstrapping mode is supported.

  • +
  • bootstrapping_samples (int, optional) – number of samples to be used for estimating error.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the similarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value.

  • +
+
+
Returns
+

ces, details – ces contains the similarity values, arranged in a numpy.array. +If only one clustering_method is provided the output will be a +2-dimensional square symmetrical numpy.array. The order of the matrix +elements depends on the order of the input ensembles: for instance, if

+
+

ensemble = [ens1, ens2, ens3]

+
+

the matrix elements [0,2] and [2,0] will both contain the similarity +value between ensembles ens1 and ens3. +Elaborating on the previous example, if n ensembles are given and m +clustering_methods are provided the output will be a list of m arrays +ordered by the input sequence of methods, each with a n*x*n +symmetrical similarity matrix.

+

details contains information on the clustering: the individual size of +each cluster, the centroids and the frames associated with each cluster.

+

+
+
Return type
+

numpy.array, numpy.array

+
+
+

Notes

+

In the Jensen-Shannon divergence the upper bound of ln(2) signifies +no similarity between the two ensembles, the lower bound, 0.0, +signifies identical ensembles.

+

To calculate the CES, the affinity propagation method (or others, if +specified) is used to partition the whole space of conformations. The +population of each ensemble in each cluster is then taken as a probability +density function. Different probability density functions from each +ensemble are finally compared using the Jensen-Shannon divergence measure.

+

Examples

+

To calculate the Clustering Ensemble similarity, two ensembles are +created as Universe object using a topology file and two trajectories. The +topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +To use a different clustering method, set the parameter clustering_method +(Note that the sklearn module must be installed). Likewise, different parameters +for the same clustering method can be explored by adding different +instances of the same clustering class. +Here the simplest case of just two instances of Universe is illustrated:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> CES, details = encore.ces([ens1,ens2])
+>>> print(CES)
+[[0.         0.68070702]
+ [0.68070702 0.        ]]
+>>> CES, details = encore.ces([ens1,ens2],
+...                           clustering_method = [encore.DBSCAN(eps=0.45),
+...                                                encore.DBSCAN(eps=0.50)])
+>>> print("eps=0.45: ", CES[0])
+eps=0.45:  [[0.         0.20447236]
+ [0.20447236 0.        ]]
+
+
+
>>> print("eps=0.5: ", CES[1])
+eps=0.5:  [[0.         0.25331629]
+ [0.25331629 0.        ]]
+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.ces_convergence(original_ensemble, window_size, select='name CA', clustering_method=<MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative object>, ncores=1)[source]
+

Use the CES to evaluate the convergence of the ensemble/trajectory. +CES will be calculated between the whole trajectory contained in an +ensemble and windows of such trajectory of increasing sizes, so that +the similarity values should gradually drop to zero. The rate at which +the value reach zero will be indicative of how much the trajectory +keeps on resampling the same regions of the conformational space, and +therefore of convergence.

+
+
Parameters
+
    +
  • original_ensemble (Universe object) – ensemble containing the trajectory whose convergence has to estimated

  • +
  • window_size (int) – Size of window to be used, in number of frames

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • clustering_method (MDAnalysis.analysis.encore.clustering.ClusteringMethod) – A single or a list of instances of the ClusteringMethod classes from +the clustering module. Different parameters for the same clustering +method can be explored by adding different instances of the same +clustering class.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
+
+
Returns
+

out – array of shape (number_of_frames / window_size, preference_values).

+
+
Return type
+

np.array

+
+
+

Example

+

To calculate the convergence of a trajectory using the clustering ensemble +similarity method a Universe object is created from a topology file and the +trajectory. The topology- and trajectory files used are obtained from the +MDAnalysis test suite for two different simulations of the protein AdK. +Here the simplest case of evaluating the convergence is illustrated by +splitting the trajectory into a window_size of 10 frames:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF,DCD)
+>>> ces_conv = encore.ces_convergence(ens1, 10)
+>>> print(ces_conv)
+[[0.48194205]
+ [0.40284672]
+ [0.31699026]
+ [0.25220447]
+ [0.19829817]
+ [0.14642725]
+ [0.09911411]
+ [0.05667391]
+ [0.        ]]
+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.clustering_ensemble_similarity(cc, ens1, ens1_id, ens2, ens2_id, select='name CA')[source]
+
+
Clustering ensemble similarity: calculate the probability densities from

the clusters and calculate discrete Jensen-Shannon divergence.

+
+
+
+
Parameters
+
    +
  • cc (encore.clustering.ClustersCollection) – Collection from cluster calculated by a clustering algorithm +(e.g. Affinity propagation)

  • +
  • ens1 (Universe) – First ensemble to be used in comparison

  • +
  • ens1_id (int) – First ensemble id as detailed in the ClustersCollection metadata

  • +
  • ens2 (Universe) – Second ensemble to be used in comparison

  • +
  • ens2_id (int) – Second ensemble id as detailed in the ClustersCollection metadata

  • +
  • select (str) – Atom selection string in the MDAnalysis format. Default is “name CA”.

  • +
+
+
Returns
+

djs – Jensen-Shannon divergence between the two ensembles, as calculated by +the clustering ensemble similarity method

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.cumulative_clustering_ensemble_similarity(cc, ens1_id, ens2_id, ens1_id_min=1, ens2_id_min=1)[source]
+

Calculate clustering ensemble similarity between joined ensembles. +This means that, after clustering has been performed, some ensembles are +merged and the dJS is calculated between the probability distributions of +the two clusters groups. In particular, the two ensemble groups are defined +by their ensembles id: one of the two joined ensembles will comprise all +the ensembles with id [ens1_id_min, ens1_id], and the other ensembles will +comprise all the ensembles with id [ens2_id_min, ens2_id].

+
+
Parameters
+
    +
  • cc (encore.ClustersCollection) – Collection from cluster calculated by a clustering algorithm +(e.g. Affinity propagation)

  • +
  • ens1_id (int) – First ensemble id as detailed in the ClustersCollection +metadata

  • +
  • ens2_id (int) – Second ensemble id as detailed in the ClustersCollection +metadata

  • +
+
+
Returns
+

djs – Jensen-Shannon divergence between the two ensembles, as +calculated by the clustering ensemble similarity method

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.cumulative_gen_kde_pdfs(embedded_space, ensemble_assignment, nensembles, nsamples, ens_id_min=1, ens_id_max=None)[source]
+

Generate Kernel Density Estimates (KDE) from embedded spaces and +elaborate the coordinates for later use. However, consider more than +one ensemble as the space on which the KDE will be generated. In +particular, will use ensembles with ID [ens_id_min, ens_id_max].

+
+
Parameters
+
    +
  • embedded_space (numpy.array) – Array containing the coordinates of the embedded space

  • +
  • ensemble_assignment (numpy.array) – array containing one int per ensemble conformation. These allow +to distinguish, in the complete embedded space, which +conformations belong to each ensemble. For instance if +ensemble_assignment is [1,1,1,1,2,2], it means that the first +four conformations belong to ensemble 1 and the last two +to ensemble 2

  • +
  • nensembles (int) – Number of ensembles

  • +
  • nsamples (int) – Samples to be drawn from the ensembles. Will be required in a later +stage in order to calculate dJS.

  • +
  • ens_id_min (int) – Minimum ID of the ensemble to be considered; see description

  • +
  • ens_id_max (int) – Maximum ID of the ensemble to be considered; see description. If None, +it will be set to the maximum possible value given the number of +ensembles.

  • +
+
+
Returns
+

    +
  • kdes (scipy.stats.gaussian_kde) – KDEs calculated from ensembles

  • +
  • resamples (list of numpy.array) – For each KDE, draw samples according to the probability +distribution of the kde mixture model

  • +
  • embedded_ensembles (list of numpy.array) – List of numpy.array containing, each one, the elements of the +embedded space belonging to a certain ensemble

  • +
+

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.dimred_ensemble_similarity(kde1, resamples1, kde2, resamples2, ln_P1_exp_P1=None, ln_P2_exp_P2=None, ln_P1P2_exp_P1=None, ln_P1P2_exp_P2=None)[source]
+

Calculate the Jensen-Shannon divergence according the Dimensionality +reduction method.

+

In this case, we have continuous probability densities, this we need to +integrate over the measurable space. The aim is to first calculate the +Kullback-Liebler divergence, which is defined as:

+
+\[D_{KL}(P(x) || Q(x)) = + \int_{-\infty}^{\infty}P(x_i) ln(P(x_i)/Q(x_i)) = + \langle{}ln(P(x))\rangle{}_P - \langle{}ln(Q(x))\rangle{}_P\]
+

where the \(\langle{}.\rangle{}_P\) denotes an expectation calculated +under the distribution P. We can, thus, just estimate the expectation +values of the components to get an estimate of dKL. Since the +Jensen-Shannon distance is actually more complex, we need to estimate four +expectation values:

+
+\[ \begin{align}\begin{aligned}\langle{}log(P(x))\rangle{}_P\\\langle{}log(Q(x))\rangle{}_Q\\\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_P\\\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_Q\end{aligned}\end{align} \]
+
+
Parameters
+
    +
  • kde1 (scipy.stats.gaussian_kde) – Kernel density estimation for ensemble 1

  • +
  • resamples1 (numpy.array) – Samples drawn according do kde1. Will be used as samples to +calculate the expected values according to ‘P’ as detailed before.

  • +
  • kde2 (scipy.stats.gaussian_kde) – Kernel density estimation for ensemble 2

  • +
  • resamples2 (numpy.array) – Samples drawn according do kde2. Will be used as sample to +calculate the expected values according to ‘Q’ as detailed before.

  • +
  • ln_P1_exp_P1 (float or None) – Use this value for \(\langle{}log(P(x))\rangle{}_P\); if None, +calculate it instead

  • +
  • ln_P2_exp_P2 (float or None) – Use this value for \(\langle{}log(Q(x))\rangle{}_Q\); if +None, calculate it instead

  • +
  • ln_P1P2_exp_P1 (float or None) – Use this value for +\(\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_P\); +if None, calculate it instead

  • +
  • ln_P1P2_exp_P2 (float or None) – Use this value for +\(\langle{}log(0.5*(P(x)+Q(x)))\rangle{}_Q\); +if None, calculate it instead

  • +
+
+
Returns
+

djs – Jensen-Shannon divergence calculated according to the dimensionality +reduction method

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.discrete_jensen_shannon_divergence(pA, pB)[source]
+

Jensen-Shannon divergence between discrete probability distributions.

+
+
Parameters
+
    +
  • pA (iterable of floats) – First discrete probability density function

  • +
  • pB (iterable of floats) – Second discrete probability density function

  • +
+
+
Returns
+

djs – Discrete Jensen-Shannon divergence

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.discrete_kullback_leibler_divergence(pA, pB)[source]
+

Kullback-Leibler divergence between discrete probability distribution. +Notice that since this measure is not symmetric :: +\(d_{KL}(p_A,p_B) != d_{KL}(p_B,p_A)\)

+
+
Parameters
+
    +
  • pA (iterable of floats) – First discrete probability density function

  • +
  • pB (iterable of floats) – Second discrete probability density function

  • +
+
+
Returns
+

dkl – Discrete Kullback-Liebler divergence

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.dres(ensembles, select='name CA', dimensionality_reduction_method=<MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative object>, distance_matrix=None, nsamples=1000, estimate_error=False, bootstrapping_samples=100, ncores=1, calc_diagonal=False, allow_collapsed_result=True)[source]
+

Calculates the Dimensional Reduction Ensemble Similarity (DRES) between +ensembles using the Jensen-Shannon divergence as described in +[ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of ensemble objects for similarity measurements

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • dimensionality_reduction_method – A single or a list of instances of the DimensionalityReductionMethod +classes from the dimensionality_reduction module. Different parameters +for the same method can be explored by adding different instances of +the same dimensionality reduction class. Provided methods are the +Stochastic Proximity Embedding (default) and the Principal Component +Analysis.

  • +
  • distance_matrix (encore.utils.TriangularMatrix) – conformational distance matrix, It will be calculated on the fly +from the ensemble data if it is not provided.

  • +
  • nsamples (int, optional) – Number of samples to be drawn from the ensembles (default is 1000). +This is used to resample the density estimates and calculate the +Jensen-Shannon divergence between ensembles.

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False)

  • +
  • bootstrapping_samples (int, optional) – number of samples to be used for estimating error.

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the simlarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
  • allow_collapsed_result (bool, optional) – Whether a return value of a list of one value should be collapsed +into just the value.

  • +
+
+
Returns
+

dres, details – dres contains the similarity values, arranged in numpy.array. +If one number of dimensions is provided as an integer, +the output will be a 2-dimensional square symmetrical numpy.array. +The order of the matrix elements depends on the order of the +input ensemble: for instance, if

+
+

ensemble = [ens1, ens2, ens3]

+
+

then the matrix elements [0,2] and [2,0] will both contain the +similarity value between ensembles ens1 and ens3. +Elaborating on the previous example, if n ensembles are given and m +methods are provided the output will be a list of m arrays +ordered by the input sequence of methods, each with a n*x*n +symmetrical similarity matrix.

+

details provide an array of the reduced_coordinates.

+

+
+
Return type
+

numpy.array, numpy.array

+
+
+

Notes

+

To calculate the similarity, the method first projects the ensembles into +lower dimensions by using the Stochastic Proximity Embedding (or others) +algorithm. A gaussian kernel-based density estimation method is then used +to estimate the probability density for each ensemble which is then used +to compute the Jensen-Shannon divergence between each pair of ensembles.

+

In the Jensen-Shannon divergence the upper bound of ln(2) signifies +no similarity between the two ensembles, the lower bound, 0.0, +signifies identical ensembles. However, due to the stochastic nature of +the dimensional reduction in dres(), two identical ensembles will +not necessarily result in an exact 0.0 estimate of the similarity but +will be very close. For the same reason, calculating the similarity with +the dres() twice will not result in two identical numbers; small +differences have to be expected.

+

Examples

+

To calculate the Dimensional Reduction Ensemble similarity, two ensembles +are created as Universe objects from a topology file and two trajectories. +The topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +To use a different dimensional reduction methods, simply set the +parameter dimensionality_reduction_method. Likewise, different parameters +for the same clustering method can be explored by adding different +instances of the same method class. +Here the simplest case of comparing just two instances of Universe is +illustrated:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF,DCD)
+>>> ens2 = Universe(PSF,DCD2)
+>>> DRES, details = encore.dres([ens1,ens2])
+>>> PCA_method = encore.PrincipalComponentAnalysis(dimension=2)
+>>> DRES, details = encore.dres([ens1,ens2],
+...                             dimensionality_reduction_method=PCA_method)
+
+
+

In addition to the quantitative similarity estimate, the dimensional +reduction can easily be visualized, see the Example section in +MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality`

+
+ +
+
+MDAnalysis.analysis.encore.similarity.dres_convergence(original_ensemble, window_size, select='name CA', dimensionality_reduction_method=<MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative object>, nsamples=1000, ncores=1)[source]
+

Use the DRES to evaluate the convergence of the ensemble/trajectory. +DRES will be calculated between the whole trajectory contained in an +ensemble and windows of such trajectory of increasing sizes, so that +the similarity values should gradually drop to zero. The rate at which +the value reach zero will be indicative of how much the trajectory +keeps on resampling the same ares of the conformational space, and +therefore of convergence.

+
+
Parameters
+
    +
  • original_ensemble (Universe object) – ensemble containing the trajectory whose convergence has to estimated

  • +
  • window_size (int) – Size of window to be used, in number of frames

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • dimensionality_reduction_method – A single or a list of instances of the DimensionalityReductionMethod +classes from the dimensionality_reduction module. Different parameters +for the same method can be explored by adding different instances of +the same dimensionality reduction class.

  • +
  • nsamples (int, optional) – Number of samples to be drawn from the ensembles (default is 1000). +This is akin to the nsamples parameter of dres().

  • +
  • ncores (int, optional) – Maximum number of cores to be used (default is 1).

  • +
+
+
Returns
+

out – array of shape (number_of_frames / window_size, preference_values).

+
+
Return type
+

np.array

+
+
+

Example

+

To calculate the convergence of a trajectory using the DRES +method, a Universe object is created from a topology file and the +trajectory. The topology- and trajectory files used are obtained from the +MDAnalysis test suite for two different simulations of the protein AdK. +Here the simplest case of evaluating the convergence is illustrated by +splitting the trajectory into a window_size of 10 frames:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF,DCD)
+>>> dres_conv = encore.dres_convergence(ens1, 10)
+
+
+

Here, the rate at which the values reach zero will be indicative of how +much the trajectory keeps on resampling the same ares of the conformational +space, and therefore of convergence.

+
+ +
+
+MDAnalysis.analysis.encore.similarity.gen_kde_pdfs(embedded_space, ensemble_assignment, nensembles, nsamples)[source]
+

Generate Kernel Density Estimates (KDE) from embedded spaces and +elaborate the coordinates for later use.

+
+
Parameters
+
    +
  • embedded_space (numpy.array) – Array containing the coordinates of the embedded space

  • +
  • ensemble_assignment (numpy.array) – Array containing one int per ensemble conformation. These allow to +distinguish, in the complete embedded space, which conformations +belong to each ensemble. For instance if ensemble_assignment +is [1,1,1,1,2,2], it means that the first four conformations belong +to ensemble 1 and the last two to ensemble 2

  • +
  • nensembles (int) – Number of ensembles

  • +
  • nsamples (int) – samples to be drawn from the ensembles. Will be required in +a later stage in order to calculate dJS.

  • +
+
+
Returns
+

    +
  • kdes (scipy.stats.gaussian_kde) – KDEs calculated from ensembles

  • +
  • resamples (list of numpy.array) – For each KDE, draw samples according to the probability distribution +of the KDE mixture model

  • +
  • embedded_ensembles (list of numpy.array) – List of numpy.array containing, each one, the elements of the +embedded space belonging to a certain ensemble

  • +
+

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.harmonic_ensemble_similarity(sigma1, sigma2, x1, x2)[source]
+

Calculate the harmonic ensemble similarity measure +as defined in [ᵇTiberti2015].

+
+
Parameters
+
    +
  • sigma1 (numpy.array) – Covariance matrix for the first ensemble.

  • +
  • sigma2 (numpy.array) – Covariance matrix for the second ensemble.

  • +
  • x1 (numpy.array) – Mean for the estimated normal multivariate distribution of the first +ensemble.

  • +
  • x2 (numpy.array) – Mean for the estimated normal multivariate distribution of the second +ensemble.

  • +
+
+
Returns
+

dhes – harmonic similarity measure

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.hes(ensembles, select='name CA', cov_estimator='shrinkage', weights='mass', align=False, estimate_error=False, bootstrapping_samples=100, calc_diagonal=False)[source]
+

Calculates the Harmonic Ensemble Similarity (HES) between ensembles.

+

The HES is calculated with the symmetrized version of Kullback-Leibler +divergence as described in [ᵇTiberti2015].

+
+
Parameters
+
    +
  • ensembles (list) – List of Universe objects for similarity measurements.

  • +
  • select (str, optional) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
  • cov_estimator (str, optional) – Covariance matrix estimator method, either shrinkage, shrinkage, +or Maximum Likelyhood, ml. Default is shrinkage.

  • +
  • weights (str/array_like, optional) – specify optional weights. If mass then chose masses of ensemble atoms

  • +
  • align (bool, optional) – Whether to align the ensembles before calculating their similarity. +Note: this changes the ensembles in-place, and will thus leave your +ensembles in an altered state. +(default is False)

  • +
  • estimate_error (bool, optional) – Whether to perform error estimation (default is False).

  • +
  • bootstrapping_samples (int, optional) – Number of times the similarity matrix will be bootstrapped (default +is 100), only if estimate_error is True.

  • +
  • calc_diagonal (bool, optional) – Whether to calculate the diagonal of the similarity scores +(i.e. the similarities of every ensemble against itself). +If this is False (default), 0.0 will be used instead.

  • +
+
+
Returns
+

hes, details – Harmonic similarity measurements between each pair of ensembles, +and dict containing mean and covariance matrix for each ensemble

+
+
Return type
+

numpy.array, dictionary

+
+
+

Notes

+

The method assumes that each ensemble is derived from a multivariate normal +distribution. The mean and covariance matrix are, thus, estimatated from +the distribution of each ensemble and used for comparision by the +symmetrized version of Kullback-Leibler divergence defined as:

+
+\[D_{KL}(P(x) || Q(x)) = + \int_{-\infty}^{\infty}P(x_i) ln(P(x_i)/Q(x_i)) = + \langle{}ln(P(x))\rangle{}_P - \langle{}ln(Q(x))\rangle{}_P\]
+

where the \(\langle{}.\rangle{}_P\) denotes an expectation +calculated under the distribution \(P\).

+

For each ensemble, the mean conformation is estimated as the average over +the ensemble, and the covariance matrix is calculated by default using a +shrinkage estimation method (or by a maximum-likelihood method, +optionally).

+

Note that the symmetrized version of the Kullback-Leibler divergence has no +upper bound (unlike the Jensen-Shannon divergence used by for instance CES and DRES).

+

When using this similarity measure, consider whether you want to align +the ensembles first (see example below).

+

Example

+

To calculate the Harmonic Ensemble similarity, two ensembles are created +as Universe objects from a topology file and two trajectories. The +topology- and trajectory files used are obtained from the MDAnalysis +test suite for two different simulations of the protein AdK. +You can use the align=True option to align the ensembles first. This will +align everything to the current timestep in the first ensemble. Note that +this changes the ens1 and ens2 objects:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> HES, details = encore.hes([ens1, ens2])
+>>> print(HES)
+[[       0.         38279540.04524205]
+ [38279540.04524205        0.        ]]
+>>> print(encore.hes([ens1, ens2], align=True)[0])
+[[   0.         6889.89729056]
+ [6889.89729056    0.        ]]
+
+
+

Alternatively, for greater flexibility in how the alignment should be done +you can call use an AlignTraj object +manually:

+
>>> from MDAnalysis import Universe
+>>> import MDAnalysis.analysis.encore as encore
+>>> from MDAnalysis.tests.datafiles import PSF, DCD, DCD2
+>>> from MDAnalysis.analysis import align
+>>> ens1 = Universe(PSF, DCD)
+>>> ens2 = Universe(PSF, DCD2)
+>>> _ = align.AlignTraj(ens1, ens1, select="name CA", in_memory=True).run()
+>>> _ = align.AlignTraj(ens2, ens1, select="name CA", in_memory=True).run()
+>>> print(encore.hes([ens1, ens2])[0])
+[[   0.         6889.89729056]
+ [6889.89729056    0.        ]]
+
+
+
+

Changed in version 1.0.0: hes doesn’t accept the details argument anymore, it always returns +the details of the calculation instead, in the form of a dictionary

+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.prepare_ensembles_for_convergence_increasing_window(ensemble, window_size, select='name CA')[source]
+

Generate ensembles to be fed to ces_convergence or dres_convergence +from a single ensemble. Basically, the different slices the algorithm +needs are generated here.

+
+
Parameters
+
    +
  • ensemble (Universe object) – Input ensemble

  • +
  • window_size (int) – size of the window (in number of frames) to be used

  • +
  • select (str) – Atom selection string in the MDAnalysis format. Default is “name CA”

  • +
+
+
Returns
+

The original ensemble is divided into different ensembles, each being +a window_size-long slice of the original ensemble. The last +ensemble will be bigger if the length of the input ensemble +is not exactly divisible by window_size.

+
+
Return type
+

tmp_ensembles

+
+
+
+ +
+
+MDAnalysis.analysis.encore.similarity.write_output(matrix, base_fname=None, header='', suffix='', extension='dat')[source]
+

Write output matrix with a nice format, to stdout and optionally a file.

+
+
Parameters
+
    +
  • matrix (encore.utils.TriangularMatrix) – Matrix containing the values to be printed

  • +
  • base_fname (str) – Basic filename for output. If None, no files will be written, and +the matrix will be just printed on standard output

  • +
  • header (str) – Text to be written just before the matrix

  • +
  • suffix (str) – String to be concatenated to basename, in order to get the final +file name

  • +
  • extension (str) – Extension for the output file

  • +
+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/encore/utils.html b/2.7.0-dev0/documentation_pages/analysis/encore/utils.html new file mode 100644 index 0000000000..a1034a652e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/encore/utils.html @@ -0,0 +1,416 @@ + + + + + + + 4.2.7.1.7. Utility functions for ENCORE — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+ +
+
+ +
+

4.2.7.1.7. Utility functions for ENCORE

+
+
+class MDAnalysis.analysis.encore.utils.ParallelCalculation(n_jobs, function, args=None, kwargs=None)[source]
+

Generic parallel calculation class. Can use arbitrary functions, +arguments to functions and kwargs to functions.

+
+
+n_jobs
+

Number of cores to be used for parallel calculation. If -1 use all +available cores.

+
+
Type
+

int

+
+
+
+ +
+
+function
+

Function to be run in parallel.

+
+
Type
+

callable object

+
+
+
+ +
+
+args
+

Each tuple contains the arguments that will be passed to +function(). This means that a call to function() is performed for +each tuple. function is called as function(*args, **kwargs). Runs +are distributed on the requested numbers of cores.

+
+
Type
+

list of tuples

+
+
+
+ +
+
+kwargs
+

Each tuple contains the named arguments that will be passed to +function, similarly as described for the args attribute.

+
+
Type
+

list of dicts

+
+
+
+ +
+
+nruns
+

Number of runs to be performed. Must be equal to len(args) and +len(kwargs).

+
+
Type
+

int

+
+
+
+ +
+
Parameters
+
    +
  • n_jobs (int) – Number of cores to be used for parallel calculation. If -1 use all +available cores.

  • +
  • function (object that supports __call__, as functions) – function to be run in parallel.

  • +
  • args (list of tuples) – Arguments for function; see the ParallelCalculation class +description.

  • +
  • kwargs (list of dicts or None) – kwargs for function; see the ParallelCalculation +class description.

  • +
+
+
+
+
+run()[source]
+

Run parallel calculation.

+
+
Returns
+

results – int is the number of the calculation corresponding to a +certain argument in the args list, and object is the result of +corresponding calculation. For instance, in (3, output), output +is the return of function(*args[3], **kwargs[3]).

+
+
Return type
+

tuple of ordered tuples (int, object)

+
+
+
+ +
+
+worker(q, results)[source]
+

Generic worker. Will run function with the prescribed args and kwargs.

+
+
Parameters
+
    +
  • q (multiprocessing.Manager.Queue object) – work queue, from which the worker fetches arguments and +messages

  • +
  • results (multiprocessing.Manager.Queue object) – results queue, where results are put after each calculation is +finished

  • +
+
+
+
+ +
+ +
+
+class MDAnalysis.analysis.encore.utils.TriangularMatrix(size, metadata=None, loadfile=None)[source]
+

Triangular matrix class. This class is designed to provide a +memory-efficient representation of a triangular matrix that still behaves +as a square symmetric one. The class wraps a numpy.array object, +in which data are memorized in row-major order. It also has few additional +facilities to conveniently load/write a matrix from/to file. It can be +accessed using the [] and () operators, similarly to a normal numpy array.

+

Class constructor.

+
+
Parameters
+
    +
  • size (int / array_like) – Size of the matrix (number of rows or columns). If an +array is provided instead, the size of the triangular matrix +will be calculated and the array copied as the matrix +elements. Otherwise, the matrix is just initialized to zero.

  • +
  • metadata (dict or None) – Metadata dictionary. Used to generate the metadata attribute.

  • +
  • loadfile (str or None) – Load the matrix from this file. All the attributes and data will +be determined by the matrix file itself (i.e. metadata will be +ignored); size has to be provided though.

  • +
+
+
+
+
+as_array()[source]
+

Return standard numpy array equivalent

+
+ +
+
+loadz(fname)[source]
+

Load matrix from the npz compressed numpy format.

+
+
Parameters
+

fname (str) – Name of the file to be loaded.

+
+
+
+ +
+
+savez(fname)[source]
+

Save matrix in the npz compressed numpy format. Save metadata and +data as well.

+
+
Parameters
+

fname (str) – Name of the file to be saved.

+
+
+
+ +
+ +
+
+MDAnalysis.analysis.encore.utils.merge_universes(universes)[source]
+

Merge list of universes into one

+
+
Parameters
+

universes (list of Universe objects) –

+
+
Return type
+

Universe object

+
+
+
+ +
+
+MDAnalysis.analysis.encore.utils.trm_indices(a, b)[source]
+

Generate (i,j) indeces of a triangular matrix, between elements a and b. +The matrix size is automatically determined from the number of elements. +For instance: trm_indices((0,0),(2,1)) yields (0,0) (1,0) (1,1) (2,0) +(2,1).

+
+
Parameters
+
    +
  • a ((int i, int j) tuple) – starting matrix element.

  • +
  • b ((int i, int j) tuple) – final matrix element.

  • +
+
+
+
+ +
+
+MDAnalysis.analysis.encore.utils.trm_indices_diag(n)[source]
+

generate (i,j) indeces of a triangular matrix of n rows (or columns), +with diagonal

+
+
Parameters
+

n (int) – Matrix size

+
+
+
+ +
+
+MDAnalysis.analysis.encore.utils.trm_indices_nodiag(n)[source]
+

generate (i,j) indeces of a triangular matrix of n rows (or columns), +without diagonal (e.g. no elements (0,0),(1,1),…,(n,n))

+
+
Parameters
+

n (int) – Matrix size

+
+
+
+ +
+
+MDAnalysis.analysis.encore.cutils.PureRMSD(coordsi, coordsj, atomsn, masses, summasses)
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/gnm.html b/2.7.0-dev0/documentation_pages/analysis/gnm.html new file mode 100644 index 0000000000..3fca83d22b --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/gnm.html @@ -0,0 +1,443 @@ + + + + + + + 4.7.1.1. Elastic network analysis of MD trajectories — MDAnalysis.analysis.gnm — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.7.1.1. Elastic network analysis of MD trajectories — MDAnalysis.analysis.gnm

+
+
Author
+

Benjamin Hall <benjamin.a.hall@ucl.ac.uk>

+
+
Year
+

2011

+
+
Copyright
+

GNU Public License v2 or later

+
+
+

Analyse a trajectory using elastic network models, following the approach of +[Hall2007].

+

An example is provided in the MDAnalysis Cookbook, listed as GNMExample.

+

The basic approach is to pass a trajectory to GNMAnalysis and then run +the analysis:

+
u = MDAnalysis.Universe(PSF, DCD)
+C = MDAnalysis.analysis.gnm.GNMAnalysis(u, ReportVector="output.txt")
+
+C.run()
+output = zip(*C.results)
+
+with open("eigenvalues.dat", "w") as outputfile:
+    for item in output[1]:
+        outputfile.write(item + "\n")
+
+
+

The results are found in GNMAnalysis.results, which can be +used for further processing (see [Hall2007]).

+

References

+
+
+
Hall2007(1,2)
+

Benjamin A. Hall, Samantha L. Kaye, Andy Pang, Rafael Perera, and Philip C. Biggin. Characterization of protein conformational states by normal-mode frequencies. Journal of the American Chemical Society, 129(37):11394–11401, 2007. PMID: 17715919. doi:10.1021/ja071797y.

+
+
+
+
+

4.7.1.1.1. Analysis tasks

+
+
+class MDAnalysis.analysis.gnm.GNMAnalysis(universe, select='protein and name CA', cutoff=7.0, ReportVector=None, Bonus_groups=None)[source]
+

Basic tool for GNM analysis.

+

Each frame is treated as a novel structure and the GNM +calculated. By default, this stores the dominant eigenvector +and its associated eigenvalue; either can be used to monitor +conformational change in a simulation.

+
+
Parameters
+
    +
  • universe (Universe) – Analyze the full trajectory in the universe.

  • +
  • select (str (optional)) – MDAnalysis selection string

  • +
  • cutoff (float (optional)) – Consider selected atoms within the cutoff as neighbors for the +Gaussian network model.

  • +
  • ReportVector (str (optional)) – filename to write eigenvectors to, by default no output is written

  • +
  • Bonus_groups (tuple) – This is a tuple of selection strings that identify additional groups +(such as ligands). The center of mass of each group will be added as +a single point in the ENM (it is a popular way of treating small +ligands such as drugs). You need to ensure that none of the atoms in +Bonus_groups is contained in selection as this could lead to +double counting. No checks are applied.

  • +
+
+
+
+
+results.times
+

simulation times used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.eigenvalues
+

calculated eigenvalues

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.eigenvectors
+

calculated eigenvectors

+
+
Type
+

numpy.ndarray

+
+
+
+ + +
+

Changed in version 0.16.0: Made generate_output() a private method _generate_output().

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+

Changed in version 2.0.0: Use AnalysisBase as parent class and +store results as attributes times, eigenvalues and +eigenvectors of the results attribute.

+
+
+
+generate_kirchoff()[source]
+

Generate the Kirchhoff matrix of contacts.

+

This generates the neighbour matrix by generating a grid of +near-neighbours and then calculating which are are within +the cutoff.

+
+
Returns
+

the resulting Kirchhoff matrix

+
+
Return type
+

array

+
+
+
+ +
+ +
+
+class MDAnalysis.analysis.gnm.closeContactGNMAnalysis(universe, select='protein', cutoff=4.5, ReportVector=None, weights='size')[source]
+

GNMAnalysis only using close contacts.

+

This is a version of the GNM where the Kirchoff matrix is +constructed from the close contacts between individual atoms +in different residues.

+
+
Parameters
+
    +
  • universe (Universe) – Analyze the full trajectory in the universe.

  • +
  • select (str (optional)) – MDAnalysis selection string

  • +
  • cutoff (float (optional)) – Consider selected atoms within the cutoff as neighbors for the +Gaussian network model.

  • +
  • ReportVector (str (optional)) – filename to write eigenvectors to, by default no output is written

  • +
  • weights ({"size", None} (optional)) – If set to “size” (the default) then weight the contact by +\(1/\sqrt{N_i N_j}\) where \(N_i\) and \(N_j\) are the +number of atoms in the residues \(i\) and \(j\) that contain +the atoms that form a contact.

  • +
+
+
+
+
+results.times
+

simulation times used in analysis

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.eigenvalues
+

calculated eigenvalues

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.eigenvectors
+

calculated eigenvectors

+
+
Type
+

numpy.ndarray

+
+
+
+ +

Notes

+

The MassWeight option has now been removed.

+
+

See also

+

GNMAnalysis

+
+
+

Changed in version 0.16.0: Made generate_output() a private method _generate_output().

+
+
+

Deprecated since version 0.16.0: Instead of MassWeight=True use weights="size".

+
+
+

Changed in version 1.0.0: MassWeight option (see above deprecation entry). +Changed selection keyword to select

+
+
+

Changed in version 2.0.0: Use AnalysisBase as parent class and +store results as attributes times, eigenvalues and +eigenvectors of the results attribute.

+
+
+
+generate_kirchoff()[source]
+

Generate the Kirchhoff matrix of contacts.

+

This generates the neighbour matrix by generating a grid of +near-neighbours and then calculating which are are within +the cutoff.

+
+
Returns
+

the resulting Kirchhoff matrix

+
+
Return type
+

array

+
+
+
+ +
+ +
+
+

4.7.1.1.2. Utility functions

+

The following functions are used internally and are typically not +directly needed to perform the analysis.

+
+
+MDAnalysis.analysis.gnm.generate_grid(positions, cutoff)[source]
+

Simple grid search.

+

An alternative to searching the entire list of each atom; divide the +structure into cutoff sized boxes This way, for each particle you only need +to search the neighbouring boxes to find the particles within the cutoff.

+

Observed a 6x speed up for a smallish protein with ~300 residues; this +should get better with bigger systems.

+
+
Parameters
+
    +
  • positions (array) – coordinates of the atoms

  • +
  • cutoff (float) – find particles with distance less than cutoff from each other; the +grid will consist of boxes with sides of at least length cutoff

  • +
+
+
+
+ +
+
+MDAnalysis.analysis.gnm.order_list(w)[source]
+

Returns a dictionary showing the order of eigenvalues (which are reported scrambled normally)

+
+ +
+

Changed in version 0.16.0: removed unused function backup_file()

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel.html b/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel.html new file mode 100644 index 0000000000..ed86077c06 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel.html @@ -0,0 +1,453 @@ + + + + + + + 4.3.2. Hydrogen bond autocorrelation — MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.3.2. Hydrogen bond autocorrelation — MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel

+
+
Author
+

Richard J. Gowers

+
+
Year
+

2014

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 0.9.0.

+
+ +
+

4.3.2.1. Description

+

Calculates the time autocorrelation function, \(C_x(t)\), for the hydrogen +bonds in the selections passed to it. The population of hydrogen bonds at a +given startpoint, \(t_0\), is evaluated based on geometric criteria and +then the lifetime of these bonds is monitored over time. Multiple passes +through the trajectory are used to build an average of the behaviour.

+
+\[C_x(t) = \left \langle \frac{h_{ij}(t_0) h_{ij}(t_0 + t)}{h_{ij}(t_0)^2} \right\rangle\]
+

The subscript \(x\) refers to the definition of lifetime being used, either +continuous or intermittent. The continuous definition measures the time that +a particular hydrogen bond remains continuously attached, whilst the +intermittent definition allows a bond to break and then subsequently reform and +be counted again. The relevent lifetime, \(\tau_x\), can then be found +via integration of this function

+
+\[\tau_x = \int_0^\infty C_x(t) dt`\]
+

For this, the observed behaviour is fitted to a multi exponential function, +using 2 exponents for the continuous lifetime and 3 for the intermittent +lifetime.

+
+

\(C_x(t) = A_1 \exp( - t / \tau_1) ++ A_2 \exp( - t / \tau_2) +[+ A_3 \exp( - t / \tau_3)]\)

+
+

Where the final pre expoential factor \(A_n\) is subject to the condition:

+
+

\(A_n = 1 - \sum\limits_{i=1}^{n-1} A_i\)

+
+

For further details see [Gowers2015].

+
+
+

4.3.2.2. Input

+

Three AtomGroup selections representing the hydrogens, donors and +acceptors that you wish to analyse. Note that the hydrogens and +donors selections must be aligned, that is hydrogens[0] and +donors[0] must represent a bonded pair. For systems such as water, +this will mean that each oxygen appears twice in the donors AtomGroup. +The function find_hydrogen_donors() can be used to construct the donor +AtomGroup

+
import MDAnalysis as mda
+from MDAnalysis.analysis import hbonds
+from MDAnalysis.tests.datafiles import waterPSF, waterDCD
+u = mda.Universe(waterPSF, waterDCD)
+hydrogens = u.select_atoms('name H*')
+donors = hbonds.find_hydrogen_donors(hydrogens)
+
+
+

Note that this requires the Universe to have bond information. If this isn’t +present in the topology file, the +MDAnalysis.core.groups.AtomGroup.guess_bonds() method can be used +as so

+
import MDAnalysis as mda
+from MDAnalysis.analysis import hbonds
+from MDAnalysis.tests.datafiles import GRO
+# we could load the Universe with guess_bonds=True
+# but this would guess **all** bonds
+u = mda.Universe(GRO)
+water = u.select_atoms('resname SOL and not type DUMMY')
+# guess bonds only within our water atoms
+# this adds the bond information directly to the Universe
+water.guess_bonds()
+hydrogens = water.select_atoms('type H')
+# this is now possible as we guessed the bonds
+donors = hbonds.find_hydrogen_donors(hydrogens)
+
+
+

The keyword exclusions allows a tuple of array addresses to be provided, +(Hidx, Aidx),these pairs of hydrogen-acceptor are then not permitted to be +counted as part of the analysis. This could be used to exclude the +consideration of hydrogen bonds within the same functional group, or to perform +analysis on strictly intermolecular hydrogen bonding.

+

Hydrogen bonds are defined on the basis of geometric criteria; a +Hydrogen-Acceptor distance of less then dist_crit and a +Donor-Hydrogen-Acceptor angle of greater than angle_crit.

+

The length of trajectory to analyse in ps, sample_time, is used to choose +what length to analyse.

+

Multiple passes, controlled by the keyword nruns, through the trajectory +are performed and an average calculated. For each pass, nsamples number +of points along the run are calculated.

+
+
+

4.3.2.3. Output

+

All results of the analysis are available through the solution attribute. +This is a dictionary with the following keys

+
    +
  • results The raw results of the time autocorrelation function.

  • +
  • time Time axis, in ps, for the results.

  • +
  • +
    fit Results of the exponential curve fitting procedure. For the

    continuous lifetime these are (A1, tau1, tau2), for the +intermittent lifetime these are (A1, A2, tau1, tau2, tau3).

    +
    +
    +
  • +
  • tau Calculated time constant from the fit.

  • +
  • estimate Estimated values generated by the calculated fit.

  • +
+

The results and time values are only filled after the run() method, +fit, tau and estimate are filled after the solve() method has been +used.

+
+
+

4.3.2.4. Worked Example for Polyamide

+

This example finds the continuous hydrogen bond lifetime between N-H..O in a +polyamide system. This will use the default geometric definition for hydrogen +bonds of length 3.0 Å and angle of 130 degrees. +It will observe a window of 2.0 ps (sample_time) and try to gather 1000 +sample point within this time window (this relies upon the trajectory being +sampled frequently enough). This process is repeated for 20 different start +points to build a better average.

+
import MDAnalysis as mda
+from MDAnalysis.analysis import hbonds
+from MDAnalysis.tests.datafiles import TRZ_psf, TRZ
+import matplotlib.pyplot as plt
+# load system
+u = mda.Universe(TRZ_psf, TRZ)
+# select atoms of interest into AtomGroups
+H = u.select_atoms('name Hn')
+N = u.select_atoms('name N')
+O = u.select_atoms('name O')
+# create analysis object
+hb_ac = hbonds.HydrogenBondAutoCorrel(u,
+            acceptors=O, hydrogens=H, donors=N,
+            bond_type='continuous',
+            sample_time=2.0, nsamples=1000, nruns=20)
+# call run to gather results
+hb_ac.run()
+# attempt to fit results to exponential equation
+hb_ac.solve()
+# grab results from inside object
+tau = hb_ac.solution['tau']
+time = hb_ac.solution['time']
+results = hb_ac.solution['results']
+estimate = hb_ac.solution['estimate']
+# plot to check!
+plt.plot(time, results, 'ro')
+plt.plot(time, estimate)
+plt.show()
+
+
+
+
+

4.3.2.5. Functions and Classes

+
+
+MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.find_hydrogen_donors(hydrogens)[source]
+

Returns the donor atom for each hydrogen

+
+
Parameters
+

hydrogens (AtomGroup) – the hydrogens that will form hydrogen bonds

+
+
Returns
+

donors – the donor atom for each hydrogen, found via bond information

+
+
Return type
+

AtomGroup

+
+
+
+

New in version 0.20.0.

+
+
+ +
+
+class MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel(universe, hydrogens=None, acceptors=None, donors=None, bond_type=None, exclusions=None, angle_crit=130.0, dist_crit=3.0, sample_time=100, time_cut=None, nruns=1, nsamples=50, pbc=True)[source]
+

Perform a time autocorrelation of the hydrogen bonds in the system.

+
+
Parameters
+
    +
  • universe (Universe) – MDAnalysis Universe that all selections belong to

  • +
  • hydrogens (AtomGroup) – AtomGroup of Hydrogens which can form hydrogen bonds

  • +
  • acceptors (AtomGroup) – AtomGroup of all Acceptor atoms

  • +
  • donors (AtomGroup) – The atoms which are connected to the hydrogens. This group +must be identical in length to the hydrogen group and matched, +ie hydrogens[0] is bonded to donors[0]. +For water, this will mean a donor appears twice in this +group, once for each hydrogen.

  • +
  • bond_type (str) – Which definition of hydrogen bond lifetime to consider, either +‘continuous’ or ‘intermittent’.

  • +
  • exclusions (ndarray, optional) – Indices of Hydrogen-Acceptor pairs to be excluded. +With nH and nA Hydrogens and Acceptors, a (nH x nA) array of distances +is calculated, exclusions is used as a mask on this array to exclude +some pairs.

  • +
  • angle_crit (float, optional) – The angle (in degrees) which all bonds must be greater than [130.0]

  • +
  • dist_crit (float, optional) – The maximum distance (in Angstroms) for a hydrogen bond [3.0]

  • +
  • sample_time (float, optional) – The amount of time, in ps, that you wish to observe hydrogen +bonds for [100]

  • +
  • nruns (int, optional) – The number of different start points within the trajectory +to use [1]

  • +
  • nsamples (int, optional) – Within each run, the number of frames to analyse [50]

  • +
  • pbc (bool, optional) – Whether to consider periodic boundaries in calculations [True]

  • +
  • ..versionchanged (1.0.0) – save_results() method was removed. You can instead use np.savez() +on HydrogenBondAutoCorrel.solution['time'] and +HydrogenBondAutoCorrel.solution['results'] instead.

  • +
+
+
+
+
+run(force=False)[source]
+

Run all the required passes

+
+
Parameters
+

force (bool, optional) – Will overwrite previous results if they exist

+
+
+
+ +
+
+solve(p_guess=None)[source]
+

Fit results to an multi exponential decay and integrate to find +characteristic time

+
+
Parameters
+

p_guess (tuple of floats, optional) – Initial guess for the leastsq fit, must match the shape of the +expected coefficients

+
+
+

Continuous defition results are fitted to a double exponential with +scipy.optimize.leastsq(), intermittent definition are fit to a +triple exponential.

+

The results of this fitting procedure are saved into the fit, +tau and estimate keywords in the solution dict.

+
+
    +
  • fit contains the coefficients, (A1, tau1, tau2) or +(A1, A2, tau1, tau2, tau3)

  • +
  • tau contains the calculated lifetime in ps for the hydrogen +bonding

  • +
  • estimate contains the estimate provided by the fit of the time +autocorrelation function

  • +
+
+

In addition, the output of the leastsq() function +is saved into the solution dict

+
+
    +
  • infodict

  • +
  • mesg

  • +
  • ier

  • +
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.html b/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.html new file mode 100644 index 0000000000..258d920545 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.html @@ -0,0 +1,202 @@ + + + + + + + 4.3.4. Hydrogen bond autocorrelation — MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated) — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.3.4. Hydrogen bond autocorrelation — MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)

+
+
Author
+

Richard J. Gowers

+
+
Year
+

2014

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 0.9.0.

+
+
+

Deprecated since version 2.0.0: This module was moved to +MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel and access to this +module through MDAnalysis.analysis.hbonds.hbond_autocorrel will be +removed in 3.0.0.

+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/helix_analysis.html b/2.7.0-dev0/documentation_pages/analysis/helix_analysis.html new file mode 100644 index 0000000000..4cc9506e7b --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/helix_analysis.html @@ -0,0 +1,242 @@ + + + + + + + 4.7.1.2. HELANAL — analysis of protein helices — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.7.1.2. HELANAL — analysis of protein helices

+
+
Author
+

Lily Wang

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 2.0.0.

+
+

This module contains code to analyse protein helices using the +HELANAL algorithm +([Bansal2000] , [Sugeta1967] ).

+

HELANAL quantifies the geometry of helices in proteins on the basis of their +Cα atoms. It can determine local structural features such as the local +helical twist and rise, virtual torsion angle, local helix origins and +bending angles between successive local helix axes.

+
+
Sugeta1967
+

Sugeta, H. and Miyazawa, T. 1967. General method for +calculating helical parameters of polymer chains from bond lengths, bond +angles and internal rotation angles. Biopolymers 5 673 - 679

+
+
Bansal2000
+

Bansal M, Kumar S, Velavan R. 2000. +HELANAL - A program to characterise helix geometry in proteins. +J Biomol Struct Dyn. 17(5):811-819.

+
+
+
+

4.7.1.2.1. Example use

+

You can pass in a single selection:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PSF, DCD
+from MDAnalysis.analysis import helix_analysis as hel
+u = mda.Universe(PSF, DCD)
+helanal = hel.HELANAL(u, select='name CA and resnum 161-187')
+helanal.run()
+
+
+

All computed properties are available in .results:

+
print(helanal.results.summary)
+
+
+

Alternatively, you can analyse several helices at once by passing +in multiple selection strings:

+
helanal2 = hel.HELANAL(u, select=('name CA and resnum 100-160',
+                                  'name CA and resnum 200-230'))
+
+
+

The helix_analysis() function will carry out helix analysis on +atom positions, treating each row of coordinates as an alpha-carbon +equivalent:

+
hel_xyz = hel.helix_analysis(u.atoms.positions, ref_axis=[0, 0, 1])
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/hole2.html b/2.7.0-dev0/documentation_pages/analysis/hole2.html new file mode 100644 index 0000000000..7936d5f1a1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/hole2.html @@ -0,0 +1,1366 @@ + + + + + + + 4.4.1. HOLE analysis — MDAnalysis.analysis.hole2 — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.4.1. HOLE analysis — MDAnalysis.analysis.hole2

+
+
Author
+

Lily Wang

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 1.0.0.

+
+

This module provides an updated interface for the HOLE suite of tools +[Smart1993, Smart1996] to analyse an ion channel pore or transporter +pathway [Stelzl2014] as a function of time or arbitrary order +parameters. It replaces MDAnalysis.analysis.hole.

+

HOLE must be installed separately and can be obtained in binary form +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.)

+
+

4.4.1.1. Module

+
+

4.4.1.1.1. HOLE Analysis — MDAnalysis.analysis.hole2

+
+
Author
+

Lily Wang

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 1.0.0.

+
+

This module contains the tools to interface with HOLE +[Smart1993, Smart1996] to analyse an ion channel pore or transporter +pathway [Stelzl2014].

+
+

4.4.1.1.1.1. 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.

+
+
+

4.4.1.1.1.2. Using HOLE on a trajectory

+

You can also run HOLE on a trajectory through the HoleAnalysis class. +This behaves similarly to the hole function, although arguments such as cpoint +and cvect become runtime arguments for the 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 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()
+
+
+
+
+

4.4.1.1.1.3. Using HOLE with VMD

+

The 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 +hole. This functionality is available with the +HoleAnalysis.create_vmd_surface() method +1. For an input trajectory MDAnalysis writes a +trajectory of pore surfaces that can be animated in VMD together with the +frames from the trajectory.

+
+
4.4.1.1.1.3.1. Analyzing a full trajectory
+

To analyze a full trajectory and write pore surfaces for all frames to 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.. Extensions ‣ Tk Console) load the surface +trajectory:

+
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.

+
+
+
4.4.1.1.1.3.2. 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.

+
+
+
+
4.4.1.1.1.3.3. Loading a trajectory into VMD with subsampling
+

Load your system into VMD. This can mean to load the topology file with +File ‣ New Molecule and adding the trajectory with +File ‣ Load Data into Molecule or just File +‣ New Molecule.

+

When loading the trajectory, subsample the frames by setting parametes in in +the Frames section. Select First: 1, Last: 7, Stride: 2. Then +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:

+
source hole_surface_subsampled.vmd
+
+
+

You should see a different surface for each frame in the trajectory. 2

+
+
+
4.4.1.1.1.3.4. Creating a subsampled trajectory
+

Instead of having VMD subsample the trajectory as described in +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 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 AtomGroup.write +method:

+
u.atoms.write("subsampled.trr", frames=u.trajectory[1:9:2])
+
+
+

This command creates the subsampled trajectory 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 (frame0.pdb) as topology so we need to +remove the first frame 2 (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 +(Extensions ‣ Tk Console) for loading and trimming the +trajectory; you can use the menu commands if you prefer.

+
# 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.

+
+
+
+

4.4.1.1.1.4. Functions and classes

+
+
+MDAnalysis.analysis.hole2.hole(*args, **kwds)
+

hole is deprecated!

+

Run hole on a single frame or a DCD trajectory.

+

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 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 +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, +SIMPLE2_RAD, is used (an extension of simple.rad from +the HOLE distribution).

  • +
  • executable (str, optional) – Path to the hole executable. +(e.g. ~/hole2/exe/hole). If +hole is found on the 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, +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 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
+

A dictionary of numpy.recarrays, indexed by frame.

+
+
Return type
+

dict

+
+
+

Notes

+
    +
  • HOLE is very picky and does not read all DCD-like formats 3. +If in doubt, look into the outfile for error diagnostics.

  • +
+
+

New in version 1.0.

+
+
+

Deprecated since version 2.6.0: This method has been moved to the MDAKit hole2-mdakit: https://github.com/MDAnalysis/hole2-mdakit +hole will be removed in release 3.0.0.

+
+
+ +
+
+class MDAnalysis.analysis.hole2.HoleAnalysis(universe, select='protein', verbose=False, ignore_residues=['SOL', 'WAT', 'TIP', 'HOH', 'K  ', 'NA ', 'CL '], vdwradii_file=None, executable='hole', sos_triangle='sos_triangle', sph_process='sph_process', tmpdir='.', cpoint=None, cvect=None, sample=0.2, end_radius=22, output_level=0, prefix=None, write_input_files=False)[source]
+

Run hole on a trajectory.

+

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, +SIMPLE2_RAD, is used (an extension of simple.rad from +the HOLE distribution).

  • +
  • executable (str, optional) – Path to the hole executable. +(e.g. ~/hole2/exe/hole). If +hole is found on the 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.

  • +
+
+
+
+
+results.sphpdbs
+

Array of sphpdb filenames

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.outfiles
+

Arrau of output filenames

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.profiles
+

Profiles generated by HOLE2. +A dictionary of numpy.recarrays, indexed by frame.

+
+

New in version 2.0.0.

+
+
+
Type
+

dict

+
+
+
+ +
+
+sphpdbs
+

Alias of results.sphpdbs

+
+

Deprecated since version 2.0.0: This will be removed in MDAnalysis 3.0.0. Please use +results.sphpdbs instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+outfiles
+

Alias of results.outfiles

+
+

Deprecated since version 2.0.0: This will be removed in MDAnalysis 3.0.0. Please use +results.outfiles instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+profiles
+

Alias of results.profiles

+
+

Deprecated since version 2.0.0: This will be removed in MDAnalysis 3.0.0. Please use +results.profiles instead.

+
+
+
Type
+

dict

+
+
+
+ +
+
+.. versionadded:: 1.0
+
+ +
+
+.. versionchanged:: 2.0.0
+

sphpdbs, outfiles and 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

+
+ +
+
+bin_radii(frames=None, bins=100, range=None)[source]
+

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

  • +
+

+
+
+
+ +
+
+create_vmd_surface(filename='hole.vmd', dot_density=15, no_water_color='red', one_water_color='green', double_water_color='blue')[source]
+

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 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
+

filename with the pore surfaces.

+
+
Return type
+

str

+
+
+
+ +
+
+delete_temporary_files()[source]
+

Delete temporary files

+
+ +
+
+gather(frames=None, flat=False)[source]
+

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
+

dictionary of fields

+
+
Return type
+

dict

+
+
+
+ +
+
+guess_cpoint()[source]
+

Guess a point inside the pore.

+

This method simply uses the center of geometry of the selection as a +guess.

+
+
Returns
+

center of geometry of selected AtomGroup

+
+
Return type
+

float

+
+
+
+ +
+
+histogram_radii(aggregator=<function mean>, frames=None, bins=100, range=None)[source]
+

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

  • +
+

+
+
+
+ +
+
+min_radius()[source]
+

Return the minimum radius over all profiles as a function of q

+
+ +
+
+over_order_parameters(order_parameters, frames=None)[source]
+

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
+

sorted dictionary of {order_parameter:profile}

+
+
Return type
+

collections.OrderedDict

+
+
+
+ +
+
+plot(frames=None, color=None, cmap='viridis', linestyle='-', y_shift=0.0, label=True, ax=None, legend_loc='best', **kwargs)[source]
+

Plot HOLE profiles \(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 \(R(\zeta)\) profile by y_shift in the +\(y\)-direction for clearer visualization.

  • +
  • label (bool or string, optional) – If False then no legend is +displayed.

  • +
  • ax (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 matplotlib.pyplot.plot().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

Axes

+
+
+
+ +
+
+plot3D(frames=None, color=None, cmap='viridis', linestyle='-', ax=None, r_max=None, ylabel='Frames', **kwargs)[source]
+

Stacked 3D graph of profiles \(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 (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 matplotlib.pyplot.plot().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

Axes3D

+
+
+
+ +
+
+plot3D_order_parameters(order_parameters, frames=None, color=None, cmap='viridis', linestyle='-', ax=None, r_max=None, ylabel='Order parameter', **kwargs)[source]
+

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 – Axes with the plot, either ax or the current axes.

+
+
Return type
+

: class: ~mpl_toolkits.mplot3d.Axes3D

+
+
+
+ +
+
+plot_mean_profile(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)[source]
+

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 (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 matplotlib.pyplot.plot().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

Axes

+
+
+
+ +
+
+plot_order_parameters(order_parameters, aggregator=<built-in function min>, frames=None, color='blue', linestyle='-', ax=None, ylabel='Minimum HOLE pore radius $r$ ($\\AA$)', xlabel='Order parameter', **kwargs)[source]
+

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 (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 matplotlib.pyplot.plot().

  • +
+
+
Returns
+

ax – Axes with the plot, either ax or the current axes.

+
+
Return type
+

Axes

+
+
+
+ +
+
+run(start=None, stop=None, step=None, verbose=None, random_seed=None)[source]
+

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, +hole will use the time of the day. +For reproducible runs (e.g., for testing) set random_seed +to an integer.

  • +
+
+
+
+ +
+ +

References

+
+
+
Smart1993(1,2)
+

O.S. Smart, J.M. Goodfellow, and B.A. Wallace. The pore dimensions of gramicidin a. Biophysical Journal, 65(6):2455–2460, 1993. doi:https://doi.org/10.1016/S0006-3495(93)81293-1.

+
+
Smart1996(1,2)
+

Oliver S. Smart, Joseph G. Neduvelil, Xiaonan Wang, B.A. Wallace, and Mark S.P. Sansom. Hole: a program for the analysis of the pore dimensions of ion channel structural models. Journal of Molecular Graphics, 14(6):354–360, 1996. doi:https://doi.org/10.1016/S0263-7855(97)00009-X.

+
+
Stelzl2014(1,2)
+

Lukas S. Stelzl, Philip W. Fowler, Mark S.P. Sansom, and Oliver Beckstein. Flexible gates generate occluded intermediates in the transport cycle of lacy. Journal of Molecular Biology, 426(3):735–751, 2014. doi:https://doi.org/10.1016/j.jmb.2013.10.024.

+
+
+
+

Footnotes

+
+
1
+

If you use the hole class to run +hole on a single PDB file then you can use +MDAnalysis.analysis.hole2.utils.create_vmd_surface() +function to manually run sph_process and +sos_triangle on the output files andcr eate a surface +file.

+
+
2(1,2)
+

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 Molecule ‣ +Delete Frames by setting First to 0 and Last to 0 and +selecting Delete.

+
+
3
+

PDB files are not the only files that 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 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 HoleAnalysis which creates +temporary PDB files for each frame of a +Universe or +AtomGroup and runs +:func:hole on each of them.

+
+
+
+
+
+
+

4.4.1.2. Utility functions and templates

+
+

4.4.1.2.1. HOLE Analysis — MDAnalysis.analysis.hole2.helper

+
+
Author
+

Lily Wang

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 1.0.

+
+

Helper functions used in MDAnalysis.analysis.hole2.hole

+
+
+
+MDAnalysis.analysis.hole2.utils.check_and_fix_long_filename(filename, tmpdir='.', max_length=70, make_symlink=True)[source]
+

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. +
  3. +
    returns a relative path (see os.path.relpath()) if that shortens the

    path sufficiently

    +
    +
    +
  4. +
  5. +
    creates a symlink to filename (os.symlink()) in a safe temporary

    directory and returns the path of the symlink.

    +
    +
    +
  6. +
+
+
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 os.path.curdir.

  • +
+
+
Returns
+

path to the file that has a length less than +max_length

+
+
Return type
+

str

+
+
Raises
+

RuntimeError – If none of the tricks for filename shortening worked. In this case, + manually rename the file or recompile your version of HOLE.

+
+
+
+ +
+
+MDAnalysis.analysis.hole2.utils.collect_hole(outfile='hole.out')[source]
+

Collect data from HOLE output

+
+
Parameters
+

outfile (str, optional) – HOLE output file to read. Default: ‘hole.out’

+
+
Returns
+

Dictionary of HOLE profiles as record arrays

+
+
Return type
+

dict

+
+
+
+ +
+
+MDAnalysis.analysis.hole2.utils.create_vmd_surface(sphpdb='hole.sph', filename=None, sph_process='sph_process', sos_triangle='sos_triangle', dot_density=15)[source]
+

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
+

the output filename for the VMD surface

+
+
Return type
+

str

+
+
+
+ +
+
+MDAnalysis.analysis.hole2.utils.run_hole(outfile, infile_text, executable)[source]
+

Run the HOLE program.

+
+
Parameters
+
    +
  • outfile (str) – Output file name

  • +
  • infile_text (str) – HOLE input text +(typically generated by set_up_hole_input())

  • +
  • executable (str) – HOLE executable

  • +
+
+
Returns
+

Output file name

+
+
Return type
+

str

+
+
+
+ +
+
+MDAnalysis.analysis.hole2.utils.write_simplerad2(filename='simple2.rad')[source]
+

Write the built-in radii in SIMPLE2_RAD to filename.

+

Does nothing if filename already exists.

+
+
Parameters
+

filename (str, optional) – output file name; the default is “simple2.rad”

+
+
Returns
+

filename – returns the name of the data file

+
+
Return type
+

str

+
+
+
+ +
+

4.4.1.2.2. HOLE Analysis — MDAnalysis.analysis.hole2.templates

+
+
Author
+

Lily Wang

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 1.0.

+
+

Templates used in MDAnalysis.analysis.hole2.hole

+
+
+
+MDAnalysis.analysis.hole2.templates.SIMPLE2_RAD = '\nremark: Time-stamp: <2005-11-21 13:57:55 oliver> [OB]\nremark: van der Waals radii: AMBER united atom\nremark: from Weiner et al. (1984), JACS, vol 106 pp765-768\nremark: Simple - Only use one value for each element C O H etc.\nremark: van der Waals radii\nremark: general last\nVDWR C??? ??? 1.85\nVDWR O??? ??? 1.65\nVDWR S??? ??? 2.00\nVDWR N??? ??? 1.75\nVDWR H??? ??? 1.00\nVDWR H?   ??? 1.00\nVDWR P??? ??? 2.10\nremark: ASN, GLN polar H (odd names for these atoms in xplor)\nVDWR E2?  GLN 1.00\nVDWR D2?  ASN 1.00\nremark: amber lone pairs on sulphurs\nVDWR LP?? ??? 0.00\nremark: for some funny reason it wants radius for K even though\nremark: it is on the exclude list\nremark: Use Pauling hydration radius (Hille 2001) [OB]\nVDWR K?   ??? 1.33\nVDWR NA?  ??? 0.95\nVDWR CL?  ??? 1.81\nremark: funny hydrogens in gA structure [OB]\nVDWR 1H?  ??? 1.00\nVDWR 2H?  ??? 1.00\nVDWR 3H?  ??? 1.00\nremark: need bond rad for molqpt option\nBOND C??? 0.85\nBOND N??? 0.75\nBOND O??? 0.7\nBOND S??? 1.1\nBOND H??? 0.5\nBOND P??? 1.0\nBOND ???? 0.85\n'
+

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 write_simplerad2().

+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/hydrogenbonds.html b/2.7.0-dev0/documentation_pages/analysis/hydrogenbonds.html new file mode 100644 index 0000000000..3dbc73bd69 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/hydrogenbonds.html @@ -0,0 +1,692 @@ + + + + + + + 4.3.1. Hydrogen Bond Analysis — MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.3.1. Hydrogen Bond Analysis — MDAnalysis.analysis.hydrogenbonds.hbond_analysis

+
+
Author
+

Paul Smith

+
+
Year
+

2019

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 1.0.0.

+
+

This module provides methods to find and analyse hydrogen bonds in a Universe.

+

The HydrogenBondAnalysis class is a new version of the original +MDAnalysis.analysis.hbonds.HydrogenBondAnalysis class from the module +MDAnalysis.analysis.hbonds.hbond_analysis, which itself was modeled after the VMD +HBONDS plugin.

+
+

4.3.1.1. Input

+
+
Required:
    +
  • universe : an MDAnalysis Universe object

  • +
+
+
Options:
    +
  • donors_sel [None] : Atom selection for donors. If None, then will be identified via the topology.

  • +
  • hydrogens_sel [None] : Atom selection for hydrogens. If None, then will be identified via charge and mass.

  • +
  • acceptors_sel [None] : Atom selection for acceptors. If None, then will be identified via charge.

  • +
  • d_h_cutoff (Å) [1.2] : Distance cutoff used for finding donor-hydrogen pairs

  • +
  • d_a_cutoff (Å) [3.0] : Distance cutoff for hydrogen bonds. This cutoff refers to the D-A distance.

  • +
  • d_h_a_angle_cutoff (degrees) [150] : D-H-A angle cutoff for hydrogen bonds.

  • +
  • update_selections [True] : If true, will update atom selections at each frame.

  • +
+
+
+
+
+

4.3.1.2. Output

+
+
    +
  • frame : frame at which a hydrogen bond was found

  • +
  • donor id : atom id of the hydrogen bond donor atom

  • +
  • hydrogen id : atom id of the hydrogen bond hydrogen atom

  • +
  • acceptor id : atom id of the hydrogen bond acceptor atom

  • +
  • distance (Å): length of the hydrogen bond

  • +
  • angle (degrees): angle of the hydrogen bond

  • +
+
+

Hydrogen bond data are returned in a numpy.ndarray on a “one line, one observation” basis +and can be accessed via HydrogenBondAnalysis.results.hbonds:

+
results = [
+    [
+        <frame>,
+        <donor index (0-based)>,
+        <hydrogen index (0-based)>,
+        <acceptor index (0-based)>,
+        <distance>,
+        <angle>
+    ],
+    ...
+]
+
+
+
+
+

4.3.1.3. Example use of HydrogenBondAnalysis

+

The simplest use case is to allow HydrogenBondAnalysis to guess the acceptor and hydrogen atoms, and to +identify donor-hydrogen pairs via the bonding information in the topology:

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+u = MDAnalysis.Universe(psf, trajectory)
+
+hbonds = HBA(universe=u)
+hbonds.run()
+
+
+

It is also possible to specify which hydrogens and acceptors to use in the analysis. For example, to find all hydrogen +bonds in water:

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+u = MDAnalysis.Universe(psf, trajectory)
+
+hbonds = HBA(universe=u, hydrogens_sel='resname TIP3 and name H1 H2', acceptors_sel='resname TIP3 and name OH2')
+hbonds.run()
+
+
+

Alternatively, hydrogens_sel and acceptors_sel may be generated via the guess_hydrogens and +guess_acceptors. This selection strings may then be modified prior to calling run, or a subset of +the universe may be used to guess the atoms. For example, find hydrogens and acceptors belonging to a protein:

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+u = MDAnalysis.Universe(psf, trajectory)
+
+hbonds = HBA(universe=u)
+hbonds.hydrogens_sel = hbonds.guess_hydrogens("protein")
+hbonds.acceptors_sel = hbonds.guess_acceptors("protein")
+hbonds.run()
+
+
+

Slightly more complex selection strings are also possible. For example, to find hydrogen bonds involving a protein and +any water molecules within 10 Å of the protein (which may be useful for subsequently finding the lifetime of +protein-water hydrogen bonds or finding water-bridging hydrogen bond paths):

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+
+u = MDAnalysis.Universe(psf, trajectory)
+
+hbonds = HBA(universe=u)
+
+protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
+protein_acceptors_sel = hbonds.guess_acceptors("protein")
+
+water_hydrogens_sel = "resname TIP3 and name H1 H2"
+water_acceptors_sel = "resname TIP3 and name OH2"
+
+hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel} and around 10 not resname TIP3})"
+hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel} and around 10 not resname TIP3})"
+hbonds.run()
+
+
+

To calculate the hydrogen bonds between different groups, for example a +protein and water, one can use the between keyword. The +following will find protein-water hydrogen bonds but not protein-protein +or water-water hydrogen bonds:

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
+  HydrogenBondAnalysis as HBA)
+
+u = MDAnalysis.Universe(psf, trajectory)
+
+hbonds = HBA(
+  universe=u,
+  between=['resname TIP3', 'protein']
+  )
+
+protein_hydrogens_sel = hbonds.guess_hydrogens("protein")
+protein_acceptors_sel = hbonds.guess_acceptors("protein")
+
+water_hydrogens_sel = "resname TIP3 and name H1 H2"
+water_acceptors_sel = "resname TIP3 and name OH2"
+
+hbonds.hydrogens_sel = f"({protein_hydrogens_sel}) or ({water_hydrogens_sel})"
+hbonds.acceptors_sel = f"({protein_acceptors_sel}) or ({water_acceptors_sel})"
+
+hbonds.run()
+
+
+

It is further possible to compute hydrogen bonds between several groups with +with use of between. If in the above example, +between=[[‘resname TIP3’, ‘protein’], [‘protein’, ‘protein’]], all +protein-water and protein-protein hydrogen bonds will be found, but +no water-water hydrogen bonds.

+

One can also define hydrogen bonds with atom types:

+
from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import HydrogenBondAnalysis as HBA
+hbonds = HBA(
+             universe=u,
+             donors_sel='type 2',
+             hydrogens_sel='type 1',
+             acceptors_sel='type 2',
+            )
+
+
+

In order to compute the hydrogen bond lifetime, after finding hydrogen bonds +one can use the lifetime function:

+
...
+hbonds.run()
+tau_timeseries, timeseries = hbonds.lifetime()
+
+
+

It is highly recommended that a topology with bond information is used to +generate the universe, e.g PSF, TPR, or PRMTOP files. This is the only +method by which it can be guaranteed that donor-hydrogen pairs are correctly +identified. However, if, for example, a PDB file is used instead, a +donors_sel may be provided along with a hydrogens_sel and the +donor-hydrogen pairs will be identified via a distance cutoff, +d_h_cutoff:

+
import MDAnalysis
+from MDAnalysis.analysis.hydrogenbonds.hbond_analysis import (
+  HydrogenBondAnalysis as HBA)
+
+u = MDAnalysis.Universe(pdb, trajectory)
+
+hbonds = HBA(
+  universe=u,
+  donors_sel='resname TIP3 and name OH2',
+  hydrogens_sel='resname TIP3 and name H1 H2',
+  acceptors_sel='resname TIP3 and name OH2',
+  d_h_cutoff=1.2
+)
+hbonds.run()
+
+
+
+
+

4.3.1.4. The class and its methods

+
+
+class MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis(universe, donors_sel=None, hydrogens_sel=None, acceptors_sel=None, between=None, d_h_cutoff=1.2, d_a_cutoff=3.0, d_h_a_angle_cutoff=150, update_selections=True)[source]
+

Perform an analysis of hydrogen bonds in a Universe.

+

Set up atom selections and geometric criteria for finding hydrogen +bonds in a Universe.

+

Hydrogen bond selections with donors_sel , hydrogens_sel, and +acceptors_sel may be achieved with either a resname, atom name +combination, or when those are absent, with atom type selections.

+
+
Parameters
+
    +
  • universe (Universe) – MDAnalysis Universe object

  • +
  • donors_sel (str) – Selection string for the hydrogen bond donor atoms. If the +universe topology contains bonding information, leave +donors_sel as None so that donor-hydrogen pairs can be +correctly identified.

  • +
  • hydrogens_sel (str) – Selection string for the hydrogen bond hydrogen atoms. Leave as +None to guess which hydrogens to use in the analysis using +guess_hydrogens. If hydrogens_sel is left as +None, also leave donors_sel as None so that +donor-hydrogen pairs can be correctly identified.

  • +
  • acceptors_sel (str) – Selection string for the hydrogen bond acceptor atoms. Leave as +None to guess which atoms to use in the analysis using +guess_acceptors

  • +
  • between (List (optional),) – Specify two selection strings for non-updating atom groups between +which hydrogen bonds will be calculated. For example, if the donor +and acceptor selections include both protein and water, it is +possible to find only protein-water hydrogen bonds - and not +protein-protein or water-water - by specifying +between=[“protein”, “SOL”]`. If a two-dimensional list is +passed, hydrogen bonds between each pair will be found. For +example, between=[[“protein”, “SOL”], [“protein”, “protein”]]` +will calculate all protein-water and protein-protein hydrogen +bonds but not water-water hydrogen bonds. If None, hydrogen +bonds between all donors and acceptors will be calculated.

  • +
  • d_h_cutoff (float (optional)) – Distance cutoff used for finding donor-hydrogen pairs. +Only used to find donor-hydrogen pairs if the +universe topology does not contain bonding information

  • +
  • d_a_cutoff (float (optional)) – Distance cutoff for hydrogen bonds. This cutoff refers to the D-A distance.

  • +
  • d_h_a_angle_cutoff (float (optional)) – D-H-A angle cutoff for hydrogen bonds, in degrees.

  • +
  • update_selections (bool (optional)) – Whether or not to update the acceptor, donor and hydrogen +lists at each frame.

  • +
+
+
+
+

Note

+

It is highly recommended that a universe topology with bond +information is used, as this is the only way that guarantees the +correct identification of donor-hydrogen pairs.

+
+
+

New in version 2.0.0: Added between keyword

+
+
+

Changed in version 2.4.0: Added use of atom types in selection strings for hydrogen atoms, +bond donors, or bond acceptors

+
+
+
+results.hbonds
+

A numpy.ndarray which contains a list of all observed hydrogen +bond interactions. See Output for more information.

+
+

New in version 2.0.0.

+
+
+ +
+
+hbonds
+

Alias to the results.hbonds attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.hbonds instead.

+
+
+ +
+
+count_by_ids()[source]
+

Counts the total number hydrogen bonds formed by unique combinations of donor, hydrogen and acceptor atoms.

+
+
Returns
+

counts – Each row of the array contains the donor atom id, hydrogen atom id, acceptor atom id and the total number +of times the hydrogen bond was observed. The array is sorted by frequency of occurrence.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

Unique hydrogen bonds are determined through a consideration of the hydrogen atom id and acceptor atom id +in a hydrogen bond.

+
+
+ +
+
+count_by_time()[source]
+

Counts the number of hydrogen bonds per timestep.

+
+
Returns
+

counts – Contains the total number of hydrogen bonds found at each timestep. +Can be used along with HydrogenBondAnalysis.times to plot +the number of hydrogen bonds over time.

+
+
Return type
+

numpy.ndarray

+
+
+
+ +
+
+count_by_type()[source]
+

Counts the total number of each unique type of hydrogen bond.

+
+
Returns
+

counts – Each row of the array contains the donor resname, donor atom type, +acceptor resname, acceptor atom type and the total number of times +the hydrogen bond was found.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

Unique hydrogen bonds are determined through a consideration of the +resname and atom type of the donor and acceptor atoms in a hydrogen bond.

+
+
+ +
+
+guess_acceptors(select='all', max_charge=-0.5)[source]
+

Guesses which atoms could be considered acceptors in the analysis.

+

Acceptor selections may be achieved with either a resname, atom +name combination, or when those are absent, atom types.

+
+
Parameters
+
    +
  • select (str (optional)) – Selection string for atom group +from which acceptors will be identified. (e.g., (resname X and +name O1) or type 2)

  • +
  • max_charge (float (optional)) – The charge of an acceptor atom must be less than this value.

  • +
+
+
Returns
+

potential_acceptors – String containing the resname and name of all atoms +that potentially capable of forming hydrogen bonds.

+
+
Return type
+

str

+
+
+

Notes

+

Acceptor selections may be achieved with either a resname, atom +name combination, or when those are absent, atom types.

+

This function makes use of and atomic charges to identify which atoms +could be considered acceptor atoms in the hydrogen bond analysis. If +an atom has an atomic charge less than max_charge then it is +considered capable of participating in hydrogen bonds.

+

If acceptors_sel is None, this function is called to guess +the selection.

+

Alternatively, this function may be used to quickly generate a +str of potential acceptor atoms involved in hydrogen bonding. +This str may then be modified before being used to set the +attribute acceptors_sel.

+
+

Changed in version 2.4.0: Added ability to use atom types

+
+
+ +
+
+guess_donors(select='all', max_charge=-0.5)[source]
+

Guesses which atoms could be considered donors in the analysis. Only +use if the universe topology does not contain bonding information, +otherwise donor-hydrogen pairs may be incorrectly assigned.

+
+
Parameters
+
    +
  • select (str (optional)) – Selection string for atom group +from which donors will be identified. (e.g., (resname X and name +O1) or type 2)

  • +
  • max_charge (float (optional)) – The charge of a donor atom must be less than this value.

  • +
+
+
Returns
+

potential_donors – String containing the resname and name of all atoms +that are potentially capable of forming hydrogen bonds.

+
+
Return type
+

str

+
+
+

Notes

+

Donor selections may be achieved with either a resname, atom +name combination, or when those are absent, atom types.

+

This function makes use of and atomic charges to identify which atoms +could be considered donor atoms in the hydrogen bond analysis. If an +atom has an atomic charge less than max_charge, and it is +within d_h_cutoff of a hydrogen atom, then it is considered +capable of participating in hydrogen bonds.

+

If donors_sel is None, and the universe topology does not +have bonding information, this function is called to guess the +selection.

+

Alternatively, this function may be used to quickly generate a +str of potential donor atoms involved in hydrogen bonding. +This str may then be modified before being used to set the +attribute donors_sel.

+
+

Changed in version 2.4.0: Added ability to use atom types

+
+
+ +
+
+guess_hydrogens(select='all', max_mass=1.1, min_charge=0.3, min_mass=0.9)[source]
+

Guesses which hydrogen atoms should be used in the analysis.

+
+
Parameters
+
    +
  • select (str (optional)) – Selection string for atom group +from which hydrogens will be identified. (e.g., (resname X and +name H1) or type 2)

  • +
  • max_mass (float (optional)) – The mass of a hydrogen atom must be less than this value.

  • +
  • min_mass (float (optional)) – The mass of a hydrogen atom must be greater than this value.

  • +
  • min_charge (float (optional)) – The charge of a hydrogen atom must be greater than this value.

  • +
+
+
Returns
+

potential_hydrogens – String containing the resname and name of all +hydrogen atoms potentially capable of forming hydrogen bonds.

+
+
Return type
+

str

+
+
+

Notes

+

Hydrogen selections may be achieved with either a resname, atom +name combination, or when those are absent, atom types.

+

This function makes use of atomic masses and atomic charges to identify +which atoms are hydrogen atoms that are capable of participating in +hydrogen bonding. If an atom has a mass less than max_mass and +an atomic charge greater than min_charge then it is considered +capable of participating in hydrogen bonds.

+

If hydrogens_sel is None, this function is called to guess +the selection.

+

Alternatively, this function may be used to quickly generate a +str of potential hydrogen atoms involved in hydrogen bonding. +This str may then be modified before being used to set the attribute +hydrogens_sel.

+
+

Changed in version 2.4.0: Added ability to use atom types

+
+
+ +
+
+lifetime(tau_max=20, window_step=1, intermittency=0)[source]
+

Computes and returns the time-autocorrelation +(HydrogenBondLifetimes) of hydrogen bonds.

+

Before calling this method, the hydrogen bonds must first be computed +with the run() function. The same start, stop and step +parameters used in finding hydrogen bonds will be used here for +calculating hydrogen bond lifetimes. That is, the same frames will be +used in the analysis.

+

Unique hydrogen bonds are identified using hydrogen-acceptor pairs. +This means an acceptor switching to a different hydrogen atom - with +the same donor - from one frame to the next is considered a different +hydrogen bond.

+

Please see MDAnalysis.lib.correlations.autocorrelation() and +MDAnalysis.lib.correlations.intermittency() functions for more +details.

+
+
Parameters
+
    +
  • window_step (int, optional) – The number of frames between each t(0).

  • +
  • tau_max (int, optional) – Hydrogen bond lifetime is calculated for frames in the range +1 <= tau <= tau_max

  • +
  • intermittency (int, optional) – The maximum number of consecutive frames for which a bond can +disappear but be counted as present if it returns at the next +frame. An intermittency of 0 is equivalent to a continuous +autocorrelation, which does not allow for hydrogen bond +disappearance. For example, for intermittency=2, any given +hydrogen bond may disappear for up to two consecutive frames yet +be treated as being present at all frames. The default is +continuous (intermittency=0).

  • +
+
+
Returns
+

    +
  • tau_timeseries (np.array) – tau from 1 to tau_max

  • +
  • timeseries (np.array) – autcorrelation value for each value of tau

  • +
+

+
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/leaflet.html b/2.7.0-dev0/documentation_pages/analysis/leaflet.html new file mode 100644 index 0000000000..99ba80cff7 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/leaflet.html @@ -0,0 +1,352 @@ + + + + + + + 4.4.2. Leaflet identification — MDAnalysis.analysis.leaflet — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.4.2. Leaflet identification — MDAnalysis.analysis.leaflet

+

This module implements the LeafletFinder algorithm, described in +[Michaud-Agrawal2011]. It can identify the lipids in a bilayer of +arbitrary shape and topology, including planar and undulating bilayers +under periodic boundary conditions or vesicles.

+

One can use this information to identify

+
    +
  • the upper and lower leaflet of a planar membrane by comparing the +the center_of_geometry() of +the leaflet groups, or

  • +
  • the outer and inner leaflet of a vesicle by comparing histograms +of distances from the centre of geometry (or possibly simply the +radius_of_gyration()).

  • +
+

See example scripts in the MDAnalysisCookbook on how to use +LeafletFinder. The function optimize_cutoff() implements a +(slow) heuristic method to find the best cut off for the LeafletFinder +algorithm.

+
+

4.4.2.1. Algorithm

+
    +
  1. build a graph of all phosphate distances < cutoff

  2. +
  3. identify the largest connected subgraphs

  4. +
  5. analyse first and second largest graph, which correspond to the leaflets

  6. +
+

For further details see [Michaud-Agrawal2011].

+
+
+

4.4.2.2. Classes and Functions

+
+
+class MDAnalysis.analysis.leaflet.LeafletFinder(universe, select, cutoff=15.0, pbc=False, sparse=None)[source]
+

Identify atoms in the same leaflet of a lipid bilayer.

+

This class implements the LeafletFinder algorithm [Michaud-Agrawal2011].

+
+
Parameters
+
    +
  • universe (Universe) – Universe object.

  • +
  • select (AtomGroup or str) – A AtomGroup instance or a +Universe.select_atoms() selection string +for atoms that define the lipid head groups, e.g. +universe.atoms.PO4 or “name PO4” or “name P*”

  • +
  • cutoff (float (optional)) – head group-defining atoms within a distance of cutoff +Angstroms are deemed to be in the same leaflet [15.0]

  • +
  • pbc (bool (optional)) – take periodic boundary conditions into account [False]

  • +
  • sparse (bool (optional)) – None: use fastest possible routine; True: use slow +sparse matrix implementation (for large systems); False: +use fast distance_array() +implementation [None].

  • +
+
+
+

Example

+

The components of the graph are stored in the list +LeafletFinder.components; the atoms in each component are numbered +consecutively, starting at 0. To obtain the atoms in the input structure +use LeafletFinder.groups():

+
u = mda.Universe(PDB)
+L = LeafletFinder(u, 'name P*')
+leaflet0 = L.groups(0)
+leaflet1 = L.groups(1)
+
+
+

The residues can be accessed through the standard MDAnalysis mechanism:

+
leaflet0.residues
+
+
+

provides a ResidueGroup +instance. Similarly, all atoms in the first leaflet are then

+
leaflet0.residues.atoms
+
+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+

Changed in version 2.0.0: The universe keyword no longer accepts non-Universe arguments. Please +create a Universe first.

+
+
+
+group(component_index)[source]
+

Return a MDAnalysis.core.groups.AtomGroup for component_index.

+
+ +
+
+groups(component_index=None)[source]
+

Return a MDAnalysis.core.groups.AtomGroup for component_index.

+

If no argument is supplied, then a list of all leaflet groups is returned.

+ +
+ +
+
+groups_iter()[source]
+

Iterator over all leaflet groups()

+
+ +
+
+sizes()[source]
+

Dict of component index with size of component.

+
+ +
+
+update(cutoff=None)[source]
+

Update components, possibly with a different cutoff

+
+ +
+
+write_selection(filename, **kwargs)[source]
+

Write selections for the leaflets to filename.

+

The format is typically determined by the extension of filename +(e.g. “vmd”, “pml”, or “ndx” for VMD, PyMol, or Gromacs).

+

See MDAnalysis.selections.base.SelectionWriter for all +options.

+
+ +
+ +
+
+MDAnalysis.analysis.leaflet.optimize_cutoff(universe, select, dmin=10.0, dmax=20.0, step=0.5, max_imbalance=0.2, **kwargs)[source]
+

Find cutoff that minimizes number of disconnected groups.

+

Applies heuristics to find best groups:

+
    +
  1. at least two groups (assumes that there are at least 2 leaflets)

  2. +
  3. reject any solutions for which:

    +
    +\[\frac{|N_0 - N_1|}{|N_0 + N_1|} > \mathrm{max_imbalance}\]
    +

    with \(N_i\) being the number of lipids in group +\(i\). This heuristic picks groups with balanced numbers of +lipids.

    +
  4. +
+
+
Parameters
+
    +
  • universe (Universe) – MDAnalysis.Universe instance

  • +
  • select (AtomGroup or str) – AtomGroup or selection string as used for LeafletFinder

  • +
  • dmin (float (optional)) –

  • +
  • dmax (float (optional)) –

  • +
  • step (float (optional)) – scan cutoffs from dmin to dmax at stepsize step (in Angstroms)

  • +
  • max_imbalance (float (optional)) – tuning parameter for the balancing heuristic [0.2]

  • +
  • kwargs (other keyword arguments) – other arguments for LeafletFinder

  • +
+
+
Returns
+

optimum cutoff and number of groups found

+
+
Return type
+

(cutoff, N)

+
+
+
+

Note

+

This function can die in various ways if really no +appropriate number of groups can be found; it ought to be +made more robust.

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/legacy/x3dna.html b/2.7.0-dev0/documentation_pages/analysis/legacy/x3dna.html new file mode 100644 index 0000000000..1475d05d26 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/legacy/x3dna.html @@ -0,0 +1,619 @@ + + + + + + + 4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles — MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles — MDAnalysis.analysis.legacy.x3dna

+
+
Author
+

Elizabeth Denning

+
+
Year
+

2013-2014

+
+
Copyright
+

GNU Public License v2

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.16.0: This module is difficult to test due to restrictions on the X3DNA code. It +is therefore considered unmaintained and legacy code. It was moved to the +MDAnalysis.analysis.legacy package (see issue 906)

+
+

With the help of this module, X3DNA can be run on frames in a trajectory. Data +can be combined and analyzed. X3DNA [Lu2003, Lu2008] must be installed +separately.

+

References

+
+
+
Lu2003
+

Xiang‐Jun Lu and Wilma K. Olson. 3DNA: a software package for the analysis, rebuilding and visualization of three‐dimensional nucleic acid structures. Nucleic Acids Research, 31(17):5108–5121, 09 2003. doi:10.1093/nar/gkg680.

+
+
Lu2008
+

Xiang-Jun Lu and Wilma K Olson. 3dna: a versatile, integrated software system for the analysis, rebuilding and visualization of three-dimensional nucleic-acid structures. Nature Protocols, 3(7):1213–1227, 2008. doi:10.1038/nprot.2008.104.

+
+
+
+
+

4.10.1.1.1.1. Example applications

+
+

4.10.1.1.1.1.1. Single structure

+

B-DNA structure:

+
from MDAnalysis.analysis.x3dna import X3DNA, X3DNAtraj
+from MDAnalysis.tests.datafiles import PDB_X3DNA
+
+# set path to your x3dna binary in bashrc file
+H = X3DNA(PDB_X3DNA, executable="x3dna_ensemble analyze -b 355d.bps -p pdbfile")
+H.run()
+H.collect()
+H.plot()
+
+
+
+
+

4.10.1.1.1.1.2. Trajectory

+

Analyzing a trajectory:

+
u = MDAnalysis.Universe(psf, trajectory)
+H = X3DNAtraj(u, ...)
+H.run()
+H.plot()
+H.save()
+
+
+

The profiles are available as the attribute X3DNAtraj.profiles +(H.profiles in the example) and are indexed by frame number but +can also be indexed by an arbitrary order parameter as shown in the +next example.

+
+
+
+

4.10.1.1.1.2. Analysis classes

+
+
+class MDAnalysis.analysis.legacy.x3dna.X3DNA(filename, **kwargs)[source]
+

Run X3DNA on a single frame or a DCD trajectory.

+

Only a subset of all X3DNA control parameters is supported and can be set +with keyword arguments. For further details on X3DNA see the X3DNA docs.

+

Running X3DNA with the X3DNA class is a 3-step process:

+
+
    +
  1. set up the class with all desired parameters

  2. +
  3. run X3DNA with X3DNA.run()

  4. +
  5. collect the data from the output file with X3DNA.collect()

  6. +
+
+

The class also provides some simple plotting functions of the collected +data such as X3DNA.plot() or X3DNA.plot3D().

+

When methods return helicoidal basepair parameter as lists, then the order +is always

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

index

parameter

0

shear

1

stretch

2

stagger

3

buckle

4

propeller

5

opening

6

shift

7

slide

8

rise

9

tilt

10

roll

11

twist

+
+

New in version 0.8.

+
+

Set up parameters to run X3DNA on PDB filename.

+
+
Parameters
+
    +
  • filename (str) – The filename is used as input for X3DNA in the +xdna_ensemble command. 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.

  • +
  • executable (str (optional)) – Path to the xdna_ensemble executable directories +(e.g. /opt/x3dna/2.1 and /opt/x3dna/2.1/bin) must be set +and then added to export in bashrc file. See X3DNA +documentation for set-up instructions.

  • +
  • x3dna_param (bool (optional)) – Determines whether base step or base pair parameters will be +calculated. If True (default) then stacked base step +parameters will be analyzed. If False then stacked base +pair parameters will be analyzed.

  • +
  • logfile (str (optional)) – Write output from X3DNA to logfile (default: “bp_step.par”)

  • +
+
+
+
+

See also

+

X3DNAtraj

+
+
+
+profiles
+

x3dna_ensemble analyze -b 355d.bps -p pdbfile attribute: +After running X3DNA.collect(), this dict contains all the +X3DNA profiles, indexed by the frame number. If only a single +frame was analyzed then this will be X3DNA.profiles[0]. Note +that the order is random; one needs to sort the keys first.

+
+ +
+
+collect(**kwargs)[source]
+

Parse the output from a X3DNA run into numpy recarrays.

+

Can deal with outputs containing multiple frames.

+

The method saves the result as X3DNA.profiles, a dictionary +indexed by the frame number. Each entry is a +np.recarray.

+

If the keyword outdir is supplied (e.g. “.”) then each profile is +saved to a gzipped data file.

+
+
Parameters
+
    +
  • run (str, int (optional) – identifier, free form [1]

  • +
  • outdir (str (optional)) – save output data under outdir/run if set to any other +value but None [None]

  • +
+
+
+
+ +
+
+mean()
+

Returns the mean value for the base parameters.

+
+
Returns
+

The list contains the means for the helicoidal parameters. The +order is [shear, stretch, stagger, buckle, propeller, opening, +shift, slide, rise, tilt, roll, twist].

+
+
Return type
+

list

+
+
+
+ +
+
+mean_std()
+

Returns the mean and standard deviation of base parameters.

+
+
Returns
+

The tuple contains two lists with the means and the standard deviations +for the helicoidal parameters. The order for both lists is [shear, +stretch, stagger, buckle, propeller, opening, shift, slide, rise, tilt, +roll, twist].

+
+
Return type
+

(list, list)

+
+
+
+ +
+
+plot(**kwargs)
+

Plot time-averaged base parameters for each basse pair in a 1D graph.

+

One plot is produced for each parameter. It shows the the mean and +standard deviation for each individual base pair. Each plot is saved to +PNG file with name “<parameter_name>.png”.

+
+
Parameters
+

ax (matplotlib.pyplot.Axes (optional)) – Provide ax to have all plots plotted in the same axes.

+
+
+
+ +
+
+run(**kwargs)[source]
+

Run X3DNA on the input file.

+
+ +
+
+save(filename='x3dna.pickle')
+

Save profiles as a Python pickle file filename.

+

Load profiles dictionary with

+
import cPickle
+profiles = cPickle.load(open(filename))
+
+
+
+ +
+
+sorted_profiles_iter()
+

Return an iterator over profiles sorted by frame/order parameter.

+

The iterator produces tuples (q, profile). Typically, q is the +frame number.

+
+ +
+
+std()
+

Returns the standard deviation for the base parameters.

+
+
Returns
+

The list contains the standard deviations for the helicoidal +parameters. The order is [shear, stretch, stagger, buckle, +propeller, opening, shift, slide, rise, tilt, roll, twist].

+
+
Return type
+

list

+
+
+
+ +
+ +
+
+class MDAnalysis.analysis.legacy.x3dna.X3DNAtraj(universe, **kwargs)[source]
+

Analyze all frames in a trajectory.

+

The X3DNA class provides a direct interface to X3DNA. X3DNA itself +has limited support for analysing trajectories but cannot deal with all the +trajectory formats understood by MDAnalysis. This class can take any +universe and feed it to X3DNA. By default it sequentially creates a PDB for +each frame and runs X3DNA on the frame.

+

Set up the class.

+
+
Parameters
+
    +
  • universe (Universe) – The input trajectory as part of a +Universe; the trajectory is +converted to a sequence of PDB files and X3DNA is run on each +individual file. (Use the start, stop, and step keywords +to slice the trajectory.)

  • +
  • selection (str (optional)) – MDAnalysis selection string (default: “nucleic”) to select the +atoms that should be analyzed.

  • +
  • start (int (optional)) –

  • +
  • stop (int (optional)) –

  • +
  • step (int (optional)) – frame indices to slice the trajectory as +universe.trajectory[start, stop, step]; by default, the whole +trajectory is analyzed.

  • +
  • x3dna_param (bool (optional)) – indicates whether stacked bases or stacked base-pairs will be +analyzed. True is bases and False is stacked base-pairs +[Default is True].

  • +
  • kwargs (keyword arguments (optional)) – All other keywords are passed on to X3DNA (see there +for description).

  • +
+
+
+
+

See also

+

X3DNA

+
+
+
+profiles
+

After running X3DNA.collect(), this dict contains all the +X3DNA profiles, indexed by the frame number.

+
+ +
+
+mean()
+

Returns the mean value for the base parameters.

+
+
Returns
+

The list contains the means for the helicoidal parameters. The +order is [shear, stretch, stagger, buckle, propeller, opening, +shift, slide, rise, tilt, roll, twist].

+
+
Return type
+

list

+
+
+
+ +
+
+mean_std()
+

Returns the mean and standard deviation of base parameters.

+
+
Returns
+

The tuple contains two lists with the means and the standard deviations +for the helicoidal parameters. The order for both lists is [shear, +stretch, stagger, buckle, propeller, opening, shift, slide, rise, tilt, +roll, twist].

+
+
Return type
+

(list, list)

+
+
+
+ +
+
+plot(**kwargs)
+

Plot time-averaged base parameters for each basse pair in a 1D graph.

+

One plot is produced for each parameter. It shows the the mean and +standard deviation for each individual base pair. Each plot is saved to +PNG file with name “<parameter_name>.png”.

+
+
Parameters
+

ax (matplotlib.pyplot.Axes (optional)) – Provide ax to have all plots plotted in the same axes.

+
+
+
+ +
+
+run(**kwargs)[source]
+

Run X3DNA on the whole trajectory and collect profiles.

+

Keyword arguments start, stop, and step can be used to only +analyse part of the trajectory. The defaults are the values provided to +the class constructor.

+
+ +
+
+run_x3dna(pdbfile, **kwargs)[source]
+

Run X3DNA on a single PDB file pdbfile.

+
+ +
+
+save(filename='x3dna.pickle')
+

Save profiles as a Python pickle file filename.

+

Load profiles dictionary with

+
import cPickle
+profiles = cPickle.load(open(filename))
+
+
+
+ +
+
+sorted_profiles_iter()
+

Return an iterator over profiles sorted by frame/order parameter.

+

The iterator produces tuples (q, profile). Typically, q is the +frame number.

+
+ +
+
+std()
+

Returns the standard deviation for the base parameters.

+
+
Returns
+

The list contains the standard deviations for the helicoidal +parameters. The order is [shear, stretch, stagger, buckle, +propeller, opening, shift, slide, rise, tilt, roll, twist].

+
+
Return type
+

list

+
+
+
+ +
+ +
+
+

4.10.1.1.1.3. Utilities

+
+
+exception MDAnalysis.analysis.legacy.x3dna.ApplicationError[source]
+

Raised when an external application failed.

+

The error code is specific for the application.

+
+

New in version 0.7.7.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/legacy_modules.html b/2.7.0-dev0/documentation_pages/analysis/legacy_modules.html new file mode 100644 index 0000000000..17bd8fe9c4 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/legacy_modules.html @@ -0,0 +1,204 @@ + + + + + + + 4.10.1. MDAnalysis.analysis.legacy — Legacy analysis code — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.10.1. MDAnalysis.analysis.legacy — Legacy analysis code

+
+

New in version 0.16.0.

+
+

The MDAnalysis.analysis.legacy package contains analysis +modules that are not or only incompletely tested and not regularly +maintained. They nevertheless still provide useful and sometimes +unique analysis capabilities and are therefore provided as +is. (For further discussion, see Issue 743.)

+
+

Warning

+

Code in the legacy package is not +regularly maintained. Please use it very carefully.

+
+

If you want to use modules from this package then you will have to import +them explicitly. For example,

+
from MDAnalysis.analysis.legacy import x3dna
+
+
+
+

4.10.1.1. Legacy modules

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/lineardensity.html b/2.7.0-dev0/documentation_pages/analysis/lineardensity.html new file mode 100644 index 0000000000..cf8d3b6567 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/lineardensity.html @@ -0,0 +1,415 @@ + + + + + + + 4.8.2. Linear Density — MDAnalysis.analysis.lineardensity — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.8.2. Linear Density — MDAnalysis.analysis.lineardensity

+

A tool to compute mass and charge density profiles along the three +cartesian axes [xyz] of the simulation cell. Works only for orthorombic, +fixed volume cells (thus for simulations in canonical NVT ensemble).

+
+
+
+class MDAnalysis.analysis.lineardensity.LinearDensity(select, grouping='atoms', binsize=0.25, **kwargs)[source]
+

Linear density profile

+
+
Parameters
+
    +
  • select (AtomGroup) – any atomgroup

  • +
  • grouping (str {'atoms', 'residues', 'segments', 'fragments'}) – Density profiles will be computed either on the atom positions (in +the case of ‘atoms’) or on the center of mass of the specified +grouping unit (‘residues’, ‘segments’, or ‘fragments’).

  • +
  • binsize (float) – Bin width in Angstrom used to build linear density +histograms. Defines the resolution of the resulting density +profile (smaller –> higher resolution)

  • +
  • verbose (bool, optional) – Show detailed progress of the calculation if set to True

  • +
+
+
+
+
+results.x.dim
+

index of the [xyz] axes

+
+
Type
+

int

+
+
+
+ +
+
+results.x.mass_density
+

mass density in \(g \cdot cm^{-3}\) in [xyz] direction

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.mass_density_stddev
+

standard deviation of the mass density in [xyz] direction

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.charge_density
+

charge density in \(\mathrm{e} \cdot mol \cdot cm^{-3}\) in +[xyz] direction

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.charge_density_stddev
+

standard deviation of the charge density in [xyz] direction

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.pos
+

Alias to the results.x.mass_density attribute.

+
+

Deprecated since version 2.2.0: Will be removed in MDAnalysis 3.0.0. Please use +results.x.mass_density instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.pos_std
+

Alias to the results.x.mass_density_stddev attribute.

+
+

Deprecated since version 2.2.0: Will be removed in MDAnalysis 3.0.0. Please use +results.x.mass_density_stddev instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.char
+

Alias to the results.x.charge_density attribute.

+
+

Deprecated since version 2.2.0: Will be removed in MDAnalysis 3.0.0. Please use +results.x.charge_density instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.char_std
+

Alias to the results.x.charge_density_stddev attribute.

+
+

Deprecated since version 2.2.0: Will be removed in MDAnalysis 3.0.0. Please use +results.x.charge_density_stddev instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.x.slice_volume
+

volume of bin in [xyz] direction

+
+
Type
+

float

+
+
+
+ +
+
+results.x.hist_bin_edges
+

edges of histogram bins for mass/charge densities, useful for, e.g., +plotting of histogram data.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+Note
+
+
Type
+

These density units are likely to be changed in the future.

+
+
+
+ +

Example

+

First create a LinearDensity object by supplying a selection, +then use the run() method. Finally access the results +stored in results, i.e. the mass density in the x direction.

+
ldens = LinearDensity(selection)
+ldens.run()
+print(ldens.results.x.mass_density)
+
+
+

Alternatively, other types of grouping can be selected using the +grouping keyword. For example to calculate the density based on +a grouping of the ResidueGroup +of the input AtomGroup.

+
ldens = LinearDensity(selection, grouping='residues', binsize=1.0)
+ldens.run()
+
+
+
+

New in version 0.14.0.

+
+
+

Changed in version 1.0.0: Support for the start, stop, and step keywords has been +removed. These should instead be passed to LinearDensity.run(). +The save() method was also removed, you can use np.savetxt() or +np.save() on the LinearDensity.results dictionary contents +instead.

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+

Changed in version 2.0.0: Results are now instances of +Results allowing access +via key and attribute.

+
+
+

Changed in version 2.2.0:

+
    +
  • Fixed a bug that caused LinearDensity to fail if grouping=”residues” +or grouping=”segments” were set.

  • +
  • Residues, segments, and fragments will be analysed based on their +centre of mass, not centre of geometry as previously stated.

  • +
  • LinearDensity now works with updating atom groups.

  • +
  • Added new result container results.x.hist_bin_edges. +It contains the bin edges of the histrogram bins for calculated +densities and can be used for easier plotting of histogram data.

  • +
+
+
+

Deprecated since version 2.2.0: The results dictionary has been changed and the attributes +results.x.pos, results.x.pos_std, results.x.char +and results.x.char_std are now deprecated. They will be removed +in 3.0.0. Please use results.x.mass_density, +results.x.mass_density_stddev, results.x.charge_density, +and results.x.charge_density_stddev instead.

+
+
+ +
+
+class MDAnalysis.analysis.lineardensity.Results(*args, **kwargs)[source]
+

From version 3.0.0 onwards, some entries in Results will be renamed. See +the docstring for LinearDensity for details. The Results class is defined +here to implement deprecation warnings for the user.

+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/msd.html b/2.7.0-dev0/documentation_pages/analysis/msd.html new file mode 100644 index 0000000000..e0e692dd2a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/msd.html @@ -0,0 +1,511 @@ + + + + + + + 4.7.2.2. Mean Squared Displacement — MDAnalysis.analysis.msd — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.7.2.2. Mean Squared Displacement — MDAnalysis.analysis.msd

+
+
Authors
+

Hugo MacDermott-Opeskin

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v2

+
+
+

This module implements the calculation of Mean Squared Displacements (MSDs) +by the Einstein relation. MSDs can be used to characterize the speed at +which particles move and has its roots in the study of Brownian motion. +For a full explanation of the theory behind MSDs and the subsequent calculation +of self-diffusivities the reader is directed to [Maginn2018]. +MSDs can be computed from the following expression, known as the +Einstein formula:

+
+\[MSD(r_{d}) = \bigg{\langle} \frac{1}{N} \sum_{i=1}^{N} |r_{d} + - r_{d}(t_0)|^2 \bigg{\rangle}_{t_{0}}\]
+

where \(N\) is the number of equivalent particles the MSD is calculated +over, \(r\) are their coordinates and \(d\) the desired dimensionality +of the MSD. Note that while the definition of the MSD is universal, there are +many practical considerations to computing the MSD that vary between +implementations. In this module, we compute a “windowed” MSD, where the MSD +is averaged over all possible lag-times \(\tau \le \tau_{max}\), +where \(\tau_{max}\) is the length of the trajectory, thereby maximizing +the number of samples.

+

The computation of the MSD in this way can be computationally intensive due to +its \(N^2\) scaling with respect to \(\tau_{max}\). An algorithm to +compute the MSD with \(N log(N)\) scaling based on a Fast Fourier +Transform is known and can be accessed by setting fft=True [Calandri2011] +[Buyl2018]. The FFT-based approach requires that the +tidynamics package is +installed; otherwise the code will raise an ImportError.

+

Please cite [Calandri2011] [Buyl2018] if you use this module in addition to +the normal MDAnalysis citations.

+
+

Warning

+

To correctly compute the MSD using this analysis module, you must supply +coordinates in the unwrapped convention. That is, when atoms pass +the periodic boundary, they must not be wrapped back into the primary +simulation cell. MDAnalysis does not currently offer this functionality in +the MDAnalysis.transformations API despite having functions with +similar names. We plan to implement the appropriate transformations in the +future. In the meantime, various simulation packages provide utilities to +convert coordinates to the unwrapped convention. In GROMACS for example, +this can be done using gmx trjconv with the -pbc nojump flag.

+
+
+

4.7.2.2.1. Computing an MSD

+

This example computes a 3D MSD for the movement of 100 particles undergoing a +random walk. Files provided as part of the MDAnalysis test suite are used +(in the variables RANDOM_WALK and +RANDOM_WALK_TOPO)

+

First load all modules and test data

+
import MDAnalysis as mda
+import MDAnalysis.analysis.msd as msd
+from MDAnalysis.tests.datafiles import RANDOM_WALK_TOPO, RANDOM_WALK
+
+
+

Given a universe containing trajectory data we can extract the MSD +analysis by using the class EinsteinMSD

+
u = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+MSD = msd.EinsteinMSD(u, select='all', msd_type='xyz', fft=True)
+MSD.run()
+
+
+

The MSD can then be accessed as

+
msd =  MSD.results.timeseries
+
+
+
+
Visual inspection of the MSD is important, so let’s take a look at it with a

simple plot.

+
+
+
import matplotlib.pyplot as plt
+nframes = MSD.n_frames
+timestep = 1 # this needs to be the actual time between frames
+lagtimes = np.arange(nframes)*timestep # make the lag-time axis
+fig = plt.figure()
+ax = plt.axes()
+# plot the actual MSD
+ax.plot(lagtimes, msd, lc="black", ls="-", label=r'3D random walk')
+exact = lagtimes*6
+# plot the exact result
+ax.plot(lagtimes, exact, lc="black", ls="--", label=r'$y=2 D\tau$')
+plt.show()
+
+
+

This gives us the plot of the MSD with respect to lag-time (\(\tau\)). +We can see that the MSD is approximately linear with respect to \(\tau\). +This is a numerical example of a known theoretical result that the MSD of a +random walk is linear with respect to lag-time, with a slope of \(2d\). +In this expression \(d\) is the dimensionality of the MSD. For our 3D MSD, +this is 3. For comparison we have plotted the line \(y=6\tau\) to which an +ensemble of 3D random walks should converge.

+
+MSD plot +
+

Note that a segment of the MSD is required to be linear to accurately +determine self-diffusivity. This linear segment represents the so called +“middle” of the MSD plot, where ballistic trajectories at short time-lags are +excluded along with poorly averaged data at long time-lags. We can select the +“middle” of the MSD by indexing the MSD and the time-lags. Appropriately +linear segments of the MSD can be confirmed with a log-log plot as is often +reccomended [Maginn2018] where the “middle” segment can be identified +as having a slope of 1.

+
plt.loglog(lagtimes, msd)
+plt.show()
+
+
+

Now that we have identified what segment of our MSD to analyse, let’s compute +a self-diffusivity.

+
+
+

4.7.2.2.2. Computing Self-Diffusivity

+

Self-diffusivity is closely related to the MSD.

+
+\[D_d = \frac{1}{2d} \lim_{t \to \infty} \frac{d}{dt} MSD(r_{d})\]
+

From the MSD, self-diffusivities \(D\) with the desired dimensionality +\(d\) can be computed by fitting the MSD with respect to the lag-time to +a linear model. An example of this is shown below, using the MSD computed in +the example above. The segment between \(\tau = 20\) and \(\tau = 60\) +is used to demonstrate selection of a MSD segment.

+
from scipy.stats import linregress
+start_time = 20
+start_index = int(start_time/timestep)
+end_time = 60
+linear_model = linregress(lagtimes[start_index:end_index],
+                                              msd[start_index:end_index])
+slope = linear_model.slope
+error = linear_model.stderr
+# dim_fac is 3 as we computed a 3D msd with 'xyz'
+D = slope * 1/(2*MSD.dim_fac)
+
+
+

We have now computed a self-diffusivity!

+
+
+

4.7.2.2.3. Combining Multiple Replicates

+

It is common practice to combine replicates when calculating MSDs. An example +of this is shown below using MSD1 and MSD2.

+
u1 = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+MSD1 = msd.EinsteinMSD(u1, select='all', msd_type='xyz', fft=True)
+MSD1.run()
+
+u2 = mda.Universe(RANDOM_WALK_TOPO, RANDOM_WALK)
+MSD2 = msd.EinsteinMSD(u2, select='all', msd_type='xyz', fft=True)
+MSD2.run()
+
+combined_msds = np.concatenate((MSD1.results.msds_by_particle,
+                                MSD2.results.msds_by_particle), axis=1)
+average_msd = np.mean(combined_msds, axis=1)
+
+
+

The same cannot be achieved by concatenating the replicas in a single run as +the jump between the last frame of the first trajectory and frame 0 of the +next trajectory will lead to an artificial inflation of the MSD and hence +any subsequent diffusion coefficient calculated.

+

Notes

+

There are several factors that must be taken into account when setting up and +processing trajectories for computation of self-diffusivities. +These include specific instructions around simulation settings, using +unwrapped trajectories and maintaining a relatively small elapsed time between +saved frames. Additionally, corrections for finite size effects are sometimes +employed along with various means of estimating errors +[Yeh2004, von Bülow2020] The reader is directed to the following review, +which describes many of the common pitfalls [Maginn2018]. There are +other ways to compute self-diffusivity, such as from a Green-Kubo integral. At +this point in time, these methods are beyond the scope of this module.

+

Note also that computation of MSDs is highly memory intensive. If this is +proving a problem, judicious use of the start, stop, step keywords +to control which frames are incorporated may be required.

+

References

+
+
+
Maginn2018(1,2,3)
+

Edward J. Maginn, Richard A. Messerly, Daniel J. Carlson, Daniel R. Roe, and J. Richard Elliot. Best practices for computing transport properties self-diffusivity and viscosity from equilibrium molecular dynamics. Living Journal of Computational Molecular Science, 1(1):6324, Dec. 2018. URL: https://livecomsjournal.org/index.php/livecoms/article/view/v1i1e6324, doi:10.33011/livecoms.1.1.6324.

+
+
Yeh2004
+

In-Chul Yeh and Gerhard Hummer. System-size dependence of diffusion coefficients and viscosities from molecular dynamics simulations with periodic boundary conditions. The Journal of Physical Chemistry B, 108(40):15873–15879, 2004. doi:10.1021/jp0477147.

+
+
von Bülow2020
+

Sören von Bülow, Jakob Tómas Bullerjahn, and Gerhard Hummer. Systematic errors in diffusion coefficients from long-time molecular dynamics simulations at constant pressure. The Journal of Chemical Physics, 153(2):021101, 2020. doi:10.1063/5.0008316.

+
+
+
+
+
+

4.7.2.2.4. Classes

+
+
+class MDAnalysis.analysis.msd.EinsteinMSD(u, select='all', msd_type='xyz', fft=True, **kwargs)[source]
+

Class to calculate Mean Squared Displacement by the Einstein relation.

+
+
Parameters
+
    +
  • u (Universe or AtomGroup) – An MDAnalysis Universe or AtomGroup. +Note that UpdatingAtomGroup instances are not accepted.

  • +
  • select (str) – A selection string. Defaults to “all” in which case +all atoms are selected.

  • +
  • msd_type ({'xyz', 'xy', 'yz', 'xz', 'x', 'y', 'z'}) – Desired dimensions to be included in the MSD. Defaults to ‘xyz’.

  • +
  • fft (bool) – If True, uses a fast FFT based algorithm for computation of +the MSD. Otherwise, use the simple “windowed” algorithm. +The tidynamics package is required for fft=True. +Defaults to True.

  • +
+
+
+
+
+dim_fac
+

Dimensionality \(d\) of the MSD.

+
+
Type
+

int

+
+
+
+ +
+
+results.timeseries
+

The averaged MSD over all the particles with respect to lag-time.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.msds_by_particle
+

The MSD of each individual particle with respect to lag-time.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+ag
+

The AtomGroup resulting from your selection

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+n_frames
+

Number of frames included in the analysis.

+
+
Type
+

int

+
+
+
+ +
+
+n_particles
+

Number of particles MSD was calculated over.

+
+
Type
+

int

+
+
+
+ +
+

New in version 2.0.0.

+
+
+
Parameters
+
    +
  • u (Universe or AtomGroup) – An MDAnalysis Universe or AtomGroup.

  • +
  • select (str) – A selection string. Defaults to “all” in which case +all atoms are selected.

  • +
  • msd_type ({'xyz', 'xy', 'yz', 'xz', 'x', 'y', 'z'}) – Desired dimensions to be included in the MSD.

  • +
  • fft (bool) – If True, uses a fast FFT based algorithm for computation of +the MSD. Otherwise, use the simple “windowed” algorithm. +The tidynamics package is required for fft=True.

  • +
+
+
+
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/nucleicacids.html b/2.7.0-dev0/documentation_pages/analysis/nucleicacids.html new file mode 100644 index 0000000000..ecff8efab2 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/nucleicacids.html @@ -0,0 +1,403 @@ + + + + + + + 4.5.2. Updated nucleic acid analysis — MDAnalysis.analysis.nucleicacids — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.5.2. Updated nucleic acid analysis — MDAnalysis.analysis.nucleicacids

+
+
Author
+

Alia Lescoulie

+
+
Year
+

2022

+
+
copyright
+

GNU Public Licence v3

+
+
+

The module provides classes for analyzing nucleic acids structures. +This is an updated, higher performance version of previous nucleic acid tools. +For applications see [ᵇDenning2011, ᵇDenning2012].

+

References

+
+
+
ᵇDenning2011
+

Elizabeth J. Denning, U. Deva Priyakumar, Lennart Nilsson, and Alexander D. Mackerell Jr. Impact of 2-hydroxyl sampling on the conformational properties of rna: update of the charmm all-atom additive force field for rna. Journal of Computational Chemistry, 32(9):1929–1943, 2011. doi:https://doi.org/10.1002/jcc.21777.

+
+
ᵇDenning2012
+

Elizabeth J. Denning and Alexander D. MacKerell. Intrinsic contribution of the 2\'-hydroxyl to rna conformational heterogeneity. Journal of the American Chemical Society, 134(5):2800–2806, 2012. PMID: 22242623. doi:10.1021/ja211328g.

+
+
+
+
+

4.5.2.1. Distances

+
+
+class MDAnalysis.analysis.nucleicacids.NucPairDist(selection1: List[AtomGroup], selection2: List[AtomGroup], **kwargs)[source]
+

Atom Pair distance calculation base class.

+

Takes two lists of AtomGroup and +computes the distances between them over a trajectory. Used as a +superclass for the other nucleic acid distances classes. The distance +will be measured between atoms sharing an index in the two lists of +AtomGroup.

+
+
Parameters
+
    +
  • selection1 (List[AtomGroup]) – List of AtomGroup containing an atom +of each nucleic acid being analyzed.

  • +
  • selection2 (List[AtomGroup]) – List of AtomGroup containing an atom +of each nucleic acid being analyzed.

  • +
  • kwargs (dict) – Arguments for AnalysisBase

  • +
+
+
+
+
+times
+

Simulation times for analysis.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.pair_distances
+

2D array of pair distances. First dimension is simulation time, second +dimension contains the pair distances for each each entry pair in +selection1 and selection2.

+
+

New in version 2.4.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
Raises
+

ValueError – If the selections given are not the same length

+
+
+
+

Changed in version 2.5.0: The ability to access by passing selection indices to results is +is now removed as of MDAnalysis version 2.5.0. Please use +results.pair_distances instead. +The results.times was deprecated and is now removed as of +MDAnalysis 2.5.0. Please use the class attribute times instead.

+
+
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+class MDAnalysis.analysis.nucleicacids.WatsonCrickDist(strand1: List[Residue], strand2: List[Residue], n1_name: str = 'N1', n3_name: str = 'N3', g_name: str = 'G', a_name: str = 'A', u_name: str = 'U', t_name: str = 'T', c_name: str = 'C', **kwargs)[source]
+

Watson-Crick basepair distance for selected residues over a trajectory.

+

Takes two lists of Residue objects and calculates +the Watson-Crick distance between them over the trajectory. Bases are matched by +their index in the lists given as arguments.

+
+
Parameters
+
    +
  • strand1 (List[Residue]) – First list of bases

  • +
  • strand2 (List[Residue]) – Second list of bases

  • +
  • n1_name (str (optional)) – Name of Nitrogen 1 of nucleic acids, by default assigned to N1

  • +
  • n3_name (str (optional)) – Name of Nitrogen 3 of nucleic acids, by default assigned to N3

  • +
  • g_name (str (optional)) – Name of Guanine in topology, by default assigned to G

  • +
  • a_name (str (optional)) – Name of Adenine in topology, by default assigned to A

  • +
  • u_name (str (optional)) – Name of Uracil in topology, by default assigned to U

  • +
  • t_name (str (optional)) – Name of Thymine in topology, by default assigned to T

  • +
  • c_name (str (optional)) – Name of Cytosine in topology, by default assigned to C

  • +
  • **kwargs (dict) – arguments for AnalysisBase

  • +
+
+
+
+
+times
+

Simulation times for analysis.

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.pair_distances
+

2D array of Watson-Crick basepair distances. First dimension is +simulation time, second dimension contains the pair distances for +each each entry pair in strand1 and strand2.

+
+

New in version 2.4.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
Raises
+
    +
  • ValueError – If the residues given are not amino acids

  • +
  • ValueError – If the selections given are not the same length

  • +
+
+
+
+

Changed in version 2.5.0: Accessing results by passing strand indices to results is +was deprecated and is now removed as of MDAnalysis version 2.5.0. Please +use results.pair_distances instead. +The results.times was deprecated and is now removed as of +MDAnalysis 2.5.0. Please use the class attribute times instead.

+
+
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/nuclinfo.html b/2.7.0-dev0/documentation_pages/analysis/nuclinfo.html new file mode 100644 index 0000000000..dad61e447d --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/nuclinfo.html @@ -0,0 +1,638 @@ + + + + + + + 4.5.1. Nucleic acid analysis — MDAnalysis.analysis.nuclinfo — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.5.1. Nucleic acid analysis — MDAnalysis.analysis.nuclinfo

+
+
Author
+

Elizabeth Denning

+
+
Year
+

2011

+
+
Copyright
+

GNU Public License v3

+
+
+

The module provides functions to analyze nucleic acid structures, in +particular

+
    +
  • backbone dihedrals,

  • +
  • chi dihedrals,

  • +
  • AS or CP phase angles,

  • +
  • Watson-Crick N1-N3 distances, C2-O2 distances, N6-O4 distances, O6-N4 distances.

  • +
+

For applications of this kind of analysis see +[ᵃDenning2011, ᵃDenning2012].

+

All functions take a Universe as an +argument together with further parameters that specify the base or bases in +question. Angles are in degrees. The functions use standard CHARMM names for +nucleic acids and atom names.

+

References

+
+
+
ᵃDenning2011
+

Elizabeth J. Denning, U. Deva Priyakumar, Lennart Nilsson, and Alexander D. Mackerell Jr. Impact of 2-hydroxyl sampling on the conformational properties of rna: update of the charmm all-atom additive force field for rna. Journal of Computational Chemistry, 32(9):1929–1943, 2011. doi:https://doi.org/10.1002/jcc.21777.

+
+
ᵃDenning2012
+

Elizabeth J. Denning and Alexander D. MacKerell. Intrinsic contribution of the 2\'-hydroxyl to rna conformational heterogeneity. Journal of the American Chemical Society, 134(5):2800–2806, 2012. PMID: 22242623. doi:10.1021/ja211328g.

+
+
+
+
+

4.5.1.1. Distances

+
+
+MDAnalysis.analysis.nuclinfo.wc_pair(universe, i, bp, seg1='SYSTEM', seg2='SYSTEM')[source]
+

Watson-Crick basepair distance for residue i with residue bp.

+

The distance of the nitrogen atoms in a Watson-Crick hydrogen bond is +computed.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • i (int) – resid of the first base

  • +
  • bp (int) – resid of the second base

  • +
  • seg1 (str (optional)) – segment id for first base [“SYSTEM”]

  • +
  • seg2 (str (optional)) – segment id for second base [“SYSTEM”]

  • +
+
+
Returns
+

Watson-Crick base pair distance

+
+
Return type
+

float

+
+
+

Notes

+

If failure occurs be sure to check the segment identification.

+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.minor_pair(universe, i, bp, seg1='SYSTEM', seg2='SYSTEM')[source]
+

Minor-Groove basepair distance for residue i with residue bp.

+

The distance of the nitrogen and oxygen atoms in a Minor-groove hydrogen +bond is computed.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • i (int) – resid of the first base

  • +
  • bp (int) – resid of the second base

  • +
  • seg1 (str (optional)) – segment id for first base [“SYSTEM”]

  • +
  • seg2 (str (optional)) – segment id for second base [“SYSTEM”]

  • +
+
+
Returns
+

Minor groove base pair distance

+
+
Return type
+

float

+
+
+

Notes

+

If failure occurs be sure to check the segment identification.

+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.major_pair(universe, i, bp, seg1='SYSTEM', seg2='SYSTEM')[source]
+

Major-Groove basepair distance for residue i with residue bp.

+

The distance of the nitrogen and oxygen atoms in a Major-groove hydrogen +bond is computed.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • i (int) – resid of the first base

  • +
  • bp (int) – resid of the second base

  • +
  • seg1 (str (optional)) – segment id for first base [“SYSTEM”]

  • +
  • seg2 (str (optional)) – segment id for second base [“SYSTEM”]

  • +
+
+
Returns
+

Major groove base pair distance

+
+
Return type
+

float

+
+
+

Notes

+

If failure occurs be sure to check the segment identification.

+
+

New in version 0.7.6.

+
+
+ +
+
+

4.5.1.2. Phases

+
+
+MDAnalysis.analysis.nuclinfo.phase_cp(universe, seg, i)[source]
+

Pseudo-angle describing the phase of the ribose pucker for residue i using the CP method.

+

The angle is computed by the positions of atoms in the ribose ring.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

phase angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.phase_as(universe, seg, i)[source]
+

Pseudo-angle describing the phase of the ribose pucker for residue i using the AS method

+

The angle is computed by the position vector of atoms in the ribose ring.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

phase angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+

4.5.1.3. Dihedral angles

+
+
+MDAnalysis.analysis.nuclinfo.tors(universe, seg, i)[source]
+

Calculation of nucleic backbone dihedral angles.

+

The dihedral angles are alpha, beta, gamma, delta, epsilon, zeta, chi.

+

The dihedral is computed based on position of atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

[alpha, beta, gamma, delta, epsilon, zeta, chi] – torsion angles in degrees

+
+
Return type
+

list of floats

+
+
+

Notes

+

If failure occurs be sure to check the segment identification.

+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_alpha(universe, seg, i)[source]
+

alpha backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

alpha – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_beta(universe, seg, i)[source]
+

beta backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

beta – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_gamma(universe, seg, i)[source]
+

Gamma backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

gamma – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_delta(universe, seg, i)[source]
+

delta backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

delta – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_eps(universe, seg, i)[source]
+

Epsilon backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

epsilon – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_zeta(universe, seg, i)[source]
+

Zeta backbone dihedral

+

The dihedral is computed based on position atoms for resid i.

+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

zeta – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.tors_chi(universe, seg, i)[source]
+

chi nucleic acid dihedral

+
+

The dihedral is computed based on position atoms for resid i.

+
+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

chi – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.hydroxyl(universe, seg, i)[source]
+

2-hydroxyl dihedral. Useful only for RNA calculations.

+
+
+

Note

+

This dihedral calculation will only work if using atom +names as documented by charmm force field parameters, +namely “C1’, C2’, O2’, H2’”.

+
+
+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the trajectory

  • +
  • seg (str) – segment id for base

  • +
  • i (int) – resid of the first base

  • +
+
+
Returns
+

hydroxyl_angle – torsion angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.7.6.

+
+
+ +
+
+MDAnalysis.analysis.nuclinfo.pseudo_dihe_baseflip(universe, bp1, bp2, i, seg1='SYSTEM', seg2='SYSTEM', seg3='SYSTEM')[source]
+

pseudo dihedral for flipped bases. Useful only for nucleic acid base flipping

+

The dihedral is computed based on position atoms for resid i

+
+

Note

+

This dihedral calculation will only work if using atom names as +documented by charmm force field parameters.

+
+
+
Parameters
+
    +
  • universe (Universe) – Universe containing the +trajectory

  • +
  • bp1 (int) – resid that base pairs with bp2

  • +
  • bp2 (int) – resid below the base that flips

  • +
  • i (int) – resid of the base that flips

  • +
  • segid1 (str (optional)) – segid of resid base pairing with bp2

  • +
  • segid2 (str (optional)) – segid, same as that of segid of flipping resid i

  • +
  • segid3 (str (optional)) – segid of resid i that flips

  • +
+
+
Returns
+

pseudo dihedral angle in degrees

+
+
Return type
+

float

+
+
+
+

New in version 0.8.0.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/pca.html b/2.7.0-dev0/documentation_pages/analysis/pca.html new file mode 100644 index 0000000000..f213f1a17d --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/pca.html @@ -0,0 +1,777 @@ + + + + + + + 4.9.2. Principal Component Analysis (PCA) — MDAnalysis.analysis.pca — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.9.2. Principal Component Analysis (PCA) — MDAnalysis.analysis.pca

+
+
Authors
+

John Detlefs

+
+
Year
+

2016

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 0.16.0.

+
+

This module contains the linear dimensions reduction method Principal Component +Analysis (PCA). PCA sorts a simulation into 3N directions of descending +variance, with N being the number of atoms. These directions are called +the principal components. The dimensions to be analyzed are reduced by only +looking at a few projections of the first principal components. To learn how to +run a Principal Component Analysis, please refer to the PCA Tutorial.

+

The PCA problem is solved by solving the eigenvalue problem of the covariance +matrix, a \(3N \times 3N\) matrix where the element \((i, j)\) is the +covariance between coordinates \(i\) and \(j\). The principal +components are the eigenvectors of this matrix.

+

For each eigenvector, its eigenvalue is the variance that the eigenvector +explains. Stored in PCA.results.cumulated_variance, a ratio for each +number of eigenvectors up to index \(i\) is provided to quickly find out +how many principal components are needed to explain the amount of variance +reflected by those \(i\) eigenvectors. For most data, +PCA.results.cumulated_variance +will be approximately equal to one for some \(n\) that is significantly +smaller than the total number of components. These are the components of +interest given by Principal Component Analysis.

+

From here, we can project a trajectory onto these principal components and +attempt to retrieve some structure from our high dimensional data.

+

For a basic introduction to the module, the PCA Tutorial shows how +to perform Principal Component Analysis.

+
+

4.9.2.1. PCA Tutorial

+

The example uses files provided as part of the MDAnalysis test suite +(in the variables PSF and +DCD). This tutorial shows how to use the +PCA class.

+

First load all modules and test data:

+
import MDAnalysis as mda
+import MDAnalysis.analysis.pca as pca
+from MDAnalysis.tests.datafiles import PSF, DCD
+
+
+

Given a universe containing trajectory data we can perform Principal Component +Analysis by using the class PCA and retrieving the principal +components.:

+
u = mda.Universe(PSF, DCD)
+PSF_pca = pca.PCA(u, select='backbone')
+PSF_pca.run()
+
+
+

Inspect the components to determine the principal components you would like +to retain. The choice is arbitrary, but I will stop when 95 percent of the +variance is explained by the components. This cumulated variance by the +components is conveniently stored in the one-dimensional array attribute +PCA.results.cumulated_variance. The value at the ith index of +PCA.results.cumulated_variance is the sum of the variances from 0 to +i.:

+
n_pcs = np.where(PSF_pca.results.cumulated_variance > 0.95)[0][0]
+atomgroup = u.select_atoms('backbone')
+pca_space = PSF_pca.transform(atomgroup, n_components=n_pcs)
+
+
+

From here, inspection of the pca_space and conclusions to be drawn from the +data are left to the user.

+
+
+

4.9.2.2. Classes and Functions

+
+
+class MDAnalysis.analysis.pca.PCA(universe, select='all', align=False, mean=None, n_components=None, **kwargs)[source]
+

Principal component analysis on an MD trajectory.

+

After initializing and calling method with a universe or an atom group, +principal components ordering the atom coordinate data by decreasing +variance will be available for analysis. As an example::

+
pca = PCA(universe, select='backbone').run()
+pca_space = pca.transform(universe.select_atoms('backbone'), 3)
+
+
+

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 PCA Tutorial for more detailed +instructions.

+
+
Parameters
+
    +
  • universe (Universe) – Universe

  • +
  • select (string, optional) – A valid selection statement for choosing a subset of atoms from +the atomgroup.

  • +
  • align (boolean, optional) – If True, the trajectory will be aligned to a reference +structure.

  • +
  • mean (array_like, optional) – Optional reference positions to be be used as the mean of the +covariance matrix.

  • +
  • n_components (int, optional) – The number of principal components to be saved, default saves +all principal components

  • +
  • verbose (bool (optional)) – Show detailed progress of the calculation if set to True.

  • +
+
+
+
+
+results.p_components
+

Principal components of the feature space, +representing the directions of maximum variance in the data. +The column vector p_components[:, i] is the eigenvector +corresponding to the variance[i].

+
+

New in version 2.0.0.

+
+
+
Type
+

array, (n_atoms * 3, n_components)

+
+
+
+ +
+
+p_components
+

Alias to the results.p_components.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.p_components instead.

+
+
+
Type
+

array, (n_atoms * 3, n_components)

+
+
+
+ +
+
+results.variance
+

Raw variance explained by each eigenvector of the covariance +matrix.

+
+

New in version 2.0.0.

+
+
+
Type
+

array (n_components, )

+
+
+
+ +
+
+variance
+

Alias to the results.variance.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.variance instead.

+
+
+
Type
+

array (n_components, )

+
+
+
+ +
+
+results.cumulated_variance
+

Percentage of variance explained by the selected components and the sum +of the components preceding it. If a subset of components is not chosen +then all components are stored and the cumulated variance will converge +to 1.

+
+

New in version 2.0.0.

+
+
+
Type
+

array, (n_components, )

+
+
+
+ +
+
+cumulated_variance
+

Alias to the results.cumulated_variance.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.cumulated_variance instead.

+
+
+
Type
+

array, (n_components, )

+
+
+
+ +

Notes

+

Computation can be sped up by supplying precalculated mean positions.

+
+

Changed in version 0.19.0: The start frame is used when performing selections and calculating +mean positions. Previously the 0th frame was always used.

+
+
+

Changed in version 1.0.0: n_components now limits the correct axis of p_components. +cumulated_variance now accurately represents the contribution of +each principal component and does not change when n_components is +given. If n_components is not None or is less than the number of +p_components, cumulated_variance will not sum to 1. +align=True now correctly aligns the trajectory and computes the +correct means and covariance matrix.

+
+
+

Changed in version 2.0.0: mean_atoms removed, as this did not reliably contain the mean +positions. +mean input now accepts coordinate arrays instead of atomgroup. +p_components, variance and cumulated_variance +are now stored in a MDAnalysis.analysis.base.Results instance.

+
+
+
+cumulative_overlap(other, i=0, n_components=None)[source]
+

Compute the cumulative overlap of a vector in a subspace.

+

This is not symmetric. The cumulative overlap measures the overlap of +the chosen vector in this instance, in the other subspace.

+

Please cite [Yang2008] if you use this function.

+
+
Parameters
+
    +
  • other (PCA) – Another PCA class. This must have already been run.

  • +
  • i (int, optional) – The index of eigenvector to be analysed.

  • +
  • n_components (int, optional) – number of components in other to compute for the cumulative overlap. +None computes all of them.

  • +
+
+
Returns
+

Cumulative overlap of the chosen vector in this instance to +the other subspace. 0 indicates that they are mutually +orthogonal, whereas 1 indicates that they are identical.

+
+
Return type
+

float

+
+
+
+

See also

+

cumulative_overlap()

+
+
+

New in version 1.0.0.

+
+
+ +
+
+project_single_frame(components=None, group=None, anchor=None)[source]
+

Computes a function to project structures onto selected PCs

+

Applies Inverse-PCA transform to the PCA atomgroup. +Optionally, calculates one displacement vector per residue +to extrapolate the transform to atoms not in the PCA atomgroup.

+
+
Parameters
+
    +
  • components (int, array, optional) – Components to be projected onto. +The default None maps onto all components.

  • +
  • group (AtomGroup, optional) – The AtomGroup containing atoms to be projected. +The projection applies to whole residues in group. +The atoms in the PCA class are not affected by this argument. +The default None does not extrapolate the projection +to non-PCA atoms.

  • +
  • anchor (string, optional) – The string to select the PCA atom whose displacement vector +is applied to non-PCA atoms in a residue. The anchor selection +is applied to group.The resulting atomselection must have +exactly one PCA atom in each residue of group. +The default None does not extrapolate the projection +to non-PCA atoms.

  • +
+
+
Returns
+

The resulting function f(ts) takes as input a +Timestep ts, +and returns ts with the projected structure

+
+

Warning

+

The transformation function takes a :class:Timestep as input +because this is required for :ref:transformations. +However, the inverse-PCA transformation is applied on the atoms +of the Universe that was used for the PCA. It is expected +that the ts is from the same Universe but this is +currently not checked.

+
+

+
+
Return type
+

function

+
+
+

Notes

+

When the PCA class is run for an atomgroup, the principal components +are cached. The trajectory can then be projected onto one or more of +these principal components. Since the principal components are sorted +in the order of decreasing explained variance, the first few components +capture the essential molecular motion.

+

If N is the number of atoms in the PCA group, each component has the +length 3N. A PCA score \(w\_i\), along component \(u\_i\), is +calculated for a set of coordinates \((r(t))\) of the same atoms. +The PCA scores are then used to transform the structure, \((r(t))\) +at a timestep, back to the original space.

+
+\[\begin{split}w_{i}(t) = ({\textbf r}(t) - \bar{{\textbf r}}) \cdot + {\textbf u}_i \\ +{\textbf r'}(t) = (w_{i}(t) \cdot {\textbf u}_i^T) + + \bar{{\textbf r}}\end{split}\]
+

For each residue, the projection can be extended to atoms that were +not part of PCA by applying the displacement vector of a PCA atom to +all the atoms in the residue. This could be useful to preserve the bond +distance between a PCA atom and other non-PCA atoms in a residue.

+

If there are r residues and n non-PCA atoms in total, the displacement +vector has the size 3r. This needs to be broadcasted to a size 3n. An +extrapolation trick is used to shape the array, since going over each +residue for each frame can be expensive. Non-PCA atoms’ displacement +vector is calculated with fancy indexing on the anchors’ displacement +vector. index_extrapolate saves which atoms belong to which anchors. +If there are two non-PCA atoms in the first anchor’s residue and three +in the second anchor’s residue, index_extrapolate is [0, 0, 1, 1, 1]

+

Examples

+

Run PCA class before using this function. For backbone PCA, run:

+
pca = PCA(universe, select='backbone').run()
+
+
+

Obtain a transformation function to project the +backbone trajectory onto the first principal component:

+
project = pca.project_single_frame(components=0)
+
+
+

To project onto the first two components, run:

+
project = pca.project_single_frame(components=[0,1])
+
+
+

Alternatively, the transformation can be applied to PCA atoms and +extrapolated to other atoms according to the CA atom’s translation +in each residue:

+
all = u.select_atoms('all')
+project = pca.project_single_frame(components=0,
+                                   group=all, anchor='name CA')
+
+
+

Finally, apply the transformation function to a timestep:

+
project(u.trajectory.ts)
+
+
+

or apply the projection to the universe:

+
u.trajectory.add_transformations(project)
+
+
+
+

New in version 2.2.0.

+
+
+ +
+
+rmsip(other, n_components=None)[source]
+

Compute the root mean square inner product between subspaces.

+

This is only symmetric if the number of components is the same for +both instances. The RMSIP effectively measures how +correlated the vectors of this instance are to those of other.

+

Please cite [Amadei1999] and [Leo-Macias2004] if you use this function.

+
+
Parameters
+
    +
  • other (PCA) – Another PCA class. This must have already been run.

  • +
  • n_components (int or tuple of ints, optional) – number of components to compute for the inner products. +None computes all of them.

  • +
+
+
Returns
+

Root mean square inner product of the selected subspaces. +0 indicates that they are mutually orthogonal, whereas 1 indicates +that they are identical.

+
+
Return type
+

float

+
+
+

Examples

+

You can compare the RMSIP between different intervals of the same trajectory. +For example, to compare similarity within the top three principal components:

+
>>> 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
+
+
+
+

See also

+

rmsip()

+
+
+

New in version 1.0.0.

+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+
+transform(atomgroup, n_components=None, start=None, stop=None, step=None)[source]
+

Apply the dimensionality reduction on a trajectory

+
+
Parameters
+
    +
  • atomgroup (AtomGroup or Universe) – The AtomGroup or Universe containing atoms to be PCA transformed.

  • +
  • n_components (int, optional) – The number of components to be projected onto. The default +None maps onto all components.

  • +
  • start (int, optional) – The frame to start on for the PCA transform. The default +None becomes 0, the first frame index.

  • +
  • stop (int, optional) – Frame index to stop PCA transform. The default None becomes +the total number of frames in the trajectory. +Iteration stops before this frame number, which means that the +trajectory would be read until the end.

  • +
  • step (int, optional) – 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).

  • +
+
+
Returns
+

pca_space

+
+
Return type
+

array, shape (n_frames, n_components)

+
+
+
+

Changed in version 0.19.0: Transform now requires that run() has been called before, +otherwise a ValueError is raised.

+
+
+ +
+ +
+
+MDAnalysis.analysis.pca.cosine_content(pca_space, i)[source]
+

Measure the cosine content of the PCA projection.

+

The cosine content of pca projections can be used as an indicator if a +simulation is converged. Values close to 1 are an indicator that the +simulation isn’t converged. For values below 0.7 no statement can be made. +If you use this function please cite [Hess2002].

+
+
Parameters
+
    +
  • pca_space (array, shape (number of frames, number of components)) – The PCA space to be analyzed.

  • +
  • i (int) – The index of the pca_component projection to be analyzed.

  • +
+
+
Returns
+

    +
  • A float reflecting the cosine content of the ith projection in the PCA

  • +
  • space. The output is bounded by 0 and 1, with 1 reflecting an agreement

  • +
  • with cosine while 0 reflects complete disagreement.

  • +
+

+
+
+

References

+
+
+
Hess2002
+

Berk Hess. Convergence of sampling in protein simulations. Phys. Rev. E, 65:031910, Mar 2002. doi:10.1103/PhysRevE.65.031910.

+
+
+
+
+ +
+
+MDAnalysis.analysis.pca.rmsip(a, b, n_components=None)[source]
+

Compute the root mean square inner product between subspaces.

+

This is only symmetric if the number of components is the same for +a and b. The RMSIP effectively measures how +correlated the vectors of a are to those of b.

+

Please cite [Amadei1999] and [Leo-Macias2004] if you use this function.

+
+
Parameters
+
    +
  • a (array, shape (n_components, n_features)) – The first subspace. Must have the same number of features as b. +If you are using the results of PCA, +this is the TRANSPOSE of p_components (i.e. p_components.T).

  • +
  • b (array, shape (n_components, n_features)) – The second subspace. Must have the same number of features as a. +If you are using the results of PCA, +this is the TRANSPOSE of p_components (i.e. p_components.T).

  • +
  • n_components (int or tuple of ints, optional) – number of components to compute for the inner products. +None computes all of them.

  • +
+
+
Returns
+

Root mean square inner product of the selected subspaces. +0 indicates that they are mutually orthogonal, whereas 1 indicates +that they are identical.

+
+
Return type
+

float

+
+
+

Examples

+

You can compare the RMSIP between different intervals of the same trajectory. +For example, to compare similarity within the top three principal components:

+
>>> 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,
+...           second_interval.results.p_components.T,
+...           n_components=3)
+0.38147609331128324
+>>> pca.rmsip(first_interval.results.p_components.T,
+...           last_interval.results.p_components.T,
+...           n_components=3)
+0.17478244043688052
+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+MDAnalysis.analysis.pca.cumulative_overlap(a, b, i=0, n_components=None)[source]
+

Compute the cumulative overlap of a vector in a subspace.

+

This is not symmetric. The cumulative overlap measures the overlap of +the chosen vector in a, in the b subspace.

+

Please cite [Yang2008] if you use this function.

+
+
Parameters
+
    +
  • a (array, shape (n_components, n_features) or vector, length n_features) – The first subspace containing the vector of interest. Alternatively, +the actual vector. Must have the same number of features as b.

  • +
  • b (array, shape (n_components, n_features)) – The second subspace. Must have the same number of features as a.

  • +
  • i (int, optional) – The index of eigenvector to be analysed.

  • +
  • n_components (int, optional) – number of components in b to compute for the cumulative overlap. +None computes all of them.

  • +
+
+
Returns
+

Cumulative overlap of the chosen vector in a to the b subspace. +0 indicates that they are mutually orthogonal, whereas 1 indicates +that they are identical.

+
+
Return type
+

float

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/polymer.html b/2.7.0-dev0/documentation_pages/analysis/polymer.html new file mode 100644 index 0000000000..d4a7f7431a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/polymer.html @@ -0,0 +1,440 @@ + + + + + + + 4.6.1. Polymer analysis — MDAnalysis.analysis.polymer — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.6.1. Polymer analysis — MDAnalysis.analysis.polymer

+
+
Author
+

Richard J. Gowers

+
+
Year
+

2015, 2018

+
+
Copyright
+

GNU Public License v3

+
+
+

This module contains various commonly used tools in analysing polymers.

+
+
+
+class MDAnalysis.analysis.polymer.PersistenceLength(atomgroups, **kwargs)[source]
+

Calculate the persistence length for polymer chains

+

The persistence length is the length at which two points on the polymer +chain become decorrelated. This is determined by first measuring the +autocorrelation (\(C(n)\)) of two bond vectors +(\(\mathbf{a}_i, \mathbf{a}_{i + n}\)) separated by \(n\) bonds

+
+\[C(n) = \langle \cos\theta_{i, i+n} \rangle = + \langle \mathbf{a_i} \cdot \mathbf{a_{i+n}} \rangle\]
+

An exponential decay is then fitted to this, which yields the +persistence length

+
+\[C(n) \approx \exp\left( - \frac{n \bar{l_B}}{l_P} \right)\]
+

where \(\bar{l_B}\) is the average bond length, and \(l_P\) is +the persistence length which is fitted

+
+
Parameters
+
    +
  • atomgroups (iterable) – List of AtomGroups. Each should represent a single +polymer chain, ordered in the correct order.

  • +
  • verbose (bool, optional) – Show detailed progress of the calculation if set to True.

  • +
+
+
+
+
+results.bond_autocorrelation
+

the measured bond autocorrelation

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.lb
+

the average bond length

+
+

New in version 2.0.0.

+
+
+
Type
+

float

+
+
+
+ +
+
+lb
+

Alias to the results.lb.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.lb instead.

+
+
+
Type
+

float

+
+
+
+ +
+
+results.x
+

length of the decorrelation predicted by lp

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.lp
+

calculated persistence length

+
+

New in version 2.0.0.

+
+
+
Type
+

float

+
+
+
+ +
+
+lp
+

Alias to the results.lp.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.lp instead.

+
+
+
Type
+

float

+
+
+
+ +
+
+results.fit
+

the modelled backbone decorrelation predicted by lp

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+fit
+

Alias to the results.fit.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.fit instead.

+
+
+
Type
+

float

+
+
+
+ +
+

See also

+
+
sort_backbone()

for producing the sorted AtomGroup required for input.

+
+
+
+

Example

+
from MDAnalysis.tests.datafiles import TRZ_psf, TRZ
+import MDAnalysis as mda
+from MDAnalysis.analysis import polymer
+u = mda.Universe(TRZ_psf, TRZ)
+
+# this system is a pure polymer melt of polyamide,
+# so we can select the chains by using the .fragments attribute
+chains = u.atoms.fragments
+
+# select only the backbone atoms for each chain
+backbones = [chain.select_atoms('not name O* H*') for chain in chains]
+
+# sort the chains, removing any non-backbone atoms
+sorted_backbones = [polymer.sort_backbone(bb) for bb in backbones]
+persistence_length = polymer.PersistenceLength(sorted_backbones)
+
+# Run the analysis, this will average over all polymer chains
+# and all timesteps in trajectory
+persistence_length = persistence_length.run()
+print(f'The persistence length is: {persistence_length.results.lp}')
+
+# always check the visualisation of this:
+persistence_length.plot()
+
+
+
+

New in version 0.13.0.

+
+
+

Changed in version 0.20.0: The run method now automatically performs the exponential fit

+
+
+

Changed in version 1.0.0: Deprecated PersistenceLength.perform_fit() has now been removed.

+
+
+

Changed in version 2.0.0: Former results are now stored as results.bond_autocorrelation. +lb, lp, fit are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
+plot(ax=None)[source]
+

Visualize the results and fit

+
+
Parameters
+

ax (matplotlib.Axes, optional) – if provided, the graph is plotted on this axis

+
+
Returns
+

ax

+
+
Return type
+

the axis that the graph was plotted on

+
+
+
+ +
+ +
+
+MDAnalysis.analysis.polymer.fit_exponential_decay(x, y)[source]
+

Fit a function to an exponential decay

+
+\[y = \exp\left(- \frac{x}{a}\right)\]
+
+
Parameters
+
    +
  • x (array_like) – The two arrays of data

  • +
  • y (array_like) – The two arrays of data

  • +
+
+
Returns
+

a – The coefficient a for this decay

+
+
Return type
+

float

+
+
+

Notes

+

This function assumes that data starts at 1.0 and decays to 0.0

+
+ +
+
+MDAnalysis.analysis.polymer.sort_backbone(backbone)[source]
+

Rearrange a linear AtomGroup into backbone order

+

Requires that the backbone has bond information, +and that only backbone atoms are provided (ie no side +chains or hydrogens).

+
+
Parameters
+

backbone (AtomGroup) – the backbone atoms, not necessarily in order

+
+
Returns
+

sorted_backbone – backbone in order, so sorted_backbone[i] is bonded to +sorted_backbone[i - 1] and sorted_backbone[i + 1]

+
+
Return type
+

AtomGroup

+
+
+
+

New in version 0.20.0.

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/psa.html b/2.7.0-dev0/documentation_pages/analysis/psa.html new file mode 100644 index 0000000000..2d6f33c252 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/psa.html @@ -0,0 +1,1513 @@ + + + + + + + 4.2.6. Calculating path similarity — MDAnalysis.analysis.psa — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.6. Calculating path similarity — MDAnalysis.analysis.psa

+
+
Author
+

Sean Seyler

+
+
Year
+

2015

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 0.10.0.

+
+

The module contains code to calculate the geometric similarity of trajectories +using path metrics such as the Hausdorff or Fréchet distances +[Seyler2015]. The path metrics are functions of two paths and return a +nonnegative number, i.e., a distance. Two paths are identical if their distance +is zero, and large distances indicate dissimilarity. Each path metric is a +function of the individual points (e.g., coordinate snapshots) that comprise +each path and, loosely speaking, identify the two points, one per path of a +pair of paths, where the paths deviate the most. The distance between these +points of maximal deviation is measured by the root mean square deviation +(RMSD), i.e., to compute structural similarity.

+

One typically computes the pairwise similarity for an ensemble of paths to +produce a symmetric distance matrix, which can be clustered to, at a glance, +identify patterns in the trajectory data. To properly analyze a path ensemble, +one must select a suitable reference structure to which all paths (each +conformer in each path) will be universally aligned using the rotations +determined by the best-fit rmsds. Distances between paths and their structures +are then computed directly with no further alignment. This pre-processing step +is necessary to preserve the metric properties of the Hausdorff and Fréchet +metrics; using the best-fit rmsd on a pairwise basis does not generally +preserve the triangle inequality.

+
+

Note

+

The PSAnalysisTutorial outlines a typical application of PSA to +a set of trajectories, including doing proper alignment, +performing distance comparisons, and generating heat +map-dendrogram plots from hierarchical clustering.

+
+

References

+
+
+
Seyler2015(1,2,3,4)
+

Sean L. Seyler, Avishek Kumar, M. F. Thorpe, and Oliver Beckstein. Path similarity analysis: a method for quantifying macromolecular pathways. PLOS Computational Biology, 11(10):1–37, 10 2015. doi:10.1371/journal.pcbi.1004568.

+
+
+
+
+

4.2.6.1. Helper functions and variables

+

The following convenience functions are used by other functions in this module.

+
+
+MDAnalysis.analysis.psa.sqnorm(v, axis=None)[source]
+

Compute the sum of squares of elements along specified axes.

+
+
Parameters
+
    +
  • v (numpy.ndarray) – coordinates

  • +
  • axes (None / int / tuple (optional)) – Axes or axes along which a sum is performed. The default +(axes = None) performs a sum over all the dimensions of +the input array. The value of axes may be negative, in +which case it counts from the last axis to the zeroth axis.

  • +
+
+
Returns
+

the sum of the squares of the elements of v along axes

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.analysis.psa.get_msd_matrix(P, Q, axis=None)[source]
+

Generate the matrix of pairwise mean-squared deviations between paths.

+

The MSDs between all pairs of points in P and Q are +calculated, each pair having a point from P and a point from +Q.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). The pairwise MSD +matrix has dimensions \(N_p\) by \(N_q\).

+
+
Parameters
+
+
+
Returns
+

msd_matrix – matrix of pairwise MSDs between points in P and points +in Q

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

We calculate the MSD matrix

+
+\[M_{ij} = ||p_i - q_j||^2\]
+

where \(p_i \in P\) and \(q_j \in Q\).

+
+ +
+
+MDAnalysis.analysis.psa.get_coord_axes(path)[source]
+

Return the number of atoms and the axes corresponding to atoms +and coordinates for a given path.

+

The path is assumed to be a numpy.ndarray where the 0th axis +corresponds to a frame (a snapshot of coordinates). The \(3N\) +(Cartesian) coordinates are assumed to be either:

+
    +
  1. all in the 1st axis, starting with the x,y,z coordinates of the +first atom, followed by the x,*y*,*z* coordinates of the 2nd, etc.

  2. +
  3. in the 1st and 2nd axis, where the 1st axis indexes the atom +number and the 2nd axis contains the x,*y*,*z* coordinates of +each atom.

  4. +
+
+
Parameters
+

path (numpy.ndarray) – representing a path

+
+
Returns
+

the number of atoms and the axes containing coordinates

+
+
Return type
+

(int, (int, …))

+
+
+
+ +
+
+

4.2.6.2. Classes, methods, and functions

+
+
+MDAnalysis.analysis.psa.get_path_metric_func(name)[source]
+

Selects a path metric function by name.

+
+
Parameters
+

name (str) – name of path metric

+
+
Returns
+

path_metric – The path metric function specified by name (if found).

+
+
Return type
+

function

+
+
+
+ +
+
+MDAnalysis.analysis.psa.hausdorff(P, Q)[source]
+

Calculate the symmetric Hausdorff distance between two paths.

+

The metric used is RMSD, as opposed to the more conventional L2 +(Euclidean) norm, because this is convenient for i.e., comparing +protein configurations.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). P (Q) has +either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or \(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form.

+

Note that reversing the path does not change the Hausdorff distance.

+
+
Parameters
+
+
+
Returns
+

the Hausdorff distance between paths P and Q

+
+
Return type
+

float

+
+
+

Example

+

Calculate the Hausdorff distance between two halves of a trajectory:

+
>>> import MDAnalysis as mda
+>>> import numpy
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> from MDAnalysis.analysis import psa
+>>> u = mda.Universe(PSF,DCD)
+>>> mid = int(len(u.trajectory)/2)
+>>> ca = u.select_atoms('name CA')
+>>> P = numpy.array([
+...                ca.positions for _ in u.trajectory[:mid:]
+...              ]) # first half of trajectory
+>>> Q = numpy.array([
+...                ca.positions for _ in u.trajectory[mid::]
+...              ]) # second half of trajectory
+>>> psa.hausdorff(P,Q)
+4.778663899862152
+>>> psa.hausdorff(P,Q[::-1]) # hausdorff distance w/ reversed 2nd trajectory
+4.778663899862152
+
+
+

Notes

+

scipy.spatial.distance.directed_hausdorff() is an optimized +implementation of the early break algorithm of [Taha2015]; the +latter code is used here to calculate the symmetric Hausdorff +distance with an RMSD metric

+

References

+
+
+
Taha2015
+

Abdel Aziz Taha and Allan Hanbury. An efficient algorithm for calculating the exact hausdorff distance. IEEE Transactions on Pattern Analysis and Machine Intelligence, 37(11):2153–2163, 2015. doi:10.1109/TPAMI.2015.2408351.

+
+
+
+
+ +
+
+MDAnalysis.analysis.psa.hausdorff_wavg(P, Q)[source]
+

Calculate the weighted average Hausdorff distance between two paths.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). P (Q) has +either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or \(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form. The nearest +neighbor distances for P (to Q) and those of Q (to P) are averaged +individually to get the average nearest neighbor distance for P and +likewise for Q. These averages are then summed and divided by 2 to get a +measure that gives equal weight to P and Q.

+
+
Parameters
+
+
+
Returns
+

the weighted average Hausdorff distance between paths P and Q

+
+
Return type
+

float

+
+
+

Example

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis import Universe
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> from MDAnalysis.analysis import psa
+>>> u = mda.Universe(PSF,DCD)
+>>> mid = int(len(u.trajectory)/2)
+>>> ca = u.select_atoms('name CA')
+>>> P = numpy.array([
+...                ca.positions for _ in u.trajectory[:mid:]
+...              ]) # first half of trajectory
+>>> Q = numpy.array([
+...                ca.positions for _ in u.trajectory[mid::]
+...              ]) # second half of trajectory
+>>> psa.hausdorff_wavg(P,Q)
+2.5669644353703447
+>>> psa.hausdorff_wavg(P,Q[::-1]) # weighted avg hausdorff dist w/ Q reversed
+2.5669644353703447
+
+
+

Notes

+

The weighted average Hausdorff distance is not a true metric (it does not +obey the triangle inequality); see [Seyler2015] for further +details.

+
+ +
+
+MDAnalysis.analysis.psa.hausdorff_avg(P, Q)[source]
+

Calculate the average Hausdorff distance between two paths.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). P (Q) has +either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or \(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form. The nearest +neighbor distances for P (to Q) and those of Q (to P) are all +averaged together to get a mean nearest neighbor distance. This measure +biases the average toward the path that has more snapshots, whereas weighted +average Hausdorff gives equal weight to both paths.

+
+
Parameters
+
+
+
Returns
+

the average Hausdorff distance between paths P and Q

+
+
Return type
+

float

+
+
+

Example

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> from MDAnalysis.analysis import psa
+>>> u = mda.Universe(PSF,DCD)
+>>> mid = int(len(u.trajectory)/2)
+>>> ca = u.select_atoms('name CA')
+>>> P = numpy.array([
+...                ca.positions for _ in u.trajectory[:mid:]
+...              ]) # first half of trajectory
+>>> Q = numpy.array([
+...                ca.positions for _ in u.trajectory[mid::]
+...              ]) # second half of trajectory
+>>> psa.hausdorff_avg(P,Q)
+2.5669646575869005
+>>> psa.hausdorff_avg(P,Q[::-1]) # hausdorff distance w/ reversed 2nd trajectory
+2.5669646575869005
+
+
+

Notes

+

The average Hausdorff distance is not a true metric (it does not obey the +triangle inequality); see [Seyler2015] for further details.

+
+ +
+
+MDAnalysis.analysis.psa.hausdorff_neighbors(P, Q)[source]
+

Find the Hausdorff neighbors of two paths.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). P (Q) has +either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or \(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form.

+
+
Parameters
+
+
+
Returns
+

dictionary of two pairs of numpy arrays, the first pair (key +“frames”) containing the indices of (Hausdorff) nearest +neighbors for P and Q, respectively, the second (key +“distances”) containing (corresponding) nearest neighbor +distances for P and Q, respectively

+
+
Return type
+

dict

+
+
+

Notes

+
    +
  • Hausdorff neighbors are those points on the two paths that are separated by +the Hausdorff distance. They are the farthest nearest neighbors and are +maximally different in the sense of the Hausdorff distance +[Seyler2015].

  • +
  • scipy.spatial.distance.directed_hausdorff() can also provide the +hausdorff neighbors.

  • +
+
+ +
+
+MDAnalysis.analysis.psa.discrete_frechet(P, Q)[source]
+

Calculate the discrete Fréchet distance between two paths.

+

P (Q) is a numpy.ndarray of \(N_p\) (\(N_q\)) time +steps, \(N\) atoms, and \(3N\) coordinates (e.g., +MDAnalysis.core.groups.AtomGroup.positions). P (Q) has +either shape \(N_p \times N \times 3\) (\(N_q \times N \times 3\)), or :\(N_p \times (3N)\) (\(N_q \times (3N)\)) in flattened form.

+
+
Parameters
+
+
+
Returns
+

the discrete Fréchet distance between paths P and Q

+
+
Return type
+

float

+
+
+

Example

+

Calculate the discrete Fréchet distance between two halves of a +trajectory.

+
>>> import MDAnalysis as mda
+>>> import numpy as np
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> from MDAnalysis.analysis import psa
+>>> u = mda.Universe(PSF,DCD)
+>>> mid = int(len(u.trajectory)/2)
+>>> ca = u.select_atoms('name CA')
+>>> P = np.array([
+...                ca.positions for _ in u.trajectory[:mid:]
+...              ]) # first half of trajectory
+>>> Q = np.array([
+...                ca.positions for _ in u.trajectory[mid::]
+...              ]) # second half of trajectory
+>>> psa.discrete_frechet(P,Q)
+4.778663984013591
+>>> psa.discrete_frechet(P,Q[::-1]) # frechet distance w/ 2nd trj reversed 2nd
+6.842901117711383
+
+
+

Note that reversing the direction increased the Fréchet distance: +it is sensitive to the direction of the path.

+

Notes

+

The discrete Fréchet metric is an approximation to the continuous Fréchet +metric [Frèchet1906, Alt1995]. The calculation of the continuous +Fréchet distance is implemented with the dynamic programming algorithm of +[Eiter1994, Eiter1997].

+

References

+
+
+
Frèchet1906
+

M. Maurice Frèchet. Sur quelques points du calcul fonctionnel. Rendiconti del Circolo Matematico di Palermo (1884-1940), 22(1):1–72, 1906. doi:10.1007/BF03018603.

+
+
Alt1995
+

Helmut Alt and Michael Godau. Computing the frechet distance between two polygonal curves. International Journal of Computational Geometry & Applications, 05(01n02):75–91, 1995. doi:10.1142/S0218195995000064.

+
+
Eiter1994
+

Thomas Eiter and Heikki Mannila. Computing discrete frechet distance. 05 1994.

+
+
Eiter1997
+

Thomas Eiter and Heikki Mannila. Distance measures for point sets and their computation. Acta Informatica, 34(2):109–133, 1997. doi:10.1007/s002360050075.

+
+
+
+
+ +
+
+MDAnalysis.analysis.psa.dist_mat_to_vec(N, i, j)[source]
+

Convert distance matrix indices (in the upper triangle) to the index of +the corresponding distance vector.

+

This is a convenience function to locate distance matrix elements (and the +pair generating it) in the corresponding distance vector. The row index j +should be greater than i+1, corresponding to the upper triangle of the +distance matrix.

+
+
Parameters
+
    +
  • N (int) – size of the distance matrix (of shape N-by-N)

  • +
  • i (int) – row index (starting at 0) of the distance matrix

  • +
  • j (int) – column index (starting at 0) of the distance matrix

  • +
+
+
Returns
+

index (of the matrix element) in the corresponding distance vector

+
+
Return type
+

int

+
+
+
+ +
+
+class MDAnalysis.analysis.psa.Path(universe, reference, select='name CA', path_select='all', ref_frame=0)[source]
+

Represent a path based on a Universe.

+

Pre-process a Universe object: (1) fit the trajectory to a +reference structure, (2) convert fitted time series to a +numpy.ndarray representation of Path.path.

+

The analysis is performed with PSAnalysis.run() and stores the result +in the numpy.ndarray distance matrix PSAnalysis.D. +PSAnalysis.run() also generates a fitted trajectory and path from +alignment of the original trajectories to a reference structure.

+
+

New in version 0.9.1.

+
+

Setting up trajectory alignment and fitted path generation.

+
+
Parameters
+
    +
  • universe (Universe) – MDAnalysis.Universe object containing a trajectory

  • +
  • reference (Universe) – reference structure (uses ref_frame from the trajectory)

  • +
  • select (str or dict or tuple (optional)) –

    The selection to operate on for rms fitting; can be one of:

    +
      +
    1. any valid selection string for +select_atoms() that +produces identical selections in mobile and reference; or

    2. +
    3. a dictionary {'mobile':sel1, 'reference':sel2} (the +MDAnalysis.analysis.align.fasta2select() function returns +such a dictionary based on a ClustalW or STAMP sequence +alignment); or

    4. +
    5. a tuple (sel1, sel2)

    6. +
    +

    When using 2. or 3. with sel1 and sel2 then these selections +can also each be a list of selection strings (to generate an +AtomGroup with defined atom order as described under +Ordered selections).

    +

  • +
  • ref_frame (int) – frame index to select the coordinate frame from +select.trajectory

  • +
  • path_select (selection_string) – atom selection composing coordinates of (fitted) path; if None +then path_select is set to select [None]

  • +
+
+
+
+
+u_original
+

MDAnalysis.Universe object with a trajectory

+
+ +
+
+u_reference
+

MDAnalysis.Universe object containing a reference structure

+
+ +
+
+select
+

string, selection for +select_atoms() to select frame +from Path.u_reference

+
+ +
+
+path_select
+

string, selection for +select_atoms() to select atoms +to compose Path.path

+
+ +
+
+ref_frame
+

int, frame index to select frame from Path.u_reference

+
+ +
+
+u_fitted
+

MDAnalysis.Universe object with the fitted trajectory

+
+ +
+
+path
+

numpy.ndarray object representation of the fitted trajectory

+
+ +
+
+fit_to_reference(filename=None, prefix='', postfix='_fit', rmsdfile=None, targetdir='.', weights=None, tol_mass=0.1)[source]
+

Align each trajectory frame to the reference structure

+
+
Parameters
+
    +
  • filename (str (optional)) – file name for the RMS-fitted trajectory or pdb; defaults to the +original trajectory filename (from Path.u_original) with +prefix prepended

  • +
  • prefix (str (optional)) – prefix for auto-generating the new output filename

  • +
  • rmsdfile (str (optional)) – file name for writing the RMSD time series [None]

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses as weights; with +None weigh each atom equally. If a float array of the same +length as the selected AtomGroup is provided, use each element of +the array_like as a weight for the corresponding atom in the +AtomGroup.

  • +
  • tol_mass (float (optional)) – Reject match if the atomic masses for matched atoms differ by more +than tol_mass [0.1]

  • +
+
+
Returns
+

MDAnalysis.Universe object containing a fitted trajectory

+
+
Return type
+

Universe

+
+
+

Notes

+

Uses MDAnalysis.analysis.align.AlignTraj for the fitting.

+
+

Deprecated since version 0.16.1: Instead of mass_weighted=True use new weights='mass'; +refactored to fit with AnalysisBase API

+
+
+

Changed in version 0.17.0: Deprecated keyword mass_weighted was removed.

+
+
+ +
+
+get_num_atoms()[source]
+

Return the number of atoms used to construct the Path.

+

Must run Path.to_path() prior to calling this method.

+
+
Returns
+

the number of atoms in the Path

+
+
Return type
+

int

+
+
+
+ +
+
+run(align=False, filename=None, postfix='_fit', rmsdfile=None, targetdir='.', weights=None, tol_mass=0.1, flat=False)[source]
+

Generate a path from a trajectory and reference structure.

+

As part of the path generation, the trajectory can be superimposed +(“aligned”) to a reference structure if specified.

+

This is a convenience method to generate a fitted trajectory from an +inputted universe (Path.u_original) and reference structure +(Path.u_reference). Path.fit_to_reference() and +Path.to_path() are used consecutively to generate a new universe +(Path.u_fitted) containing the fitted trajectory along with the +corresponding Path.path represented as an +numpy.ndarray. The method returns a tuple of the topology name +and new trajectory name, which can be fed directly into an +MDAnalysis.Universe object after unpacking the tuple using the +* operator, as in +MDAnalysis.Universe(*(top_name, newtraj_name)).

+
+
Parameters
+
    +
  • align (bool (optional)) – Align trajectory to atom selection Path.select of +Path.u_reference. If True, a universe containing an +aligned trajectory is produced with Path.fit_to_reference() +[False]

  • +
  • filename (str (optional)) – filename for the RMS-fitted trajectory or pdb; defaults to the +original trajectory filename (from Path.u_original) with +prefix prepended

  • +
  • postfix (str (optional)) – prefix for auto-generating the new output filename

  • +
  • rmsdfile (str (optional)) – file name for writing the RMSD time series [None]

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses as weights; with +None weigh each atom equally. If a float array of the same +length as the selected AtomGroup is provided, use each element of +the array_like as a weight for the corresponding atom in the +AtomGroup.

  • +
  • tol_mass (float (optional)) – Reject match if the atomic masses for matched atoms differ by more +than tol_mass [0.1]

  • +
  • flat (bool (optional)) – represent Path.path with 2D (\(N_p\times 3N\)) numpy.ndarray; +if False then Path.path is a 3D (\(N_p\times N\times 3\)) +numpy.ndarray [False]

  • +
+
+
Returns
+

topology_trajectory – A tuple of the topology name and new trajectory name.

+
+
Return type
+

tuple

+
+
+
+

Deprecated since version 0.16.1: Instead of mass_weighted=True use new weights='mass'; +refactored to fit with AnalysisBase API

+
+
+

Changed in version 0.17.0: Deprecated keyword mass_weighted was removed.

+
+
+ +
+
+to_path(fitted=False, select=None, flat=False)[source]
+

Generates a coordinate time series from the fitted universe +trajectory.

+

Given a selection of N atoms from select, the atomic positions for +each frame in the fitted universe (Path.u_fitted) trajectory +(with \(N_p\) total frames) are appended sequentially to form a 3D or 2D +(if flat is True) numpy.ndarray representation of the +fitted trajectory (with dimensions \(N_p\times N\times 3\) or \(N_p\times 3N\), respectively).

+
+
Parameters
+
+
+
Returns
+

representing a time series of atomic positions of an +MDAnalysis.core.groups.AtomGroup selection from +Path.u_fitted.trajectory

+
+
Return type
+

numpy.ndarray

+
+
+
+ +
+ +
+
+class MDAnalysis.analysis.psa.PSAPair(npaths, i, j)[source]
+

Generate nearest neighbor and Hausdorff pair information between a pair +of paths from an all-pairs comparison generated by PSA.

+

The nearest neighbors for each path of a pair of paths is generated by +PSAPair.compute_nearest_neighbors() and stores the result +in a dictionary (nearest_neighbors): each path has a +numpy.ndarray of the frames of its nearest neighbors, and a +numpy.ndarray of its nearest neighbor distances +PSAnalysis.D. For example, nearest_neighbors[‘frames’] is a pair +of numpy.ndarray, the first being the frames of the nearest +neighbors of the first path, i, the second being those of the second path, +j.

+

The Hausdorff pair for the pair of paths is found by calling +find_hausdorff_pair() (locates the nearest neighbor pair having the +largest overall distance separating them), which stores the result in a +dictionary (hausdorff_pair) containing the frames (indices) of the +pair along with the corresponding (Hausdorff) distance. +hausdorff_pair[‘frame’] contains a pair of frames in the first path, i, +and the second path, j, respectively, that correspond to the Hausdorff +distance between them.

+
+

New in version 0.11.

+
+

Set up a PSAPair for a pair of paths that are part of a +PSA comparison of npaths total paths.

+

Each unique pair of paths compared using PSA is related by +their nearest neighbors (and corresponding distances) and the Hausdorff +pair and distance. PSAPair is a convenience class for +calculating and encapsulating nearest neighbor and Hausdorff pair +information for one pair of paths.

+

Given npaths, PSA performs and all-pairs comparison among all +paths for a total of :math:` ext{npaths}*( ext{npaths}-1)/2` unique +comparisons. If distances between paths are computed, the all-pairs +comparison can be summarized in a symmetric distance matrix whose upper +triangle can be mapped to a corresponding distance vector form in a +one-to-one manner. A particular comparison of a pair of paths in a +given instance of PSAPair is thus unique identified by the row +and column indices in the distance matrix representation (whether or not +distances are actually computed), or a single ID (index) in the +corresponding distance vector.

+
+
Parameters
+
    +
  • npaths (int) – total number of paths in PSA used to generate this +PSAPair

  • +
  • i (int) – row index (starting at 0) of the distance matrix

  • +
  • j (int) – column index (starting at 0) of the distance matrix

  • +
+
+
+
+
+npaths
+

int, total number of paths in the comparison in which this +PSAPair was generated

+
+ +
+
+matrix_id
+

(int, int), (row, column) indices of the location of this +PSAPair in the corresponding pairwise distance matrix

+
+ +
+
+pair_id
+

int, ID of this PSAPair (the pair_id:math:^text{th} +comparison) in the distance vector corresponding to the pairwise distance +matrix

+
+ +
+
+nearest_neighbors
+

dict, contains the nearest neighbors by frame index and the +nearest neighbor distances for each path in this PSAPair

+
+ +
+
+hausdorff_pair
+

dict, contains the frame indices of the Hausdorff pair for each path in +this PSAPair and the corresponding (Hausdorff) distance

+
+ +
+ +
+
+class MDAnalysis.analysis.psa.PSAnalysis(universes, reference=None, select='name CA', ref_frame=0, path_select=None, labels=None, targetdir='.')[source]
+

Perform Path Similarity Analysis (PSA) on a set of trajectories.

+

The analysis is performed with PSAnalysis.run() and stores the result +in the numpy.ndarray distance matrix PSAnalysis.D. +PSAnalysis.run() also generates a fitted trajectory and path from +alignment of the original trajectories to a reference structure.

+
+

New in version 0.8.

+
+
+

Changed in version 1.0.0: save_result() method has been removed. You can use np.save() on +PSAnalysis.D instead.

+
+

Setting up Path Similarity Analysis.

+

The mutual similarity between all unique pairs of trajectories +are computed using a selected path metric.

+
+
Parameters
+
    +
  • universes (list) – a list of universes (MDAnalysis.Universe object), each +containing a trajectory

  • +
  • reference (Universe) – reference coordinates; MDAnalysis.Universe object; if +None the first time step of the first item in universes is used +[None]

  • +
  • select (str or dict or tuple) –

    The selection to operate on; can be one of:

    +
      +
    1. any valid selection string for +select_atoms() that +produces identical selections in mobile and reference; or

    2. +
    3. a dictionary {'mobile':sel1, 'reference':sel2} (the +MDAnalysis.analysis.align.fasta2select() function returns +such a dictionary based on a ClustalW or STAMP sequence +alignment); or

    4. +
    5. a tuple (sel1, sel2)

    6. +
    +

    When using 2. or 3. with sel1 and sel2 then these selections +can also each be a list of selection strings (to generate an +AtomGroup with defined atom order as described under +Ordered selections).

    +

  • +
  • tol_mass (float) – Reject match if the atomic masses for matched atoms differ by more +than tol_mass [0.1]

  • +
  • ref_frame (int) – frame index to select frame from reference [0]

  • +
  • path_select (str) – atom selection composing coordinates of (fitted) path; if None +then path_select is set to select [None]

  • +
  • targetdir (str) – output files are saved there; if None then “./psadata” is +created and used [.]

  • +
  • labels (list) – list of strings, names of trajectories to be analyzed +(MDAnalysis.Universe); if None, defaults to trajectory +names [None]

  • +
+
+
+
+
+universes
+

list of MDAnalysis.Universe objects containing trajectories

+
+ +
+
+u_reference
+

MDAnalysis.Universe object containing a reference structure

+
+ +
+
+select
+

string, selection for +select_atoms() to select frame +from PSAnalysis.u_reference

+
+ +
+
+path_select
+

string, selection for +select_atoms() to select atoms +to compose Path.path

+
+ +
+
+ref_frame
+

int, frame index to select frame from Path.u_reference

+
+ +
+
+paths
+

list of numpy.ndarray objects representing the set/ensemble of +fitted trajectories

+
+ +
+
+D
+

numpy.ndarray which stores the calculated distance matrix

+
+ +
+
+cluster(dist_mat=None, method='ward', count_sort=False, distance_sort=False, no_plot=False, no_labels=True, color_threshold=4)[source]
+

Cluster trajectories and optionally plot the dendrogram.

+

This method is used by PSAnalysis.plot() to generate a heatmap- +dendrogram combination plot. By default, the distance matrix, +PSAnalysis.D, is assumed to exist, converted to +distance-vector form, and inputted to cluster.hierarchy.linkage() +to generate a clustering. For convenience in plotting arbitrary +distance matrices, one can also be specify dist_mat, which will be +checked for proper distance matrix form by +spatial.distance.squareform()

+
+
Parameters
+
    +
  • dist_mat (numpy.ndarray) – user-specified distance matrix to be clustered [None]

  • +
  • method (str) – name of linkage criterion for clustering ['ward']

  • +
  • no_plot (bool) – if True, do not render the dendrogram [False]

  • +
  • no_labels (bool) – if True then do not label dendrogram [True]

  • +
  • color_threshold (float) – For brevity, let t be the color_threshold. Colors all the +descendent links below a cluster node k the same color if k is +the first node below the cut threshold t. All links connecting +nodes with distances greater than or equal to the threshold are +colored blue. If t is less than or equal to zero, all nodes are +colored blue. If color_threshold is None or ‘default’, +corresponding with MATLAB(TM) behavior, the threshold is set to +0.7*max(Z[:,2]). [4]]

  • +
+
+
Returns
+

+

+
+
+
+ +
+
+generate_paths(align=False, filename=None, infix='', weights=None, tol_mass=False, ref_frame=None, flat=False, save=True, store=False)[source]
+

Generate paths, aligning each to reference structure if necessary.

+
+
Parameters
+
    +
  • align (bool) – Align trajectories to atom selection PSAnalysis.select +of PSAnalysis.u_reference [False]

  • +
  • filename (str) – strings representing base filename for fitted trajectories and +paths [None]

  • +
  • infix (str) – additional tag string that is inserted into the output filename of +the fitted trajectory files [‘’]

  • +
  • weights ({“mass”, None} or array_like (optional)) – choose weights. With "mass" uses masses as weights; with +None weigh each atom equally. If a float array of the same +length as the selected AtomGroup is provided, use each element of +the array_like as a weight for the corresponding atom in the +AtomGroup [None]

  • +
  • tol_mass (float) – Reject match if the atomic masses for matched atoms differ by more +than tol_mass [False]

  • +
  • ref_frame (int) – frame index to select frame from reference [None]

  • +
  • flat (bool) – represent Path.path as a 2D (\(N_p\times 3N\)) numpy.ndarray; +if False then Path.path is a 3D (\(N_p\times N\times 3\)) +numpy.ndarray [False]

  • +
  • save (bool) – if True, pickle list of names for fitted trajectories +[True]

  • +
  • store (bool) – if True then writes each path (numpy.ndarray) +in PSAnalysis.paths to compressed npz (numpy) files +[False]

  • +
+
+
+

The fitted trajectories are written to new files in the +“/trj_fit” subdirectory in PSAnalysis.targetdir named +“filename(trajectory)XXX*infix*_psa”, where “XXX” is a number between +000 and 999; the extension of each file is the same as its original. +Optionally, the trajectories can also be saved in numpy compressed npz +format in the “/paths” subdirectory in PSAnalysis.targetdir for +persistence and can be accessed as the attribute +PSAnalysis.paths.

+
+

Deprecated since version 0.16.1: Instead of mass_weighted=True use new weights='mass'; +refactored to fit with AnalysisBase API

+
+
+

Changed in version 0.17.0: Deprecated keyword mass_weighted was removed.

+
+
+

Changed in version 1.0.0: Defaults for the store and filename keywords have been changed +from True and fitted to False and None respectively. These +now match the docstring documented defaults.

+
+
+ +
+
+get_num_atoms()[source]
+

Return the number of atoms used to construct the Path instances in +PSA.

+
+
Returns
+

the number of atoms in any path

+
+
Return type
+

int

+
+
+
+

Note

+

Must run PSAnalysis.generate_paths() prior to calling this +method.

+
+
+ +
+
+get_num_paths()[source]
+

Return the number of paths in PSA.

+
+

Note

+

Must run PSAnalysis.generate_paths() prior to calling this method.

+
+
+
Returns
+

the number of paths in PSA

+
+
Return type
+

int

+
+
+
+ +
+
+get_pairwise_distances(vectorform=False, checks=False)[source]
+

Return the distance matrix (or vector) of pairwise path distances.

+
+

Note

+

Must run PSAnalysis.run() prior to calling this method.

+
+
+
Parameters
+
    +
  • vectorform (bool) – if True, return the distance vector instead [False]

  • +
  • checks (bool) – if True, check that PSAnalysis.D is a proper distance +matrix [False]

  • +
+
+
Returns
+

representation of the distance matrix (or vector)

+
+
Return type
+

numpy.ndarray

+
+
+
+ +
+
+get_paths()[source]
+

Return the paths in PSA.

+
+

Note

+

Must run PSAnalysis.generate_paths() prior to calling this +method.

+
+
+
Returns
+

list of numpy.ndarray representations of paths in +PSA

+
+
Return type
+

list

+
+
+
+ +
+
+property hausdorff_pairs
+

The Hausdorff pair for each (unique) pairs of paths.

+

This attribute contains a list of Hausdorff pair information (in +distance vector order), where each element is a dictionary containing +the pair of frames and the (Hausdorff) distance between a pair of +paths. See PSAnalysis.psa_pairs() and +PSAPair.hausdorff_pair for more information about accessing +Hausdorff pair data.

+
+

Note

+

Must run PSAnalysis.run_pairs_analysis() with +hausdorff_pairs=True prior to calling this method.

+
+
+ +
+
+load()[source]
+

Load fitted paths specified by ‘psa_path-names.pkl’ in +PSAnalysis.targetdir.

+

All filenames are determined by PSAnalysis.

+
+

See also

+

save_paths

+
+
+ +
+
+property nearest_neighbors
+

The nearest neighbors for each (unique) pair of paths.

+

This attribute contains a list of nearest neighbor information (in +distance vector order), where each element is a dictionary containing +the nearest neighbor frames and distances between a pair of paths. See +PSAnalysis.psa_pairs() and PSAPair.nearest_neighbors for +more information about accessing nearest neighbor data.

+
+

Note

+

Must run PSAnalysis.run_pairs_analysis() with +neighbors=True prior to calling this method.

+
+
+ +
+
+plot(filename=None, linkage='ward', count_sort=False, distance_sort=False, figsize=4.5, labelsize=12)[source]
+

Plot a clustered distance matrix.

+

Usese method linkage and plots the corresponding dendrogram. Rows +(and columns) are identified using the list of strings specified by +PSAnalysis.labels.

+

If filename is supplied then the figure is also written to file (the +suffix determines the file type, e.g. pdf, png, eps, …). All other +keyword arguments are passed on to matplotlib.pyplot.matshow().

+
+
Parameters
+
+
+
Returns
+

    +
  • ZZ from cluster()

  • +
  • dgramdgram from cluster()

  • +
  • dist_matrix_clus – clustered distance matrix (reordered)

  • +
  • .. versionchanged:: 1.0.0tick1On, tick2On, label1On and label2On +changed to tick1line, tick2line, label1 and +label2 due to upstream deprecation (see #2493)

  • +
+

+
+
+
+ +
+
+plot_annotated_heatmap(filename=None, linkage='ward', count_sort=False, distance_sort=False, figsize=8, annot_size=6.5)[source]
+

Plot a clustered distance matrix.

+

Uses method linkage and plots annotated distances in the matrix. Rows +(and columns) are identified using the list of strings specified by +PSAnalysis.labels.

+

If filename is supplied then the figure is also written to file (the +suffix determines the file type, e.g. pdf, png, eps, …). All other +keyword arguments are passed on to matplotlib.pyplot.imshow().

+
+
Parameters
+
+
+
Returns
+

    +
  • ZZ from cluster()

  • +
  • dgramdgram from cluster()

  • +
  • dist_matrix_clus – clustered distance matrix (reordered)

  • +
+

+
+
+
+

Note

+

This function requires the seaborn package, which can be installed +with pip install seaborn or conda install seaborn.

+
+

Changed in version 1.0.0: tick1On, tick2On, label1On and label2On +changed to tick1line, tick2line, label1 and +label2 due to upstream deprecation (see #2493)

+
+
+
+ +
+
+plot_nearest_neighbors(filename=None, idx=0, labels=('Path 1', 'Path 2'), figsize=4.5, multiplot=False, aspect_ratio=1.75, labelsize=12)[source]
+

Plot nearest neighbor distances as a function of normalized frame +number.

+

The frame number is mapped to the interval [0, 1].

+

If filename is supplied then the figure is also written to file (the +suffix determines the file type, e.g. pdf, png, eps, …). All other +keyword arguments are passed on to matplotlib.pyplot.imshow().

+
+
Parameters
+
    +
  • filename (str) – save figure to filename [None]

  • +
  • idx (int) – index of path (pair) comparison to plot [0]

  • +
  • labels ((str, str)) – pair of names to label nearest neighbor distance +curves [('Path 1', 'Path 2')]

  • +
  • figsize (float) – set the vertical size of plot in inches [4.5]

  • +
  • multiplot (bool) – set to True to enable plotting multiple nearest +neighbor distances on the same figure [False]

  • +
  • aspect_ratio (float) – set the ratio of width to height of the plot [1.75]

  • +
  • labelsize (float) – set the font size for colorbar labels; font size for path labels on +dendrogram default to 3 points smaller [12]

  • +
+
+
Returns
+

ax

+
+
Return type
+

axes

+
+
+
+

Note

+

This function requires the seaborn package, which can be installed +with pip install seaborn or conda install seaborn.

+
+
+ +
+
+property psa_pairs
+

The list of PSAPair instances for each pair of paths.

+

psa_pairs is a list of all PSAPair objects (in +distance vector order). The elements of a PSAPair are pairs of +paths that have been compared using +PSAnalysis.run_pairs_analysis(). Each PSAPair contains +nearest neighbor and Hausdorff pair information specific to a pair of +paths. The nearest neighbor frames and distances for a PSAPair +can be accessed in the nearest neighbor dictionary using the keys +‘frames’ and ‘distances’, respectively. E.g., +PSAPair.nearest_neighbors['distances'] returns a pair of +numpy.ndarray corresponding to the nearest neighbor distances +for each path. Similarly, Hausdorff pair information can be accessed +using PSAPair.hausdorff_pair with the keys ‘frames’ and +‘distance’.

+
+

Note

+

Must run PSAnalysis.run_pairs_analysis() prior to calling this +method.

+
+
+ +
+
+run(**kwargs)[source]
+

Perform path similarity analysis on the trajectories to compute +the distance matrix.

+

A number of parameters can be changed from the defaults. The +result is stored as the array PSAnalysis.D.

+
+
Parameters
+
    +
  • metric (str or callable) – selection string specifying the path metric to measure pairwise +distances among PSAnalysis.paths or a callable with the +same call signature as hausdorff() +['hausdorff']

  • +
  • start (int) – start and stop frame index with step size: analyze +trajectory[start:stop:step] [None]

  • +
  • stop (int) –

  • +
  • step (int) –

  • +
  • versionchanged: (..) – 1.0.0: store and filename have been removed.

  • +
+
+
+
+ +
+
+run_pairs_analysis(**kwargs)[source]
+

Perform PSA Hausdorff (nearest neighbor) pairs analysis on all unique +pairs of paths in PSAnalysis.paths.

+

Partial results can be stored in separate lists, where each list is +indexed according to distance vector convention (i.e., element (i,j) +in distance matrix representation corresponds to element +\(s=N*i+j-(i+1)*(i+2)\) in distance vector representation, which is +the \(s^ ext{th}\) comparison). For each unique pair of paths, the +nearest neighbors for that pair can be stored in NN and the +Hausdorff pair in HP. PP stores the full information +of Hausdorff pairs analysis that is available for each pair of path, +including nearest neighbors lists and the Hausdorff pairs.

+

The pairwise distances are stored as the array PSAnalysis.D.

+
+
Parameters
+
    +
  • start (int) – start and stop frame index with step size: analyze +trajectory[start:stop:step] [None]

  • +
  • stop (int) –

  • +
  • step (int) –

  • +
  • neighbors (bool) – if True, then stores dictionary of nearest neighbor +frames/distances in PSAnalysis.NN [False]

  • +
  • hausdorff_pairs (bool) – if True, then stores dictionary of Hausdorff pair +frames/distances in PSAnalysis.HP [False]

  • +
+
+
+
+ +
+
+save_paths(filename=None)[source]
+

Save fitted PSAnalysis.paths to numpy compressed npz files.

+

The data are saved with numpy.savez_compressed() in the directory +specified by PSAnalysis.targetdir.

+
+
Parameters
+

filename (str) – specifies filename [None]

+
+
Returns
+

filename

+
+
Return type
+

str

+
+
+
+

See also

+

load

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/rdf.html b/2.7.0-dev0/documentation_pages/analysis/rdf.html new file mode 100644 index 0000000000..39e34653fc --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/rdf.html @@ -0,0 +1,693 @@ + + + + + + + 4.7.2.1. Radial Distribution Functions — MDAnalysis.analysis.rdf — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.7.2.1. Radial Distribution Functions — MDAnalysis.analysis.rdf

+

This module contains two classes to calculate radial +pair distribution functions (radial distribution functions or “RDF”). +The RDF \(g_{ab}(r)\) between types of particles \(a\) and \(b\) is

+
+\[g_{ab}(r) = (N_{a} N_{b})^{-1} \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 +homogenous system. The RDF effectively counts the average number of \(b\) +neighbours in a shell at distance \(r\) around a \(a\) particle and +represents it as a density.

+

The radial cumulative distribution function is

+
+\[G_{ab}(r) = \int_0^r \!\!dr' 4\pi r'^2 g_{ab}(r')\]
+

and the average number of \(b\) particles within radius \(r\)

+
+\[N_{ab}(r) = \rho G_{ab}(r)\]
+

(with the appropriate density \(\rho\)). The latter function can be used to +compute, for instance, coordination numbers such as the number of neighbors in +the first solvation shell \(N(r_1)\) where \(r_1\) is the position of +the first minimum in \(g(r)\).

+

We provide options for calculating the density of particle \(b\) +in a shell at distance \(r\) around a \(a\) particle, which is

+
+\[n_{ab}(r) = \rho g_{ab}(r)\]
+
+
+
+class MDAnalysis.analysis.rdf.InterRDF(g1, g2, nbins=75, range=(0.0, 15.0), norm='rdf', exclusion_block=None, exclude_same=None, **kwargs)[source]
+

Radial distribution function

+

InterRDF is a tool to calculate average radial distribution +functions between two groups of atoms. Suppose we have two AtomGroups A +and B. A contains atom A1, A2, and B contains B1, +B2. Given A and B to InterRDF, the output will be the +average of RDFs between A1 and B1, A1 and B2, A2 and +B1, A2 and B2. A typical application is to calculate the RDF of +solvent with itself or with another solute.

+

The radial distribution function is calculated by +histogramming distances between all particles in g1 and g2 while taking +periodic boundary conditions into account via the minimum image +convention.

+

The exclusion_block keyword may be used to exclude a set of distances +from the calculations.

+

Results are available in the attributes results.rdf +and results.count.

+
+
Parameters
+
    +
  • g1 (AtomGroup) – First AtomGroup

  • +
  • g2 (AtomGroup) – Second AtomGroup

  • +
  • nbins (int) – Number of bins in the histogram

  • +
  • range (tuple or list) – The size of the RDF

  • +
  • norm (str, {'rdf', 'density', 'none'}) –

    For ‘rdf’ calculate \(g_{ab}(r)\). For +‘density’ the single particle density +\(n_{ab}(r)\) is computed. ‘none’ computes the number of +particles occurences in each spherical shell.

    +
    +

    New in version 2.3.0.

    +
    +

  • +
  • exclusion_block (tuple) – A tuple representing the tile to exclude from the distance array.

  • +
  • exclude_same (str) – Will exclude pairs of atoms that share the same “residue”, “segment”, or “chain”. +Those are the only valid values. This is intended to remove atoms that are +spatially correlated due to direct bonded connections.

  • +
  • verbose (bool) – Show detailed progress of the calculation if set to True

  • +
+
+
+
+
+results.bins
+

numpy.ndarray of the centers of the nbins histogram +bins.

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+bins
+

Alias to the results.bins attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.bins instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.edges
+

numpy.ndarray of the nbins + 1 edges of the histogram +bins.

+
+
+

New in version 2.0.0.

+
+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+edges
+

Alias to the results.edges attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.edges instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.rdf
+

numpy.ndarray of the radial distribution +function values for the results.bins.

+
+
+

New in version 2.0.0.

+
+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+rdf
+

Alias to the results.rdf attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.rdf instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.count
+

numpy.ndarray representing the radial histogram, i.e., +the raw counts, for all results.bins.

+
+
+

New in version 2.0.0.

+
+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+count
+

Alias to the results.count attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.count instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +

Example

+

First create the InterRDF object, by supplying two +AtomGroups then use the run() method

+
rdf = InterRDF(ag1, ag2)
+rdf.run()
+
+
+

Results are available through the results.bins and +results.rdf attributes:

+
plt.plot(rdf.results.bins, rdf.results.rdf)
+
+
+

The exclusion_block keyword allows the masking of pairs from +within the same molecule. For example, if there are 7 of each +atom in each molecule, the exclusion mask (7, 7) can be used.

+
+

New in version 0.13.0.

+
+
+

Changed in version 1.0.0: Support for the start, stop, and step keywords has been +removed. These should instead be passed to InterRDF.run().

+
+
+

Changed in version 2.0.0: Store results as attributes bins, edges, rdf and count +of the results attribute of +AnalysisBase.

+
+
+ +
+
+class MDAnalysis.analysis.rdf.InterRDF_s(u, ags, nbins=75, range=(0.0, 15.0), norm='rdf', density=False, **kwargs)[source]
+

Site-specific radial distribution function

+

Calculates site-specific radial distribution +functions. Instead of two groups of atoms it takes as input a list of +pairs of AtomGroup, [[A, B], [C, D], ...]. Given the same A and +B to +InterRDF_s, the output will be a list of individual RDFs between +A1 and B1, A1 and B2, A2 and B1, A2 and B2 +(and +similarly for C and D). These site-specific radial distribution +functions are typically calculated if one is interested in the solvation +shells of a ligand in a binding site or the solvation of specific residues +in a protein.

+
+
Parameters
+
    +
  • u (Universe) –

    a Universe that contains atoms in ags

    +
    +

    Deprecated since version 2.3.0: This parameter is superflous and will be removed in +MDAnalysis 3.0.0.

    +
    +

  • +
  • ags (list) – a list of pairs of AtomGroup +instances

  • +
  • nbins (int) – Number of bins in the histogram

  • +
  • range (tuple or list) – The size of the RDF

  • +
  • norm (str, {'rdf', 'density', 'none'}) –

    For ‘rdf’ calculate \(g_{ab}(r)\). For +‘density’ the single particle density +\(n_{ab}(r)\) is computed. ‘none’ computes the number of +particles occurences in each spherical shell.

    +
    +

    New in version 2.3.0.

    +
    +

  • +
  • density (bool) –

    False: calculate \(g_{ab}(r)\); True: calculate +the true single particle density +\(n_{ab}(r)\). density overwrites the norm parameter.

    +
    +

    New in version 1.0.1: This keyword was available since 0.19.0 but was not +documented. Furthermore, it had the opposite +meaning. Since 1.0.1 it is officially supported as +documented.

    +
    +
    +

    Deprecated since version 2.3.0: Instead of density=True use norm=’density’

    +
    +

  • +
+
+
+
+
+results.bins
+

numpy.ndarray of the centers of the nbins histogram +bins; all individual site-specific RDFs have the same bins.

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+bins
+

Alias to the results.bins attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.bins instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.edges
+

array of the nbins + 1 edges of the histogram +bins; all individual site-specific RDFs have the same bins.

+
+

New in version 2.0.0.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+edges
+

Alias to the results.edges attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.edges instead.

+
+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+results.rdf
+

list of the site-specific radial distribution +functions if norm=’rdf’ or density +functions for the bins +if norm=’density’. The list contains +len(ags) entries. Each entry for the i-th pair [A, B] += ags[i] in ags is a numpy.ndarray with shape +(len(A), len(B)), i.e., a stack of RDFs. For example, +results.rdf[i][0, 2] is the RDF between atoms A[0] +and B[2].

+
+

New in version 2.0.0.

+
+
+
Type
+

list

+
+
+
+ +
+
+rdf
+

Alias to the results.rdf attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.rdf instead.

+
+
+
Type
+

list

+
+
+
+ +
+
+results.count
+

list of the site-specific radial histograms, i.e., the +raw counts, for all results.bins. The data have the same +structure as results.rdf except that the arrays contain +the raw counts.

+
+

New in version 2.0.0.

+
+
+
Type
+

list

+
+
+
+ +
+
+count
+

Alias to the results.count attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.count instead.

+
+
+
Type
+

list

+
+
+
+ +
+
+results.cdf
+

list of the site-specific cumulative +counts, for all results.bins. The data +have the same structure as results.rdf except that the arrays +contain the cumulative counts.

+

This attribute only exists after get_cdf() has been run.

+
+

New in version 2.0.0.

+
+
+
Type
+

list

+
+
+
+ +
+
+cdf
+

Alias to the results.cdf attribute.

+
+

Deprecated since version 2.0.0: This attribute will be removed in 3.0.0. +Use results.cdf instead.

+
+
+
Type
+

list

+
+
+
+ +

Example

+

First create the InterRDF_s object, by supplying one Universe and +one list of pairs of AtomGroups, then use the run() +method:

+
from MDAnalysisTests.datafiles import GRO_MEMPROT, XTC_MEMPROT
+u = mda.Universe(GRO_MEMPROT, XTC_MEMPROT)
+
+s1 = u.select_atoms('name ZND and resid 289')
+s2 = u.select_atoms('(name OD1 or name OD2) and resid 51 and sphzone 5.0 (resid 289)')
+s3 = u.select_atoms('name ZND and (resid 291 or resid 292)')
+s4 = u.select_atoms('(name OD1 or name OD2) and sphzone 5.0 (resid 291)')
+ags = [[s1, s2], [s3, s4]]
+
+rdf = InterRDF_s(u, ags)
+rdf.run()
+
+
+

Results are available through the results.bins +and results.rdf attributes:

+
plt.plot(rdf.results.bins, rdf.results.rdf[0][0, 0])
+
+
+

(Which plots the rdf between the first atom in s1 and the first atom in +s2)

+

To generate the cumulative distribution function (cdf) in the sense of +“particles within radius \(r\)”, i.e., \(N_{ab}(r)\), use the +get_cdf() method

+
cdf = rdf.get_cdf()
+
+
+

Results are available through the results.cdf attribute:

+
plt.plot(rdf.results.bins, rdf.results.cdf[0][0, 0])
+
+
+

(Which plots the cdf between the first atom in s1 and the first atom in +s2)

+
+

New in version 0.19.0.

+
+
+

Changed in version 1.0.0: Support for the start, stop, and step keywords has been +removed. These should instead be passed to InterRDF_s.run().

+
+
+

Changed in version 2.0.0: Store results as attributes bins, edges, rdf, count +and cdf of the results attribute +of AnalysisBase.

+
+
+

Changed in version 2.3.0: Introduce norm and exclusion_blocks attributes.

+
+
+

Deprecated since version 2.3.0: Instead of density=True use norm=’density’

+
+
+

Deprecated since version 2.3.0: The universe parameter is superflous.

+
+
+
+get_cdf()[source]
+

Calculate the cumulative counts for all sites.

+

This is the cumulative count within a given +radius, i.e., \(N_{ab}(r)\).

+

The result is returned and also stored in the attribute +results.cdf.

+
+
Returns
+

cdf – list of arrays with the same structure as results.rdf

+
+
Return type
+

list

+
+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/rms.html b/2.7.0-dev0/documentation_pages/analysis/rms.html new file mode 100644 index 0000000000..be7425943a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/rms.html @@ -0,0 +1,739 @@ + + + + + + + 4.2.5. Calculating root mean square quantities — MDAnalysis.analysis.rms — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.2.5. Calculating root mean square quantities — MDAnalysis.analysis.rms

+
+
Author
+

Oliver Beckstein, David L. Dotson, John Detlefs

+
+
Year
+

2016

+
+
Copyright
+

GNU Public License v2

+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.11.0: Added RMSF analysis.

+
+
+

Changed in version 0.16.0: Refactored RMSD to fit AnalysisBase API

+
+

The module contains code to analyze root mean square quantities such +as the coordinat root mean square distance (RMSD) or the +per-residue root mean square fluctuations (RMSF).

+

This module uses the fast QCP algorithm [Theobald2005] to calculate +the root mean square distance (RMSD) between two coordinate sets (as +implemented in +MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix()).

+

When using this module in published work please cite [Theobald2005].

+
+

See also

+
+
MDAnalysis.analysis.align

aligning structures based on RMSD

+
+
MDAnalysis.lib.qcprot

implements the fast RMSD algorithm.

+
+
+
+
+

4.2.5.1. Example applications

+
+

4.2.5.1.1. Calculating RMSD for multiple domains

+

In this example we will globally fit a protein to a reference +structure and investigate the relative movements of domains by +computing the RMSD of the domains to the reference. The example is a +DIMS trajectory of adenylate kinase, which samples a large +closed-to-open transition. The protein consists of the CORE, LID, and +NMP domain.

+
    +
  • superimpose on the closed structure (frame 0 of the trajectory), +using backbone atoms

  • +
  • calculate the backbone RMSD and RMSD for CORE, LID, NMP (backbone atoms)

  • +
+

The trajectory is included with the test data files. The data in +RMSD.results.rmsd is plotted with matplotlib.pyplot.plot() (see Figure RMSD plot figure):

+
import MDAnalysis
+from MDAnalysis.tests.datafiles import PSF,DCD,CRD
+u = MDAnalysis.Universe(PSF,DCD)
+ref = MDAnalysis.Universe(PSF,DCD)     # reference closed AdK (1AKE) (with the default ref_frame=0)
+#ref = MDAnalysis.Universe(PSF,CRD)    # reference open AdK (4AKE)
+
+import MDAnalysis.analysis.rms
+
+R = MDAnalysis.analysis.rms.RMSD(u, ref,
+           select="backbone",             # superimpose on whole backbone of the whole protein
+           groupselections=["backbone and (resid 1-29 or resid 60-121 or resid 160-214)",   # CORE
+                            "backbone and resid 122-159",                                   # LID
+                            "backbone and resid 30-59"])                                    # NMP
+R.run()
+
+import matplotlib.pyplot as plt
+rmsd = R.results.rmsd.T   # transpose makes it easier for plotting
+time = rmsd[1]
+fig = plt.figure(figsize=(4,4))
+ax = fig.add_subplot(111)
+ax.plot(time, rmsd[2], 'k-',  label="all")
+ax.plot(time, rmsd[3], 'k--', label="CORE")
+ax.plot(time, rmsd[4], 'r--', label="LID")
+ax.plot(time, rmsd[5], 'b--', label="NMP")
+ax.legend(loc="best")
+ax.set_xlabel("time (ps)")
+ax.set_ylabel(r"RMSD ($\AA$)")
+fig.savefig("rmsd_all_CORE_LID_NMP_ref1AKE.pdf")
+
+
+
+RMSD plot +
+

RMSD plot for backbone and CORE, LID, NMP domain of the protein.

+
+
+
+
+
+

4.2.5.2. Functions

+
+
+MDAnalysis.analysis.rms.rmsd(a, b, weights=None, center=False, superposition=False)[source]
+

Returns RMSD between two coordinate sets a and b.

+

a and b are arrays of the coordinates of N atoms of shape +\(N times 3\) as generated by, e.g., +MDAnalysis.core.groups.AtomGroup.positions().

+
+

Note

+

If you use trajectory data from simulations performed under periodic +boundary conditions then you must make your molecules whole before +performing RMSD calculations so that the centers of mass of the mobile and +reference structure are properly superimposed.

+
+
+
Parameters
+
    +
  • a (array_like) – coordinates to align to b

  • +
  • b (array_like) – coordinates to align to (same shape as a)

  • +
  • weights (array_like (optional)) – 1D array with weights, use to compute weighted average

  • +
  • center (bool (optional)) – subtract center of geometry before calculation. With weights given +compute weighted average as center.

  • +
  • superposition (bool (optional)) – perform a rotational and translational superposition with the fast QCP +algorithm [Theobald2005] before calculating the RMSD; implies +center=True.

  • +
+
+
Returns
+

rmsd – RMSD between a and b

+
+
Return type
+

float

+
+
+

Notes

+

The RMSD \(\rho(t)\) as a function of time is calculated as

+
+\[\rho(t) = \sqrt{\frac{1}{N} \sum_{i=1}^N w_i \left(\mathbf{x}_i(t) + - \mathbf{x}_i^{\text{ref}}\right)^2}\]
+

It is the Euclidean distance in configuration space of the current +configuration (possibly after optimal translation and rotation) from a +reference configuration divided by \(1/\sqrt{N}\) where \(N\) is +the number of coordinates.

+

The weights \(w_i\) are calculated from the input weights +weights \(w'_i\) as relative to the mean:

+
+\[w_i = \frac{w'_i}{\langle w' \rangle}\]
+

Example

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.analysis.rms import rmsd
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> u = mda.Universe(PSF, DCD)
+>>> bb = u.select_atoms('backbone')
+>>> A = bb.positions.copy()  # coordinates of first frame
+>>> _ = u.trajectory[-1]  # forward to last frame
+>>> B = bb.positions.copy()  # coordinates of last frame
+>>> rmsd(A, B, center=True)
+6.838544558398293
+
+
+
+

Changed in version 0.8.1: center keyword added

+
+
+

Changed in version 0.14.0: superposition keyword added

+
+
+ +
+
+

4.2.5.3. Analysis classes

+
+
+class MDAnalysis.analysis.rms.RMSD(atomgroup, reference=None, select='all', groupselections=None, weights=None, weights_groupselections=False, tol_mass=0.1, ref_frame=0, **kwargs)[source]
+

Class to perform RMSD analysis on a trajectory.

+

The RMSD will be computed for two groups of atoms and all frames in the +trajectory belonging to atomgroup. The groups of atoms are obtained by +applying the selection selection select to the changing atomgroup and +the fixed reference.

+
+

Note

+

If you use trajectory data from simulations performed under periodic +boundary conditions then you must make your molecules whole before +performing RMSD calculations so that the centers of mass of the selected +and reference structure are properly superimposed.

+
+

Run the analysis with RMSD.run(), which stores the results +in the array RMSD.results.rmsd.

+
+

Changed in version 1.0.0: save() method was removed, use np.savetxt() on +RMSD.results.rmsd instead.

+
+
+

Changed in version 2.0.0: rmsd results are now stored in a +MDAnalysis.analysis.base.Results instance.

+
+
+
Parameters
+
    +
  • atomgroup (AtomGroup or Universe) – Group of atoms for which the RMSD is calculated. If a trajectory is +associated with the atoms then the computation iterates over the +trajectory.

  • +
  • reference (AtomGroup or Universe (optional)) – Group of reference atoms; if None then the current frame of +atomgroup is used.

  • +
  • select (str or dict or tuple (optional)) –

    The selection to operate on; can be one of:

    +
      +
    1. any valid selection string for +select_atoms() that +produces identical selections in atomgroup and reference; or

    2. +
    3. a dictionary {'mobile': sel1, 'reference': sel2} where sel1 +and sel2 are valid selection strings that are applied to +atomgroup and reference respectively (the +MDAnalysis.analysis.align.fasta2select() function returns such +a dictionary based on a ClustalW or STAMP sequence alignment); or

    4. +
    5. a tuple (sel1, sel2)

    6. +
    +

    When using 2. or 3. with sel1 and sel2 then these selection strings +are applied to atomgroup and reference respectively and should +generate groups of equivalent atoms. sel1 and sel2 can each also +be a list of selection strings to generate a +AtomGroup with defined atom order as +described under Ordered selections).

    +

  • +
  • groupselections (list (optional)) –

    A list of selections as described for select, with the difference +that these selections are always applied to the full universes, +i.e., atomgroup.universe.select_atoms(sel1) and +reference.universe.select_atoms(sel2). Each selection describes +additional RMSDs to be computed after the structures have been +superimposed according to select. No additional fitting is +performed.The output contains one additional column for each +selection.

    +
    +

    Note

    +

    Experimental feature. Only limited error checking +implemented.

    +
    +

  • +
  • weights ({“mass”, None} or array_like (optional)) –

      +
    1. “mass” will use masses as weights for both select and groupselections.

    2. +
    3. None will weigh each atom equally for both select and groupselections.

    4. +
    +

    3. If 1D float array of the same length as atomgroup is provided, +use each element of the array_like as a weight for the +corresponding atom in select, and assumes None for groupselections.

    +

  • +
  • weights_groupselections (False or list of {“mass”, None or array_like} (optional)) –

    1. False will apply imposed weights to groupselections from +weights option if weights is either "mass" or None. +Otherwise will assume a list of length equal to length of +groupselections filled with None values.

    +

    2. A list of {“mass”, None or array_like} with the length of groupselections +will apply the weights to groupselections correspondingly.

    +

  • +
  • tol_mass (float (optional)) – Reject match if the atomic masses for matched atoms differ by more +than tol_mass.

  • +
  • ref_frame (int (optional)) – frame index to select frame from reference

  • +
  • verbose (bool (optional)) – Show detailed progress of the calculation if set to True; the +default is False.

  • +
+
+
Raises
+
+
+
+

Notes

+

The root mean square deviation \(\rho(t)\) of a group of \(N\) +atoms relative to a reference structure as a function of time is +calculated as

+
+\[\rho(t) = \sqrt{\frac{1}{N} \sum_{i=1}^N w_i \left(\mathbf{x}_i(t) + - \mathbf{x}_i^{\text{ref}}\right)^2}\]
+

The weights \(w_i\) are calculated from the input weights weights +\(w'_i\) as relative to the mean of the input weights:

+
+\[w_i = \frac{w'_i}{\langle w' \rangle}\]
+

The selected coordinates from atomgroup are optimally superimposed +(translation and rotation) on the reference coordinates at each time step +as to minimize the RMSD. Douglas Theobald’s fast QCP algorithm +[Theobald2005] is used for the rotational superposition and to calculate +the RMSD (see MDAnalysis.lib.qcprot for implementation details).

+

The class runs various checks on the input to ensure that the two atom +groups can be compared. This includes a comparison of atom masses (i.e., +only the positions of atoms of the same mass will be considered to be +correct for comparison). If masses should not be checked, just set +tol_mass to a large value such as 1000.

+
+

See also

+

rmsd

+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: groupselections added

+
+
+

Changed in version 0.16.0: Flexible weighting scheme with new weights keyword.

+
+
+

Deprecated since version 0.16.0: Instead of mass_weighted=True (removal in 0.17.0) use new +weights='mass'; refactored to fit with AnalysisBase API

+
+
+

Changed in version 0.17.0: removed deprecated mass_weighted keyword; groupselections +are not rotationally superimposed any more.

+
+
+

Changed in version 1.0.0: filename keyword was removed.

+
+
+
+results.rmsd
+

Contains the time series of the RMSD as an N×3 numpy.ndarray +array with content [[frame, time (ps), RMSD (A)], [...], ...].

+
+

New in version 2.0.0.

+
+
+ +
+
+rmsd
+

Alias to the results.rmsd attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use results.rmsd +instead.

+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+class MDAnalysis.analysis.rms.RMSF(atomgroup, **kwargs)[source]
+

Calculate RMSF of given atoms across a trajectory.

+
+

Note

+

No RMSD-superposition is performed; it is assumed that the user is +providing a trajectory where the protein of interest has been structurally +aligned to a reference structure (see the Examples section below). The +protein also has be whole because periodic boundaries are not taken into +account.

+
+

Run the analysis with RMSF.run(), which stores the results +in the array RMSF.results.rmsf.

+
+
Parameters
+
    +
  • atomgroup (AtomGroup) – Atoms for which RMSF is calculated

  • +
  • verbose (bool (optional)) – Show detailed progress of the calculation if set to True; the +default is False.

  • +
+
+
Raises
+

ValueError – raised if negative values are calculated, which indicates that a + numerical overflow or underflow occured

+
+
+

Notes

+

The root mean square fluctuation of an atom \(i\) is computed as the +time average

+
+\[\rho_i = \sqrt{\left\langle (\mathbf{x}_i - \langle\mathbf{x}_i\rangle)^2 \right\rangle}\]
+

No mass weighting is performed.

+

This method implements an algorithm for computing sums of squares while +avoiding overflows and underflows [Welford1962].

+

Examples

+

In this example we calculate the residue RMSF fluctuations by analyzing +the \(\text{C}_\alpha\) atoms. First we need to fit the trajectory +to the average structure as a reference. That requires calculating the +average structure first. Because we need to analyze and manipulate the +same trajectory multiple times, we are going to load it into memory +using the MemoryReader. (If your +trajectory does not fit into memory, you will need to write out +intermediate trajectories to disk or +generate an in-memory universe that only contains, say, the +protein):

+
import MDAnalysis as mda
+from MDAnalysis.analysis import align
+
+from MDAnalysis.tests.datafiles import TPR, XTC
+
+u = mda.Universe(TPR, XTC, in_memory=True)
+protein = u.select_atoms("protein")
+
+# 1) the current trajectory contains a protein split across
+#    periodic boundaries, so we first make the protein whole and
+#    center it in the box using on-the-fly transformations
+import MDAnalysis.transformations as trans
+
+not_protein = u.select_atoms('not protein')
+transforms = [trans.unwrap(protein),
+              trans.center_in_box(protein, wrap=True),
+              trans.wrap(not_protein)]
+u.trajectory.add_transformations(*transforms)
+
+# 2) fit to the initial frame to get a better average structure
+#    (the trajectory is changed in memory)
+prealigner = align.AlignTraj(u, u, select="protein and name CA",
+                             in_memory=True).run()
+
+# 3) reference = average structure
+ref_coordinates = u.trajectory.timeseries(asel=protein).mean(axis=1)
+# make a reference structure (need to reshape into a 1-frame
+# "trajectory")
+reference = mda.Merge(protein).load_new(ref_coordinates[:, None, :],
+                                        order="afc")
+
+
+

We created a new universe reference that contains a single frame +with the averaged coordinates of the protein. Now we need to fit the +whole trajectory to the reference by minimizing the RMSD. We use +MDAnalysis.analysis.align.AlignTraj:

+
aligner = align.AlignTraj(u, reference,
+                          select="protein and name CA",
+                          in_memory=True).run()
+
+
+

The trajectory is now fitted to the reference (the RMSD is stored as +aligner.results.rmsd for further inspection). Now we can calculate +the RMSF:

+
from MDAnalysis.analysis.rms import RMSF
+
+calphas = protein.select_atoms("name CA")
+rmsfer = RMSF(calphas, verbose=True).run()
+
+
+

and plot:

+
import matplotlib.pyplot as plt
+
+plt.plot(calphas.resnums, rmsfer.results.rmsf)
+
+
+

References

+
+
+
Welford1962
+

B. P. Welford. Note on a method for calculating corrected sums of squares and products. Technometrics, 4(3):419–420, 1962. doi:10.1080/00401706.1962.10490022.

+
+
+
+
+

New in version 0.11.0.

+
+
+

Changed in version 0.16.0: refactored to fit with AnalysisBase API

+
+
+

Deprecated since version 0.16.0: the keyword argument quiet is deprecated in favor of verbose.

+
+
+

Changed in version 0.17.0: removed unused keyword weights

+
+
+

Changed in version 1.0.0: Support for the start, stop, and step keywords has been +removed. These should instead be passed to RMSF.run().

+
+
+
+results.rmsf
+

Results are stored in this N-length numpy.ndarray array, +giving RMSFs for each of the given atoms.

+
+

New in version 2.0.0.

+
+
+ +
+
+rmsf
+

Alias to the results.rmsf attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use results.rmsf +instead.

+
+
+ +
+
+run(start=None, stop=None, step=None, frames=None, verbose=None, *, progressbar_kwargs={})
+

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

  • +
  • frames (array_like, optional) –

    array of integers or booleans to slice trajectory; frames can +only be used instead of start, stop, and step. Setting +both frames and at least one of start, stop, step to a +non-default value will raise a ValueError.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
  • verbose (bool, optional) – Turn on verbosity

  • +
  • progressbar_kwargs (dict, optional) – ProgressBar keywords with custom parameters regarding progress bar position, etc; +see MDAnalysis.lib.log.ProgressBar for full list.

  • +
+
+
+
+

Changed in version 2.2.0: Added ability to analyze arbitrary frames by passing a list of +frame indices in the frames keyword argument.

+
+
+

Changed in version 2.5.0: Add progressbar_kwargs parameter, +allowing to modify description, position etc of tqdm progressbars

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/waterdynamics.html b/2.7.0-dev0/documentation_pages/analysis/waterdynamics.html new file mode 100644 index 0000000000..152315c283 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/waterdynamics.html @@ -0,0 +1,720 @@ + + + + + + + 4.8.3. Water dynamics analysis — MDAnalysis.analysis.waterdynamics — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.8.3. Water dynamics analysis — MDAnalysis.analysis.waterdynamics

+
+
Author
+

Alejandro Bernardin

+
+
Year
+

2014-2015

+
+
Copyright
+

GNU Public License v3

+
+
+
+

New in version 0.11.0.

+
+

This module provides functions to analyze water dynamics trajectories and water +interactions with other molecules. The functions in this module are: water +orientational relaxation (WOR) [Yeh1999], hydrogen bond lifetimes (HBL) +[Rapaport1983], angular distribution (AD) [Grigera1996], mean +square displacement (MSD) [Bródka1994] and survival probability (SP) +[Liu2004].

+

For more information about this type of analysis please refer to +[Araya-Secchi2014] (water in a protein cavity) and +[Milischuk2011] (water in a nanopore).

+

References

+
+
+
Yeh1999(1,2)
+

Yu-ling Yeh and Chung-Yuan Mou. Orientational relaxation dynamics of liquid water studied by molecular dynamics simulation. The Journal of Physical Chemistry B, 103(18):3699–3705, 1999. doi:10.1021/jp984584r.

+
+
Rapaport1983
+

D.C. Rapaport. Hydrogen bonds in water. Molecular Physics, 50(5):1151–1162, 1983. doi:10.1080/00268978300102931.

+
+
Grigera1996
+

J. Raul Grigera, Susana G. Kalko, and Jorge Fischbarg. Wall−water interface. a molecular dynamics study. Langmuir, 12(1):154–158, 1996. doi:10.1021/la9408681.

+
+
Bródka1994
+

Aleksander Bródka. Diffusion in restricted volume. Molecular Physics, 82(5):1075–1078, 1994. doi:10.1080/00268979400100764.

+
+
Liu2004
+

Pu Liu, Edward Harder, and B. J. Berne. On the calculation of diffusion coefficients in confined fluids and interfaces with an application to the liquid−vapor interface of water. The Journal of Physical Chemistry B, 108(21):6595–6602, 2004. doi:10.1021/jp0375057.

+
+
Milischuk2011
+

Anatoli A. Milischuk and Branka M. Ladanyi. Structure and dynamics of water confined in silica nanopores. The Journal of Chemical Physics, 135(17):174709, 2011. doi:10.1063/1.3657408.

+
+
+
+
+

4.8.3.1. Example use of the analysis classes

+
+

4.8.3.1.1. HydrogenBondLifetimes

+

To analyse hydrogen bond lifetime, use +MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.lifetime().

+ +
+
+

4.8.3.1.2. WaterOrientationalRelaxation

+

Analyzing water orientational relaxation (WOR) +WaterOrientationalRelaxation. In this case we are analyzing “how fast” +water molecules are rotating/changing direction. If WOR is very stable we can +assume that water molecules are rotating/changing direction very slow, on the +other hand, if WOR decay very fast, we can assume that water molecules are +rotating/changing direction very fast:

+
import MDAnalysis
+from MDAnalysis.analysis.waterdynamics import WaterOrientationalRelaxation as WOR
+
+u = MDAnalysis.Universe(pdb, trajectory)
+select = "byres name OH2 and sphzone 6.0 protein and resid 42"
+WOR_analysis = WOR(universe, select, 0, 1000, 20)
+WOR_analysis.run()
+time = 0
+#now we print the data ready to plot. The first two columns are WOR_OH vs t plot,
+#the second two columns are WOR_HH vs t graph and the third two columns are WOR_dip vs t graph
+for WOR_OH, WOR_HH, WOR_dip in WOR_analysis.timeseries:
+      print("{time} {WOR_OH} {time} {WOR_HH} {time} {WOR_dip}".format(time=time, WOR_OH=WOR_OH, WOR_HH=WOR_HH,WOR_dip=WOR_dip))
+      time += 1
+
+#now, if we want, we can plot our data
+plt.figure(1,figsize=(18, 6))
+
+#WOR OH
+plt.subplot(131)
+plt.xlabel('time')
+plt.ylabel('WOR')
+plt.title('WOR OH')
+plt.plot(range(0,time),[column[0] for column in WOR_analysis.timeseries])
+
+#WOR HH
+plt.subplot(132)
+plt.xlabel('time')
+plt.ylabel('WOR')
+plt.title('WOR HH')
+plt.plot(range(0,time),[column[1] for column in WOR_analysis.timeseries])
+
+#WOR dip
+plt.subplot(133)
+plt.xlabel('time')
+plt.ylabel('WOR')
+plt.title('WOR dip')
+plt.plot(range(0,time),[column[2] for column in WOR_analysis.timeseries])
+
+plt.show()
+
+
+

where t0 = 0, tf = 1000 and dtmax = 20. In this way we create 20 windows +timesteps (20 values in the x axis), the first window is created with 1000 +timestep average (1000/1), the second window is created with 500 timestep +average(1000/2), the third window is created with 333 timestep average (1000/3) +and so on.

+
+
+

4.8.3.1.3. AngularDistribution

+

Analyzing angular distribution (AD) AngularDistribution for OH vector, +HH vector and dipole vector. It returns a line histogram with vector +orientation preference. A straight line in the output plot means no +preferential orientation in water molecules. In this case we are analyzing if +water molecules have some orientational preference, in this way we can see if +water molecules are under an electric field or if they are interacting with +something (residue, protein, etc):

+
import MDAnalysis
+from MDAnalysis.analysis.waterdynamics import AngularDistribution as AD
+
+u = MDAnalysis.Universe(pdb, trajectory)
+selection = "byres name OH2 and sphzone 6.0 (protein and (resid 42 or resid 26) )"
+bins = 30
+AD_analysis = AD(universe,selection,bins)
+AD_analysis.run()
+#now we print data ready to graph. The first two columns are P(cos(theta)) vs cos(theta) for OH vector ,
+#the seconds two columns are P(cos(theta)) vs cos(theta) for HH vector and thirds two columns
+#are P(cos(theta)) vs cos(theta) for dipole vector
+for bin in range(bins):
+      print("{AD_analysisOH} {AD_analysisHH} {AD_analysisDip}".format(AD_analysis.graph0=AD_analysis.graph[0][bin], AD_analysis.graph1=AD_analysis.graph[1][bin],AD_analysis.graph2=AD_analysis.graph[2][bin]))
+
+#and if we want to graph our results
+plt.figure(1,figsize=(18, 6))
+
+#AD OH
+plt.subplot(131)
+plt.xlabel('cos theta')
+plt.ylabel('P(cos theta)')
+plt.title('PDF cos theta for OH')
+plt.plot([float(column.split()[0]) for column in AD_analysis.graph[0][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[0][:-1]])
+
+#AD HH
+plt.subplot(132)
+plt.xlabel('cos theta')
+plt.ylabel('P(cos theta)')
+plt.title('PDF cos theta for HH')
+plt.plot([float(column.split()[0]) for column in AD_analysis.graph[1][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[1][:-1]])
+
+#AD dip
+plt.subplot(133)
+plt.xlabel('cos theta')
+plt.ylabel('P(cos theta)')
+plt.title('PDF cos theta for dipole')
+plt.plot([float(column.split()[0]) for column in AD_analysis.graph[2][:-1]],[float(column.split()[1]) for column in AD_analysis.graph[2][:-1]])
+
+plt.show()
+
+
+

where P(cos(theta)) is the angular distribution or angular probabilities.

+
+
+

4.8.3.1.4. MeanSquareDisplacement

+

Analyzing mean square displacement (MSD) MeanSquareDisplacement for +water molecules. In this case we are analyzing the average distance that water +molecules travels inside protein in XYZ direction (cylindric zone of radius +11[nm], Zmax 4.0[nm] and Zmin -8.0[nm]). A strong rise mean a fast movement of +water molecules, a weak rise mean slow movement of particles:

+
import MDAnalysis
+from MDAnalysis.analysis.waterdynamics import MeanSquareDisplacement as MSD
+
+u = MDAnalysis.Universe(pdb, trajectory)
+select = "byres name OH2 and cyzone 11.0 4.0 -8.0 protein"
+MSD_analysis = MSD(universe, select, 0, 1000, 20)
+MSD_analysis.run()
+#now we print data ready to graph. The graph
+#represents MSD vs t
+time = 0
+for msd in MSD_analysis.timeseries:
+      print("{time} {msd}".format(time=time, msd=msd))
+      time += 1
+
+#Plot
+plt.xlabel('time')
+plt.ylabel('MSD')
+plt.title('MSD')
+plt.plot(range(0,time),MSD_analysis.timeseries)
+plt.show()
+
+
+
+
+

4.8.3.1.5. SurvivalProbability

+

Analyzing survival probability (SP) SurvivalProbability of molecules. +In this case we are analyzing how long water molecules remain in a +sphere of radius 12.3 centered in the geometrical center of resid 42 and 26. +A slow decay of SP means a long permanence time of water molecules in +the zone, on the other hand, a fast decay means a short permanence time:

+
import MDAnalysis
+from MDAnalysis.analysis.waterdynamics import SurvivalProbability as SP
+import matplotlib.pyplot as plt
+
+universe = MDAnalysis.Universe(pdb, trajectory)
+select = "byres name OH2 and sphzone 12.3 (resid 42 or resid 26) "
+sp = SP(universe, select, verbose=True)
+sp.run(start=0, stop=101, tau_max=20)
+tau_timeseries = sp.tau_timeseries
+sp_timeseries = sp.sp_timeseries
+
+# print in console
+for tau, sp in zip(tau_timeseries, sp_timeseries):
+      print("{time} {sp}".format(time=tau, sp=sp))
+
+# plot
+plt.xlabel('Time')
+plt.ylabel('SP')
+plt.title('Survival Probability')
+plt.plot(tau_timeseries, sp_timeseries)
+plt.show()
+
+
+

One should note that the stop keyword as used in the above example has an +exclusive behaviour, i.e. here the final frame used will be 100 not 101. +This behaviour is aligned with AnalysisBase but currently differs from +other MDAnalysis.analysis.waterdynamics classes, which all exhibit +inclusive behaviour for their final frame selections.

+

Another example applies to the situation where you work with many different “residues”. +Here we calculate the SP of a potassium ion around each lipid in a membrane and +average the results. In this example, if the SP analysis were run without treating each lipid +separately, potassium ions may hop from one lipid to another and still be counted as remaining +in the specified region. That is, the survival probability of the potassium ion around the +entire membrane will be calculated.

+

Note, for this example, it is advisable to use Universe(in_memory=True) to ensure that the +simulation is not being reloaded into memory for each lipid:

+
import MDAnalysis as mda
+from MDAnalysis.analysis.waterdynamics import SurvivalProbability as SP
+import numpy as np
+
+u = mda.Universe("md.gro", "md100ns.xtc", in_memory=True)
+lipids = u.select_atoms('resname LIPIDS')
+joined_sp_timeseries = [[] for _ in range(20)]
+for lipid in lipids.residues:
+    print("Lipid ID: %d" % lipid.resid)
+
+    select = "resname POTASSIUM and around 3.5 (resid %d and name O13 O14) " % lipid.resid
+    sp = SP(u, select, verbose=True)
+    sp.run(tau_max=20)
+
+    # Raw SP points for each tau:
+    for sps, new_sps in zip(joined_sp_timeseries, sp.sp_timeseries_data):
+        sps.extend(new_sps)
+
+# average all SP datapoints
+sp_data = [np.mean(sp) for sp in joined_sp_timeseries]
+
+for tau, sp in zip(range(1, tau_max + 1), sp_data):
+    print("{time} {sp}".format(time=tau, sp=sp))
+
+
+
+
+
+

4.8.3.2. Output

+
+

4.8.3.2.1. WaterOrientationalRelaxation

+

Water orientational relaxation (WOR) data is returned per window timestep, +which is stored in WaterOrientationalRelaxation.timeseries:

+
results = [
+    [ # time t0
+        <WOR_OH>, <WOR_HH>, <WOR_dip>
+    ],
+    [ # time t1
+        <WOR_OH>, <WOR_HH>, <WOR_dip>
+    ],
+    ...
+ ]
+
+
+
+
+

4.8.3.2.2. AngularDistribution

+

Angular distribution (AD) data is returned per vector, which is stored in +AngularDistribution.graph. In fact, AngularDistribution returns a +histogram:

+
results = [
+    [ # OH vector values
+      # the values are order in this way: <x_axis  y_axis>
+        <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+    ],
+    [ # HH vector values
+        <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+    ],
+    [ # dip vector values
+       <cos_theta0 ang_distr0>, <cos_theta1 ang_distr1>, ...
+    ],
+ ]
+
+
+
+
+

4.8.3.2.3. MeanSquareDisplacement

+

Mean Square Displacement (MSD) data is returned in a list, which each element +represents a MSD value in its respective window timestep. Data is stored in +MeanSquareDisplacement.timeseries:

+
results = [
+     #MSD values orders by window timestep
+        <MSD_t0>, <MSD_t1>, ...
+ ]
+
+
+
+
+

4.8.3.2.4. SurvivalProbability

+

Survival Probability (SP) computes two lists: a list of taus (SurvivalProbability.tau_timeseries) and a list of +the corresponding survival probabilities (SurvivalProbability.sp_timeseries).

+
+

results = [ tau1, tau2, …, tau_n ], [ sp_tau1, sp_tau2, …, sp_tau_n]

+
+

Additionally, a list SurvivalProbability.sp_timeseries_data, is provided which contains +a list of all SPs calculated for each tau. This can be used to compute the distribution or time dependence of SP, etc.

+
+
+
+

4.8.3.3. Classes

+
+
+class MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation(universe, select, t0, tf, dtmax, nproc=1)[source]
+

Water orientation relaxation analysis

+

Function to evaluate the Water Orientational Relaxation proposed by Yu-ling +Yeh and Chung-Yuan Mou [Yeh1999]. WaterOrientationalRelaxation +indicates “how fast” water molecules are rotating or changing direction. +This is a time correlation function given by:

+
+\[C_{\hat u}(\tau)=\langle \mathit{P}_2[\mathbf{\hat{u}}(t_0)\cdot\mathbf{\hat{u}}(t_0+\tau)]\rangle\]
+

where \(P_2=(3x^2-1)/2\) is the second-order Legendre polynomial and \(\hat{u}\) is +a unit vector along HH, OH or dipole vector.

+
+
Parameters
+
    +
  • universe (Universe) – Universe object

  • +
  • selection (str) – Selection string for water [‘byres name OH2’].

  • +
  • t0 (int) – frame where analysis begins

  • +
  • tf (int) – frame where analysis ends

  • +
  • dtmax (int) – Maximum dt size, dtmax < tf or it will crash.

  • +
+
+
+
+

New in version 0.11.0.

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+
+static lg2(x)[source]
+

Second Legendre polynomial

+
+ +
+
+run(**kwargs)[source]
+

Analyze trajectory and produce timeseries

+
+ +
+ +
+
+class MDAnalysis.analysis.waterdynamics.AngularDistribution(universe, select, bins=40, nproc=1, axis='z')[source]
+

Angular distribution function analysis

+

The angular distribution function (AD) is defined as the distribution +probability of the cosine of the \(\theta\) angle formed by the OH +vector, HH vector or dipolar vector of water molecules and a vector +\(\hat n\) parallel to chosen axis (z is the default value). The cosine +is define as \(\cos \theta = \hat u \cdot \hat n\), where \(\hat +u\) is OH, HH or dipole vector. It creates a histogram and returns a list +of lists, see Output. The AD is also know as Angular Probability (AP).

+
+
Parameters
+
    +
  • universe (Universe) – Universe object

  • +
  • select (str) – Selection string to evaluate its angular distribution [‘byres name OH2’]

  • +
  • bins (int (optional)) – Number of bins to create the histogram by means of numpy.histogram()

  • +
  • axis ({'x', 'y', 'z'} (optional)) – Axis to create angle with the vector (HH, OH or dipole) and calculate +cosine theta [‘z’].

  • +
+
+
+
+

New in version 0.11.0.

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+
+run(**kwargs)[source]
+

Function to evaluate the angular distribution of cos(theta)

+
+ +
+ +
+
+class MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement(universe, select, t0, tf, dtmax, nproc=1)[source]
+

Mean square displacement analysis

+

Function to evaluate the Mean Square Displacement (MSD). The MSD gives the +average distance that particles travels. The MSD is given by:

+
+\[\langle\Delta r(t)^2\rangle = 2nDt\]
+

where \(r(t)\) is the position of particle in time \(t\), +\(\Delta r(t)\) is the displacement after time lag \(t\), +\(n\) is the dimensionality, in this case \(n=3\), +\(D\) is the diffusion coefficient and \(t\) is the time.

+
+
Parameters
+
    +
  • universe (Universe) – Universe object

  • +
  • select (str) – Selection string for water [‘byres name OH2’].

  • +
  • t0 (int) – frame where analysis begins

  • +
  • tf (int) – frame where analysis ends

  • +
  • dtmax (int) – Maximum dt size, dtmax < tf or it will crash.

  • +
+
+
+
+

New in version 0.11.0.

+
+
+

Changed in version 1.0.0: Changed selection keyword to select

+
+
+
+run(**kwargs)[source]
+

Analyze trajectory and produce timeseries

+
+ +
+ +
+
+class MDAnalysis.analysis.waterdynamics.SurvivalProbability(universe, select, verbose=False)[source]
+

Survival Probability (SP) gives the probability for a group of particles to remain in a certain region. +The SP is given by:

+
+\[P(\tau) = \frac1T \sum_{t=1}^T \frac{N(t,t+\tau)}{N(t)}\]
+

where \(T\) is the maximum time of simulation, \(\tau\) is the +timestep, \(N(t)\) the number of particles at time \(t\), and +\(N(t, t+\tau)\) is the number of particles at every frame from \(t\) to tau.

+
+
Parameters
+
    +
  • universe (Universe) – Universe object

  • +
  • select (str) – Selection string; any selection is allowed. With this selection you +define the region/zone where to analyze, e.g.: “resname SOL and around 5 (resid 10)”. See SP-examples.

  • +
  • verbose (Boolean, optional) – When True, prints progress and comments to the console.

  • +
+
+
+

Notes

+

Currently SurvivalProbability is the only on in +MDAnalysis.analysis.waterdynamics to support an exclusive +behaviour (i.e. similar to the current behaviour of AnalysisBase +to the stop keyword passed to SurvivalProbability.run(). Unlike +other MDAnalysis.analysis.waterdynamics final frame definitions +which are inclusive.

+
+

New in version 0.11.0.

+
+
+

Changed in version 1.0.0: Using the MDAnalysis.lib.correlations.py to carry out the intermittency +and autocorrelation calculations. +Changed selection keyword to select. +Removed support for the deprecated t0, tf, and dtmax keywords. +These should instead be passed to SurvivalProbability.run() as +the start, stop, and tau_max keywords respectively. +The stop keyword as passed to SurvivalProbability.run() has now +changed behaviour and will act in an exclusive manner (instead of it’s +previous inclusive behaviour),

+
+
+
+run(tau_max=20, start=None, stop=None, step=None, residues=False, intermittency=0, verbose=False)[source]
+

Computes and returns the Survival Probability (SP) timeseries

+
+
Parameters
+
    +
  • start (int, optional) – Zero-based index of the first frame to be analysed, Default: None +(first frame).

  • +
  • stop (int, optional) – Zero-based index of the last frame to be analysed (exclusive), +Default: None (last frame).

  • +
  • step (int, optional) – Jump every step-th frame. This is compatible but independant of +the taus used, and it is good to consider using the step equal +to tau_max to remove the overlap. Note that step and tau_max +work consistently with intermittency. Default: None +(use every frame).

  • +
  • tau_max (int, optional) – Survival probability is calculated for the range +1 <= tau <= tau_max.

  • +
  • residues (Boolean, optional) – If true, the analysis will be carried out on the residues +(.resids) rather than on atom (.ids). A single atom is sufficient +to classify the residue as within the distance.

  • +
  • intermittency (int, optional) – The maximum number of consecutive frames for which an atom can +leave but be counted as present if it returns at the next frame. +An intermittency of 0 is equivalent to a continuous survival +probability, which does not allow for the leaving and returning of +atoms. For example, for intermittency=2, any given atom may leave +a region of interest for up to two consecutive frames yet be +treated as being present at all frames. The default is continuous +(0).

  • +
  • verbose (Boolean, optional) – Print the progress to the console.

  • +
+
+
Returns
+

    +
  • tau_timeseries (list) – tau from 1 to tau_max. Saved in the field tau_timeseries.

  • +
  • sp_timeseries (list) – survival probability for each value of tau. Saved in the field +sp_timeseries.

  • +
  • sp_timeseries_data (list) – raw datapoints from which the average is taken (sp_timeseries). +Time dependancy and distribution can be extracted.

  • +
+

+
+
+
+

Changed in version 1.0.0: To math other analysis methods, the stop keyword is now exclusive +rather than inclusive.

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis/wbridge_analysis.html b/2.7.0-dev0/documentation_pages/analysis/wbridge_analysis.html new file mode 100644 index 0000000000..3f2165b7ed --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis/wbridge_analysis.html @@ -0,0 +1,1191 @@ + + + + + + + 4.3.3. Water Bridge analysis — MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4.3.3. Water Bridge analysis — MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis

+
+
Author
+

Zhiyi Wu

+
+
Year
+

2017-2018

+
+
Copyright
+

GNU Public License v3

+
+
Maintainer
+

Zhiyi Wu <zhiyi.wu@gtc.ox.ac.uk>, @xiki-tempula on GitHub

+
+
+

Given a Universe (simulation +trajectory with 1 or more frames) measure all water bridges for each +frame between selections 1 and 2. +Water bridge is defined as a bridging water which simultaneously forms +two hydrogen bonds with atoms from both selection 1 and selection 2.

+

A water bridge can form between two hydrogen bond acceptors.

+

e.g. -CO2-:···H−O−H···:-O2C-

+

A water bridge can also form between two hydrogen bond donors.

+

e.g. -NH···:O:···HN- (where O is the oxygen of a bridging water)

+

A hydrogen bond acceptor and another hydrogen bond donor can be bridged by a +water.

+

e.g. -CO2-:···H−O:···HN- (where H−O is part of H−O−H)

+

A higher order water bridge is defined as more than one water bridging +hydrogen bond acceptor and donor. An example of a second order water bridge:

+

e.g. -CO2-:···H−O:···H−O:···HN- +(where H−O is part of H−O−H)

+

The following keyword arguments are important to control the behaviour of the +water bridge analysis:

+
+
    +
  • water_selection (resname SOL): the selection string for the bridging +water

  • +
  • order the maximum number of water bridging both ends

  • +
  • donor-acceptor distance (Å): 3.0

  • +
  • Angle cutoff (degrees): 120.0

  • +
  • forcefield to switch between default values for different force fields

  • +
  • donors and acceptors atom types (to add additional atom names)

  • +
+
+
+

4.3.3.1. Theory

+

This module attempts to find multi-order water bridge by an approach similar +to breadth-first search, where the first solvation shell of selection 1 is +selected, followed by the selection of the second solvation shell as well as +any hydrogen bonding partner from selection 1. After that, the third solvation +shell, as well as any binding partners from selection 2, are detected. This +process is repeated until the maximum order of water bridges is reached.

+
+
+

4.3.3.2. Output as Network

+

Since the waters connecting the two ends of the selections are by nature a +network. We provide a network representation of the water network. Water bridge +data are returned per frame, which is stored in +WaterBridgeAnalysis.results.network. Each frame is represented as a +dictionary, where the keys are the hydrogen bonds originating from selection +1 and the values are new dictionaries representing the hydrogen bonds coming +out of the corresponding molecules making hydrogen bonds with selection 1.

+

As for the hydrogen bonds which reach the selection 2, the values of the +corresponding keys are None. One example where selection 1 and selection 2 are +joined by one water molecule (A) which also hydrogen bond to another water (B) +which also hydrogen bond to selection 2 would be represented as

+
# (selection 1)-O:···H-O(water 1):···H-(selection 2)
+#                      |             :
+#                      H·············O-H(water2)
+#                                    H
+{(sele1_acceptor, None, water1_donor, water1_donor_heavy, distance, angle):
+     {(water1_acceptor, None, sele2_donor, sele2_donor_heavy,
+     distance, angle): None},
+     {(water1_donor, water1_donor_heavy, water2_acceptor, None,
+     distance, angle):
+          {(water2_acceptor, None, sele2_donor, sele2_donor_heavy,
+          distance, angle): None}
+      },
+}
+
+
+

The atoms are represented by atom index and if the atom is hydrogen bond donor, +it is followed by the index of the corresponding heavy atom +(donor_proton, donor_heavy_atom). +If the atom is a hydrogen bond acceptor, it is followed by none.

+
+
+

4.3.3.3. Output as Timeseries

+

For lower order water bridges, it might be desirable to represent the +connections as WaterBridgeAnalysis.results.timeseries. The results +are returned per frame and are a list of hydrogen bonds between the selection +1 or selection 2 and the bridging waters. Due to the complexity of the higher +order water bridge and the fact that one hydrogen bond between two waters can +appear in both third and fourth order water bridge, the hydrogen bonds in the +WaterBridgeAnalysis.results.timeseries attribute are generated in a +depth-first search manner to avoid duplication. Example code of how +WaterBridgeAnalysis.results.timeseries is generated:

+
def network2timeseries(network, timeseries):
+    '''Traverse the network in a depth-first fashion.
+    expand_timeseries will expand the compact representation to the
+    familiar timeseries representation.'''
+
+    if network is None:
+        return
+    else:
+        for node in network:
+            timeseries.append(expand_timeseries(node))
+            network2timeseries(network[node], timeseries)
+
+timeseries = []
+network2timeseries(network, timeseries)
+
+
+

An example would be.

+
results = [
+    [ # frame 1
+       [ <donor index>, <acceptor index>,
+        (<donor residue name>, <donor residue number>, <donor atom name>),
+        (<acceptor residue name>, <acceptor residue number>,
+        <acceptor atom name>),
+         <distance>, <angle>],
+       ....
+    ],
+    [ # frame 2
+      [ ... ], [ ... ], ...
+    ],
+    ...
+]
+
+
+

Using the WaterBridgeAnalysis.generate_table() method one can reformat +the results as a flat “normalised” table that is easier to import into a +database or dataframe for further processing.

+
+
+

4.3.3.4. Detection of water bridges

+

Water bridges are recorded if a bridging water simultaneously forms +hydrogen bonds with selection 1 and selection 2.

+

Hydrogen bonds are detected based on a geometric criterion:

+
    +
  1. The distance between acceptor and hydrogen is less than or equal to +distance (default is 3 Å).

  2. +
  3. The angle between donor-hydrogen-acceptor is greater than or equal to +angle (default is 120º).

  4. +
+

The cut-off values angle and distance can be set as keywords to +WaterBridgeAnalysis.

+

Donor and acceptor heavy atoms are detected from atom names. The current +defaults are appropriate for the CHARMM27 and GLYCAM06 force fields as defined +in Table Default atom names for water bridge analysis.

+

Hydrogen atoms bonded to a donor are searched based on its distance to the +donor. The algorithm searches for all hydrogens +(name “H*” or name “[123]H” or type “H”) in the same residue as the donor atom +within a cut-off distance of 1.2 Å.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Default heavy atom names for CHARMM27 force field.

group

donor

acceptor

comments

main chain

N

O, OC1, OC2

OC1, OC2 from amber99sb-ildn +(Gromacs)

water

OH2, OW

OH2, OW

SPC, TIP3P, TIP4P (CHARMM27,Gromacs)

ARG

NE, NH1, NH2

ASN

ND2

OD1

ASP

OD1, OD2

CYS

SG

CYH

SG

possible false positives for CYS

GLN

NE2

OE1

GLU

OE1, OE2

HIS

ND1, NE2

ND1, NE2

presence of H determines if donor

HSD

ND1

NE2

HSE

NE2

ND1

HSP

ND1, NE2

LYS

NZ

MET

SD

see e.g. [Gregoret1991]

SER

OG

OG

THR

OG1

OG1

TRP

NE1

TYR

OH

OH

+ + +++++ + + + + + + + + + + + + + + + + + + + + +
Heavy atom types for GLYCAM06 force field.

element

donor

acceptor

N

N,NT,N3

N,NT

O

OH,OW

O,O2,OH,OS,OW,OY

S

SM

+

Donor and acceptor names for the CHARMM27 force field will also work for e.g. +OPLS/AA or amber (tested in Gromacs). Residue names in the table are for +information only and are not taken into account when determining acceptors and +donors. This can potentially lead to some ambiguity in the assignment of +donors/acceptors for residues such as histidine or cytosine.

+

For more information about the naming convention in GLYCAM06 have a look at the +Carbohydrate Naming Convention in Glycam.

+

The lists of donor and acceptor names can be extended by providing lists of +atom names in the donors and acceptors keywords to +WaterBridgeAnalysis. If the lists are entirely inappropriate +(e.g. when analysing simulations done with a force field that uses very +different atom names) then one should either use the value “other” for +forcefield to set no default values or derive a new class and set the +default list oneself:

+
class WaterBridgeAnalysis_OtherFF(WaterBridgeAnalysis):
+      DEFAULT_DONORS = {"OtherFF": tuple(set([...]))}
+      DEFAULT_ACCEPTORS = {"OtherFF": tuple(set([...]))}
+
+
+

Then simply use the new class instead of the parent class and call it with +`forcefield` = "OtherFF". Please also consider contributing the list of +heavy atom names to MDAnalysis.

+

References

+
+
+
Gregoret1991
+

Lydia M. Gregoret, Stephen D. Rader, Robert J. Fletterick, and Fred E. Cohen. Hydrogen bonds involving sulfur atoms in proteins. Proteins: Structure, Function, and Bioinformatics, 9(2):99–107, 1991. doi:https://doi.org/10.1002/prot.340090204.

+
+
+
+
+
+

4.3.3.5. How to perform WaterBridgeAnalysis

+

All water bridges between arginine and aspartic acid can be analysed with

+
import MDAnalysis
+import MDAnalysis.analysis.hbonds
+
+u = MDAnalysis.Universe('topology', 'trajectory')
+w = MDAnalysis.analysis.hbonds.WaterBridgeAnalysis(u, 'resname ARG',
+                                                   'resname ASP')
+w.run()
+
+
+

The maximum number of bridging waters detected can be changed using the order +keyword.

+
w = MDAnalysis.analysis.hbonds.WaterBridgeAnalysis(u, 'resname ARG',
+                                                   'resname ASP', order=3)
+
+
+

Thus, a maximum of three bridging waters will be detected.

+

An example of using the WaterBridgeAnalysis would be +detecting the percentage of time a certain water bridge exits.

+

Trajectory u has two frames, where the first frame contains a water +bridge from the oxygen of the first arginine to one of the oxygens in the +carboxylic group of aspartate (ASP3:OD1). In the second frame, the same water +bridge forms but is between the oxygen of the arginine and the other oxygen in +the carboxylic group (ASP3:OD2).

+
# index residue id residue name atom name
+#     0          1          ARG         O
+#     1          2          SOL        OW
+#     2          2          SOL       HW1
+#     3          2          SOL       HW2
+#     4          3          ASP       OD1
+#     5          3          ASP       OD2
+print(w.results.timeseries)
+
+
+

prints out

+
[ # frame 1
+  # A water bridge SOL2 links O from ARG1 to the carboxylic group OD1 of ASP3
+ [[0,2,('ARG',1,  'O'),('SOL',2,'HW1'),  3.0,180],
+  [3,4,('SOL',2,'HW2'),('ASP',3,'OD1'),  3.0,180],
+ ],
+  # frame 2
+  # Another water bridge SOL2 links O from ARG1 to the other oxygen of the
+  # carboxylic group OD2 of ASP3
+ [[0,2,('ARG',1,  'O'),('SOL',2,'HW1'),  3.0,180],
+  [3,5,('SOL',2,'HW2'),('ASP',3,'OD2'),  3.0,180],
+ ],
+]
+
+
+
+
+

4.3.3.6. Use count_by_type

+

We can use the count_by_type() to +generate the frequency of all water bridges in the simulation.

+
w.count_by_type()
+
+
+

Returns

+
[(0, 3, 'ARG', 1, 'O', 'ASP', 3, 'OD1', 0.5),
+ (0, 4, 'ARG', 1, 'O', 'ASP', 3, 'OD2', 0.5),]
+
+
+

You might think that the OD1 and OD2 are the same oxygen and the aspartate has +just flipped and thus, they should be counted as the same type of water bridge. +The type of the water bridge can be customised by supplying an analysis +function to count_by_type().

+

The analysis function has two parameters. The current and the output. The +current is a list of hydrogen bonds from selection 1 to selection 2, formatted +in the same fashion as WaterBridgeAnalysis.network, and an example will +be

+
[
+# sele1 acceptor idx,   , water donor index, donor heavy atom idx, dist, ang.
+ [                 0, None,                 2,                   1, 3.0,180],
+# water donor idx, donor heavy atom idx, sele2 acceptor idx, distance, angle.
+ [              3,                    1,                  4, None, 3.0,180],]
+
+
+

Where current[0] is the first hydrogen bond originating from selection 1 +and current[-1] is the final hydrogen bond ending in selection 2. The +output sums up all the information in the current frame and is a dictionary +with a user-defined key and the value is the weight of the corresponding key. +During the analysis phase, the function analysis iterates through all the water +bridges and modify the output in-place. At the end of the analysis, the keys +from all the frames are collected and the corresponding values will be summed +up and returned.

+
def analysis(current, output, u):
+    r'''This function defines how the type of water bridge should be
+    specified.
+
+      Parameters
+      ----------
+      current : list
+          The current water bridge being analysed is a list of hydrogen bonds
+          from selection 1 to selection 2.
+      output : dict
+          A dictionary which is modified in-place where the key is the type
+          of the water bridge and the value is the weight of this type of
+          water bridge.
+      u : MDAnalysis.universe
+          The current Universe for looking up atoms.'''
+
+    # decompose the first hydrogen bond.
+    sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+    current[0]
+    # decompose the last hydrogen bond.
+    atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+    current[-1]
+    # expand the atom index to the resname, resid, atom names
+    sele1 = u.atoms[sele1_index]
+    sele2 = u.atoms[sele2_index]
+    (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+    sele1.name)
+    (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+    sele2.name)
+    # if the residue name is ASP and the atom name is OD2 or OD1,
+    # the atom name is changed to OD
+    if s2_resname == 'ASP' and (s2_name == 'OD1' or s2_name == 'OD2'):
+        s2_name = 'OD'
+    # setting up the key which defines this type of water bridge.
+    key = (s1_resname, s1_resid, s1_name, s2_resname, s2_resid, s2_name)
+    # The number of this type of water bridge is incremented by 1.
+    output[key] += 1
+
+w.count_by_type(analysis_func=analysis)
+
+
+

Returns

+
[(('ARG', 1, 'O', 'ASP', 3, 'OD'), 1.0),]
+
+
+

Note that the result is arranged in the format of +(key, the proportion of time). When no custom analysis function is supplied +, the key is expanded and is formatted as

+
[('ARG', 1, 'O', 'ASP', 3, 'OD', 1.0),]
+
+
+

Some people might only interested in contacts between residues and pay no +attention to the details regarding the atom name. However, since multiple water +bridges can exist between two residues, which sometimes can give a result such +that the water bridge between two residues exists 300% of the time. Though this +might be a desirable result for some people, others might want the water bridge +between two residues to be only counted once per frame. This can also be +achieved by supplying an analysis function to +count_by_type().

+
def analysis(current, output, u):
+    '''This function defines how the type of water bridge should be specified
+    .
+
+      Parameters
+      ----------
+      current : list
+          The current water bridge being analysed is a list of hydrogen bonds
+          from selection 1 to selection 2.
+      output : dict
+          A dictionary which is modified in-place where the key is the type
+          of the water bridge and the value is the weight of this type of
+          water bridge.
+      u : MDAnalysis.universe
+          The current Universe for looking up atoms.
+    '''
+
+    # decompose the first hydrogen bond.
+    sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+    current[0]
+    # decompose the last hydrogen bond.
+    atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+    current[-1]
+    # expand the atom index to the resname, resid, atom names
+    sele1 = u.atoms[sele1_index]
+    sele2 = u.atoms[sele2_index]
+    (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+    sele1.name)
+    (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+    sele2.name)
+    # s1_name and s2_name are not included in the key
+    key = (s1_resname, s1_resid, s2_resname, s2_resid)
+
+    # Each residue is only counted once per frame
+    output[key] = 1
+
+w.count_by_type(analysis_func=analysis)
+
+
+

Returns

+
[(('ARG', 1, 'ASP', 3), 1.0),]
+
+
+

On the other hand, other people may insist that the first order and +second-order water bridges shouldn’t be mixed together, which can also be +achieved by supplying an analysis function to +count_by_type().

+
def analysis(current, output, u):
+    '''This function defines how the type of water bridge should be specified
+    .
+
+      Parameters
+      ----------
+      current : list
+          The current water bridge being analysed is a list of hydrogen bonds
+          from selection 1 to selection 2.
+      output : dict
+          A dictionary which is modified in-place where the key is the type
+          of the water bridge and the value is the weight of this type of
+          water bridge.
+      u : MDAnalysis.universe
+          The current Universe for looking up atoms.
+    '''
+
+    # decompose the first hydrogen bond.
+    sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+    current[0]
+    # decompose the last hydrogen bond.
+    atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+    current[-1]
+    # expand the atom index to the resname, resid, atom names
+    sele1 = u.atoms[sele1_index]
+    sele2 = u.atoms[sele2_index]
+    (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+    sele1.name)
+    (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+    sele2.name)
+    # order of the current water bridge is computed
+    order_of_water_bridge = len(current) - 1
+    # and is included in the key
+    key = (s1_resname, s1_resid, s2_resname, s2_resid, order_of_water_bridge)
+    # The number of this type of water bridge is incremented by 1.
+    output[key] += 1
+
+w.count_by_type(analysis_func=analysis)
+
+
+

The extra number 1 precede the 1.0 indicate that this is a first order water +bridge

+
[(('ARG', 1, 'ASP', 3, 1), 1.0),]
+
+
+

Some people might not be interested in the interactions related to arginine. +The undesirable interactions can be discarded by supplying an analysis function +to count_by_type().

+
def analysis(current, output, u):
+    '''This function defines how the type of water bridge should be
+    specified.
+
+      Parameters
+      ----------
+      current : list
+          The current water bridge being analysed is a list of hydrogen bonds
+          from selection 1 to selection 2.
+      output : dict
+          A dictionary which is modified in-place where the key is the type
+          of the water bridge and the value is the number of this type of
+          water bridge.
+      u : MDAnalysis.universe
+          The current Universe for looking up atoms.
+    '''
+
+    # decompose the first hydrogen bond.
+    sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+    current[0]
+    # decompose the last hydrogen bond.
+    atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+    current[-1]
+    # expand the atom index to the resname, resid, atom names
+    sele1 = u.atoms[sele1_index]
+    sele2 = u.atoms[sele2_index]
+    (s1_resname, s1_resid, s1_name) = (sele1.resname, sele1.resid,
+    sele1.name)
+    (s2_resname, s2_resid, s2_name) = (sele2.resname, sele2.resid,
+    sele2.name)
+    if not s1_resname == 'ARG':
+        key = (s1_resname, s1_resid, s2_resname, s2_resid)
+        output[key] += 1
+
+w.count_by_type(analysis_func=analysis)
+
+
+

Returns nothing in this case

+
[,]
+
+
+

Additional keywords can be supplied to the analysis function by passing through +count_by_type().

+
def analysis(current, output, **kwargs):
+    ...
+w.count_by_type(analysis_func=analysis, **kwargs)
+
+
+
+
+

4.3.3.7. Use count_by_time

+

count_by_type() aggregates data across frames, which +might be desirable in some cases but not the others. +count_by_time() provides additional functionality +for aggregating results for each frame.

+

The default behaviour of count_by_time() is counting +the number of water bridges from selection 1 to selection 2 for each frame. +Take the previous ASP, ARG salt bridge for example:

+
w.count_by_time()
+
+
+

As one water bridge is found in both frames, the method returns

+
[(1.0, 1), (2.0, 1), ]
+
+
+

Similar to count_by_type() +The behaviour of count_by_time() can also be +modified by supplying an analysis function.

+

Suppose we want to count

+
+
    +
  • the number of water molecules involved in bridging selection 1 to +selection 2.

  • +
  • only if water bridge terminates in atom name OD1 of ASP.

  • +
  • only when water bridge is joined by less than two water.

  • +
+
+

The analysis function can be written as:

+
def analysis(current, output, u, **kwargs):
+    '''This function defines how the counting of water bridge should be
+    specified.
+
+      Parameters
+      ----------
+      current : list
+          The current water bridge being analysed is a list of hydrogen bonds
+          from selection 1 to selection 2.
+      output : dict
+          A dictionary which is modified in-place where the key is the type
+          of the water bridge and the value is the number of this type of
+          water  bridge.
+      u : MDAnalysis.universe
+          The current Universe for looking up atoms.
+    '''
+
+    # decompose the first hydrogen bond.
+    sele1_index, sele1_heavy_index, atom2, heavy_atom2, dist, angle =
+    current[0]
+    # decompose the last hydrogen bond.
+    atom1, heavy_atom1, sele2_index, sele2_heavy_index, dist, angle =
+    current[-1]
+    # expand the atom index to the resname, resid, atom names
+    sele1 = u.atoms[sele1_index]
+    sele2 = u.atoms[sele2_index]
+    (s1_resname, s1_resid, s1_name) =
+    (sele1.resname, sele1.resid, sele1.name)
+    (s2_resname, s2_resid, s2_name) =
+    (sele2.resname, sele2.resid, sele2.name)
+
+    # only the residue name is ASP and the atom name is OD1,
+    if s2_resname == 'ASP' and s2_name == 'OD1':
+        # only if the order of water bridge is less than 2
+        if len(current) -1 < 2:
+            # extract all water molecules involved in the water bridge
+            # extract the first water from selection 1
+            s1_index, to_index, (s1_resname, s1_resid, s1_name),
+            (to_resname, to_resid, to_name), dist, angle = current[0]
+            key = (to_resname, to_resid)
+            output[key] = 1
+
+            # extract all the waters between selection 1 and selection 2
+            for hbond in current[1:-1]:
+                # decompose the hydrogen bond.
+                from_index, to_index, (from_resname, from_resid, from_name),
+                (to_resname, to_resid, to_name), dist, angle = hbond
+                # add first water
+                key1 = (from_resname, from_resid)
+                output[key1] = 1
+                # add second water
+                key2 = (to_resname, to_resid)
+                output[key2] = 1
+
+            # extract the last water to selection 2
+            from_index, s2_index, (from_resname, from_resid, from_name),
+            (s2_resname, s2_resid, s2_name), dist, angle = current[-1]
+            key = (from_resname, from_resid)
+            output[key] = 1
+
+w.count_by_time(analysis_func=analysis)
+
+
+

Returns

+
[(1.0, 1), (2.0, 0),]
+
+
+
+
+

4.3.3.8. Classes

+
+
+class MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis(universe, selection1='protein', selection2='not resname SOL', water_selection='resname SOL', order=1, selection1_type='both', update_selection=False, update_water_selection=True, filter_first=True, distance_type='hydrogen', distance=3.0, angle=120.0, forcefield='CHARMM27', donors=None, acceptors=None, output_format='sele1_sele2', debug=None, pbc=False, **kwargs)[source]
+

Perform a water bridge analysis

+

The analysis of the trajectory is performed with the +WaterBridgeAnalysis.run() method. The result is stored in +WaterBridgeAnalysis.results.timeseries. See +run() for the format.

+
+

New in version 0.17.0.

+
+

Set up the calculation of water bridges between two selections in a +universe.

+

The timeseries is accessible as the attribute +WaterBridgeAnalysis.results.timeseries.

+

If no hydrogen bonds are detected or if the initial check fails, look +at the log output (enable with MDAnalysis.start_logging() and set +verbose =True). It is likely that the default names for donors +and acceptors are not suitable (especially for non-standard +ligands). In this case, either change the forcefield or use +customized donors and/or acceptors.

+
+
Parameters
+
    +
  • universe (Universe) – Universe object

  • +
  • selection1 (str (optional)) – Selection string for first selection [‘protein’]

  • +
  • selection2 (str (optional)) – Selection string for second selection [‘not resname SOL’] +This string selects everything except water where water is assumed +to have a residue name as SOL.

  • +
  • water_selection (str (optional)) –

    Selection string for bridging water selection [‘resname SOL’] +The default selection assumes that the water molecules have residue +name “SOL”. Change it to the appropriate selection for your +specific force field.

    +

    However, in theory, this selection can be anything which forms +a hydrogen bond with selection 1 and selection 2.

    +

  • +
  • order (int (optional)) –

    The maximum number of water bridges linking both selections. +if the order is set to 3, then all the residues linked with less +than three water molecules will be detected. [1]

    +

    Computation of high order water bridges can be very time-consuming. +Think carefully before running the calculation, do you really want +to compute the 20th order water bridge between domain A and domain +B or you just want to know the third order water bridge between two +residues.

    +

  • +
  • selection1_type ({"donor", "acceptor", "both"} (optional)) – Selection 1 can be ‘donor’, ‘acceptor’ or ‘both’. Note that the +value for selection1_type automatically determines how +selection2 handles donors and acceptors: If selection1 contains +‘both’ then selection2 will also contain ‘both’. If selection1 +is set to ‘donor’ then selection2 is ‘acceptor’ (and vice versa). +[‘both’].

  • +
  • update_selection (bool (optional)) – Update selection 1 and 2 at each frame. Setting to True if the +selection is not static. Selections are filtered first to speed up +performance. Thus, setting to True is recommended if contact +surface between selection 1 and selection 2 is constantly +changing. [False]

  • +
  • update_water_selection (bool (optional)) –

    Update selection of water at each frame. Setting to False is +only recommended when the total amount of water molecules in +the simulation are small and when water molecules remain static +across the simulation.

    +

    However, in normal simulations, only a tiny proportion of water is +engaged in the formation of water bridge. It is recommended to +update the water selection and set keyword filter_first to +True so as to filter out water not residing between the two +selections. [True]

    +

  • +
  • filter_first (bool (optional)) – Filter the water selection to only include water within 4 Å + +order * (2 Å + distance) away from both selection 1 and +selection 2. +Selection 1 and selection 2 are both filtered to only include atoms +with the same distance away from the other selection. [True]

  • +
  • distance (float (optional)) – Distance cutoff for hydrogen bonds; only interactions with a H-A +distance <= distance (and the appropriate D-H-A angle, see +angle) are recorded. (Note: distance_type can change this to +the D-A distance.) [3.0]

  • +
  • angle (float (optional)) – Angle cutoff for hydrogen bonds; an ideal H-bond has an angle of +180º. A hydrogen bond is only recorded if the D-H-A angle is +>= angle. The default of 120º also finds fairly non-specific +hydrogen interactions and possibly better value is 150º. [120.0]

  • +
  • forcefield ({"CHARMM27", "GLYCAM06", "other"} (optional)) – Name of the forcefield used. Switches between different +DEFAULT_DONORS and +DEFAULT_ACCEPTORS values. +[“CHARMM27”]

  • +
  • donors (sequence (optional)) – Extra H donor atom types (in addition to those in DEFAULT_DONORS). +This shall be the name of the heavy atom that is bonded to the hydrogen. +For example, the oxygen (‘O’) in the hydroxyl group. Must be a sequence.

  • +
  • acceptors (sequence (optional)) – Extra H acceptor atom types (in addition to those in +DEFAULT_ACCEPTORS), must be a +sequence.

  • +
  • distance_type ({"hydrogen", "heavy"} (optional)) – Measure hydrogen bond lengths between donor and acceptor heavy +atoms (“heavy”) or between donor hydrogen and acceptor heavy +atom (“hydrogen”). If using “heavy” then one should set the +distance cutoff to a higher value such as 3.5 Å. [“hydrogen”]

  • +
  • output_format ({"sele1_sele2", "donor_acceptor"} (optional)) – Setting the output format for timeseries and table. If set to +“sele1_sele2”, for each hydrogen bond, the one close to selection 1 +will be placed before selection 2. If set to “donor_acceptor”, the +donor will be placed before acceptor. “sele1_sele2”]

  • +
  • debug (bool (optional)) – If set to True enables per-frame debug logging. This is +disabled by default because it generates a very large amount of +output in the log file. (Note that a logger must have been started +to see the output, e.g. using MDAnalysis.start_logging().)

  • +
  • verbose (bool (optional)) – Toggle progress output. (Can also be given as keyword argument to +run().)

  • +
+
+
+

Notes

+

In order to speed up processing, atoms are filtered by a coarse +distance criterion before a detailed hydrogen bonding analysis is +performed (filter_first = True).

+

If selection 1 and selection 2 are very mobile during the simulation +and the contact surface is constantly changing (i.e. residues are +moving farther than 4 Å + order * (2 Å + distance)), you might +consider setting the update_selection keywords to True +to ensure correctness.

+
+
+timesteps
+

List of the times of each timestep. This can be used together with +timeseries to find the specific +time point of a water bridge existence.

+
+ +
+
+results.network
+

Network representation of the water network.

+
+

New in version 2.0.0.

+
+
+ +
+
+network
+

Alias to the results.network attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.network instead.

+
+
+ +
+
+table
+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please generate +the table with generate_table() instead.

+
+
+ +
+
+results.timeseries
+

List of hydrogen bonds between the selection 1 or selection 2 +and the bridging waters, for each frame.

+
+

New in version 2.0.0.

+
+
+ +
+
+timeseries
+

Alias to the results.timeseries attribute.

+
+

Deprecated since version 2.0.0: Will be removed in MDAnalysis 3.0.0. Please use +results.timeseries instead.

+
+
+ +
+
+DEFAULT_ACCEPTORS = {'CHARMM27': ('NE2', 'OE2', 'OG', 'O', 'ND1', 'OE1', 'OD1', 'OH2', 'OC2', 'OG1', 'OH', 'OC1', 'OD2', 'SG', 'OW', 'SD'), 'GLYCAM06': ('OH', 'OW', 'O', 'NT', 'OY', 'N', 'OS', 'SM', 'O2'), 'other': ()}
+

default atom names that are treated as hydrogen acceptors +(see Default heavy atom names for CHARMM27 force field.); +use the keyword acceptors to add a list of additional acceptor names.

+
+ +
+
+DEFAULT_DONORS = {'CHARMM27': ('NE2', 'NE1', 'OH2', 'NH2', 'OG', 'OG1', 'NE', 'OH', 'NZ', 'ND1', 'ND2', 'N', 'SG', 'NH1', 'OW'), 'GLYCAM06': ('NT', 'N', 'OW', 'OH', 'N3'), 'other': ()}
+

default heavy atom names whose hydrogens are treated as donors +(see Default heavy atom names for CHARMM27 force field.); +use the keyword donors to add a list of additional donor names.

+
+ +
+
+count_by_time(analysis_func=None, **kwargs)[source]
+

Counts the number of water bridges per timestep.

+

The counting behaviour can be adjusted by supplying analysis_func. +See Use count_by_time for details.

+
+
Returns
+

counts – Returns a time series N(t) where N is the total +number of observed water bridges at time t.

+
+
Return type
+

list

+
+
+
+ +
+
+count_by_type(analysis_func=None, **kwargs)[source]
+

Counts the frequency of water bridge of a specific type.

+

If one atom A from selection 1 is linked to atom B from +selection 2 through one or more bridging waters, an entity will be +created and the proportion of time that this linkage exists in the +whole simulation will be calculated.

+

The identification of a specific type of water bridge can be modified +by supplying the analysis_func function. See Use count_by_type +for detail.

+
+
Returns
+

counts – Returns a list containing atom indices for A and +B, residue names, residue numbers, atom names (for both A and B) +and the fraction of the total time during which the water bridge +was detected. This method returns None if method +WaterBridgeAnalysis.run() was not executed first.

+
+
Return type
+

list

+
+
+
+ +
+
+generate_table(output_format=None)[source]
+

Generate a normalised table of the results.

+
+
Parameters
+

output_format ({'sele1_sele2', 'donor_acceptor'}) – The output format of the table can be changed a fashion similar +to WaterBridgeAnalysis.results.timeseries by changing the +labels of the columns of the participating atoms.

+
+
Returns
+

    +
  • table (numpy.recarray) – A “tidy” table with one hydrogen bond per row, labeled according to +output_format and containing information of atom_1, atom_2, +distance, and angle.

  • +
  • .. versionchanged:: 2.0.0 – Return the generated table (as well as storing it as table).

  • +
  • .. deprecated:: 2.0.0 – In release 3.0.0, generate_table() will _only_ return the +table and no longer store it in table.

  • +
+

+
+
+
+ +
+
+r_cov = {'N': 1.31, 'O': 1.31, 'P': 1.58, 'S': 1.55}
+

A collections.defaultdict of covalent radii of common donors +(used in :meth`_get_bonded_hydrogens_list` to check if a hydrogen is +sufficiently close to its donor heavy atom). Values are stored for +N, O, P, and S. Any other heavy atoms are assumed to have hydrogens +covalently bound at a maximum distance of 1.5 Å.

+
+ +
+
+timesteps_by_type(analysis_func=None, **kwargs)[source]
+

Frames during which each water bridges existed, sorted by each water +bridges.

+

Processes WaterBridgeAnalysis.results.network and returns a +list containing atom indices, residue names, residue +numbers (from selection 1 and selection 2) and each timestep at which +the water bridge was detected.

+

Similar to count_by_type() and +count_by_time(), the behavior can be +adjusted by supplying an analysis_func.

+
+
Returns
+

data

+
+
Return type
+

list

+
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/analysis_modules.html b/2.7.0-dev0/documentation_pages/analysis_modules.html new file mode 100644 index 0000000000..56e011a6f2 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/analysis_modules.html @@ -0,0 +1,399 @@ + + + + + + + 4. Analysis modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

4. Analysis modules

+

The MDAnalysis.analysis module contains code to carry out specific +analysis functionality for MD trajectories. +It is based on the core functionality (i.e. trajectory +I/O, selections etc). The analysis modules can be used as examples for how to +use MDAnalysis but also as working code for research projects; typically all +contributed code has been used by the authors in their own work. +An analysis using the available modules +usually follows the same structure

+
    +
  1. Import the desired module, since analysis modules are not imported +by default.

  2. +
  3. Initialize the analysis class instance from the previously imported module.

  4. +
  5. Run the analysis, optionally for specific trajectory slices.

  6. +
  7. Access the analysis from the results attribute

  8. +
+
from MDAnalysis.analysis import ExampleAnalysisModule  # (e.g. RMSD)
+
+analysis_obj = ExampleAnalysisModule.AnalysisClass(universe, ...)
+analysis_obj.run(start=start_frame, stop=stop_frame, step=step)
+print(analysis_obj.results)
+
+
+

Please see the individual module documentation for any specific caveats +and also read and cite the reference papers associated with these algorithms.

+

Additional dependencies

+

Some of the modules in MDAnalysis.analysis require additional Python +packages to enable full functionality. For example, +MDAnalysis.analysis.encore provides more options if scikit-learn is +installed. If you installed MDAnalysis with +pip (see Installing MDAnalysis) +these packages are not automatically installed. +Although, one can add the [analysis] tag to the +pip command to force their installation. If you installed +MDAnalysis with conda then a +full set of dependencies is automatically installed.

+

Other modules require external programs. For instance, the +MDAnalysis.analysis.hole2.hole module requires an installation of the +HOLE suite of programs. You will need to install these external dependencies +by following their installation instructions before you can use the +corresponding MDAnalysis module.

+
+

4.1. Building blocks for Analysis

+

The building block for the analysis modules is +MDAnalysis.analysis.base.AnalysisBase. +To build your own analysis class start by reading the documentation.

+ +
+
+

4.2. Distances and contacts

+ +
+
+

4.3. Hydrogen bonding

+ +

Deprecated modules:

+ +
+
+

4.4. Membranes and membrane proteins

+ +
+
+

4.5. Nucleic acids

+ +
+
+

4.6. Polymers

+ +
+
+

4.7. Structure

+
+

4.7.1. Macromolecules

+ +
+
+

4.7.2. Liquids

+ +
+
+
+

4.8. Volumetric analysis

+ +
+
+

4.9. Dimensionality Reduction

+ +
+
+

4.10. Legacy analysis modules

+

The MDAnalysis.analysis.legacy module contains code that for a +range of reasons is not as well maintained and tested as the other +analysis modules. Use with care.

+ +
+
+

4.11. Data

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary/EDR.html b/2.7.0-dev0/documentation_pages/auxiliary/EDR.html new file mode 100644 index 0000000000..2bcd7c9510 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary/EDR.html @@ -0,0 +1,466 @@ + + + + + + + 10.5. EDR auxiliary reader — MDAnalysis.auxiliary.EDR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

10.5. EDR auxiliary reader — MDAnalysis.auxiliary.EDR

+
+

New in version 2.4.0.

+
+
+

10.5.1. Background

+

EDR files are binary files following the XDR protocol. They are written by +GROMACS during simulations and contain time-series non-trajectory data on the +system, such as energies, temperature, or pressure.

+

pyedr is a Python package that reads EDR binary files and returns them +human-readable form as a dictionary of NumPy arrays. It is used by the EDR +auxiliary reader to parse EDR files. As such, a dictionary with string keys and +numpy array values is loaded into the EDRReader. It is basically a +Python-based version of the C++ code in GROMACS.

+

The classes in this module are based on the pyedr package. Pyedr is an +optional dependency and must be installed to use this Reader. Use of the reader +without pyedr installed will raise an ImportError. The variable HAS_PYEDR +indicates whether this module has pyedr availble.

+

The EDR auxiliary reader takes the output from pyedr and makes this data +available within MDAnalysis. The usual workflow starts with creating an +EDRReader and passing it the file to read as such:

+
import MDAnalysis as mda
+aux = mda.auxiliary.EDR.EDRReader(some_edr_file)
+
+
+

The newly created aux object contains all the data found in the EDR file. It +is stored in the data_dict dictionary, which maps the names GROMACS +gave each data entry to a NumPy array that holds the relevant data. These +GROMACS-given names are stored in and available through the terms +attribute. In addition to the numeric data, the new EDRReader also stores the +units of each entry in the data_dict dictionary in its +unit_dict dictionary.

+
+

Warning

+

Units are converted to MDAnalysis base units automatically unless +otherwise specified. However, not all unit types have a defined base unit +in MDAnalysis. (cf. MDAnalysis.units.MDANALYSIS_BASE_UNITS). +Pressure units, for example, are not currently defined, and +will not be converted. This might cause inconsistencies between units! +Conversion can be switched off by passing convert_units=False when the +EDRReader is created:

+
aux = mda.auxiliary.EDR.EDRReader(some_edr_file, convert_units=False)
+
+
+
+
+
+

10.5.2. Standalone Usage of the EDRReader

+

The EDRReader can be used to access the data stored in EDR files on +its own, without association of data to trajectory frames. +This is useful, for example, for plotting. The data for a single term, a list +of terms, or for all terms can be returned in dictionary form. “Time” is always +returned in this dictionary to make plotting easier:

+
temp = aux.get_data("Temperature")
+plt.plot(temp["Time"], temp["Temperature"])
+
+some_terms = aux.get_data(["Potential", "Kinetic En.", "Box-X"])
+plt.plot(some_terms["Time"], some_terms["Potential"])
+
+all_terms = aux.get_data()
+plt.plot(all_terms["Time"], all_terms["Pressure"])
+
+
+
+
+

10.5.3. Adding EDR data to trajectories

+

Like other AuxReaders, the EDRReader can attach its data to a +trajectory by associating it to the appropriate time steps. +In general, to add EDR data to a trajectory, one needs to provide two +arguments.

+
+

Note

+

The following will change with the release of MDAnalysis 3.0. From then on, +the order of these two arguments will be reversed.

+
+

The first argument is the aux_spec dictionary. With it, users specify which +entries from the EDR file they want to add, and they give it a more convenient +name to be used in MDAnalysis (because GROMACS creates names like +“#Surf*SurfTen” or “‘Constr. rmsd’” which may be inconvenient to use.) +This dictionary might look like this:

+
aux_spec = {"epot": "Potential",
+            "surf_tension": "#Surf*SurfTen"}
+
+
+

When provided as shown below, this would direct the EDRReader to take +the data it finds under the “Potential” key in its data_dict +dictionary and attach it to the trajectory time steps under +u.trajectory.ts.aux.epot (and the same for the surface tension).

+

The second argument needed is the source of the EDR data itself. Here, either +the path to the EDR file or a previously created EDRReader object +can be provided.

+

Examples:

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import AUX_EDR, AUX_EDR_TPR, AUX_EDR_XTC
+import matplotlib.pyplot as plt
+
+
+

A Universe and an EDRReader object are created and the data +available in the EDR file is printed:

+
In [1]: u = mda.Universe(AUX_EDR_TPR, AUX_EDR_XTC)
+In [2]: aux = mda.auxiliary.EDR.EDRReader(AUX_EDR)
+In [3]: aux.terms
+Out[3]: ['Time', 'Bond', 'Angle', ...]
+
+
+

Data is associated with the trajectory, using an aux_spec dictionary to +specify which data to add under which name. Any number of terms can be added +using this method. The data is then accessible in the ts.aux namespace via +both attribute and dictionary syntax:

+
In [4]: u.trajectory.add_auxiliary({"epot": "Potential",
+                                    "angle": "Angle"}, aux)
+In [5]: u.trajectory.ts.aux.epot
+Out[5]: -525164.0625
+In [6]: u.trajectory.ts.aux.Angle
+Out[6]: 3764.52734375
+In [7]: u.trajectory.ts.aux["epot"]
+Out[7]: -525164.0625
+
+
+
+

Note

+

Some GROMACS-provided terms have spaces. Unless an attribute name +without a space is provided, these terms will not be accessible via the +attribute syntax. Only the dictionary syntax will work in that case.

+
+

Further, it is possible to add all data from the EDR file to the trajectory. To +do this, the aux_spec dictionary is omitted, and the data source (the second +argument as explained above) is provided explicitly as auxdata. When adding +data this way, the terms in terms become the names used in ts.aux:

+
In [7]: u.trajectory.add_auxiliary(auxdata=aux)
+In [8]: u.trajectory.ts.aux["#Surf*SurfTen"]
+Out[8]: -1857.519287109375
+
+
+
+
+

10.5.4. Classes

+
+
+class MDAnalysis.auxiliary.EDR.EDRReader(filename: str, convert_units: bool = True, **kwargs)[source]
+

Auxiliary reader to read data from an .edr file.

+

EDR files +are created by GROMACS during a simulation. They are binary files which +contain time-series energy data and other data related to the simulation.

+

Default reader for .edr files. All data from the file will be read and +stored on initialisation.

+
+
Parameters
+
    +
  • filename (str) – Location of the file containing the auxiliary data.

  • +
  • convert_units (bool, optional) – If True (default), units from the EDR file are automatically converted +to MDAnalysis base units. If False, units are taken from the file +as-is. Where no base unit is defined in MDAnalysis, no conversion takes +place. Unit types in MDAnalysis.units.MDANALYSIS_BASE_UNITS +will be converted automatically by default.

  • +
  • **kwargs – Other AuxReader options.

  • +
+
+
+
+
+_auxdata
+

path at which the auxiliary data file is located

+
+
Type
+

pathlib.PosixPath

+
+
+
+ +
+
+data_dict
+

dictionary that contains the auxiliary data, mapping the names GROMACS +gave the entries in the EDR file to a NumPy array containing this data

+
+
Type
+

dict

+
+
+
+ +
+
+unit_dict
+

dictionary that contains the units of the auxiliary data, mapping the +data_selector of the Reader (i.e. the name of the dataset in +the EDR file) to its unit.

+
+
Type
+

dict

+
+
+
+ +
+
+_n_steps
+

Number of steps for which auxdata is available

+
+
Type
+

int

+
+
+
+ +
+
+terms
+

Names of the auxiliary data entries available in data_dict. These are +the names GROMACS set in the EDR file.

+
+
Type
+

list

+
+
+
+ + +
+

Note

+

The file is assumed to be of a size such that reading and storing the full +contents is practical. A warning will be issued when memory usage exceeds +1 GB. This warning limit can be changed via the memory_limit kwarg.

+
+
+
+get_data(data_selector: Optional[Union[str, List[str]]] = None) Dict[str, ndarray][source]
+

Returns the auxiliary data contained in the EDRReader. +Returns either all data or data specified as data_selector in form +of a str or a list of any of EDRReader.terms. Time is +always returned to allow easy plotting.

+
+
Parameters
+

data_selector (str, List[str], None) – Keys to be extracted from the auxiliary reader’s data dictionary. +If None, returns all data found in data_dict.

+
+
Returns
+

data_dict – Dictionary mapping data_selector keys to NumPy arrays of the +auxiliary data.

+
+
Return type
+

dict

+
+
Raises
+

KeyError – if an invalid data_selector key is passed.

+
+
+
+ +
+
+read_all_times() ndarray[source]
+

Get list of time at each step.

+
+
Returns
+

Time at each step.

+
+
Return type
+

NumPy array of float

+
+
+
+ +
+ +

The actual data for each step is stored by instances of EDRStep.

+
+
+class MDAnalysis.auxiliary.EDR.EDRStep(time_selector: str = 'Time', data_selector: Optional[str] = None, **kwargs)[source]
+

AuxStep class for the .edr file format.

+

Extends the base AuxStep class to allow selection of time and +data-of-interest fields (by dictionary key) from the full set of data read +each step.

+
+
Parameters
+
    +
  • time_selector (str, optional) – Name of the dictionary key that links to the time values (assumed to +be in ps). Default value is “Time”

  • +
  • data_selector (str | list of str | None, optional) – List of dictionary keys linking to data of interest in the EDR file to +be stored in data. Default value is None.

  • +
  • **kwargs – Other AuxStep options.

  • +
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary/XVG.html b/2.7.0-dev0/documentation_pages/auxiliary/XVG.html new file mode 100644 index 0000000000..2a4bae32d9 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary/XVG.html @@ -0,0 +1,307 @@ + + + + + + + 10.4. XVG auxiliary reader — MDAnalysis.auxiliary.XVG — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

10.4. XVG auxiliary reader — MDAnalysis.auxiliary.XVG

+

xvg files are produced by Gromacs during simulation or analysis, formatted +for plotting data with Grace.

+

Data is column-formatted; time/data selection is enabled by providing column +indices.

+
+

Note

+

By default, the time of each step is assumed to be stored in the first column, +in units of ps.

+
+
+
+class MDAnalysis.auxiliary.XVG.XVGStep(time_selector=0, data_selector=None, **kwargs)[source]
+

AuxStep class for .xvg file format.

+

Extends the base AuxStep class to allow selection of time and +data-of-interest fields (by column index) from the full set of data read +each step.

+
+
Parameters
+
    +
  • time_selector (int | None, optional) – Index of column in .xvg file storing time, assumed to be in ps. Default +value is 0 (i.e. first column).

  • +
  • data_selector (list of int | None, optional) – List of indices of columns in .xvg file containing data of interest to +be stored in data. Default value is None.

  • +
  • **kwargs – Other AuxStep options.

  • +
+
+
+
+

See also

+

AuxStep

+
+
+ +
+

10.4.1. XVG Readers

+

The default XVGReader reads and stores the full contents of the .xvg +file on initialisation, while a second reader (XVGFileReader) that +reads steps one at a time as required is also provided for when a lower memory +footprint is desired.

+
+

Note

+

Data is assumed to be time-ordered.

+

Multiple datasets, separated in the .xvg file by ‘&’, are currently not +supported (the readers will stop at the first line starting ‘&’).

+
+
+
+class MDAnalysis.auxiliary.XVG.XVGReader(filename, **kwargs)[source]
+

Auxiliary reader to read data from an .xvg file.

+

Default reader for .xvg files. All data from the file will be read and +stored on initialisation.

+
+
Parameters
+
    +
  • filename (str) – Location of the file containing the auxiliary data.

  • +
  • **kwargs – Other AuxReader options.

  • +
+
+
+
+

See also

+

AuxReader

+
+
+

Note

+

The file is assumed to be of a size such that reading and storing the full +contents is practical.

+
+
+
+read_all_times()[source]
+

Get NumPy array of time at each step.

+
+
Returns
+

Time at each step.

+
+
Return type
+

NumPy array of float

+
+
+
+ +
+ +
+
+class MDAnalysis.auxiliary.XVG.XVGFileReader(filename, **kwargs)[source]
+

Auxiliary reader to read (one step at a time) from an .xvg file.

+

An alternative XVG reader which reads each step from the .xvg file as +needed (rather than reading and storing all from the start), for a lower +memory footprint.

+
+
Parameters
+
    +
  • filename (str) – Location of the file containing the auxiliary data.

  • +
  • **kwargs – Other AuxReader options.

  • +
+
+
+
+

See also

+

AuxFileReader

+
+
+

Note

+

The default reader for .xvg files is XVGReader.

+
+
+
+read_all_times()[source]
+

Iterate through all steps to build times list.

+
+
Returns
+

Time of each step

+
+
Return type
+

NumPy array of float

+
+
+
+ +
+ +
+
+MDAnalysis.auxiliary.XVG.uncomment(lines)[source]
+

Remove comments from lines in an .xvg file

+
+
Parameters
+

lines (list of str) – Lines as directly read from .xvg file

+
+
Yields
+

str – The next non-comment line, with any trailing comments removed

+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary/base.html b/2.7.0-dev0/documentation_pages/auxiliary/base.html new file mode 100644 index 0000000000..dbe5f00320 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary/base.html @@ -0,0 +1,678 @@ + + + + + + + 10.2. Auxiliary Readers — MDAnalysis.auxiliary.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

10.2. Auxiliary Readers — MDAnalysis.auxiliary.base

+

Base classes for deriving all auxiliary data readers. See the API in MDAnalysis.auxiliary.__init__.

+
+
+class MDAnalysis.auxiliary.base.AuxStep(dt=1, initial_time=0, time_selector=None, data_selector=None, constant_dt=True, memory_limit=None)[source]
+

Base class for auxiliary timesteps.

+

Stores the auxiliary data for the current auxiliary step. On creation, +step is set to -1.

+
+

Changed in version 2.4.0: Added memory_limit parameter to control raising memory usage warnings.

+
+
+
Parameters
+
    +
  • dt (float, optional) – Change in time between auxiliary steps (in ps). If not specified, will +attempt to determine from auxiliary data; otherwise defaults to 1 ps. +Ignored if constant_dt is False.

  • +
  • initial_time (float, optional) – Time of first auxiliary step (in ps). If not specified, will attempt to +determine from auxiliary data; otherwise defaults to 0 ps. Ignored if +constant_dt is False.

  • +
  • time_selector (optional) – Key to select ‘time’ value from the full set of data read for each +step, if time selection is enabled; type will vary depending on the +auxiliary data format (see individual AuxReader documentation). If +None (default value), time is instead calculated as: time = step +* dt + initial_time

  • +
  • data_selector (optional) – Key(s) to select auxiliary data values of interest from the full set of +data read for each step, if data selection is enabled by the reader; +type will vary depending on the auxiliary data format (see individual +AuxReader documentation). +If None (default value), the full set of data is returned.

  • +
  • constant_dt (bool, optional) – (Default: True) Set to False if dt is not constant +throughout the auxiliary data set, in which case a valid +time_selector must be provided.

  • +
  • memory_limit (float, optional) – Sets the threshold of memory usage by auxiliary data (in GB) at which +to issue a warning. Default: 1 GB.

  • +
+
+
+
+
+step
+

Number of the current auxiliary step (0-based).

+
+
Type
+

int

+
+
+
+ +
+
+property data
+

Auxiliary values of interest for the current step (as ndarray).

+

Read from the full set of data read for each step if data selection is +enabled and a valid data_selector is specified; otherwise +defaults to the full set of data.

+
+ +
+
+property time
+

Time in ps of current auxiliary step (as float).

+

Read from the set of auxiliary data read each step if time selection +is enabled and a valid time_selector is specified; otherwise +calculated as step * dt + initial_time.

+
+ +
+ +
+
+class MDAnalysis.auxiliary.base.AuxReader(represent_ts_as='closest', auxname=None, cutoff=None, **kwargs)[source]
+

Base class for auxiliary readers.

+

Allows iteration over a set of data from a trajectory, additional +(‘auxiliary’) to the regular positions/velocities/etc. This auxiliary +data may be stored in e.g. an array or a separate file.

+

See the Auxiliary API for more on use.

+
+

Changed in version 2.4.0: Behaviour of cutoff changed, default parameter which specifies +not cutoff is set is now None, not -1.

+
+
+

Changed in version 2.4.0: AuxReader instances now have a copy() method which +creates a deep copy of the instance.

+
+
+
Parameters
+
    +
  • auxname (str, optional) – Name for auxiliary data. When added to a trajectory, the representative +auxiliary value(s) for the timestep may be accessed as ts.aux.auxname +or ts.aux['auxname'].

  • +
  • represent_ts_as (str) – Method to use to calculate representative value of auxiliary data for a +trajectory timestep. See calc_representative() for valid options.

  • +
  • cutoff (float, optional) – Auxiliary steps further from the trajectory timestep than cutoff +(in ps) will be ignored when calculating representative values. If None +(default), all auxiliary steps assigned to that timestep will be used.

  • +
  • **kwargs – Options to be passed to AuxStep

  • +
+
+
+
+
+auxstep
+

AuxStep object containing data for current step.

+
+ +
+
+frame_data
+

Dictionary containing data from each auxiliary step assigned to the +current trajectory timestep, indexed by the difference in time between +the step and trajectory timestep (i.e. auxstep.time - ts.time; in ps)

+
+
Type
+

dict

+
+
+
+ +
+
+frame_rep
+

Representative value(s) of auxiliary data for current trajectory timestep.

+
+
Type
+

ndarray

+
+
+
+ +
+

Note

+

Auxiliary data are assumed to be time ordered and contain no duplicates.

+
+
+
+attach_auxiliary(coord_parent, aux_spec: Optional[Union[str, Dict[str, str]]] = None, format: Optional[str] = None, **kwargs) None[source]
+

Attaches the data specified in aux_spec to the coord_parent

+

This method is called from within +MDAnalysis.coordinates.base.ReaderBase.add_auxiliary(). +add_auxiliary should be agnostic to the type of AuxReader, so the +method call leads here instead. First, some checks are done on +the arguments to make sure the input is treated properly. Then, +the AuxReader(s) with appropriate data_selector are +associated with the coord_parent from which add_auxiliary was +called.

+
+
Parameters
+
+
+
Return type
+

None

+
+
Raises
+

ValueError – If trying to add data under an aux_spec key that is already + assigned.

+
+
+
+ +
+
+calc_representative()[source]
+

Calculate representative auxiliary value(s) from the data in +frame_data.

+

Currently implemented options for calculating representative value are:

+
+
    +
  • closest: default; the value(s) from the step closest to in time +to the trajectory timestep

  • +
  • average: average of the value(s) from steps ‘assigned’ to the +trajectory timestep.

  • +
+
+

Additionally, if cutoff is specified, only steps within this time +of the trajectory timestep are considered in calculating the +representative.

+

If no auxiliary steps were assigned to the timestep, or none fall +within the cutoff, representative values are set to np.nan.

+
+
Returns
+

Array of auxiliary value(s) ‘representative’ for the timestep.

+
+
Return type
+

ndarray

+
+
+
+ +
+
+property constant_dt
+

True if dt is constant throughout the auxiliary (as stored in +auxstep)

+
+ +
+
+copy()[source]
+

Returns a deep copy of the AuxReader

+
+ +
+
+property data_selector
+

Key(s) to select auxiliary data values of interest from the full set +of data read for each step (as stored in auxstep).

+

Type differs between auxiliary formats, depending how the data for each +step is read in and stored - e.g. data from .xvg files is read in as +a list and data_selector must be a list of valid indicies. If data +selection is not enabled by the reader, data_selector will default +to None.

+

See each individual auxiliary reader.

+
+ +
+
+property dt
+

Change in time between auxiliary steps (as stored in auxstep; +in ps)

+
+ +
+
+get_description()[source]
+

Get the values of the parameters necessary for replicating the +AuxReader.

+

An AuxReader can be duplicated using +auxreader():

+
description = original_aux.get_description()
+new_aux = MDAnalysis.auxiliary.auxreader(**description)
+
+
+

The resulting dictionary may also be passed directly to +add_auxiliary() to +reload an auxiliary into a trajectory:

+
trajectory.add_auxiliary(**description)
+
+
+
+
Returns
+

Key-word arguments and values that can be used to replicate the +AuxReader.

+
+
Return type
+

dict

+
+
+
+ +
+
+property initial_time
+

Time of first auxiliary step (as stored in auxstep; in ps)

+
+ +
+
+move_to_ts(ts)[source]
+

Position auxiliary reader just before trajectory timestep ts.

+

Calling next() should read the first auxiliary step ‘assigned’ to +the trajectory timestep ts or, if no auxiliary steps are +assigned to that timestep (as in the case of less frequent auxiliary +data), the first auxiliary step after ts.

+
+
Parameters
+

ts (Timestep object) – The trajectory timestep before which the auxiliary reader is to +be positioned.

+
+
+
+ +
+
+property n_steps
+

Total number of steps in the auxiliary data.

+
+ +
+
+next()[source]
+

Move to next step of auxiliary data.

+
+ +
+
+next_nonempty_frame(ts)[source]
+

Find the next trajectory frame for which a representative auxiliary +value can be calculated.

+

That is, the next trajectory frame to which one or more auxiliary steps +are assigned and fall within the cutoff.

+

Starts looking from the current step time. If the end of the auxiliary +data is reached before a trajectory frame is found, None is returned.

+
+
Parameters
+

ts (Timestep object) – Any timestep from the trajectory for which the next ‘non-empty’ +frame is to be found.

+
+
Returns
+

Index of the next auxiliary-containing frame in the trajectory.

+
+
Return type
+

int

+
+
+
+

Note

+

The returned index may be out of range for the trajectory.

+
+
+ +
+
+read_ts(ts)[source]
+

Read auxiliary steps corresponding to the trajectory timestep ts.

+

Read the auxiliary steps ‘assigned’ to ts (the steps that are within +ts.dt/2 of of the trajectory timestep/frame - ie. closer to ts +than either the preceding or following frame). Then calculate a +‘representative value’ for the timestep from the data in each of these +auxiliary steps.

+

To update ts with the representative value, use update_ts instead.

+
+
Parameters
+

ts (Timestep object) – The trajectory timestep for which corresponding auxiliary data is +to be read.

+
+
+
+

See also

+

update_ts()

+
+
+

Note

+

The auxiliary reader will end up positioned at the last step assigned +to the trajectory frame or, if the frame includes no auxiliary steps, +(as when auxiliary data are less frequent), the most recent auxiliary +step before the frame.

+
+
+ +
+
+property represent_ts_as
+

Method by which ‘representative’ timestep values of auxiliary data +will be calculated.

+
+ +
+
+rewind()[source]
+

Return to and read first step.

+
+ +
+
+property step
+

Number of the current auxiliary step (as stored in auxstep; +0-based).

+
+ +
+
+step_to_frame(step, ts, return_time_diff=False)[source]
+

Calculate closest trajectory frame for auxiliary step step.

+

Calculated given dt, time and frame from ts:

+
time_frame_0 = ts.time - ts.frame*ts.dt   # time at frame 0
+
+frame = floor((step_to_time(step) - time_frame_0 + ts.dt/2)/ts.dt))
+
+
+

The difference in time between the step and the calculated frame can +also optionally be returned with return_time_diff.

+
+
Parameters
+
    +
  • step (int) – Number of the auxiliary step to calculate closest trajectory frame +for.

  • +
  • ts (Timestep object) – (Any) timestep from the trajectory the calculated frame number is to +correspond to.

  • +
  • return_time_diff (bool, optional) – (Default: False) Additionally return the time difference between +step and returned frame.

  • +
+
+
Returns
+

    +
  • frame_index (int or None) – Number of the trajectory frame closest (in time) to the given +auxiliary step. If the step index is out of range for the auxiliary +data, None is returned instead.

  • +
  • time_diff (float (optional)) – Difference in time between step and frame_index.

  • +
+

+
+
+
+

Note

+

Assumes trajectory dt is consant. +The returned frame number may be out of range for the trajectory.

+
+
+ +
+
+step_to_time(i)[source]
+

Return time of auxiliary step i.

+

Calculated using dt and initial_time if constant_dt is True; +otherwise from the list of times as read from the auxiliary data for +each step.

+
+
Parameters
+

i (int) – Index (0-based) of step to return time for

+
+
Returns
+

time – Time (in ps) of step i

+
+
Return type
+

float

+
+
Raises
+

ValueError – When i not in valid range

+
+
+
+ +
+
+property time
+

Time of current auxiliary step (as stored in auxstep; in ps)

+
+ +
+
+property time_selector
+

Key to select ‘time’ value from the full set of data read for each step. +As stored in austep.

+

Type differs between auxiliary formats, depending how the data for each +step is read in and stored; e.g. data from .xvg files is read in as a +list and time_selector must be a valid index. If time selection is not +enabled by the reader, time_selector will default to None.

+

See each individual auxiliary reader.

+
+ +
+
+update_ts(ts)[source]
+

Read auxiliary steps corresponding to and update the trajectory +timestep ts.

+

Calls read_ts(), then updates ts with the representative value. +auxname must be set; the representative value will be accessible in +ts as ts.aux.auxname or ts.aux['auxname'].

+
+
Parameters
+

ts (Timestep object) – The trajectory timestep for which corresponding auxiliary data is +to be read and updated.

+
+
Returns
+

ts with the representative auxiliary +value in ts.aux be updated appropriately.

+
+
Return type
+

Timestep

+
+
Raises
+

ValueError – If auxname is not set.

+
+
+
+

See also

+

read_ts()

+
+
+ +
+ +
+
+class MDAnalysis.auxiliary.base.AuxFileReader(filename, **kwargs)[source]
+

Base class for auxiliary readers that read from file.

+

Extends AuxReader with attributes and methods particular to reading +auxiliary data from an open file, for use when auxiliary files may be too +large to read in at once.

+
+
Parameters
+
    +
  • filename (str) – Location of the file containing the auxiliary data.

  • +
  • **kwargs – Other AuxReader options.

  • +
+
+
+
+

See also

+

AuxReader

+
+
+
+auxfile
+

File object for the auxiliary file.

+
+ +
+
+close()[source]
+

Close auxfile.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary/core.html b/2.7.0-dev0/documentation_pages/auxiliary/core.html new file mode 100644 index 0000000000..95b306242e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary/core.html @@ -0,0 +1,217 @@ + + + + + + + 10.3. Common functions for auxiliary reading — MDAnalysis.auxiliary.core — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

10.3. Common functions for auxiliary reading — MDAnalysis.auxiliary.core

+
+
+MDAnalysis.auxiliary.core.get_auxreader_for(auxdata=None, format=None)[source]
+

Return the appropriate auxiliary reader class for auxdata/format.

+

If format is provided, will attempt to find an AuxReader corresponding +to that format. If auxdata is provided, the format will first be guessed.

+
+
Parameters
+
    +
  • auxdata – (Optional) The auxiliary data (e.g. filename of file containing +auxiliary data).

  • +
  • format – (Optional). Known format of auxdata.

  • +
+
+
Returns
+

AuxReader class corresponding to the supplied/guessed format.

+
+
Return type
+

AuxReader

+
+
Raises
+

ValueError – If an AuxReader for the format (provided or guessed from auxdata) + cannot be found.

+
+
+
+ +
+
+MDAnalysis.auxiliary.core.auxreader(auxdata, format=None, **kwargs)[source]
+

Return an auxiliary reader instance for auxdata.

+

An appropriate reader class is first obtained using +get_auxreader_for(), and an auxiliary reader instance for auxdata +then created and returned.

+
+
Parameters
+
    +
  • auxdata – Auxiliary data (e.g. filename of file containing auxiliary data).

  • +
  • format – (Optional). The format of auxdata, if known.

  • +
  • **kwargs – Additional AuxReader options.

  • +
+
+
Returns
+

Appropriate auxiliary reader instance for auxdata.

+
+
Return type
+

AuxReader instance

+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary/init.html b/2.7.0-dev0/documentation_pages/auxiliary/init.html new file mode 100644 index 0000000000..97228c0524 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary/init.html @@ -0,0 +1,666 @@ + + + + + + + 10.1. Auxiliary Readers — MDAnalysis.auxiliary — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

10.1. Auxiliary Readers — MDAnalysis.auxiliary

+

The auxiliary submodule contains code for reading ‘auxiliary’ data from a +trajectory and allowing alignment with trajectory timesteps. Additional +methods in MDAnalysis.coordinates.base.ProtoReader allow auxiliary data +to be added and read alongside a trajectory.

+

Auxiliary data are timeseries accompanying a trajectory not stored in the +regular trajectory file to be read by the trajectory Reader. They may be stored +internally (e.g. in an array) or read from a file. In general, auxiliary data is +assumed to be time ordered and contain no duplicates.

+
+

10.1.1. Supported formats

+

Currently supported formats:

+
+
++++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Reader

Format

Extension +(if file)

Remarks

XVGReader

XVG

xvg

+

(default)

+

Produced by Gromacs during simulation +or analysis. +Reads full file on initialisation.

XVGFileReader

XVG-F

xvg

Alternate xvg file reader, reading +each step from the file in turn for a +lower memory footprint. +XVGReader is the default +reader for .xvg files.

EDRReader

EDR

edr

Produced by Gromacs during simulation. +Reads full file on initialisation

+
+
+
+

10.1.2. Auxiliary API

+

Auxiliary readers inherit from the base +AuxReader. In stand-alone use they +allow iteration over each step in a set of auxiliary data:

+
aux = MDAnalysis.auxiliary.XVG.XVGReader('auxdata.xvg')
+for auxstep in aux:
+    print(auxstep)
+
+
+

To iterate over only certain sections of the auxiliary:

+
for auxstep in aux[100:200]:
+    # only steps 100-200
+    do_something(auxstep)
+
+
+

Or to skip steps:

+
for auxstep in aux[100::10]:
+    # every 10th step starting at 100
+    do_something(auxstep)
+
+
+

A base AuxFileReader is also provided, +extending AuxReader with attributes/methods +for when auxiliary data is to be read from a file by keeping the file open and +reading steps one-at-time as needed.

+

A get_auxreader_for() function is available to +return an appropriate AuxReader class for +a supplied format or set of auxiliary data, guessing the format from the +datatype/file extension:

+
auxreader = MDAnalysis.auxiliary.core.get_auxreader_for('auxdata.xvg')
+# will return the default XVGReader class
+auxreader = MDAnalysis.auxiliary.core.get_auxreader_for(format='XVG-F')
+# will return the XVGFileReader class
+
+
+

To directly load an instance of the guessed auxiliary reader class given the +supplied auxdata and any additional auxiliary reader options, the +function auxreader() can be used:

+
aux = MDAnalysis.auxiliary.auxreader('auxdata.xvg', dt=2)
+for auxstep in aux:
+   do_something(auxstep)
+
+
+
+

10.1.2.1. Auxiliaries and trajectories

+

For alignment with trajectory data, auxiliary readers provide methods to +assign each auxiliary step to the nearest trajectory timestep, read all steps +assigned to a trajectory timestep and calculate ‘representative’ value(s) of +the auxiliary data for that timestep.

+

‘Assignment’ of auxiliary steps to trajectory timesteps is determined from the time +of the auxiliary step, dt of the trajectory and time at the first frame of the +trajectory (obtained through a Timestep +instance from the trajectory), as:

+
frame = floor((time_at_step - time_at_frame_0 + dt/2)/dt)
+
+
+

If there are no auxiliary steps assigned to a given timestep (or none within +cutoff, if set), the representative value(s) are set to np.nan.

+
+

10.1.2.1.1. Adding an auxiliary to a trajectory

+

Auxiliary data may be added to a trajectory Reader through the +add_auxiliary() method. Auxiliary data +may be passed in as a AuxReader instance, or directly as e.g. a filename, in +which case get_auxreader_for() is used to +guess an appropriate reader. e.g.:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pullforce', './pull_force.xvg')
+
+
+

As the trajectory frame is updated, the auxiliary data will be read +correspondingly, +updated, and the representative auxiliary value(s) will be available as e.g. +u.trajectory.ts.aux.pullforce.

+
+
+

10.1.2.1.2. Iterating by an auxiliary

+

The trajectory ProtoReader methods +next_as_aux() and +iter_as_aux() allow for movement +through only trajectory timesteps to which one or more steps that fall within +cutoff from a given auxiliary have been assigned. This may be used to +avoid representative values set to np.nan, particularly when auxiliary data +is less frequent:

+
u.trajectory.add_auxiliary('low_f', 'low_freq_aux_data.xvg')
+for ts in u.trajectory.iter_as_aux('low_f'):
+    do_something(ts.aux.low_f) # do something with 'low_f' auxiliary data without
+                               # worrying about having to deal with np.nan
+
+
+

If the auxiliary data are more frequent and the cutoff (if set) is +sufficiently high, next_as_aux() +and iter_as_aux() behave the same +as the ProtoReader +next() and +__iter__().

+

In order to access auxiliary values at every individual step, including those +outside the time range of the trajectory, +iter_auxiliary() allows iteration +over the auxiliary independent of the trajectory:

+
for auxstep in u.trajectory.iter_auxiliary('pullforce'):
+    do_something(auxstep)
+
+
+

To iterate over only a certain section of the auxiliary:

+
for auxstep in u.trajectory.iter_auxiliary('pullforce', start=100, step=10):
+    # every 10th step from 100
+    do_something(auxstep)
+
+
+

The trajectory remains unchanged, and the auxiliary will be returned to the current +timestep after iteration is complete.

+
+
+

10.1.2.1.3. Accessing auxiliary attributes

+

To check the values of attributes of an added auxiliary, use +get_aux_attribute(), e.g.:

+
pullf_dt = u.trajectory.get_aux_attribute('pullforce', 'dt')
+
+
+

If attributes are settable, they can be changed using +set_aux_attribute(), e.g.:

+
u.trajectory.set_aux_attribute('pullforce', 'data_selector', [1])
+
+
+

The auxiliary may be renamed using set_aux_attribute with ‘auxname’, or more +directly by using rename_aux():

+
u.trajectory.rename_aux('pullforce', 'pullf')
+
+
+
+
+
+

10.1.2.2. Recreating auxiliaries

+

To recreate an auxiliary, the set of attributes necessary to replicate it can +first be obtained with get_description(). +The returned dictionary can then be passed to +auxreader() to load a new copy of the +original auxiliary reader:

+
description = aux.get_description()
+del(aux)
+reload_aux = MDAnalysis.auxiliary.auxreader(**description)
+
+
+

The ‘description’ of any or all the auxiliaries added to a trajectory can be +obtained using get_aux_descriptions():

+
descriptions = u.trajectory.get_aux_descriptions()
+
+
+

Get descriptions for selected auxiliaries only:

+
descriptions = u.trajectory.get_aux_descriptions(['pullf', 'pullx'])
+
+
+

And to reload:

+
for descr in descriptions:
+    new_u.new_trajectory.add_auxiliary(**descr)
+
+
+
+
+

10.1.2.3. AuxStep class

+

An AuxStep instance holds the auxiliary data for the current step. It is +updated whenever a new auxiliary step is read.

+

AuxStep classes are derived from the base class +AuxStep. The appropriate AuxStep class for +a given auxiliary reader is identified in the reader by the _Auxstep attribute.

+
+

10.1.2.3.1. Attributes

+

The following are inherited from AuxStep:

+
+
+
step

Current auxiliary step (0-based).

+
+
_data

All recorded data for the current step, as a numpy array.

+
+
time

Time of current auxiliary step, as a float (in ps). Determined from the +_data if time selection is enabled and a valid time_selector +provided; otherwise calculated using dt and initial_time.

+
+
data

Auxiliary values of interest for the current step, as a numpy array. +Determined from _data id data selection is enabled at a valid +data_selector is provided; otherwise set to _data.

+
+
+
+

The following are stored in AuxStep. The parent +auxiliary reader has the equivalent attributes, though non-private (no _) +(see AuxReader class below).

+
+
+
_dt

Change in time between auxiliary steps (in ps). If not specified, will +attempt to determine from auxiliary data; otherwise defaults to 1 ps.

+
+
_initial_time

Time of first auxiliary step (in ps). If not specified, will attempt to +determine from auxiliary data; otherwise defaults to 0 ps.

+
+
_time_selector

Selection key to get time from full set of auxiliary data read with each +step(_data) (ignored if time selection is not enabled by the reader). +Type depends on the auxiliary format - e.g. where data is stored in +columns, time_selector may be an index of ‘time’ column. +Default value is None, in which case step time is calculated from +dt, initial_time and step.

+
+
_data_selector

Selection key(s) to get data of interest from full set of auxiliary data +read with each step (_data) (ignored if data selection is not enabled +by the reader). As for time_selector, type depends on the auxiliary +format. If None (default value), _data is returned.

+
+
_constant_dt

Boolean of whether dt is constant throughout auxiliary data. Default is +True.

+
+
+
+
+
+

10.1.2.3.2. Methods

+

The following methods are inherited from +AuxStep:

+
+
+
__init__(**kwargs)

Setup appropriate attributes based on kwargs.

+
+
+
+

To enabled time/data selection in a particular AusStep, the following must be +provided:

+
+
+
_select_time(key)

Return, as a float, the time value indicated by key from _data (the full +set of data read in from the current step). Raise ValueError if key is +not a valid time selector for the auxiliary format.

+
+
_select_data(key)

Return, as a ndarray, the value(s) indicated by key (may be e.g. a list of +multiple individual ‘keys’) from _data. Raise ValueError if key is +not a valid data selector for the auxiliary format.

+
+
+
+

Depending on the format of the auxiliary and hence the format of data, it +may be necessary to overload the following for a particular AuxStep:

+
+
+
_empty_data()

Return a np.array in the same format as data with all values set to +np.nan. Used as the representative auxiliary value for a trajectory when +no auxiliary steps are assigned to the current frame.

+
+
+
+
+
+
+

10.1.2.4. AuxReader class

+
+

10.1.2.4.1. Registry

+

In order to facilitate guessing of appropriate AuxReaders, all AuxReaders +should set as appropriate format attribute. For files, this will be the +expected file extension (in all caps).

+
+
+

10.1.2.4.2. Replicating auxiliaries

+

The names of the necessary attributes for replicating an auxiliary are stored in +required_attrs, initially set in the base AuxReader. If a particular +AuxReader introduces additional attributes required to reload an auxiliary, +these should be added.

+
+
+

10.1.2.4.3. Attributes

+

The following attributes are inherited from +AuxReader:

+
+
+
auxname

Name under which auxiliary data will be stored in trajectory.

+
+
represent_ts_as

Method to use in calculating representative auxiliary value for a +timestep. Default is ‘closest’.

+
+
cutoff

Cutoff (in ps) for ignoring auxiliary steps when calculating +representative value(s) for a timestep.

+
+
auxstep

The AuxStep object to store data for +the current step. The particular AuxStep used will depend on the auxiliary +format.

+
+
n_steps

Total number of auxiliary steps.

+
+
frame_data

data from each auxiliary step assigned to the last-read trajectory +timestep.

+
+
frame_rep

Representative value(s) of auxiliary data for last-read trajectory +timestep.

+
+
+
+

The following are stored in auxstep as private attributes (with _) +but may be accessed from the auxiliary reader; see the AuxStep class above.

+
+

step

+

time

+

dt

+

initial_time

+

time_selector

+

data_selector

+

constant_dt

+
+

AuxFileReader provides:

+
+
+
auxfile

File object for the auxiliary file.

+
+
+
+

Each auxiliary reader subclass will additionally set:

+
+
+
_auxdata

Value of ‘auxdata’ used to load the auxiliary - e.g. path to the file +containing the auxiliary data. Will be used when getting the ‘description’ +of the auxiliary for recreating.

+
+
+
+

Each auxiliary reader class must also identify an appropriate +AuxStep with the _Auxstep class attribute

+
+
+

10.1.2.4.4. Methods

+

The following methods are inherited from +AuxReader:

+
+
+
__init__(**kwargs)

Setup appropriate attributes based on kwargs.

+
+
__len__()

Number of steps in auxiliary data.

+
+
next()

Advance to next step.

+
+
__iter__()

Allow iteration through each auxiliary step.

+
+
__getitem__(step)

If step is a single index, move to that step and return the AuxStep; +if a list or slice, return an iterator over the specified auxiliary steps. +See examples in Auxiliary API above.

+
+
rewind()

Reposition to first step.

+
+
update_ts(ts)

Read auxiliary steps assigned to trajectory step ts, calculate and update +the representative value in ts. Return ts.

+
+
read_ts(ts)

Read auxiliary steps assigned to trajectory step ts and calculate +representative value.

+
+
move_to_ts(ts)

Move to the auxiliary step before the trajectory timestep ts, such that +calling _read_next_step reads the first step assigned to ts or, when +auxiliary data are less frequent and no steps are assigned to ts, the +first step following ts.

+
+
step_to_frame(step, ts, return_time_diff=False)

Return the frame number of the trajectory described by ts to which +the auxiliary step step is assigned. Optionally also return the difference +it time between the step and the returned frame.

+
+
step_to_time(step)

Return the time of the auxiliary step step.

+
+
next_nonempty_frame(ts)

Return the frame number of the next trajectory frame (after the current +auxiliary time) for which a representative auxiliary value can be +calculated (i.e., there is at least one assigned auxiliary step within +cutoff).

+
+
calc_representative()

Return the representative value calculated from data following +the method specified by represent_ts_as and cutoff.

+
+
__enter__()

Entry method for Context Manager (returns self).

+
+
__exit__()

Exit method for Context Manager (calls close()).

+
+
__del__()

Calls close().

+
+
get_description

Get the values of the attributes required for replicating an auxiliary (as +listed in required_attrs) and return as a dictionary.

+
+
__eq__

Check for equality by checking each of the attributes required for +replicating an auxiliary (as listed in required_attrs) are equal.

+
+
+
+

Each AuxReader must subclass AuxReader +and addionally define:

+
+
+
__init__(auxdata, **kwargs)

Additional processing of kwargs and any necessary initial processing of +auxdata. Must super() through +AuxReader.

+
+
_read_next_step()

Read the data from the next auxiliary step and update auxstep as +appropriate. Raise StopIteration when attempting to read past last step.

+
+
_go_to_step(i)

Move to and read step i (0-based) from the auxiliary data. Raise +ValueError when i is out of range. Update the auxstep and return.

+
+
+
+

Depending on the format of the auxiliary data, it may also be necessary to +define/overwrite the following:

+
+
+
read_all_times()

Return the list of times for each step (only required if constant_dt +may be false).

+
+
count_n_steps()

Return the total number of steps (only required if _n_steps not otherwise +set during __init__).

+
+
_restart()

Reposition before the first step

+
+
+

close()

+
+

For convenience, when reading auxiliary data from an open file, one step at a +time, AuxFileReader +extends AuxReader by providing the +following (these may be overwritten by subclasses as appropriate):

+
+
+
__init__(auxfile, **kwargs)

Open auxfile and any additional processing of kwargs.

+
+
_restart(),

Seek to the start of auxfile

+
+
close()

Close auxfile

+
+
_go_to_step(i)

Iterate through all steps until step i is reached.

+
+
_reopen()

Close auxfile and reopen.

+
+
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/auxiliary_modules.html b/2.7.0-dev0/documentation_pages/auxiliary_modules.html new file mode 100644 index 0000000000..8f13f39c8f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/auxiliary_modules.html @@ -0,0 +1,176 @@ + + + + + + + 10. Auxiliary modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ +
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/converters.html b/2.7.0-dev0/documentation_pages/converters.html new file mode 100644 index 0000000000..7666b739a8 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/converters.html @@ -0,0 +1,212 @@ + + + + + + + 7. Converter modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

7. Converter modules

+
+

New in version 2.0.0.

+
+

The MDAnalysis.converters module contains the Converter classes that +MDAnalysis uses to convert MDAnalysis structures to and from other Python +packages.

+

If you are converting to MDAnalysis, you can use the normal syntax for +creating a Universe from files. Typically MDAnalysis will recognise which +library it is dealing with, so you will not need to pass in a format keyword.

+

For example:

+
import MDAnalysis as mda
+from MDAnalysis import GRO
+import parmed as pmd
+
+pgro = pmd.load_file(GRO)  # creates parmed structure
+ugro = mda.Universe(pgro)  # you can just pass it in
+
+
+

If you are converting from MDAnalysis, use the +convert_to() method. With this, +you will have to specify a package name (case-insensitive).

+
pgro2 = ugro.atoms.convert_to('PARMED')  # converts back to parmed structure
+
+
+

Another syntax is also available for tab-completion support:

+
pgro2 = ugro.atoms.convert_to.parmed()
+
+
+

Available converters

+ +

Converter functionalities

+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/converters/OpenMM.html b/2.7.0-dev0/documentation_pages/converters/OpenMM.html new file mode 100644 index 0000000000..ea47194c37 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/converters/OpenMM.html @@ -0,0 +1,691 @@ + + + + + + + 7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser

+
+

New in version 2.0.0.

+
+

Converts an +OpenMM topology +openmm.app.topology.Topology into a MDAnalysis.core.Topology.

+

Also converts some objects within the +OpenMM Application layer

+
+
+

The OpenMMTopologyParser generates a topology from an OpenMM Topology object.

+
+

7.5.1. Classes

+
+
+class MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser(filename)[source]
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser(filename)[source]
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+
+

7.6. OpenMM structure I/O — MDAnalysis.converters.OpenMM

+

Read coordinates data from a +OpenMM +openmm.app.simulation.Simulation with OpenMMReader +into a MDAnalysis Universe.

+

Also converts other objects within the +OpenMM Application Layer:

+
+
+

Example

+

OpenMM can read various file formats into OpenMM objects. +MDAnalysis can then convert some of these OpenMM objects into MDAnalysis Universe objects.

+
>>> import openmm.app as app
+>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PDBX
+>>> pdbxfile = app.PDBxFile(PDBX)
+>>> mda.Universe(pdbxfile)
+<Universe with 60 atoms>
+
+
+
+

7.6.1. Classes

+
+
+class MDAnalysis.converters.OpenMM.OpenMMSimulationReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for OpenMM Simulation objects

+
+

New in version 2.0.0.

+
+
+
+units = {'energy': 'kJ/mol', 'force': 'kJ/(mol*nm)', 'length': 'nm', 'time': 'ps', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.converters.OpenMM.OpenMMAppReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for OpenMM Application layer objects

+

See also the object definition in the OpenMM Application layer

+
+

New in version 2.0.0.

+
+
+
+units = {'length': 'nm', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/converters/ParmEd.html b/2.7.0-dev0/documentation_pages/converters/ParmEd.html new file mode 100644 index 0000000000..e69f9a2562 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/converters/ParmEd.html @@ -0,0 +1,546 @@ + + + + + + + 7.1. ParmEd topology parser — MDAnalysis.converters.ParmEdParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

7.1. ParmEd topology parser — MDAnalysis.converters.ParmEdParser

+

Converts a ParmEd +parmed.structure.Structure into a MDAnalysis.core.Topology.

+

Example

+

If you want to use an MDAnalysis-written ParmEd structure for simulation +in ParmEd, you need to first read your files with ParmEd to include the +necessary topology parameters.

+
>>> import parmed as pmd
+>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PRM7_ala2, RST7_ala2
+>>> prm = pmd.load_file(PRM7_ala2, RST7_ala2)
+>>> prm
+<AmberParm 3026 atoms; 1003 residues; 3025 bonds; PBC (orthogonal); parametrized>
+
+
+

We can then convert this to an MDAnalysis structure, select only the +protein atoms, and then convert it back to ParmEd.

+
>>> u = mda.Universe(prm)
+>>> u
+<Universe with 3026 atoms>
+>>> prot = u.select_atoms('protein')
+>>> prm_prot = prot.convert_to('PARMED')
+>>> prm_prot
+<Structure 23 atoms; 2 residues; 22 bonds; PBC (orthogonal); parametrized>
+
+
+

From here you can create an OpenMM simulation system and minimize the +energy.

+
>>> import openmm as mm
+>>> import openmm.app as app
+>>> from parmed import unit as u
+>>> system = prm_prot.createSystem(nonbondedMethod=app.NoCutoff,
+...                                constraints=app.HBonds,
+...                                implicitSolvent=app.GBn2)
+>>> integrator = mm.LangevinIntegrator(
+...                         300*u.kelvin,       # Temperature of heat bath
+...                         1.0/u.picoseconds,  # Friction coefficient
+...                         2.0*u.femtoseconds, # Time step
+... )
+>>> sim = app.Simulation(prm_prot.topology, system, integrator)
+>>> sim.context.setPositions(prm_prot.positions)
+>>> sim.minimizeEnergy(maxIterations=500)
+
+
+

Now you can continue on and run a simulation, if you wish.

+
+

7.1.1. Classes

+
+
+class MDAnalysis.converters.ParmEdParser.ParmEdParser(filename)[source]
+

For ParmEd structures

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse PARMED into Topology

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+

Changed in version 2.0.0: Elements are no longer guessed, if the elements present in the +parmed object are not recoginsed (usually given an atomic mass of 0) +then they will be assigned an empty string.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+

Changed in version 2.0.0: The ParmEdParser class was moved from topology to +converters

+
+
+
+
+

7.2. ParmEd structure I/O — MDAnalysis.converters.ParmEd

+

Read coordinates data from a ParmEd parmed.structure.Structure +with ParmEdReader into a MDAnalysis Universe. Convert it back to a +parmed.structure.Structure with ParmEdConverter.

+

Example

+

ParmEd has some neat functions. One such is HMassRepartition. +This function changes the mass of the hydrogens in your system to your desired +value. It then adjusts the mass of the atom to which it is bonded by the same +amount, so that the total mass is unchanged.

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PRM
+>>> u = mda.Universe(PRM)
+>>> u.atoms.masses[:10]
+array([14.01 ,  1.008,  1.008,  1.008, 12.01 ,  1.008, 12.01 ,  1.008,
+    1.008,  1.008])
+
+
+

We can convert our universe to a ParmEd structure to change our hydrogen +masses.

+
>>> import parmed.tools as pmt
+>>> parm = u.atoms.convert_to('PARMED')
+>>> hmass = pmt.HMassRepartition(parm, 5)  # convert to 5 daltons
+>>> hmass.execute()
+
+
+

We can then convert it back to an MDAnalysis Universe for further analysis.

+
>>> u2 = mda.Universe(parm)
+>>> u2.atoms.masses[:10]
+array([2.03399992, 5.        , 5.        , 5.        , 8.01799965,
+   5.        , 0.034     , 5.        , 5.        , 5.        ])
+
+
+
+

7.2.1. Classes

+
+
+class MDAnalysis.converters.ParmEd.ParmEdReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Coordinate reader for ParmEd.

+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.converters.ParmEd.ParmEdConverter[source]
+

Convert MDAnalysis AtomGroup or Universe to ParmEd Structure.

+

Example

+
import parmed as pmd
+import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import GRO
+pgro = pmd.load_file(GRO)
+mgro = mda.Universe(pgro)
+parmed_subset = mgro.select_atoms('resname SOL').convert_to('PARMED')
+
+
+
+
+convert(obj)[source]
+

Write selection at current trajectory frame to Structure.

+
+
Parameters
+

obj (AtomGroup or Universe or Timestep) –

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+

Changed in version 2.0.0: The ParmEdReader and ParmEdConverter classes were moved from coordinates +to converters

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/converters/RDKit.html b/2.7.0-dev0/documentation_pages/converters/RDKit.html new file mode 100644 index 0000000000..70beb17514 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/converters/RDKit.html @@ -0,0 +1,869 @@ + + + + + + + 7.3. RDKit topology parser — MDAnalysis.converters.RDKitParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

7.3. RDKit topology parser — MDAnalysis.converters.RDKitParser

+

Converts an RDKit rdkit.Chem.rdchem.Mol into a MDAnalysis.core.Topology.

+ +
+

7.3.1. Classes

+
+
+class MDAnalysis.converters.RDKitParser.RDKitParser(filename)[source]
+

For RDKit structures

+
+
Creates the following Attributes:
    +
  • Atomids

  • +
  • Atomnames

  • +
  • Aromaticities

  • +
  • Elements

  • +
  • Masses

  • +
  • Bonds

  • +
  • Resids

  • +
  • Resnums

  • +
  • RSChirality

  • +
  • Segids

  • +
+
+
Guesses the following:
    +
  • Atomtypes

  • +
+
+
Depending on RDKit’s input, the following Attributes might be present:
    +
  • Charges

  • +
  • Resnames

  • +
  • AltLocs

  • +
  • ChainIDs

  • +
  • ICodes

  • +
  • Occupancies

  • +
  • Tempfactors

  • +
+
+
+

Attributes table:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

RDKit attribute

MDAnalysis equivalent

atom.GetMonomerInfo().GetAltLoc()

altLocs

atom.GetIsAromatic()

aromaticities

atom.GetMonomerInfo().GetChainId()

chainIDs

atom.GetDoubleProp(‘_GasteigerCharge’) +atom.GetDoubleProp(‘_TriposPartialCharge’)

charges

atom.GetSymbol()

elements

atom.GetMonomerInfo().GetInsertionCode()

icodes

atom.GetIdx()

indices

atom.GetMass()

masses

atom.GetMonomerInfo().GetName() +atom.GetProp(‘_TriposAtomName’)

names

atom.GetProp(‘_CIPCode’)

chiralities

atom.GetMonomerInfo().GetOccupancy()

occupancies

atom.GetMonomerInfo().GetResidueName()

resnames

atom.GetMonomerInfo().GetResidueNumber()

resnums

atom.GetMonomerInfo().GetTempFactor()

tempfactors

atom.GetProp(‘_TriposAtomType’)

types

+
+
Raises
+

ValueError – If only part of the atoms have MonomerInfo available

+
+
+
+

New in version 2.0.0.

+
+
+

Changed in version 2.1.0: Added R/S chirality support

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse RDKit into Topology

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+
+

7.4. RDKit molecule I/O — MDAnalysis.converters.RDKit

+

Read coordinates data from an RDKit rdkit.Chem.rdchem.Mol with +RDKitReader into an MDAnalysis Universe. Convert it back to a +rdkit.Chem.rdchem.Mol with RDKitConverter.

+

Example

+

To read an RDKit molecule and then convert the AtomGroup back to an RDKit +molecule:

+
>>> from rdkit import Chem
+>>> import MDAnalysis as mda
+>>> mol = Chem.MolFromMol2File("docking_poses.mol2", removeHs=False)
+>>> u = mda.Universe(mol)
+>>> u
+<Universe with 42 atoms>
+>>> u.trajectory
+<RDKitReader with 10 frames of 42 atoms>
+>>> u.atoms.convert_to("RDKIT")
+<rdkit.Chem.rdchem.Mol object at 0x7fcebb958148>
+
+
+
+

Warning

+

The RDKit converter is currently experimental and may not work as +expected for all molecules. Currently the converter accurately +infers the structures of approximately 99% of the ChEMBL27 dataset. +Work is currently ongoing on further improving this and updates to the +converter are expected in future releases of MDAnalysis. +Please see Issue #3339 and the RDKitConverter benchmark for more +details.

+
+
+

7.4.1. Classes

+
+
+class MDAnalysis.converters.RDKit.RDKitReader(filename, **kwargs)[source]
+

Coordinate reader for RDKit.

+
+

New in version 2.0.0.

+
+

Read coordinates from an RDKit molecule. +Each conformer in the original RDKit molecule will be read as a frame +in the resulting universe.

+
+
Parameters
+

filename (rdkit.Chem.rdchem.Mol) – RDKit molecule

+
+
+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.converters.RDKit.RDKitConverter[source]
+

Convert MDAnalysis AtomGroup or +Universe to RDKit +Mol

+

MDanalysis attributes are stored in each RDKit +Atom of the resulting molecule in two different +ways:

+
    +
  • in an AtomPDBResidueInfo object available +through the GetMonomerInfo() method if it’s +an attribute that is typically found in a PDB file,

  • +
  • directly as an atom property available through the +GetProp() methods for the others.

  • +
+

Supported attributes:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

MDAnalysis attribute

RDKit

altLocs

atom.GetMonomerInfo().GetAltLoc()

chainIDs

atom.GetMonomerInfo().GetChainId()

icodes

atom.GetMonomerInfo().GetInsertionCode()

names

atom.GetMonomerInfo().GetName() +atom.GetProp(“_MDAnalysis_name”)

occupancies

atom.GetMonomerInfo().GetOccupancy()

resnames

atom.GetMonomerInfo().GetResidueName()

resids

atom.GetMonomerInfo().GetResidueNumber()

segindices

atom.GetMonomerInfo().GetSegmentNumber()

tempfactors

atom.GetMonomerInfo().GetTempFactor()

charges

atom.GetDoubleProp(“_MDAnalysis_charge”)

indices

atom.GetIntProp(“_MDAnalysis_index”)

segids

atom.GetProp(“_MDAnalysis_segid”)

types

atom.GetProp(“_MDAnalysis_type”)

+

Example

+

To access MDAnalysis properties:

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PDB_full
+>>> u = mda.Universe(PDB_full)
+>>> mol = u.select_atoms('resname DMS').convert_to('RDKIT')
+>>> mol.GetAtomWithIdx(0).GetMonomerInfo().GetResidueName()
+'DMS'
+
+
+

To create a molecule for each frame of a trajectory:

+
from MDAnalysisTests.datafiles import PSF, DCD
+from rdkit.Chem.Descriptors3D import Asphericity
+
+u = mda.Universe(PSF, DCD)
+elements = mda.topology.guessers.guess_types(u.atoms.names)
+u.add_TopologyAttr('elements', elements)
+ag = u.select_atoms("resid 1-10")
+
+for ts in u.trajectory:
+    mol = ag.convert_to("RDKIT")
+    x = Asphericity(mol)
+
+
+

Notes

+

The converter requires the Elements +attribute to be present in the topology, else it will fail.

+

It also requires the bonds attribute, although they will be automatically +guessed if not present.

+

Hydrogens should be explicit in the topology file. If this is not the case, +use the parameter NoImplicit=False when using the converter to allow +implicit hydrogens and disable inferring bond orders and charges.

+

Since one of the main use case of the converter is converting trajectories +and not just a topology, creating a new molecule from scratch for every +frame would be too slow so the converter uses a caching system. The cache +only stores the 2 most recent AtomGroups that were converted, and is +sensitive to the arguments that were passed to the converter. The number of +objects cached can be changed with the function +set_converter_cache_size(). However, ag.convert_to("RDKIT") +followed by ag.convert_to("RDKIT", NoImplicit=False) will not use the +cache since the arguments given are different. You can pass a +cache=False argument to the converter to bypass the caching system.

+

The _MDAnalysis_index property of the resulting molecule corresponds +to the index of the specific AtomGroup +that was converted, which may not always match the index property.

+

To get a better understanding of how the converter works under the hood, +please refer to the following RDKit UGM presentation:

+ +

There are some molecules containing specific patterns that the converter +cannot currently tackle correctly. See +Issue #3339 for +more info.

+
+

New in version 2.0.0.

+
+
+

Changed in version 2.2.0: Improved the accuracy of the converter. Atoms in the resulting molecule +now follow the same order as in the AtomGroup. The output of +atom.GetMonomerInfo().GetName() now follows the guidelines for PDB +files while the original name is still available through +atom.GetProp("_MDAnalysis_name")

+
+
+
+convert(obj, cache=True, NoImplicit=True, max_iter=200, force=False)[source]
+

Write selection at current trajectory frame to +Mol.

+
+
Parameters
+
    +
  • obj (AtomGroup or Universe) –

  • +
  • cache (bool) – Use a cached copy of the molecule’s topology when available. To be +used, the cached molecule and the new one have to be made from the +same AtomGroup selection and with the same arguments passed +to the converter

  • +
  • NoImplicit (bool) – Prevent adding hydrogens to the molecule

  • +
  • max_iter (int) – Maximum number of iterations to standardize conjugated systems. +See _rebuild_conjugated_bonds()

  • +
  • force (bool) – Force the conversion when no hydrogens were detected but +NoImplicit=True. Useful for inorganic molecules mostly.

  • +
+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+MDAnalysis.converters.RDKit._infer_bo_and_charges(mol)[source]
+

Infer bond orders and formal charges from a molecule.

+

Since most MD topology files don’t explicitly retain information on bond +orders or charges, it has to be guessed from the topology. This is done by +looping over each atom and comparing its expected valence to the current +valence to get the Number of Unpaired Electrons (NUE). +If an atom has a negative NUE, it needs a positive formal charge (-NUE). +If two neighbouring atoms have UEs, the bond between them most +likely has to be increased by the value of the smallest NUE. +If after this process, an atom still has UEs, it needs a negative formal +charge of -NUE.

+
+
Parameters
+

mol (rdkit.Chem.rdchem.RWMol) – The molecule is modified inplace and must have all hydrogens added

+
+
+

Notes

+

This algorithm is order dependant. For example, for a carboxylate group +R-C(-O)-O the first oxygen read will receive a double bond and the other +one will be charged. It will also affect more complex conjugated systems.

+
+ +
+
+MDAnalysis.converters.RDKit._standardize_patterns(mol, max_iter=200)[source]
+

Standardizes functional groups

+

Uses _rebuild_conjugated_bonds() to standardize conjugated systems, +and SMARTS reactions for other functional groups. +Due to the way reactions work, we first have to split the molecule by +fragments. Then, for each fragment, we apply the standardization reactions. +Finally, the fragments are recombined.

+
+
Parameters
+
    +
  • mol (rdkit.Chem.rdchem.RWMol) – The molecule to standardize

  • +
  • max_iter (int) – Maximum number of iterations to standardize conjugated systems

  • +
+
+
Returns
+

mol – The standardized molecule

+
+
Return type
+

rdkit.Chem.rdchem.Mol

+
+
+

Notes

+

The following functional groups are transformed in this order:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Reaction

conjugated

[*-:1]-[*:2]=[*:3]-[*-:4]>>[*+0:1]=[*:2]-[*:3]=[*+0:4]

conjugated N+

[N;X3;v3:1]-[*:2]=[*:3]-[*-:4]>>[N+:1]=[*:2]-[*:3]=[*+0:4]

conjugated O-

[O:1]=[#6+0,#7+:2]-[*:3]=[*:4]-[*-:5]>>[O-:1]-[*:2]=[*:3]-[*:4]=[*+0:5]

conjug. S=O

[O-:1]-[S;D4;v4:2]-[*:3]=[*:4]-[*-:5]>>[O+0:1]=[*:2]=[*:3]-[*:4]=[*+0:5]

Cterm

[C-;X2;H0:1]=[O:2]>>[C+0:1]=[O:2]

Nterm

[N-;X2;H1;$(N-[*^3]):1]>>[N+0:1]

keto-enolate

[#6-:1]-[#6:2]=[O:3]>>[#6+0:1]=[#6:2]-[O-:3]

arginine

[C-;v3:1]-[#7+0;v3;H2:2]>>[#6+0:1]=[#7+:2]

histidine

[#6+0;H0:1]=[#6+0:2]-[#7;X3:3]-[#6-;X3:4]>>[#6:1]=[#6:2]-[#7+:3]=[#6+0:4]

sulfone

[S;D4;!v6:1]-[*-:2]>>[S;v6:1]=[*+0:2]

charged N

[#7+0;X3:1]-[*-:2]>>[#7+:1]=[*+0:2]

+
+ +
+
+MDAnalysis.converters.RDKit._rebuild_conjugated_bonds(mol, max_iter=200)[source]
+

Rebuild conjugated bonds without negatively charged atoms at the +beginning and end of the conjugated system

+

Depending on the order in which atoms are read during the conversion, the +_infer_bo_and_charges() function might write conjugated systems with +a double bond less and both edges of the system as anions instead of the +usual alternating single and double bonds. This function corrects this +behaviour by using an iterative procedure. +The problematic molecules always follow the same pattern: +anion[-*=*]n-anion instead of *=[*-*=]n*, where n is the number +of successive single and double bonds. The goal of the iterative procedure +is to make n as small as possible by consecutively transforming +anion-*=* into *=*-anion until it reaches the smallest pattern with +n=1. This last pattern is then transformed from anion-*=*-anion to +*=*-*=*. +Since anion-*=* is the same as *=*-anion in terms of SMARTS, we can +control that we don’t transform the same triplet of atoms back and forth by +adding their indices to a list. +This function also handles conjugated systems with triple bonds. +The molecule needs to be kekulized first to also cover systems +with aromatic rings.

+
+
Parameters
+
    +
  • mol (rdkit.Chem.rdchem.RWMol) – The molecule to transform, modified inplace

  • +
  • max_iter (int) – Maximum number of iterations performed by the function

  • +
+
+
+

Notes

+

The molecule is modified inplace

+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/CRD.html b/2.7.0-dev0/documentation_pages/coordinates/CRD.html new file mode 100644 index 0000000000..ae4644e14e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/CRD.html @@ -0,0 +1,291 @@ + + + + + + + 6.2. CRD structure files in MDAnalysis — MDAnalysis.coordinates.CRD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.2. CRD structure files in MDAnalysis — MDAnalysis.coordinates.CRD

+

Read and write coordinates in CHARMM CARD coordinate format (suffix +“crd”). The CHARMM “extended format” is handled automatically.

+
+
+
+class MDAnalysis.coordinates.CRD.CRDReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

CRD reader that implements the standard and extended CRD coordinate formats

+
+

Changed in version 0.11.0: Now returns a ValueError instead of FormatError. +Frames now 0-based instead of 1-based.

+
+
+
+Writer(filename, **kwargs)[source]
+

Returns a CRDWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output CRD file

+
+
Return type
+

CRDWriter

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.CRD.CRDWriter(filename, **kwargs)[source]
+

CRD writer that implements the CHARMM CRD coordinate format.

+

It automatically writes the CHARMM EXT extended format if there +are more than 99,999 atoms.

+

Requires the following attributes to be present: +- resids +- resnames +- names +- chainIDs +- tempfactors

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 2.2.0: CRD extended format can now be explicitly requested with the +extended keyword

+
+
+

Changed in version 2.6.0: Files are now written in wt mode, and keep extensions, allowing +for files to be written under compressed formats

+
+
+
Parameters
+
    +
  • filename (str or NamedStream) – name of the output file or a stream

  • +
  • extended (bool (optional)) –

    By default, noextended CRD format is used [False]. +However, extended CRD format can be forced by +specifying extended =True. Note that the extended format +is always used if the number of atoms exceeds 99,999, regardless +of the setting of extended.

    +
    +

    New in version 2.2.0.

    +
    +

  • +
+
+
+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(selection, frame=None)[source]
+

Write selection at current trajectory frame to file.

+
+
Parameters
+
    +
  • selection (AtomGroup) – group of atoms to be written

  • +
  • frame (int (optional)) – Move the trajectory to frame frame; by default, write +the current frame.

  • +
+
+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/DCD.html b/2.7.0-dev0/documentation_pages/coordinates/DCD.html new file mode 100644 index 0000000000..3b693feede --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/DCD.html @@ -0,0 +1,1242 @@ + + + + + + + 6.3. DCD trajectory I/O — MDAnalysis.coordinates.DCD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.3. DCD trajectory I/O — MDAnalysis.coordinates.DCD

+

Classes to read and write DCD binary trajectories, the format used by +CHARMM, NAMD, and also LAMMPS. Trajectories can be read regardless of +system-endianness as this is auto-detected.

+

Generally, DCD trajectories produced by any code can be read (with the +DCDReader) although there can be issues with the unitcell (simulation +box) representation (see DCDReader.dimensions). DCDs can also be +written but the DCDWriter follows recent NAMD/VMD convention for the +unitcell but still writes AKMA time. Reading and writing these trajectories +within MDAnalysis will work seamlessly but if you process those trajectories +with other tools you might need to watch out that time and unitcell dimensions +are correctly interpreted.

+
+

See also

+
+
MDAnalysis.coordinates.LAMMPS

module provides a more flexible DCD reader/writer.

+
+
+
+
+

6.3.1. Classes

+
+
+class MDAnalysis.coordinates.DCD.DCDReader(filename, convert_units=True, dt=None, **kwargs)[source]
+

Reader for the DCD format.

+

DCD is used by NAMD, CHARMM and LAMMPS as the default trajectory format. +The DCD file format is not well defined. In particular, NAMD and CHARMM use +it differently. Currently, MDAnalysis tries to guess the correct format +for the unitcell representation but it can be wrong. Check the unitcell +dimensions, especially for triclinic unitcells (see Issue 187). DCD +trajectories produced by CHARMM and NAMD( >2.5) record time in AKMA units. +If other units have been recorded (e.g., ps) then employ the configurable +:class:MDAnalysis.coordinates.LAMMPS.DCDReader and set the time unit as a +optional argument. You can find a list of units used in the DCD formats on +the MDAnalysis wiki.

+

MDAnalysis always uses (*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.

+

The ordering of the angles in the unitcell is the same as in recent +versions of VMD’s DCDplugin (2013), namely the X-PLOR DCD format: The +original unitcell is read as [A, gamma, B, beta, alpha, C] from the DCD +file. If any of these values are < 0 or if any of the angles are > 180 +degrees then it is assumed it is a new-style CHARMM unitcell (at least +since c36b2) in which box vectors were recorded.

+
+

Deprecated since version 2.4.0: DCDReader currently makes independent timesteps +by copying the Timestep associated with the reader. +Other readers update the Timestep inplace meaning all +references to the Timestep contain the same data. The unique +independent Timestep behaviour of the DCDReader is deprecated +will be changed in 3.0 to be the same as other readers

+
+
+

Warning

+

The DCD format is not well defined. Check your unit cell +dimensions carefully, especially when using triclinic boxes. +Different software packages implement different conventions and +MDAnalysis is currently implementing the newer NAMD/VMD convention +and tries to guess the new CHARMM one. Old CHARMM trajectories might +give wrong unitcell values. For more details see Issue 187.

+
+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • dt (float (optional)) – overwrite time delta stored in DCD

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+

Changed in version 0.17.0: Changed to use libdcd.pyx library and removed the correl function

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Return writer for trajectory format

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dimensions
+

unitcell dimensions (A, B, C, alpha, beta, gamma)

+
+ +
+
+property dt
+

timestep between frames

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+static parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel=None, start=None, stop=None, step=None, order='afc')[source]
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set of +coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default None +starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+
+

Changed in version 1.0.0: skip and format keywords have been removed.

+
+
+

Changed in version 2.4.0: ValueError now raised instead of NoDataError for empty input +AtomGroup

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'AKMA'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.DCD.DCDWriter(filename, n_atoms, convert_units=True, step=1, dt=1, remarks='', nsavc=1, istart=0, **kwargs)[source]
+

DCD Writer class

+

The writer follows recent NAMD/VMD convention for the unitcell (box lengths +in Å and angle-cosines, [A, cos(gamma), B, cos(beta), cos(alpha), C]) +and writes positions in Å and time in AKMA time units.

+
+

Note

+

When writing out timesteps without dimensions (i.e. set None) +the DCDWriter will write out a zeroed unitcell (i.e. +[0, 0, 0, 0, 0, 0]). As this behaviour is poorly defined, it may +not match the expectations of other software.

+
+
+
Parameters
+
    +
  • filename (str) – filename of trajectory

  • +
  • n_atoms (int) – number of atoms to be written

  • +
  • convert_units (bool (optional)) – convert from MDAnalysis units to format specific units

  • +
  • step (int (optional)) – number of steps between frames to be written

  • +
  • dt (float (optional)) – time between two frames. If None guess from first written +TimeStep

  • +
  • remarks (str (optional)) – remarks to be stored in DCD. Shouldn’t be more then 240 characters

  • +
  • nsavc (int (optional)) – DCD files can also store the number of integrator time steps that +correspond to the interval between two frames as nsavc (i.e., every +how many MD steps is a frame saved to the DCD). By default, this +number is just set to one and this should be sufficient for almost +all cases but if required, nsavc can be changed.

  • +
  • istart (int (optional)) – starting frame number in integrator timesteps. CHARMM defaults to +nsavc, i.e., start at frame number 1 = istart / nsavc. The value +None will set istart to nsavc (the CHARMM default). +The MDAnalysis default is 0 so that the frame number and time of the first +frame is 0.

  • +
  • **kwargs (dict) – General writer arguments

  • +
+
+
+
+
+close()[source]
+

close trajectory

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': 'AKMA'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/DLPoly.html b/2.7.0-dev0/documentation_pages/coordinates/DLPoly.html new file mode 100644 index 0000000000..e2c4b1bc9a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/DLPoly.html @@ -0,0 +1,238 @@ + + + + + + + 6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly

+

Read DL Poly format coordinate files

+
+
+
+class MDAnalysis.coordinates.DLPoly.ConfigReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

DLPoly Config file Reader

+
+

New in version 0.11.0.

+
+
+

Changed in version 2.0.0: coordinates, velocities, and forces are no longer stored in ‘F’ memory +layout, instead now using the numpy default of ‘C’.

+
+
+
+units = {'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.DLPoly.HistoryReader(filename, **kwargs)[source]
+

Reads DLPoly format HISTORY files

+
+

New in version 0.11.0.

+
+
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/DMS.html b/2.7.0-dev0/documentation_pages/coordinates/DMS.html new file mode 100644 index 0000000000..6ba0ff1633 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/DMS.html @@ -0,0 +1,213 @@ + + + + + + + 6.5. DESRES file format — MDAnalysis.coordinates.DMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.5. DESRES file format — MDAnalysis.coordinates.DMS

+

Classes to read DESRES Molecular Structure file format (DMS) +coordinate files (as used by the Desmond MD package).

+
+
+
+class MDAnalysis.coordinates.DMS.DMSReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reads both coordinates and velocities.

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+
+units = {'length': 'A', 'time': None, 'velocity': 'A/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/FHIAIMS.html b/2.7.0-dev0/documentation_pages/coordinates/FHIAIMS.html new file mode 100644 index 0000000000..52e9e55042 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/FHIAIMS.html @@ -0,0 +1,1206 @@ + + + + + + + 6.25. FHI-AIMS file format — MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.25. FHI-AIMS file format — MDAnalysis.coordinates.FHIAIMS

+

Classes to read and write FHI-AIMS coordinate files.

+

The cell vectors are specified by the (optional) lines with the +lattice_vector tag:

+
lattice_vector x  y  z
+
+
+

where x, y, and z are expressed in ångström (Å).

+
+

Note

+

In the original FHI-AIMS format, up to three lines with +lattice_vector are allowed (order matters) where the absent line implies +no periodicity in that direction. In MDAnalysis, only the case of no +lattice_vector or three lattice_vector lines are allowed.

+
+

Atomic positions and names are specified either by the atom or by the +atom_frac tags:

+
atom           x  y  z  name
+atom_frac      nx ny nz name
+
+
+

where x, y, and z are expressed in ångström, and nx, ny and nz are real numbers +in [0, 1] and are used to compute the atomic positions in units of the basic +cell.

+

Atomic velocities can be added on the line right after the corresponding +atom in units of Å/ps using the velocity tag:

+
velocity      vx vy vz
+
+
+

The field name is a string identifying the atomic species. See also the +specifications in the official FHI-AIMS format.

+
+

6.25.1. Classes

+
+
+class MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for the FHIAIMS geometry format.

+

Single frame reader for the FHI-AIMS input file format. Reads +geometry (3D and molecules only), positions (absolut or fractional), +velocities if given, all according to the FHI-AIMS format +specifications

+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Returns a FHIAIMSWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output FHI-AIMS file

+
+
Return type
+

FHIAIMSWriter

+
+
+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next()
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind()
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

FHI-AIMS Writer.

+

Single frame writer for the FHI-AIMS format. Writes geometry (3D and +molecules only), positions (absolut only), velocities if given, all +according to the FHI-AIMS format specifications.

+

If no atom names are given, it will set each atom name to “X”.

+

Set up the FHI-AIMS Writer

+
+
Parameters
+
    +
  • filename (str) – output filename

  • +
  • n_atoms (int (optional)) – number of atoms

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+fmt = {'box_triclinic': 'lattice_vector {box[0]:12.8f} {box[1]:12.8f} {box[2]:12.8f}\nlattice_vector {box[3]:12.8f} {box[4]:12.8f} {box[5]:12.8f}\nlattice_vector {box[6]:12.8f} {box[7]:12.8f} {box[8]:12.8f}\n', 'vel': 'velocity {vel[0]:12.8f} {vel[1]:12.8f} {vel[2]:12.8f}\n', 'xyz': 'atom {pos[0]:12.8f} {pos[1]:12.8f} {pos[2]:12.8f} {name:<3s}\n'}
+

format strings for the FHI-AIMS file (all include newline)

+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None, 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+

6.25.2. Developer notes: FHIAIMSWriter format strings

+

The FHIAIMSWriter class has a FHIAIMSWriter.fmt +attribute, which is a dictionary of different strings for writing +lines in .in files. These are as follows:

+
+
xyz

An atom line without velocities. Requires that the name and +pos keys be supplied. E.g.:

+
fmt['xyz'].format(pos=(0.0, 1.0, 2.0), name='O')
+
+
+
+
vel

An line that specifies velocities:

+
fmt['xyz'].format(vel=(0.1, 0.2, 0.3))
+
+
+
+
box_triclinic

The (optional) initial lines of the file which gives box dimensions. +Requires the box keyword, as a length 9 vector. This is a flattened +version of the (3, 3) triclinic vector representation of the unit +cell.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/GMS.html b/2.7.0-dev0/documentation_pages/coordinates/GMS.html new file mode 100644 index 0000000000..5fd8677988 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/GMS.html @@ -0,0 +1,257 @@ + + + + + + + 6.6. GAMESS trajectory reader — MDAnalysis.coordinates.GMS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.6. GAMESS trajectory reader — MDAnalysis.coordinates.GMS

+

Resources: the GMS output format is a common output format for different +GAMESS distributions: US-GAMESS, Firefly (PC-GAMESS) and GAMESS-UK.

+

Current version was approbated with US-GAMESS & Firefly only.

+

There appears to be no rigid format definition so it is likely users +will need to tweak the GMSReader.

+
+
+class MDAnalysis.coordinates.GMS.GMSReader(outfilename, **kwargs)[source]
+

Reads from an GAMESS output file

+
+
Data
+
+
ts

Timestep object containing coordinates of current frame

+
+
+
+
Methods
+
+
len(out)

return number of frames in out

+
+
for ts in out:

iterate through trajectory

+
+
+
+
+
+

Note

+

GMSReader can read both uncompressed (foo.out) and +compressed (foo.out.bz2 or foo.out.gz) files; +decompression is handled on the fly

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based. +Added dt and time_offset keywords (passed to Timestep).

+
+
+
+close()[source]
+

Close out trajectory file if it was open.

+
+ +
+
+property n_atoms
+

number of atoms in a frame

+
+ +
+
+property runtyp
+

RUNTYP property of the GAMESS run

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/GRO.html b/2.7.0-dev0/documentation_pages/coordinates/GRO.html new file mode 100644 index 0000000000..0d66606bd0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/GRO.html @@ -0,0 +1,415 @@ + + + + + + + 6.8. GRO file format — MDAnalysis.coordinates.GRO — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.8. GRO file format — MDAnalysis.coordinates.GRO

+

Classes to read and write Gromacs GRO coordinate files; see the notes on the +GRO format which includes a conversion routine for the box.

+
+

6.8.1. Writing GRO files

+

By default any written GRO files will renumber the atom ids to move sequentially +from 1. This can be disabled, and instead the original atom ids kept, by +using the reindex=False keyword argument. This is useful when writing a +subsection of a larger Universe while wanting to preserve the original +identities of atoms.

+

For example:

+
>>> u = mda.Universe()`
+
+>>> u.atoms.write('out.gro', reindex=False)
+
+# OR
+>>> with mda.Writer('out.gro', reindex=False) as w:
+...     w.write(u.atoms)
+
+
+
+
+

6.8.2. Classes

+
+
+class MDAnalysis.coordinates.GRO.GROReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for the Gromacs GRO structure format.

+
+

Note

+

This Reader will only read the first frame present in a file.

+
+
+

Note

+

GRO files with zeroed 3 entry unit cells (i.e. 0.0   0.0   0.0) +are read as missing unit cell information. In these cases dimensions +will be set to None.

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 2.0.0: Reader now only parses boxes defined with 3 or 9 fields. +Reader now reads a 3 entry zero unit cell (i.e. [0, 0, 0]) as a +being without dimension information (i.e. will the timestep dimension +to None).

+
+
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Returns a CRDWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output GRO file

+
+
Return type
+

GROWriter

+
+
+
+ +
+
+units = {'length': 'nm', 'time': None, 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.GRO.GROWriter(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

GRO Writer that conforms to the Trajectory API.

+
+
Will attempt to write the following information from the topology:
    +
  • atom name (defaults to ‘X’)

  • +
  • resnames (defaults to ‘UNK’)

  • +
  • resids (defaults to ‘1’)

  • +
+
+
+
+

Note

+

The precision is hard coded to three decimal places.

+
+
+

Note

+

When dimensions are missing (i.e. set to None), a zero width +unit cell box will be written (i.e. [0.0, 0.0, 0.0]).

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 0.13.0: Now strictly writes positions with 3dp precision. +and velocities with 4dp. +Removed the convert_dimensions_to_unitcell method, +use Timestep.triclinic_dimensions instead. +Now now writes velocities where possible.

+
+
+

Changed in version 0.18.0: Added reindex keyword argument to allow original atom +ids to be kept.

+
+
+

Changed in version 2.0.0: Raises a warning when writing timestep with missing dimension +information (i.e. set to None).

+
+

Set up a GROWriter with a precision of 3 decimal places.

+
+
Parameters
+
    +
  • filename (str) – output filename

  • +
  • n_atoms (int (optional)) – number of atoms

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
  • reindex (bool (optional)) – By default, all the atoms were reindexed to have a atom id starting +from 1. [True] However, this behaviour can be turned off by +specifying reindex =False.

  • +
+
+
+
+

Note

+

To use the reindex keyword, user can follow the two examples given +below.:

+
u = mda.Universe()
+
+
+

Usage 1:

+
u.atoms.write('out.gro', reindex=False)
+
+
+

Usage 2:

+
with mda.Writer('out.gro', reindex=False) as w:
+    w.write(u.atoms)
+
+
+
+
+
+fmt = {'box_orthorhombic': '{box[0]:10.5f} {box[1]:9.5f} {box[2]:9.5f}\n', 'box_triclinic': '{box[0]:10.5f} {box[4]:9.5f} {box[8]:9.5f} {box[1]:9.5f} {box[2]:9.5f} {box[3]:9.5f} {box[5]:9.5f} {box[6]:9.5f} {box[7]:9.5f}\n', 'n_atoms': '{0:5d}\n', 'xyz': '{resid:>5d}{resname:<5.5s}{name:>5.5s}{index:>5d}{pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}\n', 'xyz_v': '{resid:>5d}{resname:<5.5s}{name:>5.5s}{index:>5d}{pos[0]:8.3f}{pos[1]:8.3f}{pos[2]:8.3f}{vel[0]:8.4f}{vel[1]:8.4f}{vel[2]:8.4f}\n'}
+

format strings for the GRO file (all include newline); precision +of 3 decimal places is hard-coded here.

+
+ +
+
+units = {'length': 'nm', 'time': None, 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)[source]
+

Write selection at current trajectory frame to file.

+
+
Parameters
+

obj (AtomGroup or Universe) –

+
+
+
+

Note

+

The GRO format only allows 5 digits for resid and atom +number. If these numbers become larger than 99,999 then this +routine will chop off the leading digits.

+
+
+

Changed in version 0.7.6: resName and atomName are truncated to a maximum of 5 characters

+
+
+

Changed in version 0.16.0: frame kwarg has been removed

+
+
+

Changed in version 2.0.0: Deprecated support for calling with Timestep has nwo been removed. +Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+

6.8.3. Developer notes: GROWriter format strings

+

The GROWriter class has a GROWriter.fmt attribute, which is a dictionary of different +strings for writing lines in .gro files. These are as follows:

+
+
n_atoms

For the first line of the gro file, supply the number of atoms in the system. +E.g.:

+
fmt['n_atoms'].format(42)
+
+
+
+
xyz

An atom line without velocities. Requires that the ‘resid’, ‘resname’, +‘name’, ‘index’ and ‘pos’ keys be supplied. +E.g.:

+
fmt['xyz'].format(resid=1, resname='SOL', name='OW2', index=2, pos=(0.0, 1.0, 2.0))
+
+
+
+
xyz_v

As above, but with velocities. Needs an additional keyword ‘vel’.

+
+
box_orthorhombic

The final line of the gro file which gives box dimensions. Requires +the box keyword to be given, which should be the three cartesian dimensions. +E.g.:

+
fmt['box_orthorhombic'].format(box=(10.0, 10.0, 10.0))
+
+
+
+
box_triclinic

As above, but for a non orthorhombic box. Requires the box keyword, but this +time as a length 9 vector. This is a flattened version of the (3,3) triclinic +vector representation of the unit cell. The rearrangement into the odd +gromacs order is done automatically.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/GSD.html b/2.7.0-dev0/documentation_pages/coordinates/GSD.html new file mode 100644 index 0000000000..9e5d6a80ed --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/GSD.html @@ -0,0 +1,999 @@ + + + + + + + 6.7. GSD trajectory reader — MDAnalysis.coordinates.GSD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.7. GSD trajectory reader — MDAnalysis.coordinates.GSD

+

Class to read the GSD trajectory, output of HOOMD-blue. The GSD format +specifies both the topology and the trajectory of the particles in the +simulation. The topology is read by the +GSDParser class.

+

The GSD format was developed having in mind the possibility of changing number +of particles, particle types, particle identities and changing topology. +Currently this class has limited functionality, due to the fact that the number +of particles and the topology are kept fixed in most MD simulations. The user +will get an error only if at any time step the number of particles is detected +to be different to the one that was set at the first time step. No check on +changes in particle identity or topology is currently implemented.

+
+

6.7.1. Classes

+
+
+class MDAnalysis.coordinates.GSD.GSDReader(filename, **kwargs)[source]
+

Reader for the GSD format.

+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+

New in version 0.17.0.

+
+
+

Changed in version 2.0.0: Now use a picklable gsd.hoomd.HOOMDTrajectory– +GSDPicklable

+
+
+

Changed in version 2.6.0: Support for GSD versions below 3.0.1 have been dropped. This +includes support for schema 1.3.

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+open_trajectory()[source]
+

opens the trajectory file using gsd.hoomd module

+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.GSD.GSDPicklable(file)[source]
+

Hoomd GSD file object (read-only) that can be pickled.

+

This class provides a file-like object (as by gsd.hoomd.open(), +namely gsd.hoodm.HOOMDTrajectory) that, unlike file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename and mode of gsd.fl.GSDFile in +the file are saved. On unpickling, the file is opened by filename. +This means that for a successful unpickle, the original file still has to +be accessible with its filename.

+
+

Note

+

Open hoomd GSD files with gsd_pickle_open. +After pickling, the current frame is reset. universe.trajectory[i] has +to be used to return to its original frame.

+
+
+
Parameters
+

file (gsd.fl.GSDFile) – File to access.

+
+
+

Example

+
gsdfileobj = gsd.fl.open(name=filename,
+                             mode='r',
+                             application='gsd.hoomd '+ gsd.version.version,
+                             schema='hoomd',
+                             schema_version=[1, 3])
+file = GSDPicklable(gsdfileobj)
+file_pickled = pickle.loads(pickle.dumps(file))
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.coordinates.GSD.gsd_pickle_open(name: str, mode: str = 'r')[source]
+

Open hoomd schema GSD file with pickle function implemented.

+

This function returns a GSDPicklable object. It can be used as a +context manager, and replace the built-in gsd.hoomd.open() function +in read mode that only returns an unpicklable file object.

+

Schema version will depend on the version of gsd module.

+
+

Note

+

Can be only used with read mode.

+
+
+
Parameters
+
    +
  • name (str) – a filename given a text or byte string.

  • +
  • mode (str, optional) – ‘r’: open for reading.

  • +
+
+
Returns
+

stream-like object

+
+
Return type
+

GSDPicklable

+
+
Raises
+

ValueError – if mode is not one of the allowed read modes

+
+
+

Examples

+

open as context manager:

+
with gsd_pickle_open('filename') as f:
+    line = f.readline()
+
+
+

open as function:

+
f = gsd_pickle_open('filename')
+line = f.readline()
+f.close()
+
+
+ +
+

New in version 2.0.0.

+
+
+

Changed in version 2.6.0: Only GSD versions 3.0.1+ are supported. ‘rb’ mode support +has been replaced with ‘r’ mode.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/H5MD.html b/2.7.0-dev0/documentation_pages/coordinates/H5MD.html new file mode 100644 index 0000000000..a56c633286 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/H5MD.html @@ -0,0 +1,1785 @@ + + + + + + + 6.9. H5MD trajectories — MDAnalysis.coordinates.H5MD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.9. H5MD trajectories — MDAnalysis.coordinates.H5MD

+

The H5MD trajectory file format is based upon the general, high performance +HDF5 file format. +HDF5 files are self documenting and can be accessed with the h5py library. +HDF5 can make use of parallel file system features through the MPI-IO +interface of the HDF5 library to improve parallel reads and writes.

+

The HDF5 library and h5py must be installed; otherwise, H5MD files +cannot be read by MDAnalysis. If h5py is not installed, a +RuntimeError is raised.

+
+

6.9.1. Units

+

H5MD files are very flexible and can store data in a wide range of physical +units. The H5MDReader will attempt to match the units in order to +convert all data to the standard MDAnalysis units (see +MDAnalysis.units).

+

Units are read from the attributes of the position, velocity, force, and time +datasets provided by the H5MD file. The unit string is translated from H5MD +notation to MDAnalysis notation. If MDAnalysis does not recognize the unit +(likely because that unit string is not defined in MDAnalysis.units) +provided, a RuntimeError is raised. If no units are provided, +MDAnalysis stores a value of None for each unit. If the H5MD file does not +contain units and convert_units=True, MDAnalysis will raise a +ValueError. To load a universe from an H5MD file with no units defined, +set convert_units=False.

+

H5MDWriter detects the native units of the parent trajectory and +writes the trajectory with those units, unless one of timeunit, +lengthunit, velocityunit, forceunit arugments are supplied. In +this case, the writer will write the corresponding dataset with the selected +unit only if it is recognized by MDAnalysis units.

+
+
+

6.9.2. Example: Loading an H5MD simulation

+

To load an H5MD simulation from an H5MD trajectory data file (using the +H5MDReader), pass the topology +and trajectory files to Universe:

+
import MDAnalysis as mda
+u = mda.Universe("topology.tpr", "trajectory.h5md")
+
+
+

It is also possible to pass an open h5py.File file stream +into the reader:

+
import MDAnalysis as mda
+with h5py.File("trajectory.h5md", 'r') as f:
+     u = mda.Universe("topology.tpr", f)
+
+
+
+

Note

+

Directly using a h5py.File does not work yet. +See issue #2884.

+
+
+
+

6.9.3. Example: Writing an H5MD file

+

To write to an H5MD file from a trajectory loaded with MDAnalysis, do:

+
import MDAnalysis as mda
+u = mda.Universe("topology.tpr", "trajectory.h5md")
+with mda.Writer("output.h5md", n_atoms=u.trajectory.n_atoms) as W:
+    for ts in u.trajectory:
+        W.write(u)
+
+
+

To write an H5MD file with contiguous datasets, you must specify the +number of frames to be written and set chunks=False:

+
with mda.Writer("output_contigous.h5md", n_atoms=u.trajectory.n_atoms,
+                n_frames=3, chunks=False) as W:
+    for ts in u.trajectory[:3]:
+        W.write(u)
+
+
+

The writer also supports writing directly from an AtomGroup:

+
ag = u.select_atoms("protein and name CA")
+ag.write("alpha_carbons.h5md", frames='all')
+
+
+
+
+

6.9.4. Example: Opening an H5MD file in parallel

+

The parallel features of HDF5 can be accessed through h5py +(see parallel h5py docs for more detail) by using the mpi4py Python +package with a Parallel build of HDF5. To load a an H5MD simulation with +parallel HDF5, pass driver and comm arguments to +Universe:

+
import MDAnalysis as mda
+from mpi4py import MPI
+u = mda.Universe("topology.tpr", "trajectory.h5md",
+                 driver="mpio", comm=MPI.COMM_WORLD)
+
+
+
+

Note

+

h5py must be built with parallel features enabled on top of a parallel +HDF5 build, and HDF5 and mpi4py must be built with a working MPI +implementation. See instructions below.

+
+
+

6.9.4.1. Building parallel h5py and HDF5 on Linux

+

Building a working parallel HDF5/h5py/mpi4py environment can be +challenging and is often specific to your local computing resources, +e.g., the supercomputer that you’re running on typically already has +its preferred MPI installation. As a starting point we provide +instructions that worked in a specific, fairly generic environment.

+

These instructions successfully built parallel HDF5/h5py +with OpenMPI 4.0.4, HDF5 1.10.6, h5py 2.9.0, and mpi4py 3.0.3 +on Ubuntu 16.0.6. You may have to play around with different combinations of +versions of h5py/HDF5 to get a working parallel build.

+
+
    +
  1. Build MPI from sources

  2. +
  3. Build HDF5 from sources with parallel settings enabled:

    +
    ./configure --enable-parallel --enable-shared
    +make
    +make install
    +
    +
    +
  4. +
  5. Install mpi4py, making sure to point mpicc to where you’ve +installed your MPI implemenation:

    +
    env MPICC=/path/to/mpicc pip install mpi4py
    +
    +
    +
  6. +
  7. Build h5py from sources, making sure to enable mpi and to point +to your parallel build of HDF5:

    +
    export HDF5_PATH=path-to-parallel-hdf5
    +python setup.py clean --all
    +python setup.py configure -r --hdf5-version=X.Y.Z --mpi --hdf5=$HDF5_PATH
    +export gcc=gcc
    +CC=mpicc HDF5_DIR=$HDF5_PATH python setup.py build
    +python setup.py install
    +
    +
    +
  8. +
+
+

If you have questions or want to share how you managed to build +parallel hdf5/h5py/mpi4py please let everyone know on the +MDAnalysis forums.

+
+
+
+

6.9.5. Classes

+
+
+class MDAnalysis.coordinates.H5MD.H5MDReader(filename, convert_units=True, driver=None, comm=None, **kwargs)[source]
+

Reader for the H5MD format.

+

See h5md documentation +for a detailed overview of the H5MD file format.

+

The reader attempts to convert units in the trajectory file to +the standard MDAnalysis units (MDAnalysis.units) if +convert_units is set to True.

+

Additional data in the observables group of the H5MD file are +loaded into the Timestep.data dictionary.

+

Only 3D-periodic boxes or no periodicity are supported; for no +periodicity, Timestep.dimensions will return None.

+

Although H5MD can store varying numbers of particles per time step +as produced by, e.g., GCMC simulations, MDAnalysis can currently +only process a fixed number of particles per step. If the number +of particles changes a ValueError is raised.

+

The H5MDReader reads .h5md files with the following +HDF5 hierarchy:

+
Notation:
+(name) is an HDF5 group that the reader recognizes
+{name} is an HDF5 group with arbitrary name
+[variable] is an HDF5 dataset
+<dtype> is dataset datatype
++-- is an attribute of a group or dataset
+
+H5MD root
+ \-- (h5md)
+    +-- version <int>
+    \-- author
+        +-- name <str>, author's name
+        +-- email <str>, optional email address
+    \-- creator
+        +-- name <str>, file that created .h5md file
+        +-- version
+ \-- (particles)
+    \-- {group1}
+        \-- (box)
+            +-- dimension : <int>, number of spatial dimensions
+            +-- boundary : <str>, boundary conditions of unit cell
+            \-- (edges)
+                \-- [step] <int>, gives frame
+                \-- [value] <float>, gives box dimensions
+                    +-- unit <str>
+        \-- (position)
+            \-- [step] <int>, gives frame
+            \-- [time] <float>, gives time
+                +-- unit <str>
+            \-- [value] <float>, gives numpy arrary of positions
+                                 with shape (n_atoms, 3)
+                +-- unit <str>
+        \-- (velocity)
+            \-- [step] <int>, gives frame
+            \-- [time] <float>, gives time
+                +-- unit <str>
+            \-- [value] <float>, gives numpy arrary of velocities
+                                 with shape (n_atoms, 3)
+                +-- unit <str>
+        \-- (force)
+            \-- [step] <int>, gives frame
+            \-- [time] <float>, gives time
+                +-- unit <str>
+            \-- [value] <float>, gives numpy arrary of forces
+                                 with shape (n_atoms, 3)
+                +-- unit <str>
+ \-- (observables)
+    \-- (lambda)
+        \-- [step] <int>, gives frame
+        \-- [time] <float>, gives time
+        \-- [value] <float>
+    \-- (step)
+        \-- [step] <int>, gives frame
+        \-- [time] <float>, gives time
+        \-- [value] <int>, gives integration step
+
+
+
+

Note

+

The reader does not currently read mass or charge data.

+
+
+

Note

+

If the driver and comm arguments were used to open the +hdf5 file (specifically, driver="mpio") then the _reopen() +method does not close and open the file like most readers because +the information about the MPI communicator would be lost; instead +it rewinds the trajectory back to the first timestep.

+
+
+

New in version 2.0.0.

+
+
+

Changed in version 2.1.0: Adds parse_n_atoms() method to obtain the number of atoms directly +from the trajectory by evaluating the shape of the position, +velocity, or force groups.

+
+
+

Changed in version 2.5.0: Add correct handling of simple cuboid boxes

+
+
+
Parameters
+
    +
  • filename (str or h5py.File) – trajectory filename or open h5py file

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • driver (str (optional)) – H5PY file driver used to open H5MD file

  • +
  • comm (MPI.Comm (optional)) – MPI communicator used to open H5MD file +Must be passed with ‘mpio’ file driver

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
Raises
+
    +
  • RuntimeError – when H5PY is not installed

  • +
  • RuntimeError – when a unit is not recognized by MDAnalysis

  • +
  • ValueError – when n_atoms changes values between timesteps

  • +
  • ValueError – when convert_units=True but the H5MD file contains no units

  • +
  • ValueError – when dimension of unitcell is not 3

  • +
  • ValueError – when an MPI communicator object is passed to the reader + but driver != 'mpio'

  • +
  • NoDataError – when the H5MD file has no ‘position’, ‘velocity’, or + ‘force’ group

  • +
+
+
+
+
+_reopen()[source]
+

reopen trajectory

+
+

Note

+

If the driver and comm arguments were used to open the +hdf5 file (specifically, driver="mpio") then this method +does not close and open the file like most readers because +the information about the MPI communicator would be lost; instead +it rewinds the trajectory back to the first timstep.

+
+
+ +
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Return writer for trajectory format

+
+

Note

+

The chunk shape of the input file will not be copied to the output +file, as H5MDWriter uses a chunk shape of (1, n_atoms, 3) +by default. To use a custom chunk shape, you must specify the +chunks argument. If you would like to copy an existing chunk +format from a dataset (positions, velocities, or forces), do +the following:

+
chunks = u.trajectory._particle_group['position/value'].chunks
+
+
+

Note that the writer will set the same layout for all particle groups.

+
+
+

See also

+

H5MDWriter

+
+
+

New in version 2.0.0.

+
+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+property has_forces
+

True if ‘force’ group is in trajectory.

+
+ +
+
+property has_positions
+

True if ‘position’ group is in trajectory.

+
+ +
+
+property has_velocities
+

True if ‘velocity’ group is in trajectory.

+
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+open_trajectory()[source]
+

opens the trajectory file using h5py library

+
+ +
+
+static parse_n_atoms(filename)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.H5MD.H5MDWriter(filename, n_atoms, n_frames=None, driver=None, convert_units=True, chunks=None, compression=None, compression_opts=None, positions=True, velocities=True, forces=True, timeunit=None, lengthunit=None, velocityunit=None, forceunit=None, author='N/A', author_email=None, creator='MDAnalysis', creator_version='2.7.0-dev0', **kwargs)[source]
+

Writer for H5MD format (version 1.1).

+

H5MD trajectories are automatically recognised by the +file extension “.h5md”.

+

All data from the input Timestep is +written by default. For detailed information on how H5MDWriter +handles units, compression, and chunking, see the Notes section below.

+
+

Note

+

Parellel writing with the use of a MPI communicator and the 'mpio' +HDF5 driver is currently not supported.

+
+
+

Note

+

NoDataError is raised if no positions, velocities, or forces are +found in the input trajectory. While the H5MD standard allows for this +case, H5MDReader cannot currently read files without at least +one of these three groups.

+
+
+

Note

+

Writing H5MD files with fancy trajectory slicing where the Timestep +does not increase monotonically such as u.trajectory[[2,1,0]] +or u.trajectory[[0,1,2,0,1,2]] raises a ValueError as this +violates the rules of the step dataset in the H5MD standard.

+
+
+
Parameters
+
    +
  • filename (str or h5py.File) – trajectory filename or open h5py file

  • +
  • n_atoms (int) – number of atoms in trajectory

  • +
  • n_frames (int (optional)) – number of frames to be written in trajectory

  • +
  • driver (str (optional)) – H5PY file driver used to open H5MD file. See H5PY drivers for +list of available drivers.

  • +
  • convert_units (bool (optional)) – Convert units from MDAnalysis to desired units

  • +
  • chunks (tuple (optional)) – Custom chunk layout to be applied to the position, +velocity, and force datasets. By default, these datasets +are chunked in (1, n_atoms, 3) blocks

  • +
  • compression (str or int (optional)) – HDF5 dataset compression setting to be applied +to position, velocity, and force datasets. Allowed +settings are ‘gzip’, ‘szip’, ‘lzf’. If an integer +in range(10), this indicates gzip compression level. +Otherwise, an integer indicates the number of a +dynamically loaded compression filter.

  • +
  • compression_opts (int or tup (optional)) – Compression settings. This is an integer for gzip, 2-tuple for +szip, etc. If specifying a dynamically loaded compression filter +number, this must be a tuple of values. For gzip, 1 indicates +the lowest level of compression and 9 indicates maximum compression.

  • +
  • positions (bool (optional)) – Write positions into the trajectory [True]

  • +
  • velocities (bool (optional)) – Write velocities into the trajectory [True]

  • +
  • forces (bool (optional)) – Write forces into the trajectory [True]

  • +
  • timeunit (str (optional)) – Option to convert values in the ‘time’ dataset to a custom unit, +must be recognizable by MDAnalysis

  • +
  • lengthunit (str (optional)) – Option to convert values in the ‘position/value’ dataset to a +custom unit, must be recognizable by MDAnalysis

  • +
  • velocityunit (str (optional)) – Option to convert values in the ‘velocity/value’ dataset to a +custom unit, must be recognizable by MDAnalysis

  • +
  • forceunit (str (optional)) – Option to convert values in the ‘force/value’ dataset to a +custom unit, must be recognizable by MDAnalysis

  • +
  • author (str (optional)) – Name of the author of the file

  • +
  • author_email (str (optional)) – Email of the author of the file

  • +
  • creator (str (optional)) – Software that wrote the file [MDAnalysis]

  • +
  • creator_version (str (optional)) – Version of software that wrote the file +[MDAnalysis.__version__]

  • +
+
+
Raises
+
    +
  • RuntimeError – when H5PY is not installed

  • +
  • ValueError – when n_atoms is 0

  • +
  • ValueError – when chunks=False but the user did not specify n_frames

  • +
  • ValueError – when positions, velocities, and forces are all + set to False

  • +
  • TypeError – when the input object is not a Universe or + AtomGroup

  • +
  • IOError – when n_atoms of the Universe or AtomGroup + being written does not match n_atoms passed as an argument + to the writer

  • +
  • ValueError – when any of the optional timeunit, lengthunit, + velocityunit, or forceunit keyword arguments are + not recognized by MDAnalysis

  • +
+
+
+

Notes

+

By default, the writer will write all available data (positions, +velocities, and forces) if detected in the input +Timestep. In addition, the settings +for compression and compression_opts will be read from +the first available group of positions, velocities, or forces and used as +the default value. To write a file without any one of these datsets, +set positions, velocities, or forces to False.

+

Units

+

The H5MD format is very flexible with regards to units, as there is no +standard defined unit for the format. For this reason, H5MDWriter +does not enforce any units. The units of the written trajectory can be set +explicitly with the keyword arguments lengthunit, velocityunit, +and forceunit. If units are not explicitly specified, they are set to +the native units of the trajectory that is the source of the coordinates. +For example, if one converts a DCD trajectory, then positions are written +in ångstrom and time in AKMA units. A GROMACS XTC will be written in nm and +ps. The units are stored in the metadata of the H5MD file so when +MDAnalysis loads the H5MD trajectory, the units will be automatically +set correctly.

+

Compression

+

HDF5 natively supports various compression modes. To write the trajectory +with compressed datasets, set compression='gzip', compression='lzf' +, etc. See H5PY compression options for all supported modes of +compression. An additional argument, compression_opts, can be used to +fine tune the level of compression. For example, for GZIP compression, +compression_opts can be set to 1 for minimum compression and 9 for +maximum compression.

+

HDF5 Chunking

+

HDF5 datasets can be chunked, meaning the dataset can be split into equal +sized pieces and stored in different, noncontiguous places on disk. +If HDF5 tries to read an element from a chunked dataset, the entire +dataset must be read, therefore an ill-thought-out chunking scheme can +drastically effect file I/O performance. In the case of all MDAnalysis +writers, in general, the number of frames being written is not known +apriori by the writer, therefore the HDF5 must be extendable. However, the +allocation of diskspace is defined when the dataset is created, therefore +extendable HDF5 datasets must be chunked so as to allow dynamic storage +on disk of any incoming data to the writer. In such cases where chunking +isn’t explicity defined by the user, H5PY automatically selects a chunk +shape via an algorithm that attempts to make mostly square chunks between +1 KiB - 1 MiB, however this can lead to suboptimal I/O performance. +H5MDWriter uses a default chunk shape of (1, n_atoms, 3)``so +as to mimic the typical access pattern of a trajectory by MDAnalysis. In +our tests ([Jakupovic2021]_), this chunk shape led to a speedup on the +order of 10x versus H5PY's auto-chunked shape. Users can set a custom +chunk shape with the `chunks` argument. Additionaly, the datasets in a +file can be written with a contiguous layout by setting ``chunks=False, +however this must be accompanied by setting n_frames equal to the +number of frames being written, as HDF5 must know how much space to +allocate on disk when creating the dataset.

+
+

New in version 2.0.0.

+
+
+
+H5MD_VERSION = (1, 1)
+

currently written version of the file format

+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+data_blacklist = ['step', 'time', 'dt']
+

These variables are not written from Timestep.data +dictionary to the observables group in the H5MD file

+
+ +
+
+property has_forces
+

True if writer is writing forces from Timestep.

+
+ +
+
+property has_positions
+

True if writer is writing positions from Timestep.

+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+property has_velocities
+

True if writer is writing velocities from Timestep.

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+class MDAnalysis.coordinates.H5MD.H5PYPicklable(name, mode='r', driver=None, libver=None, userblock_size=None, swmr=False, rdcc_nslots=None, rdcc_nbytes=None, rdcc_w0=None, track_order=None, fs_strategy=None, fs_persist=False, fs_threshold=1, fs_page_size=None, page_buf_size=None, min_meta_keep=0, min_raw_keep=0, locking=None, alignment_threshold=1, alignment_interval=1, meta_block_size=None, **kwds)[source]
+

H5PY file object (read-only) that can be pickled.

+

This class provides a file-like object (as returned by +h5py.File) that, +unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename, mode, driver, and comm of +h5py.File in the file are saved. On unpickling, the file +is opened by filename, mode, driver. This means that for a successful +unpickle, the original file still has to be accessible with its filename.

+
+
Parameters
+
    +
  • filename (str or file-like) – a filename given a text or byte string.

  • +
  • driver (str (optional)) – H5PY file driver used to open H5MD file

  • +
+
+
+

Example

+
f = H5PYPicklable('filename', 'r')
+print(f['particles/trajectory/position/value'][0])
+f.close()
+
+
+

can also be used as context manager:

+
with H5PYPicklable('filename', 'r'):
+    print(f['particles/trajectory/position/value'][0])
+
+
+
+

Note

+

Pickling of an h5py.File opened with driver=”mpio” and an MPI +communicator is currently not supported

+
+ +
+

New in version 2.0.0.

+
+

Create a new file object.

+

See the h5py user guide for a detailed explanation of the options.

+
+
name

Name of the file on disk, or file-like object. Note: for files +created with the ‘core’ driver, HDF5 still requires this be +non-empty.

+
+
mode

r Readonly, file must exist (default) +r+ Read/write, file must exist +w Create file, truncate if exists +w- or x Create file, fail if exists +a Read/write if exists, create otherwise

+
+
driver

Name of the driver to use. Legal values are None (default, +recommended), ‘core’, ‘sec2’, ‘direct’, ‘stdio’, ‘mpio’, ‘ros3’.

+
+
libver

Library version bounds. Supported values: ‘earliest’, ‘v108’, +‘v110’, ‘v112’ and ‘latest’. The ‘v108’, ‘v110’ and ‘v112’ +options can only be specified with the HDF5 1.10.2 library or later.

+
+
userblock_size

Desired size of user block. Only allowed when creating a new +file (mode w, w- or x).

+
+
swmr

Open the file in SWMR read mode. Only used when mode = ‘r’.

+
+
rdcc_nbytes

Total size of the dataset chunk cache in bytes. The default size +is 1024**2 (1 MiB) per dataset. Applies to all datasets unless individually changed.

+
+
rdcc_w0

The chunk preemption policy for all datasets. This must be +between 0 and 1 inclusive and indicates the weighting according to +which chunks which have been fully read or written are penalized +when determining which chunks to flush from cache. A value of 0 +means fully read or written chunks are treated no differently than +other chunks (the preemption is strictly LRU) while a value of 1 +means fully read or written chunks are always preempted before +other chunks. If your application only reads or writes data once, +this can be safely set to 1. Otherwise, this should be set lower +depending on how often you re-read or re-write the same data. The +default value is 0.75. Applies to all datasets unless individually changed.

+
+
rdcc_nslots

The number of chunk slots in the raw data chunk cache for this +file. Increasing this value reduces the number of cache collisions, +but slightly increases the memory used. Due to the hashing +strategy, this value should ideally be a prime number. As a rule of +thumb, this value should be at least 10 times the number of chunks +that can fit in rdcc_nbytes bytes. For maximum performance, this +value should be set approximately 100 times that number of +chunks. The default value is 521. Applies to all datasets unless individually changed.

+
+
track_order

Track dataset/group/attribute creation order under root group +if True. If None use global default h5.get_config().track_order.

+
+
fs_strategy

The file space handling strategy to be used. Only allowed when +creating a new file (mode w, w- or x). Defined as: +“fsm” FSM, Aggregators, VFD +“page” Paged FSM, VFD +“aggregate” Aggregators, VFD +“none” VFD +If None use HDF5 defaults.

+
+
fs_page_size

File space page size in bytes. Only used when fs_strategy=”page”. If +None use the HDF5 default (4096 bytes).

+
+
fs_persist

A boolean value to indicate whether free space should be persistent +or not. Only allowed when creating a new file. The default value +is False.

+
+
fs_threshold

The smallest free-space section size that the free space manager +will track. Only allowed when creating a new file. The default +value is 1.

+
+
page_buf_size

Page buffer size in bytes. Only allowed for HDF5 files created with +fs_strategy=”page”. Must be a power of two value and greater or +equal than the file space page size when creating the file. It is +not used by default.

+
+
min_meta_keep

Minimum percentage of metadata to keep in the page buffer before +allowing pages containing metadata to be evicted. Applicable only if +page_buf_size is set. Default value is zero.

+
+
min_raw_keep

Minimum percentage of raw data to keep in the page buffer before +allowing pages containing raw data to be evicted. Applicable only if +page_buf_size is set. Default value is zero.

+
+
locking

The file locking behavior. Defined as:

+
    +
  • False (or “false”) – Disable file locking

  • +
  • True (or “true”) – Enable file locking

  • +
  • “best-effort” – Enable file locking but ignore some errors

  • +
  • None – Use HDF5 defaults

  • +
+
+

Warning

+

The HDF5_USE_FILE_LOCKING environment variable can override +this parameter.

+
+

Only available with HDF5 >= 1.12.1 or 1.10.x >= 1.10.7.

+
+
alignment_threshold

Together with alignment_interval, this property ensures that +any file object greater than or equal in size to the alignement +threshold (in bytes) will be aligned on an address which is a +multiple of alignment interval.

+
+
alignment_interval

This property should be used in conjunction with +alignment_threshold. See the description above. For more +details, see +https://portal.hdfgroup.org/display/HDF5/H5P_SET_ALIGNMENT

+
+
meta_block_size

Set the current minimum size, in bytes, of new metadata block allocations. +See https://portal.hdfgroup.org/display/HDF5/H5P_SET_META_BLOCK_SIZE

+
+
Additional keywords

Passed on to the selected file driver.

+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/INPCRD.html b/2.7.0-dev0/documentation_pages/coordinates/INPCRD.html new file mode 100644 index 0000000000..70573d6b36 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/INPCRD.html @@ -0,0 +1,232 @@ + + + + + + + 6.10. INPCRD structure files in MDAnalysis — MDAnalysis.coordinates.INPCRD — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.10. INPCRD structure files in MDAnalysis — MDAnalysis.coordinates.INPCRD

+

Read coordinates in Amber coordinate/restart file (suffix “inpcrd”).

+
+

6.10.1. Classes

+
+
+class MDAnalysis.coordinates.INPCRD.INPReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for Amber restart files.

+
+
+static parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+units = {'length': 'Angstrom'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/LAMMPS.html b/2.7.0-dev0/documentation_pages/coordinates/LAMMPS.html new file mode 100644 index 0000000000..29e4216eaa --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/LAMMPS.html @@ -0,0 +1,2918 @@ + + + + + + + 6.11. LAMMPS DCD trajectory and DATA I/O — MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.11. LAMMPS DCD trajectory and DATA I/O — MDAnalysis.coordinates.LAMMPS

+

Classes to read and write LAMMPS DCD binary trajectories, LAMMPS DATA files +and LAMMPS dump files. Trajectories can be read regardless of system-endianness +as this is auto-detected.

+

LAMMPS can write DCD trajectories but unlike a CHARMM trajectory +(which is often called a DCD even though CHARMM itself calls them +“trj”) the time unit is not fixed to be the AKMA time unit (20 AKMA +is 0.978 picoseconds or 1 AKMA = 4.888821e-14 s) but can depend on +settings in LAMMPS. The most common case for biomolecular simulations +appears to be that the time step is recorded in femtoseconds (command +units real in the input file) and lengths in ångströms. Other cases +are unit-less Lennard-Jones time units.

+

This presents a problem for MDAnalysis because it cannot autodetect +the unit from the file. By default we are assuming that the unit for +length is the ångström and for the time is the femtosecond. If this is +not true then the user should supply the appropriate units in the +keywords timeunit and/or lengthunit to DCDWriter and +Universe (which then calls +DCDReader).

+
+

6.11.1. Data file formats

+

By default either the atomic or full atom styles are expected, +however this can be customised, see Atom styles.

+
+
+

6.11.2. Dump files

+

The DumpReader expects ascii dump files written with the default +LAMMPS dump format of ‘atom’

+
+
+

6.11.3. Example: Loading a LAMMPS simulation

+

To load a LAMMPS simulation from a LAMMPS data file (using the +DATAParser) together with a +LAMMPS DCD with “real” provide the keyword format=”LAMMPS”:

+
>>> u = MDAnalysis.Universe("lammps.data", "lammps_real.dcd", format="LAMMPS")
+
+
+

If the trajectory uses units nano then use

+
>>> u = MDAnalysis.Universe("lammps.data", "lammps_nano.dcd", 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
+
+
+
+

Note

+

Lennard-Jones units are not implemented. See MDAnalysis.units +for other recognized values and the documentation for the LAMMPS +units command.

+
+
+
+

6.11.4. Classes

+
+
+class MDAnalysis.coordinates.LAMMPS.DCDReader(dcdfilename, **kwargs)[source]
+

Read a LAMMPS DCD trajectory.

+

The units can be set from the constructor with the keyword +arguments timeunit and lengthunit. The defaults are “fs” and +“Angstrom”, corresponding to LAMMPS units stylereal”. See +MDAnalysis.units for other recognized values.

+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • dt (float (optional)) – overwrite time delta stored in DCD

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+

Changed in version 0.17.0: Changed to use libdcd.pyx library and removed the correl function

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Return writer for trajectory format

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dimensions
+

unitcell dimensions (A, B, C, alpha, beta, gamma)

+
+ +
+
+property dt
+

timestep between frames

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+static parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel=None, start=None, stop=None, step=None, order='afc')[source]
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set of +coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default None +starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+
+

Changed in version 1.0.0: skip and format keywords have been removed.

+
+
+

Changed in version 2.4.0: ValueError now raised instead of NoDataError for empty input +AtomGroup

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'AKMA'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.LAMMPS.DCDWriter(*args, **kwargs)[source]
+

Write a LAMMPS DCD trajectory.

+

The units can be set from the constructor with the keyword +arguments timeunit and lengthunit. The defaults are “fs” and +“Angstrom”. See MDAnalysis.units for other recognized +values.

+
+
Parameters
+
    +
  • filename (str) – filename of trajectory

  • +
  • n_atoms (int) – number of atoms to be written

  • +
  • convert_units (bool (optional)) – convert from MDAnalysis units to format specific units

  • +
  • step (int (optional)) – number of steps between frames to be written

  • +
  • dt (float (optional)) – time between two frames. If None guess from first written +TimeStep

  • +
  • remarks (str (optional)) – remarks to be stored in DCD. Shouldn’t be more then 240 characters

  • +
  • nsavc (int (optional)) – DCD files can also store the number of integrator time steps that +correspond to the interval between two frames as nsavc (i.e., every +how many MD steps is a frame saved to the DCD). By default, this +number is just set to one and this should be sufficient for almost +all cases but if required, nsavc can be changed.

  • +
  • istart (int (optional)) – starting frame number in integrator timesteps. CHARMM defaults to +nsavc, i.e., start at frame number 1 = istart / nsavc. The value +None will set istart to nsavc (the CHARMM default). +The MDAnalysis default is 0 so that the frame number and time of the first +frame is 0.

  • +
  • **kwargs (dict) – General writer arguments

  • +
+
+
+
+
+close()[source]
+

close trajectory

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': 'AKMA'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+class MDAnalysis.coordinates.LAMMPS.DATAReader(filename, **kwargs)[source]
+

Reads a single frame of coordinate information from a LAMMPS DATA file.

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next()
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind()
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': None, 'velocity': 'Angstrom/fs'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.LAMMPS.DATAWriter(filename, convert_units=True, **kwargs)[source]
+

Write out the current time step as a LAMMPS DATA file.

+

This writer supports the sections Atoms, Masses, Velocities, Bonds, +Angles, Dihedrals, and Impropers. This writer will write the header +and these sections (if applicable). Atoms section is written in the +“full” sub-style if charges are available or “molecular” sub-style +if they are not. Molecule id is set to 0 for all atoms.

+
+

Note

+

This writer assumes “conventional” or “real” LAMMPS units where length +is measured in Angstroms and velocity is measured in Angstroms per +femtosecond. To write in different units, specify lengthunit

+

If atom types are not already positive integers, the user must set them +to be positive integers, because the writer will not automatically +assign new types.

+

To preserve numerical atom types when writing a selection, the Masses +section will have entries for each atom type up to the maximum atom type. +If the universe does not contain atoms of some type in +{1, … max(atom_types)}, then the mass for that type will be set to 1.

+

In order to write bonds, each selected bond type must be explicitly set to +an integer >= 1.

+
+

Set up a DATAWriter

+
+
Parameters
+
    +
  • filename (str) – output filename

  • +
  • convert_units (bool, optional) – units are converted to the MDAnalysis base format; [True]

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(selection, frame=None)[source]
+

Write selection at current trajectory frame to file.

+

The sections for Atoms, Masses, Velocities, Bonds, Angles, +Dihedrals, and Impropers (if these are defined) are +written. The Atoms section is written in the “full” sub-style +if charges are available or “molecular” sub-style if they are +not. Molecule id in atoms section is set to to 0.

+

No other sections are written to the DATA file. +As of this writing, other sections are not parsed into the topology +by the DATAReader.

+
+

Note

+

If the selection includes a partial fragment, then only the bonds, +angles, etc. whose atoms are contained within the selection will be +included.

+
+
+
Parameters
+
    +
  • selection (AtomGroup or Universe) – MDAnalysis AtomGroup (selection or Universe.atoms) or also Universe

  • +
  • frame (int (optional)) – optionally move to frame number frame

  • +
+
+
+
+ +
+ +
+
+class MDAnalysis.coordinates.LAMMPS.DumpReader(filename, lammps_coordinate_convention='auto', unwrap_images=False, **kwargs)[source]
+

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.

+
+
Parameters
+
    +
  • filename (str) – Filename of LAMMPS dump file

  • +
  • lammps_coordinate_convention (str (optional) default="auto") –

    Convention used in coordinates, can be one of the following according +to the LAMMPS documentation:

    +
    +
      +
    • ”auto” - Detect coordinate type from file column header. If auto +detection is used, the 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.

    • +
    • +
      ”scaled” - Coordinates wrapped in box and scaled by box length (see

      note below), i.e., xs, ys, zs

      +
      +
      +
    • +
    • ”scaled_unwrapped” - Coordinates unwrapped and scaled by box length, +(see note below) i.e., xsu, ysu, zsu

    • +
    • ”unscaled” - Coordinates wrapped in box, i.e., x, y, z

    • +
    • ”unwrapped” - Coordinates unwrapped, i.e., xu, yu, zu

    • +
    +
    +

    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.

    +

  • +
  • unwrap_images (bool (optional) default=False) – If True and the dump file contains image flags, the coordinates +will be unwrapped. See read_data in the lammps +documentation for more information.

  • +
  • **kwargs – Other keyword arguments used in ReaderBase

  • +
  • versionchanged: (..) – 2.4.0: Now imports velocities and forces, translates the box to the origin, +and optionally unwraps trajectories with image flags upon loading.

  • +
  • versionchanged: – 2.2.0: Triclinic simulation boxes are supported. +(Issue #3383)

  • +
  • versionchanged: – 2.0.0: Now parses coordinates in multiple lammps conventions (x,xs,xu,xsu)

  • +
  • versionadded: (..) – 0.19.0:

  • +
+
+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/MMTF.html b/2.7.0-dev0/documentation_pages/coordinates/MMTF.html new file mode 100644 index 0000000000..230460b8c3 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/MMTF.html @@ -0,0 +1,242 @@ + + + + + + + 6.12. MMTF trajectory reader — MDAnalysis.coordinates.MMTF — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.12. MMTF trajectory reader — MDAnalysis.coordinates.MMTF

+

Reads coordinates data from the Macromolecular Transmission Format format +(MMTF). This should generally be a quicker alternative to PDB.

+
+

New in version 0.16.0.

+
+
+

Changed in version 0.20.0: Unit cell is now properly treated as optional

+
+
+

6.12.1. Classes

+
+
+class MDAnalysis.coordinates.MMTF.MMTFReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Coordinate reader for the Macromolecular Transmission Format format (MMTF).

+
+ +
+
+MDAnalysis.coordinates.MMTF.fetch_mmtf(pdb_id)[source]
+

Create a Universe from the RCSB Protein Data Bank using mmtf format

+
+
Parameters
+

pdb_id (string) – PDB code of the desired data, eg ‘4UCP’

+
+
Returns
+

MDAnalysis Universe of the corresponding PDB system

+
+
Return type
+

Universe

+
+
+
+

See also

+
+
mmtf.fetch

Function for fetching raw mmtf data

+
+
+
+
+

New in version 0.16.0.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/MOL2.html b/2.7.0-dev0/documentation_pages/coordinates/MOL2.html new file mode 100644 index 0000000000..12d9810e7f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/MOL2.html @@ -0,0 +1,375 @@ + + + + + + + 6.13. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.13. MOL2 file format — MDAnalysis.coordinates.MOL2

+

Classes to work with Tripos molecule structure format (MOL2) coordinate and +topology files. Used, for instance, by the DOCK docking code.

+
+

6.13.1. Example for working with mol2 files

+

To open a mol2, remove all hydrogens and save as a new file, use the following:

+
u = Universe("Molecule.mol2")
+gr = u.select_atoms("not name H*")
+print(len(u.atoms), len(gr))
+gr.write("Molecule_noh.mol2")
+
+
+
+

See also

+
+
rdkit

rdkit is an open source cheminformatics toolkit with more mol2 functionality

+
+
+

+
+
+
+

6.13.2. Classes

+
+
+class MDAnalysis.coordinates.MOL2.MOL2Reader(filename, **kwargs)[source]
+

Reader for MOL2 structure format.

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based. +MOL2 now reuses the same Timestep object for every frame, +previously created a new instance of Timestep each frame.

+
+
+

Changed in version 0.20.0: Allows for comments at top of file. +Ignores status bit strings

+
+
+

Changed in version 2.0.0: Bonds attribute is not added if no bonds are present in MOL2 file

+
+
+

Changed in version 2.2.0: Read MOL2 files with optional columns omitted.

+
+

Read coordinates from filename.

+
+
Parameters
+

filename (str or NamedStream) – name of the mol2 file or stream

+
+
+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.MOL2.MOL2Writer(filename, n_atoms=None, convert_units=True)[source]
+

mol2 format writer

+

Write a file in the Tripos molecule structure format (MOL2).

+
+

Note

+

MOL2Writer can only be used to write out previously loaded MOL2 files. +If you’re trying to convert, for example, a PDB file to MOL you should +use other tools, like rdkit.

+

Here is an example how to use rdkit to convert a PDB to MOL:

+
from rdkit import Chem
+mol = Chem.MolFromPDBFile("molecule.pdb", removeHs=False)
+Chem.MolToMolFile(mol, "molecule.mol" )
+
+
+

MOL2 writer is currently not available for rdkit master. It requires SYBYL +atomtype generation. +See page 7 for list of SYBYL atomtypes +(http://tripos.com/tripos_resources/fileroot/pdfs/mol2_format2.pdf).

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+

Create a new MOL2Writer

+
+
Parameters
+
    +
  • filename (str) – name of output file

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
+
+
+
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+encode_block(obj)[source]
+
+
Parameters
+

obj (AtomGroup or Universe) –

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +

Notes

+
    +
  • The MDAnalysis MOL2Reader and MOL2Writer only handle the +MOLECULE, SUBSTRUCTURE, ATOM, and BOND record types. Other records are not +currently read or preserved on writing.

  • +
  • As the CRYSIN record type is not parsed / written, MOL2 systems always have +dimensions set to None and dimensionless MOL2 files are written.

  • +
+
+
+

6.13.3. MOL2 format notes

+
    +
  • MOL2 Format Specification: (http://www.tripos.com/data/support/mol2.pdf)

  • +
  • Example file (http://www.tripos.com/mol2/mol2_format3.html):

    +
     #    Name: benzene
    + #    Creating user name: tom
    + #    Creation time: Wed Dec 28 00:18:30 1988
    +
    + #    Modifying user name: tom
    + #    Modification time: Wed Dec 28 00:18:30 1988
    +
    + @<TRIPOS>MOLECULE
    + benzene
    + 12 12 1  0   0
    + SMALL
    + NO_CHARGES
    +
    +
    + @<TRIPOS>ATOM
    + 1   C1  1.207   2.091   0.000   C.ar    1   BENZENE 0.000
    + 2   C2  2.414   1.394   0.000   C.ar    1   BENZENE 0.000
    + 3   C3  2.414   0.000   0.000   C.ar    1   BENZENE 0.000
    + 4   C4  1.207   -0.697  0.000   C.ar    1   BENZENE 0.000
    + 5   C5  0.000   0.000   0.000   C.ar    1   BENZENE 0.000
    + 6   C6  0.000   1.394   0.000   C.ar    1   BENZENE 0.000
    + 7   H1  1.207   3.175   0.000   H   1   BENZENE 0.000
    + 8   H2  3.353   1.936   0.000   H   1   BENZENE 0.000
    + 9   H3  3.353   -0.542  0.000   H   1   BENZENE 0.000
    + 10  H4  1.207   -1.781  0.000   H   1   BENZENE 0.000
    + 11  H5  -0.939  -0.542  0.000   H   1   BENZENE 0.000
    + 12  H6  -0.939  1.936   0.000   H   1   BENZENE 0.000
    + @<TRIPOS>BOND
    + 1   1   2   ar
    + 2   1   6   ar
    + 3   2   3   ar
    + 4   3   4   ar
    + 5   4   5   ar
    + 6   5   6   ar
    + 7   1   7   1
    + 8   2   8   1
    + 9   3   9   1
    + 10  4   10  1
    + 11  5   11  1
    + 12  6   12  1
    +@<TRIPOS>SUBSTRUCTURE
    + 1   BENZENE 1   PERM    0   ****    ****    0   ROOT
    +
    +
    +
  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/NAMDBIN.html b/2.7.0-dev0/documentation_pages/coordinates/NAMDBIN.html new file mode 100644 index 0000000000..456c029d66 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/NAMDBIN.html @@ -0,0 +1,279 @@ + + + + + + + 6.14. NAMDBIN files format — MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.14. NAMDBIN files format — MDAnalysis.coordinates.NAMDBIN

+

Read/Write coordinates in NAMD double-precision binary format (suffix “coor” or “namdbin”).

+
+

6.14.1. Classes

+
+
+class MDAnalysis.coordinates.NAMDBIN.NAMDBINReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Reader for NAMD binary coordinate files.

+
+

New in version 1.0.0.

+
+
+
+Writer(filename, **kwargs)[source]
+

Returns a NAMDBINWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output NAMDBIN file

+
+
Return type
+

NAMDBINWriter

+
+
+
+ +
+
+static parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+units = {'length': 'Angstrom'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter(filename, n_atoms=None, **kwargs)[source]
+

Writer for NAMD binary coordinate files.

+
+

Note

+
    +
  • Does not handle writing to bz2 or gz compressed file types.

  • +
+
+
+

New in version 1.0.0.

+
+
+
Parameters
+
    +
  • filename (str or NamedStream) – name of the output file or a stream

  • +
  • n_atoms (int) – number of atoms for the output coordinate

  • +
+
+
+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/PDB.html b/2.7.0-dev0/documentation_pages/coordinates/PDB.html new file mode 100644 index 0000000000..1303d4f1c0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/PDB.html @@ -0,0 +1,1522 @@ + + + + + + + 6.15. PDB structure files in MDAnalysis — MDAnalysis.coordinates.PDB — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.15. PDB structure files in MDAnalysis — MDAnalysis.coordinates.PDB

+

MDAnalysis reads coordinates from PDB files and additional optional +data such as B-factors. It is also possible to substitute a PDB file +instead of PSF file in order to define the list of atoms (but no +connectivity information will be available in this case).

+

PDB files contain both coordinate and atom information. It is also possible to +write trajectories as multi-frame (or multi-model) PDB files. This is not very +space efficient but is sometimes the lowest common denominator for exchanging +trajectories. Single frame and multi-frame PDB files are automatically +recognized; the only difference is thath the single-frame PDB is represented as +a trajectory with only one frame.

+

In order to write a selection to a PDB file one typically uses the +MDAnalysis.core.groups.AtomGroup.write() method of the selection:

+
calphas = universe.select_atoms("name CA")
+calphas.write("calpha_only.pdb")
+
+
+

This uses the coordinates from the current timestep of the trajectory.

+

In order to write a PDB trajectory one needs to first obtain a multi-frame +writer (keyword multiframe = True) and then iterate through the +trajectory, while writing each frame:

+
calphas = universe.select_atoms("name CA")
+with MDAnalysis.Writer("calpha_traj.pdb", multiframe=True) as W:
+    for ts in u.trajectory:
+        W.write(calphas)
+
+
+

It is important to always close the trajectory when done because only at this +step is the final END record written, which is required by the PDB 3.3 +standard. Using the writer as a context manager ensures that this always +happens.

+
+

6.15.1. Capabilities

+

A pure-Python implementation for PDB files commonly encountered in MD +simulations comes under the names PDBReader and PDBWriter. It +only implements a subset of the PDB 3.3 standard and also allows some +typical enhancements such as 4-letter resids (introduced by CHARMM/NAMD).

+

The PDBReader can read multi-frame PDB files and represents +them as a trajectory. The PDBWriter can write single and +multi-frame PDB files as specified by the multiframe keyword. By default, it +writes single frames. On the other hand, the MultiPDBWriter is set up +to write a PDB trajectory by default (equivalent to using multiframe = +True).

+
+
+

6.15.2. Examples for working with PDB files

+

A single frame PDB can be written with the +write() method of any +AtomGroup:

+
protein = u.select_atoms("protein")
+protein.write("protein.pdb")
+
+
+

Alternatively, get the single frame writer and supply the +AtomGroup:

+
protein = u.select_atoms("protein")
+with MDAnalysis.Writer("protein.pdb") as pdb:
+    pdb.write(protein)
+
+
+

In order to write a multi-frame PDB trajectory from a universe u one can +do the following:

+
with MDAnalysis.Writer("all.pdb", multiframe=True) as pdb:
+    for ts in u.trajectory:
+        pdb.write(u)
+
+
+

Similarly, writing only a protein:

+
protein = u.select_atoms("protein")
+with MDAnalysis.Writer("protein.pdb", multiframe=True) as pdb:
+    for ts in u.trajectory:
+        pdb.write(protein)
+
+
+
+
+

6.15.3. Classes

+
+

Changed in version 0.16.0: PDB readers and writers based on Bio.PDB.PDBParser were retired and +removed.

+
+
+
+class MDAnalysis.coordinates.PDB.PDBReader(filename, **kwargs)[source]
+

PDBReader that reads a PDB-formatted file, no frills.

+

The following PDB records are parsed (see PDB coordinate section for +details):

+
+
    +
  • CRYST1 for unitcell A,B,C, alpha,beta,gamma

  • +
  • ATOM or HETATM for serial,name,resName,chainID,resSeq,x,y,z,occupancy,tempFactor

  • +
  • HEADER (header), TITLE (title), COMPND +(compound), REMARK (remarks)

  • +
  • all other lines are ignored

  • +
+
+

Reads multi-MODEL PDB files as trajectories. The Timestep.data dictionary +holds the occupancy and tempfactor (bfactor) values for each atom for a given frame. +These attributes are commonly appropriated to store other time varying properties +and so they are exposed here. Note this does not update the AtomGroup attributes, +as the topology does not change with trajectory iteration.

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

COLUMNS

DATA TYPE

FIELD

DEFINITION

1 - 6

Record name

“CRYST1”

7 - 15

Real(9.3)

a

a (Angstroms).

16 - 24

Real(9.3)

b

b (Angstroms).

25 - 33

Real(9.3)

c

c (Angstroms).

34 - 40

Real(7.2)

alpha

alpha (degrees).

41 - 47

Real(7.2)

beta

beta (degrees).

48 - 54

Real(7.2)

gamma

gamma (degrees).

1 - 6

Record name

“ATOM “

7 - 11

Integer

serial

Atom serial number.

13 - 16

Atom

name

Atom name.

17

Character

altLoc

Alternate location indicator.

18 - 21

Residue name

resName

Residue name.

22

Character

chainID

Chain identifier.

23 - 26

Integer

resSeq

Residue sequence number.

27

AChar

iCode

Code for insertion of residues.

31 - 38

Real(8.3)

x

Orthogonal coordinates for X in Angstroms.

39 - 46

Real(8.3)

y

Orthogonal coordinates for Y in Angstroms.

47 - 54

Real(8.3)

z

Orthogonal coordinates for Z in Angstroms.

55 - 60

Real(6.2)

occupancy

Occupancy.

61 - 66

Real(6.2)

tempFactor

Temperature factor.

67 - 76

String

segID

(unofficial CHARMM extension ?)

77 - 78

LString(2)

element

Element symbol, right-justified.

79 - 80

LString(2)

charge

Charge on the atom.

+

Notes

+

If a system does not have unit cell parameters (such as in electron +microscopy structures), the PDB file format requires the CRYST1 field to +be provided with unitary values (cubic box with sides of 1 Å) and an +appropriate REMARK. If unitary values are found within the CRYST1 field, +PDBReader will not set unit cell dimensions (which will take the +default value np.zeros(6), see Issue #2698) +and it will warn the user.

+
+

See also

+

PDBWriter, PDBReader

+
+
    +
  • Frames now 0-based instead of 1-based * New title (list with all TITLE lines).

  • +
+
+

Can now read PDB files with DOS line endings

+
+

Strip trajectory header of trailing spaces and newlines

+
+

Raise user warning for CRYST1 record with unitary valuse (cubic box with sides of 1 Å) and do not set cell dimensions.

+
+

Tempfactors (aka bfactors) are now read into the ts.data dictionary each frame. Occupancies are also read into this dictionary.

+
+
+
+

Read coordinates from filename.

+

filename can be a gzipped or bzip2ed compressed PDB file.

+

If the pdb file contains multiple MODEL records then it is +read as a trajectory where the MODEL numbers correspond to +frame numbers.

+
+
+Writer(filename, **kwargs)[source]
+

Returns a PDBWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output PDB file

+
+
Return type
+

PDBWriter

+
+
+
+ +
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.PDB.PDBWriter(filename, bonds='conect', n_atoms=None, start=0, step=1, remarks='Created by PDBWriter', convert_units=True, multiframe=None, reindex=True)[source]
+

PDB writer that implements a subset of the PDB 3.3 standard .

+

PDB format as used by NAMD/CHARMM: 4-letter resnames and segID are allowed, +altLoc is written.

+

The PDBWriter can be used to either dump a coordinate +set to a PDB file (operating as a “single frame writer”, selected with the +constructor keyword multiframe = False, the default) or by writing a +PDB “movie” (multi frame mode, multiframe = True), consisting of +multiple models (using the MODEL and ENDMDL records).

+
+

Note

+

Writing bonds currently only works when writing a whole Universe +and if bond information is available in the topology. (For selections +smaller than the whole Universe, the atom numbering in the CONECT +records would not match the numbering of the atoms in the new PDB file and +therefore a NotImplementedError is raised.)

+

The maximum frame number that can be stored in a PDB file is 9999 and it +will wrap around (see MODEL() for further details).

+

The CRYST1 record specifies the unit cell. This record is set to +unitary values (cubic box with sides of 1 Å) if unit cell dimensions +are not set (None or np.zeros(6), +see Issue #2698).

+

When the record_types attribute is present (e.g. Universe object +was created by loading a PDB file), ATOM and HETATM record type +keywords are written out accordingly. Otherwise, the ATOM record type +is the default output.

+

The CONECT record is written out, if required, when the output stream +is closed.

+
+
+

See also

+

This, exception, None

+
+
+

Changed in version 0.7.5: Initial support for multi-frame PDB files.

+
+
+

Changed in version 0.7.6: The multiframe keyword was added to select the writing mode. The +writing of bond information (CONECT records) is now disabled by default +but can be enabled with the bonds keyword.

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 0.14.0: PDB doesn’t save charge information

+
+
+

Changed in version 0.20.0: Strip trajectory header of trailing spaces and newlines

+
+
+

Changed in version 1.0.0: ChainID now comes from the last character of segid, as stated in the documentation. +An indexing issue meant it previously used the first charater (Issue #2224)

+
+
+

Changed in version 2.0.0: Add the redindex argument. Setting this keyword to True +(the default) preserves the behavior in earlier versions of MDAnalysis. +The PDB writer checks for a valid chainID entry instead of using the +last character of segid. Should a chainID not be present, or not +conform to the PDB standard, the default value of ‘X’ is used.

+
+
+

Changed in version 2.3.0: Do not write unusable conect records when ag index +is larger than 100000.

+
+

Create a new PDBWriter

+
+
Parameters
+
    +
  • filename (str) – name of output file

  • +
  • start (int (optional)) – starting timestep (the first frame will have MODEL number start + 1 +because the PDB standard prescribes MODEL numbers starting at 1)

  • +
  • step (int (optional)) – skip between subsequent timesteps

  • +
  • remarks (str (optional)) – comments to annotate pdb file (added to the TITLE record); note that +any remarks from the trajectory that serves as input are +written to REMARK records with lines longer than remark_max_length (66 +characters) being wrapped.

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
  • bonds ({"conect", "all", None} (optional)) – If set to “conect”, then only write those bonds that were already +defined in an input PDB file as PDB CONECT record. If set to “all”, +write all bonds (including guessed ones) to the file. None does +not write any bonds. The default is “conect”.

  • +
  • multiframe (bool (optional)) – False: write a single frame to the file; True: create a +multi frame PDB file in which frames are written as MODELENDMDL +records. If None, then the class default is chosen. [None]

  • +
  • reindex (bool (optional)) – If True (default), the atom serial is set to be consecutive +numbers starting at 1. Else, use the atom id.

  • +
+
+
+
+
+_check_pdb_coordinates()[source]
+

Check if the coordinate values fall within the range allowed for PDB files.

+

Deletes the output file if this is the first frame or if frames have +already been written (in multi-frame mode) adds a REMARK instead of the +coordinates and closes the file.

+
+
Raises
+
    +
  • ValueError – if the coordinates fail the check.

  • +
  • .. versionchanged – 1.0.0: Check if filename is StringIO when attempting to remove + a PDB file with invalid coordinates (Issue #2512)

  • +
+
+
+
+ +
+
+_write_pdb_bonds()[source]
+

Writes out all the bond records

+
+ +
+
+_update_frame(obj)[source]
+

Method to initialize important attributes in writer from a AtomGroup or Universe obj.

+

Attributes initialized/updated:

+
    +
  • PDBWriter.obj (the entity that provides topology information and +coordinates, either a AtomGroup or a whole +Universe)

  • +
  • PDBWriter.trajectory (the underlying trajectory +Reader)

  • +
  • PDBWriter.timestep (the underlying trajectory +Timestep)

  • +
+

Before calling _write_next_frame() this method must be +called at least once to enable extracting topology information from the +current frame.

+
+ +
+
+_write_timestep(ts, multiframe=False)[source]
+

Write a new timestep ts to file

+

Does unit conversion if necessary.

+

By setting multiframe = True, MODELENDMDL records are +written to represent trajectory frames in a multi-model PDB file. (At +the moment we do not write the NUMMDL record.)

+

The multiframe = False keyword signals that the +PDBWriter is in single frame mode and no MODEL +records are written.

+
+

Changed in version 0.7.6: The multiframe keyword was added, which completely determines if +MODEL records are written. (Previously, this was decided based on +the underlying trajectory and only if len(traj) > 1 would +MODEL records have been written.)

+
+
+

Changed in version 1.0.0: ChainID now comes from the last character of segid, as stated in +the documentation. An indexing issue meant it previously used the +first charater (Issue #2224)

+
+
+

Changed in version 2.0.0: When only record_types attribute is present, instead of +using ATOM for both ATOM and HETATM, HETATM record +types are properly written out (Issue #1753). +Writing now only uses the contents of the elements attribute +instead of guessing by default. If the elements are missing, +empty records are written out (Issue #2423). +Atoms are now checked for a valid chainID instead of being +overwritten by the last letter of the segid (Issue #3144).

+
+
+ +
+
+CONECT(conect)[source]
+

Write CONECT record.

+
+ +
+
+CRYST1(dimensions, spacegroup='P 1', zvalue=1)[source]
+

Write CRYST1 record.

+
+ +
+
+END()[source]
+

Write END record.

+

Only a single END record is written. Calling END multiple times has no +effect. Because close() also calls this +method right before closing the file it is recommended to not call +END() explicitly.

+
+ +
+
+ENDMDL()[source]
+

Write the ENDMDL record.

+
+ +
+
+HEADER(trajectory)[source]
+

Write HEADER record.

+
+

Changed in version 0.20.0: Strip trajectory.header since it can be modified by the user and should be +sanitized (Issue #2324)

+
+
+ +
+
+MODEL(modelnumber)[source]
+

Write the MODEL record.

+
+

Note

+

The maximum MODEL number is limited to 9999 in the PDB +standard (i.e., 4 digits). If frame numbers are larger than +9999, they will wrap around, i.e., 9998, 9999, 0, 1, 2, …

+
+
+

Changed in version 0.19.0: Maximum model number is enforced.

+
+
+ +
+
+REMARK(*remarks)[source]
+

Write generic REMARKS record (without number).

+

Each string provided in remarks is written as a separate REMARKS +record.

+
+ +
+
+TITLE(*title)[source]
+

Write TITLE record.

+
+ +
+
+close()[source]
+

Close PDB file and write CONECT and END record

+
+

Changed in version 2.0.0: CONECT record written just before END record

+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)[source]
+

Write object obj at current trajectory frame to file.

+

obj can be a selection (i.e. a +AtomGroup) or a whole +Universe.

+

The last letter of the segid is +used as the PDB chainID (but see ATOM() for +details).

+
+
Parameters
+

obj – The AtomGroup or +Universe to write.

+
+
+
+ +
+
+write_all_timesteps(obj)[source]
+

Write all timesteps associated with obj to the PDB file.

+

obj can be a AtomGroup +or a Universe.

+

The method writes the frames from the one specified as start until +the end, using a step of step (start and step are set in the +constructor). Thus, if u is a Universe then

+
u.trajectory[-2]
+pdb = PDBWriter("out.pdb", u.atoms.n_atoms)
+pdb.write_all_timesteps(u)
+
+
+

will write a PDB trajectory containing the last 2 frames and

+
pdb = PDBWriter("out.pdb", u.atoms.n_atoms, start=12, step=2)
+pdb.write_all_timesteps(u)
+
+
+

will be writing frames 12, 14, 16, …

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 2.0.0: CONECT record moved to close()

+
+
+ +
+ +
+
+class MDAnalysis.coordinates.PDB.MultiPDBWriter(filename, bonds='conect', n_atoms=None, start=0, step=1, remarks='Created by PDBWriter', convert_units=True, multiframe=None, reindex=True)[source]
+

PDB writer that implements a subset of the PDB 3.3 standard .

+

PDB format as used by NAMD/CHARMM: 4-letter resnames and segID, altLoc +is written.

+

By default, MultiPDBWriter writes a PDB “movie” (multi frame mode, +multiframe = True), consisting of multiple models (using the MODEL +and ENDMDL records).

+
+

See also

+

This, exception, single

+
+
+

New in version 0.7.6.

+
+

Create a new PDBWriter

+
+
Parameters
+
    +
  • filename (str) – name of output file

  • +
  • start (int (optional)) – starting timestep (the first frame will have MODEL number start + 1 +because the PDB standard prescribes MODEL numbers starting at 1)

  • +
  • step (int (optional)) – skip between subsequent timesteps

  • +
  • remarks (str (optional)) – comments to annotate pdb file (added to the TITLE record); note that +any remarks from the trajectory that serves as input are +written to REMARK records with lines longer than remark_max_length (66 +characters) being wrapped.

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
  • bonds ({"conect", "all", None} (optional)) – If set to “conect”, then only write those bonds that were already +defined in an input PDB file as PDB CONECT record. If set to “all”, +write all bonds (including guessed ones) to the file. None does +not write any bonds. The default is “conect”.

  • +
  • multiframe (bool (optional)) – False: write a single frame to the file; True: create a +multi frame PDB file in which frames are written as MODELENDMDL +records. If None, then the class default is chosen. [None]

  • +
  • reindex (bool (optional)) – If True (default), the atom serial is set to be consecutive +numbers starting at 1. Else, use the atom id.

  • +
+
+
+
+ +
+
+class MDAnalysis.coordinates.PDB.ExtendedPDBReader(filename, **kwargs)[source]
+

PDBReader that reads a PDB-formatted file with five-digit residue numbers.

+

This reader does not conform to the PDB 3.3 standard because it allows +five-digit residue numbers that may take up columns 23 to 27 (inclusive) +instead of being confined to 23-26 (with column 27 being reserved for the +insertion code in the PDB standard). PDB files in this format are written +by popular programs such as VMD.

+
+

See also

+

PDBReader

+
+
+

New in version 0.8.

+
+

Read coordinates from filename.

+

filename can be a gzipped or bzip2ed compressed PDB file.

+

If the pdb file contains multiple MODEL records then it is +read as a trajectory where the MODEL numbers correspond to +frame numbers.

+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

Returns a PDBWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output PDB file

+
+
Return type
+

PDBWriter

+
+
+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/PDBQT.html b/2.7.0-dev0/documentation_pages/coordinates/PDBQT.html new file mode 100644 index 0000000000..8037fa7cc0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/PDBQT.html @@ -0,0 +1,458 @@ + + + + + + + 6.16. PDBQT structure files in MDAnalysis — MDAnalysis.coordinates.PDBQT — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.16. PDBQT structure files in MDAnalysis — MDAnalysis.coordinates.PDBQT

+

MDAnalysis reads coordinates from PDBQT files and additional optional +data such as B-factors, partial charge and AutoDock atom types. It +is also possible to substitute a PDBQT file for a PSF file in order to +define the list of atoms (but no connectivity information will be +available in this case).

+
+
+
+class MDAnalysis.coordinates.PDBQT.PDBQTReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

PDBQTReader that reads a PDBQT-formatted file, no frills.

+
+
Records read:
    +
  • CRYST1 for unitcell A,B,C, alpha,beta,gamm

  • +
  • ATOM. HETATM for x,y,z

  • +
+
+
+

Original PDB format documentation with AutoDOCK extensions

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

COLUMNS

DATA TYPE

FIELD

DEFINITION

1 - 6

Record name

“CRYST1”

7 - 15

Real(9.3)

a

a (Angstroms).

16 - 24

Real(9.3)

b

b (Angstroms).

25 - 33

Real(9.3)

c

c (Angstroms).

34 - 40

Real(7.2)

alpha

alpha (degrees).

41 - 47

Real(7.2)

beta

beta (degrees).

48 - 54

Real(7.2)

gamma

gamma (degrees).

1 - 6

Record name

“ATOM “

7 - 11

Integer

serial

Atom serial number.

13 - 16

Atom

name

Atom name.

17

Character

altLoc

Alternate location indicator. IGNORED

18 - 21

Residue name

resName

Residue name.

22

Character

chainID

Chain identifier.

23 - 26

Integer

resSeq

Residue sequence number.

27

AChar

iCode

Code for insertion of residues. IGNORED

31 - 38

Real(8.3)

x

Orthogonal coordinates for X in Angstroms.

39 - 46

Real(8.3)

y

Orthogonal coordinates for Y in Angstroms.

47 - 54

Real(8.3)

z

Orthogonal coordinates for Z in Angstroms.

55 - 60

Real(6.2)

occupancy

Occupancy.

61 - 66

Real(6.2)

tempFactor

Temperature factor.

67 - 76

Real(10.4)

partialChrg

Gasteiger PEOE partial charge q.

79 - 80

LString(2)

atomType

AutoDOCK atom type t.

+

We ignore torsion notation and just pull the partial charge and atom type columns:

+
COMPND    NSC7810
+REMARK  3 active torsions:
+REMARK  status: ('A' for Active; 'I' for Inactive)
+REMARK    1  A    between atoms: A7_7  and  C22_23
+REMARK    2  A    between atoms: A9_9  and  A11_11
+REMARK    3  A    between atoms: A17_17  and  C21_21
+ROOT
+123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789. (column reference)
+ATOM      1  A1  INH I           1.054   3.021   1.101  0.00  0.00     0.002 A
+ATOM      2  A2  INH I           1.150   1.704   0.764  0.00  0.00     0.012 A
+ATOM      3  A3  INH I          -0.006   0.975   0.431  0.00  0.00    -0.024 A
+ATOM      4  A4  INH I           0.070  -0.385   0.081  0.00  0.00     0.012 A
+ATOM      5  A5  INH I          -1.062  -1.073  -0.238  0.00  0.00     0.002 A
+ATOM      6  A6  INH I          -2.306  -0.456  -0.226  0.00  0.00     0.019 A
+ATOM      7  A7  INH I          -2.426   0.885   0.114  0.00  0.00     0.052 A
+ATOM      8  A8  INH I          -1.265   1.621   0.449  0.00  0.00     0.002 A
+ATOM      9  A9  INH I          -1.339   2.986   0.801  0.00  0.00    -0.013 A
+ATOM     10  A10 INH I          -0.176   3.667   1.128  0.00  0.00     0.013 A
+ENDROOT
+BRANCH   9  11
+ATOM     11  A11 INH I          -2.644   3.682   0.827  0.00  0.00    -0.013 A
+ATOM     12  A16 INH I          -3.007   4.557  -0.220  0.00  0.00     0.002 A
+ATOM     13  A12 INH I          -3.522   3.485   1.882  0.00  0.00     0.013 A
+ATOM     14  A15 INH I          -4.262   5.209  -0.177  0.00  0.00    -0.024 A
+ATOM     15  A17 INH I          -2.144   4.784  -1.319  0.00  0.00     0.052 A
+ATOM     16  A14 INH I          -5.122   4.981   0.910  0.00  0.00     0.012 A
+ATOM     17  A20 INH I          -4.627   6.077  -1.222  0.00  0.00     0.012 A
+ATOM     18  A13 INH I          -4.749   4.135   1.912  0.00  0.00     0.002 A
+ATOM     19  A19 INH I          -3.777   6.285  -2.267  0.00  0.00     0.002 A
+ATOM     20  A18 INH I          -2.543   5.650  -2.328  0.00  0.00     0.019 A
+BRANCH  15  21
+ATOM     21  C21 INH I          -0.834   4.113  -1.388  0.00  0.00     0.210 C
+ATOM     22  O1  INH I          -0.774   2.915  -1.581  0.00  0.00    -0.644 OA
+ATOM     23  O3  INH I           0.298   4.828  -1.237  0.00  0.00    -0.644 OA
+ENDBRANCH  15  21
+ENDBRANCH   9  11
+BRANCH   7  24
+ATOM     24  C22 INH I          -3.749   1.535   0.125  0.00  0.00     0.210 C
+ATOM     25  O2  INH I          -4.019   2.378  -0.708  0.00  0.00    -0.644 OA
+ATOM     26  O4  INH I          -4.659   1.196   1.059  0.00  0.00    -0.644 OA
+ENDBRANCH   7  24
+TORSDOF 3
+123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789. (column reference)
+
+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+
+Writer(filename, **kwargs)[source]
+

Returns a permissive (simple) PDBQTWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output PDBQT file

+
+
Return type
+

PDBQTWriter

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.PDBQT.PDBQTWriter(filename, **kwargs)[source]
+

PDBQT writer that implements a subset of the PDB 3.2 standard and the PDBQT spec.

+
+

Changed in version 2.6.0: Files are now written in wt mode, and keep extensions, allowing +for files to be written under compressed formats

+
+
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(selection, frame=None)[source]
+

Write selection at current trajectory frame to file.

+
+
Parameters
+
    +
  • selection (AtomGroup) – The selection to be written

  • +
  • frame (int (optional)) – optionally move to frame index frame before writing; the default +is to write the current trajectory frame

  • +
+
+
+
+

Note

+

The first letter of the +segid is used as the PDB +chainID.

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/PQR.html b/2.7.0-dev0/documentation_pages/coordinates/PQR.html new file mode 100644 index 0000000000..cdae1908fa --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/PQR.html @@ -0,0 +1,352 @@ + + + + + + + 6.17. PQR file format — MDAnalysis.coordinates.PQR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.17. PQR file format — MDAnalysis.coordinates.PQR

+

Read atoms with charges from a PQR file (as written by PDB2PQR). The +following is adopted from the description of the PQR format as used by APBS:

+

MDAnalysis reads very loosely-formatted PQR files: all fields are +whitespace-delimited rather than the strict column formatting mandated +by the PDB format. This more liberal formatting allows coordinates +which are larger/smaller than ±999 Å.

+

MDAnalysis reads data on a per-line basis from PQR files using the following format:

+
recordName serial atomName residueName chainID residueNumber X Y Z charge radius
+
+
+

If this fails it is assumed that the chainID was omitted and the shorter +format is read:

+
recordName serial atomName residueName residueNumber X Y Z charge radius
+
+
+

Anything else will raise a ValueError.

+

The whitespace is the most important feature of this format: fields +must be separated by at least one space or tab character. The fields +are:

+
+
recordName

A string which specifies the type of PQR entry and should either be ATOM or +HETATM.

+
+
serial

An integer which provides the atom index (but note that MDAnalysis renumbers +atoms so one cannot rely on the serial)

+
+
atomName

A string which provides the atom name.

+
+
residueName

A string which provides the residue name.

+
+
chainID

An optional string which provides the chain ID of the atom.

+
+
residueNumber

An integer which provides the residue index.

+
+
X Y Z

Three floats which provide the atomic coordiantes.

+
+
charge

A float which provides the atomic charge (in electrons).

+
+
radius

A float which provides the atomic radius (in Å).

+
+
+

Clearly, this format can deviate wildly from PDB due to the use of whitespaces +rather than specific column widths and alignments. This deviation can be +particularly significant when large coordinate values are used.

+

Output should look like this (although the only real requirement is +whitespace separation between all entries). The chainID is optional +and can be omitted:

+
ATOM      1  N    MET     1     -11.921   26.307   10.410 -0.3000 1.8500
+ATOM     36  NH1  ARG     2      -6.545   25.499    3.854 -0.8000 1.8500
+ATOM     37 HH11  ARG     2      -6.042   25.480    4.723  0.4600 0.2245
+
+
+
+

Warning

+

Fields must be white-space separated or data are read +incorrectly. PDB formatted files are not guaranteed to be +white-space separated so extra care should be taken when quickly +converting PDB files into PQR files using simple scripts.

+
+

For example, PQR files created with PDB2PQR and the –whitespace +option are guaranteed to conform to the above format:

+
pdb2pqr --ff=charmm --whitespace 4ake.pdb 4ake.pqr
+
+
+

Notes

+

The PQR format does not provide a means by which to provide box information. +In all cases the dimensions attribute will be set to None.

+
+
+
+class MDAnalysis.coordinates.PQR.PQRReader(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Read a PQR file into MDAnalysis.

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+
+Writer(filename, **kwargs)[source]
+

Returns a PQRWriter for filename.

+
+
Parameters
+

filename (str) – filename of the output PQR file

+
+
Return type
+

PQRWriter

+
+
+
+ +
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.PQR.PQRWriter(filename, convert_units=True, **kwargs)[source]
+

Write a single coordinate frame in whitespace-separated PQR format.

+

Charges (“Q”) are taken from the +MDAnalysis.core.groups.Atom.charge attribute while +radii are obtaine from the +MDAnalysis.core.groups.Atom.radius attribute.

+
    +
  • If the segid is ‘SYSTEM’ then it will be set to the empty +string. Otherwise the first letter will be used as the chain ID.

  • +
  • The serial number always starts at 1 and increments sequentially +for the atoms.

  • +
+

The output format is similar to pdb2pqr --whitespace.

+
+

New in version 0.9.0.

+
+
+

Changed in version 2.6.0: Files are now written in wt mode, and keep extensions, allowing +for files to be written under compressed formats

+
+

Set up a PQRWriter with full whitespace separation.

+
+
Parameters
+
    +
  • filename (str) – output filename

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
  • remarks (str (optional)) – remark lines (list of strings) or single string to be added to the +top of the PQR file

  • +
+
+
+
+
+units = {'length': 'Angstrom', 'time': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(selection, frame=None)[source]
+

Write selection at current trajectory frame to file.

+
+
Parameters
+
    +
  • selection (AtomGroup or Universe) – MDAnalysis AtomGroup or Universe

  • +
  • frame (int (optional)) – optionally move to frame index frame; by default, write the +current frame

  • +
+
+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/TNG.html b/2.7.0-dev0/documentation_pages/coordinates/TNG.html new file mode 100644 index 0000000000..81598dcbd4 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/TNG.html @@ -0,0 +1,370 @@ + + + + + + + 6.18. TNG trajectory files — MDAnalysis.coordinates.TNG — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.18. TNG trajectory files — MDAnalysis.coordinates.TNG

+

The TNG format [Lundborg2014] is a format used in GROMACS for +storage of trajectory and topology information. The TNG format allows a wide +range of compression algorithms and unlike the compressed XTC format can also +store velocities and forces in addition to positions.

+

The classes in this module are based on the pytng package for reading TNG +files. The reader is directed to the pytng documentation for further reading +about how pytng works under the hood. Pytng is an optional dependency and must +be installed to use this Reader. Use of the reader without pytng installed will +raise an ImportError. The variable HAS_PYTNG indicates whether this module +has pytng availble.

+

In addition to particle-dependent trajectory information like positions, +forces and velocities, the TNG format can store trajectory metadata and +other arbitrary time dependent data. Additional information can range from +the virial and pressure components to the molecular topology of the system. +This is enabled by a block based system in which binary flags indicate the +presence or absence of various data blocks. The structure of a TNG file is +provided in the TNG specification. The TNG paper [Lundborg2014] and +the pytng documentation are also good resources. The user is encouraged to +read the full list of TNG blocks to understand the full power of the TNG +format.

+
+

6.18.1. Current Limitations

+

Currently there is only a Reader for TNG files and no Writer. This will depend +on upstream changes in pytng. Additionally, it is not currently possible to +read the molecular topology from a TNG file.

+

There are also some limitations to reading TNG files with pytng. +Currently we do not allow data to be read off stride. In essence this +means that all of the critical trajectory data (positions, box, velocities +(if present), forces (if present)) must share the same stride in trajectory +integrator steps. These critical blocks in the TNG file are henceforth called +special blocks. Optional blocks (all blocks that are not special blocks) +will not be read if they do not share an integrator step with, or are not +divisible by the shared integrator step of the special blocks.

+

References

+
+
+
Lundborg2014(1,2,3)
+

Magnus Lundborg, Rossen Apostolov, Daniel Spångberg, Anders Gärdenäs, David van der Spoel, and Erik Lindahl. An efficient and extensible format, library, and api for binary trajectory data from molecular simulations. Journal of Computational Chemistry, 35(3):260–269, 2014. URL: https://onlinelibrary.wiley.com/doi/abs/10.1002/jcc.23495, doi:https://doi.org/10.1002/jcc.23495.

+
+
+
+
+
+
+
+class MDAnalysis.coordinates.TNG.TNGReader(filename: str, convert_units: bool = True, **kwargs)[source]
+

Reader for the TNG format

+

The TNG format [Lundborg2014] is a format used in GROMACS for +storage of trajectory and topology information. This reader is are based on +the pytng package for reading TNG files. The reader is directed to the +pytng documentation and TNG specification for further reading.

+

The TNG format allows a wide range of compression +algorithms and unlike the compressed XTC format can also store velocities +and forces in addition to positions.

+

The contents of the special blocks (positions, box, velocities, forces) +are read into the timestep if present. Additional blocks are read into the +ts.data dictionary if they are available at the current frame.

+
+

New in version 2.4.0.

+
+

Initialize a TNG trajectory

+
+
Parameters
+
    +
  • filename (str) – filename of the trajectory

  • +
  • convert_units (bool (optional)) – convert into MDAnalysis units

  • +
+
+
+
+
+Writer()[source]
+

Writer for TNG files

+
+
Raises
+

NotImplementedError – Currently there is not writer for TNG files pending implementation + upstream in pytng.

+
+
+
+ +
+
+property additional_blocks: List[str]
+

list of the additional (non-special) blocks that are being read from +the trajectory. This may be exclude some blocks present in the file if +they do not fall on the same trajectory stride as the positions and +velocities.

+
+
Returns
+

additional_blocks – The additional block names in the TNG trajectory

+
+
Return type
+

list

+
+
+
+ +
+
+property blocks: List[str]
+

list of the blocks that are in the file

+
+
Returns
+

blocks – The block names present in the TNG trajectory

+
+
Return type
+

list

+
+
+
+ +
+
+close()[source]
+

close the reader

+
+ +
+
+property n_frames: int
+

number of frames in trajectory

+
+
Returns
+

n_frames – The number of data containing frames in the trajectory

+
+
Return type
+

int

+
+
+
+ +
+
+static parse_n_atoms(filename: str) int[source]
+

parse the number of atoms in the TNG trajectory file

+
+
Parameters
+

filename (str) – The name of the TNG file

+
+
Returns
+

n_atoms – The number of atoms in the TNG file

+
+
Return type
+

int

+
+
+
+ +
+
+property special_blocks: List[str]
+

list of the special blocks that are in the file

+
+
Returns
+

special_blocks – The special block names (positions, box, velocities, forces) +present in the TNG trajectory

+
+
Return type
+

list

+
+
+
+ +
+
+units = {'force': 'kJ/(mol*nm)', 'length': 'nm', 'time': 'second', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/TRJ.html b/2.7.0-dev0/documentation_pages/coordinates/TRJ.html new file mode 100644 index 0000000000..f3bf556b62 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/TRJ.html @@ -0,0 +1,624 @@ + + + + + + + 6.19. AMBER trajectories — MDAnalysis.coordinates.TRJ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.19. AMBER trajectories — MDAnalysis.coordinates.TRJ

+

AMBER can write ASCII trajectories (“traj”) and +binary trajectories (“netcdf”). MDAnalysis supports +reading of both formats and writing for the binary trajectories.

+
+

Note

+

Support for AMBER is still somewhat experimental and feedback and +contributions are highly appreciated. Use the Issue Tracker or get in touch +on the MDAnalysis mailinglist.

+
+

Units

+

AMBER trajectories are assumed to be in the following units:

+
    +
  • lengths in Angstrom (Å)

  • +
  • time in ps (but see below)

  • +
+
+

6.19.1. Binary NetCDF trajectories

+

The AMBER netcdf format make use of NetCDF (Network Common Data +Form) format. Such binary trajectories are recognized in MDAnalysis by +the ‘.ncdf’ suffix and read by the NCDFReader.

+

Binary trajectories can also contain velocities and forces, and can record the +exact time +step. In principle, the trajectories can be in different units than the AMBER +defaults of ångström and picoseconds but at the moment MDAnalysis only supports +those and will raise a NotImplementedError if anything else is detected.

+
+
+class MDAnalysis.coordinates.TRJ.NCDFReader(filename, n_atoms=None, mmap=None, **kwargs)[source]
+

Reader for AMBER NETCDF format (version 1.0).

+

AMBER binary trajectories are automatically recognised by the +file extension “.ncdf”.

+

The number of atoms (n_atoms) does not have to be provided as it can +be read from the trajectory. The trajectory reader can randomly access +frames and therefore supports direct indexing (with 0-based frame +indices) and full-feature trajectory iteration, including slicing.

+

Velocities are autodetected and read into the +Timestep._velocities attribute.

+

Forces are autodetected and read into the +Timestep._forces attribute.

+

Periodic unit cell information is detected and used to populate the +Timestep.dimensions attribute. (If no unit cell is available in +the trajectory, then Timestep.dimensions will return +[0,0,0,0,0,0]).

+

Current limitations:

+
    +
  • only trajectories with time in ps and lengths in Angstroem are processed

  • +
+

The NCDF reader uses scipy.io.netcdf and therefore scipy must +be installed. It supports the mmap keyword argument (when reading): +mmap=True is memory efficient and directly maps the trajectory on disk +to memory (using the mmap); mmap=False may consume large +amounts of memory because it loads the whole trajectory into memory but it +might be faster. The default is mmap=None and then default behavior of +scipy.io.netcdf_file prevails, i.e. True when +filename is a file name, False when filename is a file-like object.

+
+

See also

+

NCDFWriter

+
+
+

Changed in version 0.10.0: Added ability to read Forces

+
+
+

Changed in version 0.11.0: Frame labels now 0-based instead of 1-based. +kwarg delta renamed to dt, for uniformity with other Readers.

+
+
+

Changed in version 0.17.0: Uses scipy.io.netcdf and supports the mmap kwarg.

+
+
+

Changed in version 0.20.0: Now reads scale_factors for all expected AMBER convention variables. +Timestep variables now adhere standard MDAnalysis units, with lengths +of angstrom, time of ps, velocity of angstrom/ps and force of +kJ/(mol*Angstrom). It is noted that with 0.19.2 and earlier versions, +velocities would have often been reported in values of angstrom/AKMA +time units instead (Issue #2323).

+
+
+

Changed in version 1.0.0: Support for reading degrees units for cell_angles has now been +removed (Issue #2327)

+
+
+

Changed in version 2.0.0: Now use a picklable scipy.io.netcdf_file– +NCDFPicklable. +Reading of dt now defaults to 1.0 ps if dt cannot be extracted from +the first two frames of the trajectory. +Writer() now also sets convert_units, velocities, forces and +scale_factor information for the NCDFWriter.

+
+
+
+Writer(filename, **kwargs)[source]
+

Returns a NCDFWriter for filename with the same parameters as this NCDF.

+

All values can be changed through keyword arguments.

+
+
Parameters
+
    +
  • filename (str) – filename of the output NCDF trajectory

  • +
  • n_atoms (int (optional)) – number of atoms

  • +
  • remarks (str (optional)) – string that is stored in the title field

  • +
  • convert_units (bool (optional)) – True: units are converted to the AMBER base format

  • +
  • velocities (bool (optional)) – Write velocities into the trajectory

  • +
  • forces (bool (optional)) – Write forces into the trajectory

  • +
  • scale_time (float (optional)) – Scale factor for time units

  • +
  • scale_cell_lengths (float (optional)) – Scale factor for cell lengths

  • +
  • scale_cell_angles (float (optional)) – Scale factor for cell angles

  • +
  • scale_coordinates (float (optional)) – Scale factor for coordinates

  • +
  • scale_velocities (float (optional)) – Scale factor for velocities

  • +
  • scale_forces (float (optional)) – Scale factor for forces

  • +
+
+
Return type
+

NCDFWriter

+
+
+
+ +
+
+close()[source]
+

Close trajectory; any further access will raise an IOError.

+
+

Note

+

The underlying scipy.io.netcdf module may open netcdf +files with mmap if mmap=True was +set. Hence any reference to an array must be removed +before the file can be closed.

+
+
+ +
+
+static parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+units = {'force': 'kcal/(mol*Angstrom)', 'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.TRJ.NCDFWriter(filename, n_atoms, remarks=None, convert_units=True, velocities=False, forces=False, scale_time=None, scale_cell_lengths=None, scale_cell_angles=None, scale_coordinates=None, scale_velocities=None, scale_forces=None, **kwargs)[source]
+

Writer for AMBER NETCDF format (version 1.0).

+

AMBER binary trajectories are automatically recognised by the +file extension “.ncdf” or “.nc”.

+

Velocities are written out if they are detected in the input +Timestep. The trajectories are always written with ångström +for the lengths and picoseconds for the time (and hence Å/ps for +velocities and kilocalorie/mole/Å for forces).

+

Scale factor variables for time, velocities, cell lengths, cell angles, +coordinates, velocities, or forces can be passed into the writer. If so, +they will be written to the NetCDF file. In this case, the trajectory data +will be written to the NetCDF file divided by the scale factor value. By +default, scale factor variables are not written. The only exception is for +velocities, where it is set to 20.455, replicating the default behaviour of +AMBER.

+

Unit cell information is written if available.

+
+
Parameters
+
    +
  • filename (str) – name of output file

  • +
  • n_atoms (int) – number of atoms in trajectory file

  • +
  • convert_units (bool (optional)) – True: units are converted to the AMBER base format; [True]

  • +
  • velocities (bool (optional)) – Write velocities into the trajectory [False]

  • +
  • forces (bool (optional)) – Write forces into the trajectory [False]

  • +
  • scale_time (float (optional)) – Scale factor for time units [None]

  • +
  • scale_cell_lengths (float (optional)) – Scale factor for cell lengths [None]

  • +
  • scale_cell_angles (float (optional)) – Scale factor for cell angles [None]

  • +
  • scale_coordinates (float (optional)) – Scale factor for coordinates [None]

  • +
  • scale_velocities (float (optional)) – Scale factor for velocities [20.455]

  • +
  • scale_forces (float (optional)) – Scale factor for forces [None]

  • +
+
+
+
+

Note

+

MDAnalysis uses scipy.io.netcdf to access AMBER files, which are in +netcdf 3 format. Although scipy.io.netcdf is very fast at reading +these files, it is very slow when writing, and it becomes slower the +longer the files are. On the other hand, the netCDF4 package (which +requires the compiled netcdf library to be installed) is fast at writing +but slow at reading. Therefore, we try to use netCDF4 for writing if +available but otherwise fall back to the slower scipy.io.netcdf.

+

AMBER users might have a hard time getting netCDF4 to work with a +conda-based installation (as discussed in Issue #506) because of the way +that AMBER itself handles netcdf: When the AMBER environment is loaded, the +following can happen when trying to import netCDF4:

+
>>> import netCDF4
+Traceback (most recent call last):
+  File "<string>", line 1, in <module>
+  File "/scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/__init__.py", line 3, in <module>
+    from ._netCDF4 import *
+ImportError: /scratch2/miniconda/envs/py35/lib/python3.5/site-packages/netCDF4/_netCDF4.cpython-35m-x86_64-linux-gnu.so: undefined symbol: nc_inq_var_fletcher32
+
+
+

The reason for this (figured out via ldd) is that AMBER builds +its own NetCDF library that it now inserts into LD_LIBRARY_PATH +without the NetCDF4 API and HDF5 bindings. Since the conda version of +netCDF4 was built against the full NetCDF package, the one +ld tries to link to at runtime (because AMBER requires +LD_LIBRARY_PATH) is missing some symbols. Removing AMBER from the +environment fixes the import but is not really a convenient solution for +users of AMBER.

+

At the moment there is no obvious solution if one wants to use +netCDF4 and AMBER in the same shell session. If you need the fast +writing capabilities of netCDF4 then you need to unload your AMBER +environment before importing MDAnalysis.

+
+
+
Raises
+

FutureWarning – When writing. The NCDFWriter currently does not write any + scale_factor values for the data variables. Whilst not in breach + of the AMBER NetCDF standard, this behaviour differs from that of + most AMBER writers, especially for velocities which usually have a + scale_factor of 20.455. In MDAnalysis 2.0, the NCDFWriter + will enforce scale_factor writing to either match user inputs (either + manually defined or via the NCDFReader) or those as written by + AmberTools’s sander under default operation.

+
+
+
+

See also

+

NCDFReader

+
+
+

Changed in version 0.10.0: Added ability to write velocities and forces

+
+
+

Changed in version 0.11.0: kwarg delta renamed to dt, for uniformity with other Readers

+
+
+

Changed in version 0.17.0: Use fast netCDF4 for writing but fall back to slow +scipy.io.netcdf if netCDF4 is not available.

+
+
+

Changed in version 0.20.1: Changes the cell_angles unit to the AMBER NetCDF convention standard +of degree instead of the degrees written in previous version of +MDAnalysis (Issue #2327).

+
+
+

Changed in version 2.0.0: dt, start, and step keywords were unused and are no longer +set. +Writing of scale_factor values has now been implemented. By default +only velocities write a scale_factor of 20.455 (echoing the behaviour +seen from AMBER).

+
+
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+is_periodic(ts)[source]
+

Test if timestep ts contains a periodic box.

+
+
Parameters
+

ts (Timestep) – Timestep instance containing coordinates to +be written to trajectory file

+
+
Returns
+

Return True if ts contains a valid simulation box

+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'force': 'kcal/(mol*Angstrom)', 'length': 'Angstrom', 'time': 'ps', 'velocity': 'Angstrom/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.TRJ.NCDFPicklable(filename, mode='r', mmap=None, version=1, maskandscale=False)[source]
+

NetCDF file object (read-only) that can be pickled.

+

This class provides a file-like object (as returned by +scipy.io.netcdf_file) that, +unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename and mmap of the open file handle in +the file are saved. On unpickling, the file is opened by filename, +and the mmap file is loaded. +This means that for a successful unpickle, the original file still has to +be accessible with its filename.

+
+

Note

+

This class subclasses scipy.io.netcdf_file, please +see the scipy netcdf API documentation for more information on +the parameters and how the class behaviour.

+
+
+
Parameters
+
    +
  • filename (str or file-like) – a filename given a text or byte string.

  • +
  • mmap (None or bool, optional) – Whether to mmap filename when reading. True when filename +is a file name, False when filename is a file-like object.

  • +
  • version ({1, 2}, optional) – Sets the netcdf file version to read / write. 1 is classic, 2 is +64-bit offset format. Default is 1 (but note AMBER ncdf requires 2).

  • +
  • maskandscale (bool, optional) – Whether to automatically scale and mask data. Default is False.

  • +
+
+
+

Example

+
f = NCDFPicklable(NCDF)
+print(f.variables['coordinates'].data)
+f.close()
+
+
+

can also be used as context manager:

+
with NCDFPicklable(NCDF) as f:
+    print(f.variables['coordinates'].data)
+
+
+ +
+

New in version 2.0.0.

+
+

Initialize netcdf_file from fileobj (str or file-like).

+
+ +
+
+

6.19.2. ASCII TRAJ trajectories

+

ASCII AMBER TRJ coordinate files (as defined in AMBER TRJ format) +are handled by the TRJReader. It is also possible to directly +read bzip2 or gzip compressed files.

+

AMBER ASCII trajectories are recognised by the suffix ‘.trj’, +‘.mdcrd’ or ‘.crdbox (possibly with an additional ‘.gz’ or ‘.bz2’).

+
+

Note

+

In the AMBER community, these trajectories are often saved with the +suffix ‘.crd’ but this extension conflicts with the CHARMM CRD +format and MDAnalysis will not correctly autodetect AMBER “.crd” +trajectories. Instead, explicitly provide the format="TRJ" +argument to Universe:

+
u = MDAnalysis.Universe("top.prmtop", "traj.crd", format="TRJ")
+
+
+

In this way, the AMBER TRJReader is used.

+
+

Limitations

+
    +
  • Periodic boxes are only stored as box lengths A, B, C in an AMBER +trajectory; the reader always assumes that these are orthorhombic +boxes.

  • +
  • The trajectory does not contain time information so we simply set +the time step to 1 ps (or the user could provide it as kwarg dt)

  • +
  • Trajectories with fewer than 4 atoms probably fail to be read (BUG).

  • +
  • If the trajectory contains exactly one atom then it is always +assumed to be non-periodic (for technical reasons).

  • +
  • Velocities are currently not supported as ASCII trajectories.

  • +
+
+
+class MDAnalysis.coordinates.TRJ.TRJReader(filename, n_atoms=None, **kwargs)[source]
+

AMBER trajectory reader.

+

Reads the ASCII formatted AMBER TRJ format. Periodic box information +is auto-detected.

+

The number of atoms in a timestep must be provided in the n_atoms +keyword because it is not stored in the trajectory header and cannot be +reliably autodetected. The constructor raises a ValueError if +n_atoms is left at its default value of None.

+

The length of a timestep is not stored in the trajectory itself but can +be set by passing the dt keyword argument to the constructor; it +is assumed to be in ps. The default value is 1 ps.

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based. +kwarg delta renamed to dt, for uniformity with other Readers

+
+
+
+close()[source]
+

Close trj trajectory file if it was open.

+
+ +
+
+property n_frames
+

Number of frames (obtained from reading the whole trajectory).

+
+ +
+
+open_trajectory()[source]
+

Open the trajectory for reading and load first frame.

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/TRR.html b/2.7.0-dev0/documentation_pages/coordinates/TRR.html new file mode 100644 index 0000000000..c933ba0e8e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/TRR.html @@ -0,0 +1,1182 @@ + + + + + + + 6.20. TRR trajectory files — MDAnalysis.coordinates.TRR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.20. TRR trajectory files — MDAnalysis.coordinates.TRR

+

Read and write GROMACS TRR trajectories.

+
+

See also

+
+
MDAnalysis.coordinates.XTC

Read and write GROMACS XTC trajectory files.

+
+
MDAnalysis.coordinates.XDR

BaseReader/Writer for XDR based formats

+
+
+
+
+
+
+class MDAnalysis.coordinates.TRR.TRRReader(filename, convert_units=True, sub=None, refresh_offsets=False, **kwargs)[source]
+

Reader for the Gromacs TRR format.

+

The Gromacs TRR trajectory format is a lossless format. The TRR format can +store velocities and forces in addition to the coordinates. It is also +used by other Gromacs tools to store and process other data such as modes +from a principal component analysis.

+

The lambda value is written in the data dictionary of the returned +Timestep

+

Notes

+

See Notes on offsets for more information about +offsets.

+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • sub (array_like (optional)) – sub is an array of indices to pick out the corresponding +coordinates and load only them; this requires that the topology +itself is that of the sub system.

  • +
  • refresh_offsets (bool (optional)) – force refresh of offsets

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)
+

Return writer for trajectory format

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'force': 'kJ/(mol*nm)', 'length': 'nm', 'time': 'ps', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.TRR.TRRWriter(filename, n_atoms, convert_units=True, **kwargs)[source]
+

Writer for the Gromacs TRR format.

+

The Gromacs TRR trajectory format is a lossless format. The TRR format can +store velocities and forces in addition to the coordinates. It is also +used by other Gromacs tools to store and process other data such as modes +from a principal component analysis.

+

If the data dictionary of a Timestep contains the key +‘lambda’ the corresponding value will be used as the lambda value +for written TRR file. If None is found the lambda is set to 0.

+

If the data dictionary of a Timestep contains the key +‘step’ the corresponding value will be used as the step value for +the written TRR file. If the dictionary does not contain ‘step’, then +the step is set to the Timestep frame attribute.

+
+
Parameters
+
    +
  • filename (str) – filename of trajectory

  • +
  • n_atoms (int) – number of atoms to be written

  • +
  • convert_units (bool (optional)) – convert from MDAnalysis units to format specific units

  • +
  • **kwargs (dict) – General writer arguments

  • +
+
+
+
+
+close()
+

close trajectory

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'force': 'kJ/(mol*nm)', 'length': 'nm', 'time': 'ps', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/TRZ.html b/2.7.0-dev0/documentation_pages/coordinates/TRZ.html new file mode 100644 index 0000000000..5a7a61dd13 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/TRZ.html @@ -0,0 +1,344 @@ + + + + + + + 6.21. TRZ trajectory I/O — MDAnalysis.coordinates.TRZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.21. TRZ trajectory I/O — MDAnalysis.coordinates.TRZ

+

Classes to read IBIsCO / YASP TRZ binary trajectories, including +coordinates, velocities and more (see attributes of the Timestep).

+

Data are read and written in binary representation but because this depends on +the machine hardware architecture, MDAnalysis always reads and writes TRZ +trajectories in little-endian byte order.

+
+

6.21.1. Classes

+
+
+class MDAnalysis.coordinates.TRZ.TRZReader(trzfilename, n_atoms=None, **kwargs)[source]
+

Reads an IBIsCO or YASP trajectory file

+
+
+ts
+

Timestep object containing +coordinates of current frame

+
+
Type
+

timestep.Timestep

+
+
+
+ +
+

Note

+

Binary TRZ trajectories are always assumed to be written in +little-endian byte order and are read as such.

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based. +Extra data (Temperature, Energies, Pressures, etc) now read +into ts.data dictionary. +Now passes a weakref of self to ts (ts._reader).

+
+
+

Changed in version 1.0.1: Now checks for the correct n_atoms on reading +and can raise ValueError.

+
+
+

Changed in version 2.1.0: TRZReader now returns a default dt of 1.0 when it cannot be +obtained from the difference between two frames.

+
+
+

Changed in version 2.3.0: _frame attribute moved to ts.data dictionary.

+
+

Creates a TRZ Reader

+
+
Parameters
+
    +
  • trzfilename (str) – name of input file

  • +
  • n_atoms (int) – number of atoms in trajectory, must be taken from topology file!

  • +
  • convert_units (bool (optional)) – converts units to MDAnalysis defaults

  • +
+
+
Raises
+

ValueError – If n_atoms or the number of atoms in the topology file do not + match the number of atoms in the trajectory.

+
+
+
+
+Writer(filename, n_atoms=None)[source]
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+close()[source]
+

Close trz file if it was open

+
+ +
+
+property delta
+

MD integration timestep

+
+ +
+
+property n_atoms
+

Number of atoms in a frame

+
+ +
+
+property n_frames
+

Total number of frames in a trajectory

+
+ +
+
+open_trajectory()[source]
+

Open the trajectory file

+
+ +
+
+property skip_timestep
+

Timesteps between trajectory frames

+
+ +
+
+units = {'length': 'nm', 'time': 'ps', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.TRZ.TRZWriter(filename, n_atoms, title='TRZ', convert_units=True)[source]
+

Writes a TRZ format trajectory.

+
+

Note

+

Binary TRZ trajectories are always written in little-endian byte order.

+
+

Create a TRZWriter

+
+
Parameters
+
    +
  • filename (str) – name of output file

  • +
  • n_atoms (int) – number of atoms in trajectory

  • +
  • title (str (optional)) – title of the trajectory; the title must be 80 characters or +shorter, a longer title raises a ValueError exception.

  • +
  • convert_units (bool (optional)) – units are converted to the MDAnalysis base format; [True]

  • +
+
+
+
+
+close()[source]
+

Close if it was open

+
+ +
+
+units = {'length': 'nm', 'time': 'ps', 'velocity': 'nm/ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/TXYZ.html b/2.7.0-dev0/documentation_pages/coordinates/TXYZ.html new file mode 100644 index 0000000000..bedd64443f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/TXYZ.html @@ -0,0 +1,877 @@ + + + + + + + 6.22. TXYZ file format — MDAnalysis.coordinates.TXYZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.22. TXYZ file format — MDAnalysis.coordinates.TXYZ

+

Coordinate reader for Tinker xyz files .txyz and trajectory .arc files. +Differences between Tinker format and normal xyz files:

+
    +
  • there is only one header line containing both the number of atoms and a comment

  • +
  • column 1 contains atom numbers (starting from 1)

  • +
  • column 6 contains atoms types

  • +
  • the following columns indicate connectivity (atoms to which that particular atom is +bonded, according to numbering in column 1)

  • +
+
+

6.22.1. Classes

+
+
+class MDAnalysis.coordinates.TXYZ.TXYZReader(filename, **kwargs)[source]
+

Reads from a TXYZ file

+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

Close arc trajectory file if it was open.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_atoms
+

number of atoms in a frame

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/XDR.html b/2.7.0-dev0/documentation_pages/coordinates/XDR.html new file mode 100644 index 0000000000..c50af663f2 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/XDR.html @@ -0,0 +1,1231 @@ + + + + + + + 6.34. XDR based trajectory files — MDAnalysis.coordinates.XDR — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.34. XDR based trajectory files — MDAnalysis.coordinates.XDR

+

This module contains helper function and classes to read the XTC and TRR file +formats.

+
+

See also

+
+
MDAnalysis.coordinates.XTC

Read and write GROMACS XTC trajectory files.

+
+
MDAnalysis.coordinates.TRR

Read and write GROMACS TRR trajectory files.

+
+
MDAnalysis.lib.formats.libmdaxdr

Low level xdr format reader

+
+
+
+
+
+
+class MDAnalysis.coordinates.XDR.XDRBaseReader(filename, convert_units=True, sub=None, refresh_offsets=False, **kwargs)[source]
+

Base class for libmdaxdr file formats xtc and trr

+

This class handles integration of XDR based formats into MDAnalysis. The +XTC and TRR classes only implement _write_next_frame and +_frame_to_ts.

+

Notes

+

XDR based readers store persistent offsets on disk. The offsets are used to +enable access to random frames efficiently. These offsets will be generated +automatically the first time the trajectory is opened. Generally offsets +are stored in hidden *_offsets.npz files. Afterwards opening the same +file again is fast. It sometimes can happen that the stored offsets get out +off sync with the trajectory they refer to. For this the offsets also store +the number of atoms, size of the file and last modification time. If any of +them change the offsets are recalculated. Writing of the offset file can +fail when the directory where the trajectory file resides is not writable +or if the disk is full. In this case a warning message will be shown but +the offsets will nevertheless be used during the lifetime of the trajectory +Reader. However, the next time the trajectory is opened, the offsets will +have to be rebuilt again.

+
+

Changed in version 1.0.0: XDR offsets read from trajectory if offsets file read-in fails

+
+
+

Changed in version 2.0.0: Add a InterProcessLock when generating offsets

+
+
+

Changed in version 2.4.0: Use a direct read into ts attributes

+
+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • sub (array_like (optional)) – sub is an array of indices to pick out the corresponding +coordinates and load only them; this requires that the topology +itself is that of the sub system.

  • +
  • refresh_offsets (bool (optional)) – force refresh of offsets

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Return writer for trajectory format

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.XDR.XDRBaseWriter(filename, n_atoms, convert_units=True, **kwargs)[source]
+

Base class for libmdaxdr file formats xtc and trr

+
+
Parameters
+
    +
  • filename (str) – filename of trajectory

  • +
  • n_atoms (int) – number of atoms to be written

  • +
  • convert_units (bool (optional)) – convert from MDAnalysis units to format specific units

  • +
  • **kwargs (dict) – General writer arguments

  • +
+
+
+
+
+close()[source]
+

close trajectory

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+MDAnalysis.coordinates.XDR.offsets_filename(filename, ending='npz')[source]
+

Return offset or its lock filename for XDR files. +For this the filename is appended +with _offsets.{ending}.

+
+
Parameters
+
    +
  • filename (str) – filename of trajectory

  • +
  • ending (str (optional)) – fileending of offsets file

  • +
+
+
Returns
+

offset_filename

+
+
Return type
+

str

+
+
+
+ +
+
+MDAnalysis.coordinates.XDR.read_numpy_offsets(filename)[source]
+

read offsets into dictionary.

+

This assume offsets have been saved using numpy

+
+
Parameters
+

filename (str) – filename of offsets

+
+
Returns
+

offsets – dictionary of offsets information

+
+
Return type
+

dict

+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/XTC.html b/2.7.0-dev0/documentation_pages/coordinates/XTC.html new file mode 100644 index 0000000000..4131c1d515 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/XTC.html @@ -0,0 +1,1175 @@ + + + + + + + 6.23. XTC trajectory files — MDAnalysis.coordinates.XTC — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.23. XTC trajectory files — MDAnalysis.coordinates.XTC

+

Read and write GROMACS XTC trajectories.

+
+

See also

+
+
MDAnalysis.coordinates.TRR

Read and write GROMACS TRR trajectory files.

+
+
MDAnalysis.coordinates.XDR

BaseReader/Writer for XDR based formats

+
+
+
+
+
+
+class MDAnalysis.coordinates.XTC.XTCReader(filename, convert_units=True, sub=None, refresh_offsets=False, **kwargs)[source]
+

Reader for the Gromacs XTC trajectory format.

+

XTC is a compressed trajectory format from Gromacs. The trajectory is saved +with reduced precision (3 decimal places) compared to other lossless +formarts like TRR and DCD. The main advantage of XTC files is that they +require significantly less disk space and the loss of precision is usually +not a problem.

+

Notes

+

See Notes on offsets for more information about +offsets.

+
+
Parameters
+
    +
  • filename (str) – trajectory filename

  • +
  • convert_units (bool (optional)) – convert units to MDAnalysis units

  • +
  • sub (array_like (optional)) – sub is an array of indices to pick out the corresponding +coordinates and load only them; this requires that the topology +itself is that of the sub system.

  • +
  • refresh_offsets (bool (optional)) – force refresh of offsets

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, n_atoms=None, **kwargs)
+

Return writer for trajectory format

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

close reader

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+property n_frames
+

number of frames in trajectory

+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': 'nm', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.XTC.XTCWriter(filename, n_atoms, convert_units=True, precision=3, **kwargs)[source]
+

Writer for the Gromacs XTC trajectory format.

+

XTC is a compressed trajectory format from Gromacs. The trajectory is saved +with reduced precision (3 decimal places by default) compared to other +lossless formarts like TRR and DCD. The main advantage of XTC files is that +they require significantly less disk space and the loss of precision is +usually not a problem.

+
+
Parameters
+
    +
  • filename (str) – filename of the trajectory

  • +
  • n_atoms (int) – number of atoms to write

  • +
  • convert_units (bool (optional)) – convert into MDAnalysis units

  • +
  • precision (float (optional)) – set precision of saved trjactory to this number of decimal places.

  • +
+
+
+
+
+close()
+

close trajectory

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': 'nm', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/XYZ.html b/2.7.0-dev0/documentation_pages/coordinates/XYZ.html new file mode 100644 index 0000000000..493cf9771e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/XYZ.html @@ -0,0 +1,405 @@ + + + + + + + 6.24. XYZ trajectory reader — MDAnalysis.coordinates.XYZ — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.24. XYZ trajectory reader — MDAnalysis.coordinates.XYZ

+

The XYZ format is a loosely defined, simple +coordinate trajectory format. The implemented format definition was +taken from the VMD xyzplugin and is therefore compatible with VMD.

+

Note the following:

+
    +
  • Comments are not allowed in the XYZ file (we neither read nor write +them to remain compatible with VMD).

  • +
  • The atom name (first column) is ignored during reading.

  • +
  • The coordinates are assumed to be space-delimited rather than fixed +width (this may cause issues - see below).

  • +
  • All fields to the right of the z-coordinate are ignored.

  • +
  • The unitcell information is all zeros since this is not recorded in +the XYZ format.

  • +
+

Units

+
    +
  • Coordinates are in Angstroms.

  • +
  • The length of a timestep can be set by passing the dt argument, +it’s assumed to be in ps (default: 1 ps).

  • +
+

There appears to be no rigid format definition so it is likely users +will need to tweak this class.

+
+

6.24.1. XYZ File format

+

Definition used by the XYZReader and XYZWriter (and +the VMD xyzplugin from whence the definition was taken):

+
[ comment line            ] !! NOT IMPLEMENTED !! DO NOT INCLUDE
+[ N                       ] # of atoms, required by this xyz reader plugin  line 1
+[ molecule name           ] name of molecule (can be blank)                 line 2
+atom1 x y z [optional data] atom name followed by xyz coords                line 3
+atom2 x y z [ ...         ] and (optionally) other data.
+...
+atomN x y z [ ...         ]                                                 line N+2
+
+
+
+

Note

+
    +
  • comment lines not implemented (do not include them)

  • +
  • molecule name: the line is required but the content is ignored +at the moment

  • +
  • optional data (after the coordinates) are presently ignored

  • +
+
+
+
+

6.24.2. Classes

+
+
+
+
+class MDAnalysis.coordinates.XYZ.XYZReader(filename, **kwargs)[source]
+

Reads from an XYZ file

+
+
Data
+
+
ts

Timestep object containing coordinates of current frame

+
+
+
+
Methods
+
+
len(xyz)

return number of frames in xyz

+
+
for ts in xyz:

iterate through trajectory

+
+
+
+
+

The XYZ file format follows VMD’s xyzplugin and is also described +under XYZ format.

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based. Added dt and +time_offset keywords (passed to Timestep)

+
+
+
+Writer(filename, n_atoms=None, **kwargs)[source]
+

Returns a XYZWriter for filename with the same parameters as this +XYZ.

+
+
Parameters
+
    +
  • filename (str) – filename of the output trajectory

  • +
  • n_atoms (int (optional)) – number of atoms. If none is given use the same number of atoms from +the reader instance is used

  • +
  • **kwargs – See XYZWriter for additional kwargs

  • +
+
+
Return type
+

XYZWriter (see there for more details)

+
+
+
+

See also

+

XYZWriter

+
+
+ +
+
+close()[source]
+

Close xyz trajectory file if it was open.

+
+ +
+
+property n_atoms
+

number of atoms in a frame

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.XYZ.XYZWriter(filename, n_atoms=None, convert_units=True, remark=None, **kwargs)[source]
+

Writes an XYZ file

+

The XYZ file format is not formally defined. This writer follows +the VMD implementation for the molfile xyzplugin.

+

Notes

+

By default, the XYZ writer will attempt to use the input +AtomGroup or +Universe elements record to assign +atom names in the XYZ file. If the elements record is missing, then +the name record will be used. In the event that neither of these are +available, the atoms will all be named X. Please see, the +User Guide for more information on how to add topology attributes if +you wish to add your own elements / atom names to a +Universe.

+
+

Changed in version 1.0.0: Use elements attribute instead of names attribute, if present.

+
+
+

Changed in version 2.0.0: Support for passing timestep to the writer was deprecated in 1.0 and +has now been removed. As a consequence, custom names can no longer be +passed to the writer, these should be added to the +Universe, or +AtomGroup before invoking the writer.

+
+

Initialize the XYZ trajectory writer

+
+
Parameters
+
    +
  • filename (str) – filename of trajectory file. If it ends with “gz” then the file +will be gzip-compressed; if it ends with “bz2” it will be bzip2 +compressed.

  • +
  • n_atoms (int (optional)) – Number of atoms in trajectory. By default assume that this is None +and that this file is used to store several different models +instead of a single trajectory. If a number is provided each +written TimeStep has to contain the same number of atoms.

  • +
  • convert_units (bool (optional)) – convert quantities to default MDAnalysis units of Angstrom upon +writing [True]

  • +
  • remark (str (optional)) – single line of text (“molecule name”). By default writes MDAnalysis +version and frame

  • +
+
+
+
+

Changed in version 1.0.0: Removed default_remark variable (Issue #2692).

+
+
+

Changed in version 2.0.0: Due to the removal of timestep as an input for writing, the atoms +parameter is no longer relevant and has been removed. If passing +an empty universe, please use add_TopologyAttr to add in the +required elements or names.

+
+
+
+close()[source]
+

Close the trajectory file and finalize the writing

+
+ +
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)[source]
+

Write object obj at current trajectory frame to file.

+

Atom elements (or names) in the output are taken from the obj or +default to the value of the atoms keyword supplied to the +XYZWriter constructor.

+
+
Parameters
+

obj (Universe or AtomGroup) – The AtomGroup or +Universe to write.

+
+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument has now been removed. +Use AtomGroup or Universe as an input instead.

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/base.html b/2.7.0-dev0/documentation_pages/coordinates/base.html new file mode 100644 index 0000000000..f17d929c12 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/base.html @@ -0,0 +1,2827 @@ + + + + + + + 6.30. Base classes — MDAnalysis.coordinates.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.30. Base classes — MDAnalysis.coordinates.base

+

Derive, FrameIterator, Reader and Writer classes from the classes +in this module. The derived classes must follow the Trajectory API.

+
+

6.30.1. FrameIterators

+

FrameIterators are “sliced trajectories” (a trajectory is a +Reader) that can be iterated over. They are typically +created by slicing a trajectory or by fancy-indexing of a trajectory +with an array of frame numbers or a boolean mask of all frames.

+

Iterator classes used by the by the ProtoReader:

+
+
+class MDAnalysis.coordinates.base.FrameIteratorBase(trajectory)[source]
+

Base iterable over the frames of a trajectory.

+

A frame iterable has a length that can be accessed with the len() +function, and can be indexed similarly to a full trajectory. When indexed, +indices are resolved relative to the iterable and not relative to the +trajectory.

+
+

New in version 0.19.0.

+
+
+ +
+
+class MDAnalysis.coordinates.base.FrameIteratorSliced(trajectory, frames)[source]
+

Iterable over the frames of a trajectory on the basis of a slice.

+
+
Parameters
+
    +
  • trajectory (ProtoReader) – The trajectory over which to iterate.

  • +
  • frames (slice) – A slice to select the frames of interest.

  • +
+
+
+
+

See also

+

FrameIteratorBase,

+
+
+ +
+
+class MDAnalysis.coordinates.base.FrameIteratorAll(trajectory)[source]
+

Iterable over all the frames of a trajectory.

+
+
Parameters
+

trajectory (ProtoReader) – The trajectory over which to iterate.

+
+
+
+

See also

+

FrameIteratorBase,

+
+
+ +
+
+class MDAnalysis.coordinates.base.FrameIteratorIndices(trajectory, frames)[source]
+

Iterable over the frames of a trajectory listed in a sequence of indices.

+
+
Parameters
+
    +
  • trajectory (ProtoReader) – The trajectory over which to iterate.

  • +
  • frames (sequence) – A sequence of indices.

  • +
+
+
+
+

See also

+

FrameIteratorBase

+
+
+ +
+
+

6.30.2. Readers

+

Readers know how to take trajectory data in a given format and present it in a +common API to the user in MDAnalysis. There are two types of readers:

+
    +
  1. Readers for multi frame trajectories, i.e., file formats that typically +contain many frames. These readers are typically derived from +ReaderBase.

  2. +
  3. Readers for single frame formats: These file formats only contain a single +coordinate set. These readers are derived from +SingleFrameReaderBase.

  4. +
+

The underlying low-level readers handle closing of files in different +ways. Typically, the MDAnalysis readers try to ensure that files are always +closed when a reader instance is garbage collected, which relies on +implementing a __del__() method. However, in some cases, this +is not necessary (for instance, for the single frame formats) and then such a +method can lead to undesirable side effects (such as memory leaks). In this +case, ProtoReader should be used.

+
+
+class MDAnalysis.coordinates.base.ReaderBase(filename, convert_units=True, **kwargs)[source]
+

Base class for trajectory readers that extends ProtoReader with a +__del__() method.

+

New Readers should subclass ReaderBase and properly implement a +close() method, to ensure proper release of resources (mainly file +handles). Readers that are inherently safe in this regard should subclass +ProtoReader instead.

+

See the Trajectory API definition in for the required attributes and +methods.

+
+

See also

+

ProtoReader

+
+
+

Changed in version 0.11.0: Most of the base Reader class definitions were offloaded to +ProtoReader so as to allow the subclassing of ReaderBases without a +__del__() method. Created init method to create common +functionality, all ReaderBase subclasses must now super() through this +class. Added attribute _ts_kwargs, which is created in init. +Provides kwargs to be passed to Timestep

+
+
+

Changed in version 1.0: Removed deprecated flags functionality, use convert_units kwarg instead

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()[source]
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.base.SingleFrameReaderBase(filename, convert_units=True, n_atoms=None, **kwargs)[source]
+

Base class for Readers that only have one frame.

+

To use this base class, define the method _read_first_frame() to +read from file self.filename. This should populate the attribute +self.ts with a Timestep object.

+
+

New in version 0.10.0.

+
+
+

Changed in version 0.11.0: Added attribute “_ts_kwargs” for subclasses +Keywords “dt” and “time_offset” read into _ts_kwargs

+
+
+

Changed in version 2.2.0: Calling __iter__ now rewinds the reader before yielding a +Timestep object (fixing behavior that was not +well defined previously).

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)[source]
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()[source]
+

Return independent copy of this Reader.

+

New Reader will have its own file handle and can seek/iterate +independently of the original.

+

Will also copy the current state of the Timestep held in the original +Reader.

+
+

Changed in version 2.2.0: Arguments used to construct the reader are correctly captured and +passed to the creation of the new class. Previously the only +n_atoms was passed to class copies, leading to a class created +with default parameters which may differ from the original class.

+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next()[source]
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind()[source]
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.coordinates.base.ProtoReader[source]
+

Base class for Readers, without a __del__() method.

+

Extends IOBase with most attributes and methods of a generic +Reader, with the exception of a __del__() method. It should be used +as base for Readers that do not need __del__(), especially since +having even an empty __del__() might lead to memory leaks.

+

See the Trajectory API definition in +MDAnalysis.coordinates.__init__ for the required attributes and +methods.

+
+

See also

+

ReaderBase

+
+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 2.0.0: Now supports (un)pickle. Upon unpickling, +the current timestep is retained by reconstrunction.

+
+
+
+OtherWriter(filename, **kwargs)[source]
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)[source]
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None[source]
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)[source]
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+

The transformations are applied in the order given in the list +transformations, i.e., the first transformation is the first +or innermost one to be applied to the Timestep. The +example above would be equivalent to

+
for ts in u.trajectory:
+   ts = this_transform(another_transform(some_transform(ts)))
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates +in the order given in the list

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)[source]
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_aux_attribute(auxname, attrname)[source]
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)[source]
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)[source]
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)[source]
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next() Timestep[source]
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)[source]
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+classmethod parse_n_atoms(filename, **kwargs)[source]
+

Read the coordinate file and deduce the number of atoms

+
+
Returns
+

n_atoms – the number of atoms in the coordinate file

+
+
Return type
+

int

+
+
Raises
+

NotImplementedError – when the number of atoms can’t be deduced

+
+
+
+ +
+
+remove_auxiliary(auxname)[source]
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)[source]
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep[source]
+

Position at beginning of trajectory

+
+ +
+
+set_aux_attribute(auxname, attrname, new)[source]
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel: Optional[AtomGroup] = None, start: Optional[int] = None, stop: Optional[int] = None, step: Optional[int] = None, order: Optional[str] = 'fac') ndarray[source]
+

Return a subset of coordinate data for an AtomGroup

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – The AtomGroup to read the +coordinates from. Defaults to None, in which case the full set +of coordinate data is returned.

  • +
  • start (int (optional)) – Begin reading the trajectory at frame index start (where 0 is the +index of the first frame in the trajectory); the default +None starts at the beginning.

  • +
  • stop (int (optional)) – End reading the trajectory at frame index stop-1, i.e, stop is +excluded. The trajectory is read to the end with the default +None.

  • +
  • step (int (optional)) – Step size for reading; the default None is equivalent to 1 and +means to read every frame.

  • +
  • order (str (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates)

  • +
+
+
+ +
+

New in version 2.4.0.

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+ +
+
+

6.30.3. Writers

+

Writers know how to write information in a Timestep to a trajectory +file.

+
+
+class MDAnalysis.coordinates.base.WriterBase[source]
+

Base class for trajectory writers.

+

See Trajectory API definition in for the required attributes and +methods.

+
+

Changed in version 2.0.0: Deprecated write_next_timestep() has now been removed, please use +write() instead.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_dimensions_to_unitcell(ts, inplace=True)[source]
+

Read dimensions from timestep ts and return appropriate unitcell.

+

The default is to return [A,B,C,alpha,beta,gamma]; if this +is not appropriate then this method has to be overriden.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+has_valid_coordinates(criteria, x)[source]
+

Returns True if all values are within limit values of their formats.

+

Due to rounding, the test is asymmetric (and min is supposed to be negative):

+
+

min < x <= max

+
+
+
Parameters
+
    +
  • criteria (dict) – dictionary containing the max and min values in native units

  • +
  • x (numpy.ndarray) – (x, y, z) coordinates of atoms selected to be written out

  • +
+
+
Return type
+

bool

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+
+write(obj)[source]
+

Write current timestep, using the supplied obj.

+
+
Parameters
+

obj (AtomGroup or Universe) – write coordinate information associate with obj

+
+
+
+

Note

+

The size of the obj must be the same as the number of atoms provided +when setting up the trajectory.

+
+
+

Changed in version 2.0.0: Deprecated support for Timestep argument to write has now been +removed. Use AtomGroup or Universe as an input instead.

+
+
+ +
+ +
+
+

6.30.4. Converters

+

Converters output information to other libraries.

+
+
+class MDAnalysis.coordinates.base.ConverterBase[source]
+

Base class for converting to other libraries.

+
+

See also

+

MDAnalysis.converters

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+

6.30.5. Helper classes

+

The following classes contain basic functionality that all readers and +writers share.

+
+
+class MDAnalysis.coordinates.base.IOBase[source]
+

Base class bundling common functionality for trajectory I/O.

+
+

Changed in version 0.8: Added context manager protocol.

+
+
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)[source]
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)[source]
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)[source]
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)[source]
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)[source]
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)[source]
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)[source]
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)[source]
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/chain.html b/2.7.0-dev0/documentation_pages/coordinates/chain.html new file mode 100644 index 0000000000..e182820e84 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/chain.html @@ -0,0 +1,514 @@ + + + + + + + 6.33. ChainReader — MDAnalysis.coordinates.chain — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.33. ChainReader — MDAnalysis.coordinates.chain

+

The ChainReader is used by MDAnalysis internally to represent multiple +trajectories as one virtual trajectory. Users typically do not need to use the +ChainReader explicitly and the following documentation is primarily of +interest to developers.

+
+
+class MDAnalysis.coordinates.chain.ChainReader(filenames, skip=1, dt=None, continuous=False, convert_units=True, **kwargs)[source]
+

Reader that concatenates multiple trajectories on the fly.

+

The ChainReader is used by MDAnalysis internally to +represent multiple trajectories as one virtual trajectory. Users +typically do not need to use the ChainReader explicitly.

+

Chainreader can also handle a continuous trajectory split over several +files. To use this pass the continuous == True keyword argument. +Setting continuous=True will make the reader choose frames from the set +of trajectories in such a way that the trajectory appears to be as +continuous in time as possible, i.e. that time is strictly monotonically +increasing. This means that there will be no duplicate time frames and no +jumps backwards in time. However, there can be gaps in time (e.g., multiple +time steps can appear to be missing). Ultimately, it is the user’s +responsibility to ensure that the input trajectories can be virtually +stitched together in a meaningful manner. As an example take the following +trajectory that is split into three parts. The column represents the time +and the trajectory segments overlap. With the continuous chainreader only +the frames marked with a + will be read.

+
part01:  ++++--
+part02:      ++++++-
+part03:            ++++++++
+
+
+
+

Warning

+

The order in which trajectories are given to the chainreader can change +what frames are used with the continuous option.

+
+

The default chainreader will read all frames. The continuous option is +currently only supported for XTC, TRR, and LAMMPSDUMP files.

+

Notes

+

The trajectory API attributes exist but most of them only reflect the first +trajectory in the list; ChainReader.n_frames, +ChainReader.n_atoms, and ChainReader.fixed are properly +set, though

+
+

Changed in version 0.11.0: Frames now 0-based instead of 1-based

+
+
+

Changed in version 0.13.0: time now reports the time summed over each trajectory’s +frames and individual dt.

+
+
+

Changed in version 0.19.0: added continuous trajectory option

+
+
+

Changed in version 0.19.0: limit output of __repr__

+
+
+

Changed in version 2.0.0: Now ChainReader can be (un)pickled. Upon unpickling, +current timestep is retained.

+
+

Set up the chain reader.

+
+
Parameters
+
    +
  • filenames (str or list or sequence) –

    file name or list of file names; the reader will open all file names +and provide frames in the order of trajectories from the list. Each +trajectory must contain the same number of atoms in the same order +(i.e. they all must belong to the same topology). The trajectory +format is deduced from the extension of each file name.

    +

    Extension: filenames are either a single file name or list of file +names in either plain file names format or (filename, format) +tuple combination. This allows explicit setting of the format for +each individual trajectory file.

    +

  • +
  • skip (int (optional)) – skip step (also passed on to the individual trajectory readers); +must be same for all trajectories

  • +
  • dt (float (optional)) – Passed to individual trajectory readers to enforce a common time +difference between frames, in MDAnalysis time units. If not set, each +reader’s dt will be used (either inferred from the trajectory +files, or set to the reader’s default) when reporting frame times; +note that this might lead an inconsistent time difference between +frames.

  • +
  • continuous (bool (optional)) – treat all trajectories as one single long trajectory. Adds several +checks; all trajectories have the same dt, they contain at least 2 +frames, and they are all of the same file-type. Not implemented for +all trajectory formats! This can be used to analyze GROMACS +simulations without concatenating them prior to analysis.

  • +
  • **kwargs (dict (optional)) – all other keyword arguments are passed on to each trajectory reader +unchanged

  • +
+
+
+
+
+_get_local_frame(k) Tuple[int, int][source]
+

Find trajectory index and trajectory frame for chained frame k.

+
+
Parameters
+

k (int) –

Frame k in the chained trajectory can be found in the trajectory at +index i and frame index f.

+

Frames are internally treated as 0-based indices into the trajectory.

+

+
+
Returns
+

    +
  • i (int) – trajectory

  • +
  • f (int) – frame in trajectory i

  • +
+

+
+
Raises
+

IndexError for k<0 or i<0.

+
+
+
+

Note

+

Does not check if k is larger than the maximum number of frames in +the chained trajectory.

+
+
+ +
+
+_apply(method, **kwargs)[source]
+

Execute method with kwargs for all readers.

+
+ +
+
+_get(attr)[source]
+

Get value of attr for all readers.

+
+ +
+
+_get_same(attr)[source]
+

Verify that attr has the same value for all readers and return value.

+
+
Parameters
+

attr (str) – attribute name

+
+
Returns
+

value – common value of the attribute

+
+
Return type
+

int or float or str or object

+
+
Raises
+

ValueError if not all readers have the same value

+
+
+
+ +
+
+_read_frame(frame)[source]
+

Position trajectory at frame index frame and +return Timestep.

+

The frame is translated to the corresponding reader and local +frame index and the Timestep instance in +ChainReader.ts is updated.

+

Notes

+

frame is 0-based, i.e. the first frame in the trajectory is +accessed with frame = 0.

+
+

See also

+

_get_local_frame()

+
+
+ +
+
+property active_reader
+

Reader instance from which frames are currently being read.

+
+ +
+
+close()[source]
+

Close the trajectory file.

+
+ +
+
+property compressed
+

compressed attribute of the currently read trajectory

+
+ +
+
+convert_pos_from_native(x)[source]
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x)[source]
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t)[source]
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t)[source]
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+property frame
+

Cumulative frame number of the current time step.

+
+ +
+
+property periodic
+

periodic attribute of the currently read trajectory

+
+ +
+
+property time
+

Cumulative time of the current frame in MDAnalysis time units (typically ps).

+
+ +
+
+property units
+

units attribute of the currently read trajectory

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/chemfiles.html b/2.7.0-dev0/documentation_pages/coordinates/chemfiles.html new file mode 100644 index 0000000000..e149a725e0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/chemfiles.html @@ -0,0 +1,371 @@ + + + + + + + 6.27. Reading trajectories with chemfiles — MDAnalysis.coordinates.chemfiles — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.27. Reading trajectories with chemfilesMDAnalysis.coordinates.chemfiles

+

MDAnalysis interoperates with the chemfiles library. The chemfiles C++ library +supports an expanding set of file formats, some of which are not natively supported by +MDAnalysis. Using the CHEMFILES reader you can use chemfiles for the low-level +file reading. Check the list of chemfile-supported file formats.

+
+

6.27.1. Using the CHEMFILES reader

+

When reading, set the format="CHEMFILES" keyword argument and I/O is delegated to +chemfiles. For example:

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests import datafiles as data
+>>> u = mda.Universe(data.TPR, data.TRR, format="CHEMFILES")
+>>> print(u.trajectory)
+<ChemfilesReader ~/anaconda3/envs/mda3/lib/python3.8/site-packages/MDAnalysisTests/data/adk_oplsaa.trr with 10 frames of 47681 atoms>
+
+
+

You can then use the Universe as usual while chemfiles +is handling the I/O transparently in the background.

+

chemfiles can also write a number of formats for which there are no Writers in +MDAnalysis. For example, to write a mol2 file:

+
>>> u = mda.Universe(data.mol2_ligand)
+>>> with mda.Writer("ligand.mol2", format="CHEMFILES") as W:
+...     W.write(u.atoms)
+
+
+
+
+

6.27.2. Classes

+

Classes to read and write files using the chemfiles library. This library +provides C++ implementation of multiple formats readers and writers.

+
+
+class MDAnalysis.coordinates.chemfiles.ChemfilesReader(filename, chemfiles_format='', **kwargs)[source]
+

Coordinate reader using chemfiles.

+

The file format to used is guessed based on the file extension. If no +matching format is found, a ChemfilesError is raised. It is also +possible to manually specify the format to use for a given file.

+
+

New in version 1.0.0.

+
+
+
Parameters
+
    +
  • filename (chemfiles.Trajectory or str) – the chemfiles object to read or filename to read

  • +
  • chemfiles_format (str (optional)) – if filename was a string, use the given format name instead of +guessing from the extension. The list of supported formats and the associated names is available in the chemfiles +documentation.

  • +
  • **kwargs (dict) – General reader arguments.

  • +
+
+
+
+ +
+
+class MDAnalysis.coordinates.chemfiles.ChemfilesWriter(filename, n_atoms=0, mode='w', chemfiles_format='', topology=None, **kwargs)[source]
+

Coordinate writer using chemfiles.

+

The file format to used is guessed based on the file extension. If no +matching format is found, a ChemfilesError is raised. It is also +possible to manually specify the format to use for a given file.

+

Chemfiles support writting to files with varying number of atoms if the +underlying format support it. This is the case of most of text-based +formats.

+
+

New in version 1.0.0.

+
+
+
Parameters
+
    +
  • filename (str) – filename of trajectory file.

  • +
  • n_atoms (int) – number of atoms in the trajectory to write. This value is not +used and can vary during trajectory, if the underlying format +support it

  • +
  • mode (str (optional)) – file opening mode: use ‘a’ to append to an existing file or ‘w’ to +create a new file

  • +
  • chemfiles_format (str (optional)) –

    use the given format name instead of guessing from the extension. +The list of supported formats and the associated names +is available in chemfiles documentation.

    +

  • +
  • topology (Universe or AtomGroup (optional)) – use the topology from this AtomGroup +or Universe to write all the +timesteps to the file

  • +
  • **kwargs (dict) – General writer arguments.

  • +
+
+
+
+ +
+
+class MDAnalysis.coordinates.chemfiles.ChemfilesPicklable(path, mode='r', format='')[source]
+

Chemfiles file object (read-only) that can be pickled.

+

This class provides a file-like object (as returned by +chemfiles.Trajectory) that, +unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, path, mode, and format of the file handle +are saved. On unpickling, the file is opened by path with mode, +and saved format. +This means that for a successful unpickle, the original file still has +to be accessible with its filename.

+
+

Note

+

Can only be used with reading (‘r’) mode. +Upon pickling, the current frame is reset. universe.trajectory[i] has +to be used to return to its original frame.

+
+
+
Parameters
+
    +
  • filename (str) – a filename given a text or byte string.

  • +
  • mode ('r' , optional) – only ‘r’ can be used for pickling.

  • +
  • format ('', optional) – guessed from the file extension if empty.

  • +
+
+
+

Example

+
f = ChemfilesPicklable(XYZ, 'r', '')
+print(f.read())
+f.close()
+
+
+

can also be used as context manager:

+
with ChemfilesPicklable(XYZ) as f:
+    print(f.read())
+
+
+ +
+

New in version 2.0.0.

+
+

Open the file at the given path using the given mode and +optional file format.

+

Valid modes are 'r' for read, 'w' for write and 'a' for +append.

+

The format parameter is needed when the file format does not match +the extension, or when there is not standard extension for this format. +If format is an empty string, the format will be guessed from the +file extension.

+
+ +
+
+

6.27.3. Helper functions

+
+
+MDAnalysis.coordinates.chemfiles.MIN_CHEMFILES_VERSION = <Version('0.10')>
+

Lowest version of chemfiles that is supported by MDAnalysis.

+
+ +
+
+MDAnalysis.coordinates.chemfiles.MAX_CHEMFILES_VERSION = <Version('0.11')>
+

Lowest version of chemfiles that is not supported by MDAnalysis.

+
+ +
+
+MDAnalysis.coordinates.chemfiles.check_chemfiles_version()[source]
+

Check if an appropriate chemfiles is available

+

Returns True if a usable chemfiles version is available, +with MIN_CHEMFILES_VERSION <= version < +MAX_CHEMFILES_VERSION

+
+

New in version 1.0.0.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/core.html b/2.7.0-dev0/documentation_pages/coordinates/core.html new file mode 100644 index 0000000000..1d44f4ba8d --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/core.html @@ -0,0 +1,360 @@ + + + + + + + 6.31. Common functions for coordinate reading — MDAnalysis.coordinates.core — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.31. Common functions for coordinate reading — MDAnalysis.coordinates.core

+

Important base classes are collected in MDAnalysis.coordinates.base.

+
+
+MDAnalysis.coordinates.core.reader(filename, format=None, **kwargs)[source]
+

Provide a trajectory reader instance for filename.

+

This function guesses the file format from the extension of filename and +it will throw a TypeError if the extension is not recognized.

+

In most cases, no special keyword arguments are necessary.

+

All other keywords are passed on to the underlying Reader classes; see +their documentation for details.

+
+
Parameters
+
    +
  • filename (str or tuple) – filename (or tuple of filenames) of the input coordinate file

  • +
  • kwargs – Keyword arguments for the selected Reader class.

  • +
+
+
Returns
+

A trajectory Reader instance

+
+
Return type
+

Reader

+
+
+ +
+ +
+
+MDAnalysis.coordinates.core.writer(filename, n_atoms=None, **kwargs)[source]
+

Initialize a trajectory writer instance for filename.

+
+
Parameters
+
    +
  • filename (str) – Output filename of the trajectory; the extension determines the +format.

  • +
  • n_atoms (int (optional)) – The number of atoms in the output trajectory; can be ommitted +for single-frame writers.

  • +
  • multiframe (bool (optional)) – True: write a trajectory with multiple frames; False +only write a single frame snapshot; None first try to get +a multiframe writer and then fall back to single frame [None]

  • +
  • kwargs (optional) – Keyword arguments for the writer; all trajectory Writers accept +start: starting time [0], step: step size in frames [1], +dt: length of time between two frames, in ps [1.0] Some readers +accept additional arguments, which need to be looked up in the +documentation of the reader.

  • +
+
+
Returns
+

A trajectory Writer instance

+
+
Return type
+

Writer

+
+
+ +
+

Changed in version 0.7.6: Added multiframe keyword. See also get_writer_for().

+
+
+ +

Helper functions:

+
+
+MDAnalysis.coordinates.core.get_reader_for(filename, format=None)[source]
+

Return the appropriate trajectory reader class for filename.

+
+
Parameters
+
    +
  • filename – filename of the input trajectory or coordinate file. Also can +handle a few special cases, see notes below.

  • +
  • format (str or Reader (optional)) – Define the desired format. Can be a string to request a given +Reader. +If a class is passed, it will be assumed that this is +a Reader and will be returned.

  • +
+
+
Returns
+

A Reader object

+
+
Return type
+

Reader

+
+
Raises
+

ValueError – If no appropriate Reader is found

+
+
+

Notes

+

There are a number of special cases that can be handled:

+
    +
  • If filename is a numpy array, +MemoryReader is returned.

  • +
  • If filename is an MMTF object, +MMTFReader is returned.

  • +
  • If filename is a ParmEd Structure, +ParmEdReader is returned.

  • +
  • If filename is an iterable of filenames, +ChainReader is returned.

  • +
+

Automatic detection is disabled when an explicit format is provided, +unless a list of filenames is given, in which case +ChainReader is returned and format +passed to the ChainReader.

+
+

Changed in version 1.0.0: Added format_hint functionalityx

+
+
+ +
+
+MDAnalysis.coordinates.core.get_writer_for(filename, format=None, multiframe=None)[source]
+

Return an appropriate trajectory or frame writer class for filename.

+

The format is determined by the format argument or the extension of +filename. If format is provided, it takes precedence over the +extension of filename.

+
+
Parameters
+
    +
  • filename (str or None) – If no format is supplied, then the filename for the trajectory is +examined for its extension and the Writer is chosen accordingly. +If None is provided, then +NullWriter is selected (and +all output is discarded silently).

  • +
  • format (str (optional)) – Explicitly set a format.

  • +
  • multiframe (bool (optional)) – True: write multiple frames to the trajectory; False: only +write a single coordinate frame; None: first try trajectory (multi +frame writers), then the single frame ones. Default is None.

  • +
+
+
Returns
+

A Writer object

+
+
Return type
+

Writer

+
+
Raises
+
    +
  • ValueError: – The format could not be deduced from filename or an unexpected value + was provided for the multiframe argument.

  • +
  • TypeError: – No writer was found for the required format or the required filename + argument was omitted.

  • +
+
+
+
+

Changed in version 0.7.6: Added multiframe keyword; the default None reflects the previous +behaviour.

+
+
+

Changed in version 0.14.0: Removed the default value for the format argument. Now, the value +provided with the format parameter takes precedence over the extension +of filename. A ValueError is raised if the format cannot be +deduced from filename.

+
+
+

Changed in version 0.16.0: The filename argument has been made mandatory.

+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/init.html b/2.7.0-dev0/documentation_pages/coordinates/init.html new file mode 100644 index 0000000000..6abccbeabc --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/init.html @@ -0,0 +1,1000 @@ + + + + + + + 6.1. Trajectory Readers and Writers — MDAnalysis.coordinates — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.1. Trajectory Readers and Writers — MDAnalysis.coordinates

+

The coordinates submodule contains code to read, write and store coordinate +information, either single frames (e.g., the GRO +format) or trajectories (such as the DCD format); +see the Table of supported coordinate formats for all formats.

+

MDAnalysis calls the classes that read a coordinate trajectory and make the +data available “Readers”. Similarly, classes that write out coordinates are +called “Writers”. Readers and Writers provide a common interface to the +underlying coordinate data. This abstraction of coordinate access through an +object-oriented interface is one of the key capabilities of MDAnalysis.

+
+

6.1.1. Readers

+

All Readers are based on a ProtoReader +class that defines a common Trajectory API and allows other code to +interface with all trajectory formats in the same way, independent of the +details of the trajectory format itself.

+

The Universe contains the API entry point +attribute Universe.trajectory that points to the actual +ProtoReader object; all Readers are accessible +through this entry point in the same manner (”duck typing”).

+

There are three types of base Reader which act as starting points for each +specific format. These are:

+
+
ReaderBase

A standard multi frame Reader which allows iteration over a single +file to provide multiple frames of data. This is used by formats +such as TRR and DCD.

+
+
SingleFrameReaderBase

A simplified Reader which reads a file containing only a single +frame of information. This is used with formats such as GRO +and CRD

+
+
ChainReader

An advanced Reader designed to read a sequence of files, to +provide iteration over all the frames in each file seamlessly. +This Reader can also provide this functionality over a +sequence of files in different formats.

+
+
+

Normally, one does not explicitly need to select a reader. This is handled +automatically when creating a Universe and +the appropriate reader for the file type is selected (typically by the file +extension but this choice can be overriden with the format argument to +Universe).

+

If additional simulation data is available, it may be added to and read +alongside a trajectory using +add_auxiliary() as described in +the Auxiliary API.

+
+
+

6.1.2. Writers

+

In order to write coordinates, a factory function is provided +(MDAnalysis.coordinates.core.writer(), which is also made available as +MDAnalysis.Writer()) that returns a Writer appropriate for the desired +file format (as indicated by the filename suffix). Furthermore, a trajectory +ProtoReader can also have a method +Writer() that returns an appropriate +WriterBase for the file format of the +trajectory.

+

In analogy to MDAnalysis.coordinates.core.writer(), there is also a +MDAnalysis.coordinates.core.reader() function available to return a +trajectory ProtoReader instance although this +is often not needed because the Universe +class can choose an appropriate reader automatically.

+

A typical approach is to generate a new trajectory from an old one, e.g., to +only keep the protein:

+
u = MDAnalysis.Universe(PDB, XTC)
+protein = u.select_atoms("protein")
+with MDAnalysis.Writer("protein.xtc", protein.n_atoms) as W:
+    for ts in u.trajectory:
+        W.write(protein)
+
+
+

Using the with() statement will automatically close the trajectory when +the last frame has been written.

+
+
+

6.1.3. Timesteps

+

Both Readers and Writers use Timesteps as their working object. A +Timestep represents all data for a given +frame in a trajectory. The data inside a +Timestep is often accessed indirectly +through a AtomGroup but it is also possible to +manipulate Timesteps directly.

+

The current Timestep can be accessed +through the ts attribute of +the trajectory attached to the active +Universe:

+
ts = u.trajectory.ts
+ts.positions  # returns a numpy array of positions
+
+
+

Most individual formats have slightly different data available in each Timestep +due to differences in individual simulation packages, but all share in common a +broad set of basic data, detailed in Timestep API

+
+
+

6.1.4. Supported coordinate formats

+

The table below lists the coordinate file formats understood by MDAnalysis. The +emphasis is on formats that are used in popular molecular dynamics codes. By +default, MDAnalysis figures out formats by looking at the extension. Thus, a +DCD file always has to end with “.dcd” to be recognized as such unless the +format is explicitly specified with the format keyword to +Universe or +load_new(). A number of files are +also recognized when they are compressed with gzip or +bzip2 such as “.xyz.bz2”.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table of supported coordinate formats

Name

extension

IO

remarks

CHARMM, +NAMD

dcd

r/w

standard CHARMM binary trajectory; endianness is +autodetected. Fixed atoms may not be handled +correctly (requires testing). Module +MDAnalysis.coordinates.DCD

LAMMPS

dcd

r/w

CHARMM-style binary trajectory; endianness is +autodetected. Units are appropriate for LAMMPS. +Module MDAnalysis.coordinates.LAMMPS

LAMMPS 1

data

r

Single frame of coordinates read from .data files

LAMMPS 1

lammpsdump

r

Ascii trajectory in atom style

Gromacs

xtc

r/w

Compressed (lossy) xtc trajectory format. Module +MDAnalysis.coordinates.XTC

Gromacs

trr

r/w

Full precision trr trajectory. Coordinates and +velocities are processed. Module +MDAnalysis.coordinates.TRR

Gromacs

tng

r

Variable precision tng trajectory. Coordinates, +velocities and forces are processed along with any +additional tng block data requested for reading. +Uses the PyTNG package for tng file reading. +Module MDAnalysis.coordinates.TNG

XYZ 1

xyz

r/w

Generic white-space separate XYZ format; can be +compressed (gzip or bzip2). Module +MDAnalysis.coordinates.XYZ

TXYZ 1

txyz, +arc

r

Tinker XYZ format. +Module MDAnalysis.coordinates.TXYZ

HOOMD 1

gsd

r

HOOMD GSD format (using gsd.hoomd). +Module MDAnalysis.coordinates.GSD

GAMESS

gms, +log, +out

r

Generic semi-formatted GAMESS output log; can be +compressed (gzip or bzip2). Module +MDAnalysis.coordinates.GMS

AMBER

trj, +mdcrd

r

formatted (ASCII) trajectories; the presence of a +periodic box is autodetected (experimental). +Module MDAnalysis.coordinates.TRJ

AMBER

inpcrd, +restrt

r

formatted (ASCII) coordinate/restart file +Module MDAnalysis.coordinates.INPCRD

AMBER

ncdf, nc

r/w

binary (NetCDF) trajectories are fully supported with +optional netcdf4-python module (coordinates and +velocities). Module MDAnalysis.coordinates.TRJ

Brookhaven +1

pdb/ent

r/w

a relaxed PDB format (as used in MD simulations) +is read by default; Multiple frames (MODEL) +are supported but require the multiframe keyword. +Module MDAnalysis.coordinates.PDB

XPDB

pdb

r

Extended PDB format (can use 5-digit residue +numbers). To use, specify the format “XPBD” +explicitly: Universe(..., format="XPDB"). +Module MDAnalysis.coordinates.PDB

PDBQT 1

pdbqt

r/w

file format used by AutoDock with atom types t +and partial charges q. Module: +MDAnalysis.coordinates.PDBQT

PQR 1

pqr

r/w

PDB-like but whitespace-separated files with charge +and radius information. Module +MDAnalysis.coordinates.PQR

GROMOS96

+

1

+

gro

r/w

basic GROMOS96 format (velocities as well). Only +the first frame present will be read. +Module MDAnalysis.coordinates.GRO

CHARMM +CARD 1

crd

r/w

“CARD” coordinate output from CHARMM; deals with +either standard or EXTended format. Module +MDAnalysis.coordinates.CRD

DESRES 1

dms

r

DESRES Molecular Structure file format reader. +Module MDAnalysis.coordinates.DMS

IBIsCO/YASP

trz

r/w

Binary IBIsCO or YASP trajectories Module +MDAnalysis.coordinates.TRZ

MOL2

mol2

r/w

Text-based Tripos molecular structure format +MDAnalysis.coordinates.MOL2

DL_Poly 1

config

r

DL_Poly ascii config file +MDAnalysis.coordinates.DLPOLY

DL_Poly 1

history

r

DL_Poly ascii history file +MDAnalysis.coordinates.DLPOLY

MMTF 1

mmtf

r

Macromolecular Transmission Format +MDAnalysis.coordinates.MMTF

NAMD

coor, +namdbin

r/w

NAMD binary file format for coordinates +MDAnalysis.coordinates.NAMDBIN

FHIAIMS

in

r/w

FHI-AIMS file format for coordinates +MDAnalysis.coordinates.FHIAIMS

H5MD

h5md

r

H5MD file format for coordinates +MDAnalysis.coordinates.H5MD

chemfiles +library

CHEMFILES

r/w

interface to chemfiles, see the list of chemfiles +file formats and +MDAnalysis.coordinates.chemfiles

+
+
1(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
+

This format can also be used to provide basic topology +information (i.e. the list of atoms); it is possible to create a +full Universe by simply +providing a file of this format: u = Universe(filename)

+
+
+
+
+

6.1.5. Trajectory API

+

The Trajectory API defines how classes have to be structured that allow +reading and writing of coordinate files. By following the API it is possible to +seamlessly enhance the I/O capabilities of MDAnalysis. The actual underlying +I/O code can be written in C or python or a mixture thereof.

+

Typically, each format resides in its own module, named by the format specifier +(and using upper case by convention).

+

Reader and Writer classes are derived from base classes in +MDAnalysis.coordinates.base.

+
+

6.1.5.1. Registry

+

In various places, MDAnalysis tries to automatically select appropriate formats +(e.g. by looking at file extensions). In order to allow it to choose the +correct format, all I/O classes must subclass either +MDAnalysis.coordinates.base.ReaderBase, +MDAnalysis.coordinates.base.SingleFrameReaderBase, +or MDAnalysis.coordinates.base.WriterBase and set the +format attribute with a string +defining the expected suffix. To assign multiple suffixes to an I/O class, a +list of suffixes can be given.

+

In addition to this, a Reader may define a _format_hint staticmethod, which +returns a boolean of if it can process a given object. E.g. the +MDAnalysis.coordinates.memory.MemoryReader identifies itself as +capable of reading numpy arrays. This functionality is used in +MDAnalysis.core._get_readers.get_reader_for() when figuring out how to +read an object (which was usually supplied to mda.Universe).

+

To define that a Writer can write multiple trajectory frames, set the +multiframe attribute to True. The default is False. +To define that a Writer does not support single frame writing the +singleframe attribute can be set to False. This is True +by default, ie we assume all Writers can also do a single frame.

+
+
+

6.1.5.2. Timestep class

+

A Timestep instance holds data for the current frame. It is updated whenever a +new frame of the trajectory is read.

+

Timestep classes are derived from +MDAnalysis.coordinates.timestep.Timestep, which is the primary +implementation example (and used directly for the DCDReader).

+

The discussion on this format is detailed in Issue 250

+
+

6.1.5.2.1. Methods

+
+
+
__init__(n_atoms, positions=True, velocities=False, forces=False)

Define the number of atoms this Timestep will hold and whether or not +it will have velocity and force information

+
+
__eq__

Compares a Timestep with another

+
+
__getitem__(atoms)

position(s) of atoms; can be a slice or numpy array and then returns +coordinate array

+
+
__len__()

number of coordinates (atoms) in the frame

+
+
__iter__()

iterator over all coordinates

+
+
copy()

deep copy of the instance

+
+
_init_unitcell

hook that returns empty data structure for the unitcell representation +of this particular file format; called from within __init__() to +initialize Timestep._unitcell.

+
+
+
+
+
+

6.1.5.2.2. Attributes

+
+
+
n_atoms

number of atoms in the frame

+
+
frame

current frame number (0-based)

+
+
_frame

The native frame number of the trajectory. This can differ from frame +as that will always count sequentially from 0 on iteration, whilst +_frame is taken directly from the trajectory.

+
+
time

The current system time in ps. This value is calculated either from a time +set as the Timestep attribute, or from frame * dt. Either method allows +allows an offset to be applied to the time.

+
+
dt

The change in system time between different frames. This can be set as an +attribute, but defaults to 1.0 ps.

+
+
data

A dictionary containing all miscellaneous information for the +current Timestep.

+
+
positions

A numpy array of all positions in this Timestep, otherwise raises a +NoDataError

+
+
velocities

If present, returns a numpy array of velocities, otherwise raises a +NoDataError

+
+
forces

If present, returns a numpy array of forces, otherwise raises a +NoDataError

+
+
has_positions

Boolean of whether position data is available

+
+
has_velocities

Boolean of whether velocity data is available

+
+
has_forces

Boolean of whether force data is available

+
+
dimensions

system box dimensions (x, y, z, alpha, beta, gamma) +Also comes with a setter that takes a MDAnalysis box so that one can do

+
Timestep.dimensions = [A, B, C, alpha, beta, gamma]
+
+
+

which then converts automatically to the underlying representation and stores it +in Timestep._unitcell.

+
+
volume

system box volume (derived as the determinant of the box vectors of dimensions)

+
+
aux

namespace for the representative values of any added auxiliary data.

+
+
+
+
+
+

6.1.5.2.3. Private attributes

+

These attributes are set directly by the underlying trajectory +readers. Normally the user should not have to directly access those, +but instead should use the attribute above.

+
+
+
_pos

raw coordinates, a numpy.float32 array; X = _pos[:,0], Y = +_pos[:,1], Z = _pos[:,2]

+
+
_velocities

raw velocities, a numpy.float32 array containing velocities +(similar to _pos)

+
+
_forces

forces, similar to velocities above.

+
+
_unitcell

native unit cell description; the format depends on the +underlying trajectory format. A user should use the +dimensions +attribute to access the data in a canonical format instead of +accessing Timestep._unitcell directly.

+

The method Timestep._init_unitcell() is a hook to initialize +this attribute.

+
+
+
+
+
+
+

6.1.5.3. Trajectory Reader class

+

Trajectory readers are derived from +MDAnalysis.coordinates.base.ReaderBase (or from +MDAnalysis.coordinates.base.ProtoReader if they do not required +Reader.__del__() method). A special case are SingleFrame readers for +formats that contain only a single coordinate frame. These readers are derived +from a subclass of ProtoReader named +MDAnalysis.coordinates.base.SingleFrameReaderBase.

+

Typically, many methods and attributes are overriden but the ones listed below +must be implemented.

+
+

See also

+

See the section on Readers in MDAnalysis.coordinates.base +for implementation details.

+
+
+

6.1.5.3.1. Methods

+

The MDAnalysis.coordinates.DCD.DCDReader class is the primary +implementation example.

+

Mandatory methods

+

The following methods must be implemented in a Reader class.

+
+
+
__init__(filename, **kwargs)

open filename; other kwargs are processed as needed and the +Reader is free to ignore them. Typically, when MDAnalysis creates +a Reader from MDAnalysis.Universe it supplies as much +information as possible in kwargs; at the moment the following +data are supplied:

+
+
    +
  • +
    n_atoms: the number of atoms from the supplied topology. This is

    not required for all readers and can be ignored if not +required.

    +
    +
    +
  • +
+
+
+
__iter__()

allow iteration from beginning to end:

+
for ts in trajectory:
+    print(ts.frame)
+
+
+

Readers will automatically rewind the trajectory to before the initial +frame (often by re-opening the file) before starting the iteration. Multi +frame readers (see Readers) will also rewind the trajectory +after the iteration so that the current trajectory frame is set to the +first trajectory frame. Single frame readers do not explicitly rewind +after iteration but simply remain on the one frame in the trajectory.

+
+
close()

close the file and cease I/O

+
+
next()

advance to next time step or raise IOError when moving +past the last frame

+
+
rewind()

reposition to first frame

+
+
__entry__()

entry method of a Context Manager (returns self)

+
+
__exit__()

exit method of a Context Manager, should call close().

+
+
+
+
+

Note

+

a __del__() method should also be present to ensure that the +trajectory is properly closed. However, certain types of Reader can ignore +this requirement. These include the SingleFrameReaderBase (file reading +is done within a context manager and needs no closing by hand) and the ChainReader +(it is a collection of Readers, each already with its own __del__ method).

+
+

Optional methods

+

Not all trajectory formats support the following methods, either because the +data are not available or the methods have not been implemented. Code should +deal with missing methods gracefully.

+
+
+
__len__()

number of frames in trajectory

+
+
__getitem__(arg)

advance to time step arg = frame and return Timestep; or if arg is a +slice, then return an iterable over that part of the trajectory.

+

The first functionality allows one to randomly access frames in the +trajectory:

+
universe.trajectory[314]
+
+
+

would load frame 314 into the current Timestep.

+

Using slices allows iteration over parts of a trajectory

+
for ts in universe.trajectory[1000:2000]:
+    process_frame(ts)   # do some analysis on ts
+
+
+

or skipping frames

+
for ts in universe.trajectory[1000::100]:
+    process_frame(ts)   # do some analysis on ts
+
+
+

The last example starts reading the trajectory at frame 1000 and +reads every 100th frame until the end.

+

A sequence of indices or a mask of booleans can also be provided to index +a trajectory.

+

The performance of the __getitem__() method depends on the underlying +trajectory reader and if it can implement random access to frames. All +readers in MDAnalysis should support random access.

+

For external custom readers this may not be easily (or reliably) +implementable and thus one is restricted to sequential iteration. +If the Reader is not able to provide random access to frames then it +should raise TypeError on indexing. It is possible to partially +implement __getitem__ (as done on +MDAnalysis.coordinates.base.ProtoReader.__getitem__ where slicing the +full trajectory is equivalent to +MDAnalysis.coordinates.base.ProtoReader.__iter__ (which is always +implemented) and other slices raise TypeError.

+

When indexed with a slice, a sequence of indices, or a mask of booleans, +the return value is an instance of FrameIteratorSliced or +FrameIteratorIndices. See FrameIterators for more details.

+
+
parse_n_atoms(filename, **kwargs)

Provide the number of atoms in the trajectory file, allowing the Reader +to be used to provide an extremely minimal Topology. +Must be implemented as either a staticmethod or a classmethod.

+
+
Writer(filename, **kwargs)

returns a WriterBase which is set up with +the same parameters as the trajectory that is being read (e.g. time step, +length etc), which facilitates copying and simple on-the-fly manipulation.

+

If no Writer is defined then a NotImplementedError is raised.

+

The kwargs can be used to customize the Writer as they are typically +passed through to the init method of the Writer, with sensible defaults +filled in; the actual keyword arguments depend on the Writer.

+
+
timeseries(atomGroup, [start[,stop[,skip[,format]]]])

returns a subset of coordinate data

+
+
+
+
+
+

6.1.5.3.2. Attributes

+
+
+
filename

filename of the trajectory

+
+
n_atoms

number of atoms (coordinate sets) in a frame (constant)

+
+
n_frames

total number of frames (if known) – None if not known

+
+
ts

the Timestep object; typically customized for each +trajectory format and derived from timestep.Timestep.

+
+
units

dictionary with keys time, length, speed, force and the +appropriate unit (e.g. ‘AKMA’ and ‘Angstrom’ for Charmm dcds, ‘ps’ and +‘nm’ for Gromacs trajectories, None and ‘Angstrom’ for PDB). +Any field not used should be set to None.

+
+
format

string that identifies the file format, e.g. “DCD”, “PDB”, “CRD”, “XTC”, +“TRR”; this is typically the file extension in upper case.

+
+
dt

time between frames in ps; a managed attribute (read only) that computes +on the fly skip_timestep * delta and converts to the MDAnalysis base +unit for time (pico seconds by default)

+
+
totaltime

total length of the trajectory = n_frames * dt

+
+
time

time of the current time step, in MDAnalysis time units (ps)

+
+
frame

frame number of the current time step (0-based)

+
+
aux_list

list of the names of any added auxiliary data.

+
+
_auxs

dictionary of the AuxReader +instances for any added auxiliary data.

+
+
+
+

Optional attributes

+
+
+
delta

integrator time step (in native units); hence the “length” +of a trajctory frame is skip_timestep*delta time units

+
+
compressed

string that identifies the compression (e.g. “gz” or “bz2”) or None.

+
+
fixed

bool, saying if there are fixed atoms (e.g. dcds)

+
+
periodic

boolean saying if contains box information for periodic boundary conditions +unit cell information is stored in attribute dimensions

+
+
skip_timestep

number of integrator steps between frames + 1 (i.e. +the stride at which the MD simulation was sampled)

+
+
+
+
+
+
+

6.1.5.4. Trajectory Writer class

+

Trajectory writers are derived from +MDAnalysis.coordinates.base.WriterBase. They are used to write +multiple frames to a trajectory file. Every time the +write() method is called, +another frame is appended to the trajectory.

+

Typically, many methods and attributes are overriden.

+

Signature:

+
with TrajectoryWriter(filename, n_atoms, **kwargs) as w:
+    w.write(Universe)    # write a whole universe
+
+
+

or:

+
w.write(AtomGroup)  # write a selection of Atoms from Universe
+
+
+
+

See also

+

See the section on Writers in MDAnalysis.coordinates.base +for implementation details.

+
+
+

6.1.5.4.1. Methods

+
+

__init__(filename, n_atoms, **kwargs)

+
+

Set-up the reader. This may open file filename and may +write content to it such as headers immediately but the writer is +allowed to delay I/O up to the first call of write().

+

Any **kwargs that are not processed by the writer must be +silently ignored.

+
+
+
write(obj)

write Timestep data in obj

+
+
convert_dimensions_to_unitcell(timestep)

take the dimensions from the timestep and convert to the native +unitcell representation of the format

+
+
close()

close file and finish I/O

+
+
__del__()

ensures that close() is called

+
+
+
+
+
+

6.1.5.4.2. Attributes

+
+
+
filename

name of the trajectory file

+
+
units

dictionary with keys time, length, speed, force and the +appropriate unit (e.g. ‘AKMA’ and ‘Angstrom’ for Charmm dcds, ‘ps’ and +‘nm’ for Gromacs trajectories, None and ‘Angstrom’ for PDB). +Any field not used should be set to None.

+
+
format

string that identifies the file format, e.g. “DCD”, “PDB”, “CRD”, “XTC”, +“TRR”

+
+
+
+

Optional

+
+
+
ts

Timestep instance

+
+
+
+
+
+
+

6.1.5.5. Single Frame Writer class

+

A single frame writer is a special case of a trajectory writer in that it +writes only a single coordinate frame to a file, for instance, a pdb or gro +file. Unlike trajectory formats, which only contains coordinates, single +frame formats contain much more information (e.g. atom and residue names and +numbers) and hence it is possible to write selections of atoms in a meaningful +way.

+

Signature:

+
W = FrameWriter(filename, **kwargs)
+W.write(AtomGroup)
+W.write(Universe)
+
+
+

The blanket kwargs is required so that one can pass the same kind of +arguments (filename and n_atoms) as for the Trajectory writers. In +this way, the simple writer() +factory function can be used for all writers.

+
+

6.1.5.5.1. Methods

+
+
+
__init__(filename, **kwargs)

opens filename for writing; kwargs are typically ignored

+
+
write(obj)

writes the object obj, containing a +AtomGroup group of atoms (typically +obtained from a selection) or Universe +to the file and closes the file

+
+
+
+
+

Note

+

Trajectory and Frame writers can be used in almost exactly the same +manner with the one difference that Frame writers cannot deal with +raw Timestep objects.

+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/memory.html b/2.7.0-dev0/documentation_pages/coordinates/memory.html new file mode 100644 index 0000000000..37b0b951f7 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/memory.html @@ -0,0 +1,1074 @@ + + + + + + + 6.26. Reading trajectories from memory — MDAnalysis.coordinates.memory — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.26. Reading trajectories from memory — MDAnalysis.coordinates.memory

+
+
Author
+

Wouter Boomsma

+
+
Year
+

2016

+
+
Copyright
+

GNU Public License v2

+
+
Maintainer
+

Wouter Boomsma <wb@di.ku.dk>, wouterboomsma on github

+
+
+
+

New in version 0.16.0.

+
+

The module contains a trajectory reader that operates on an array in +memory, rather than reading from file. This makes it possible to +operate on raw coordinates using existing MDAnalysis tools. In +addition, it allows the user to make changes to the coordinates in a +trajectory (e.g. through +MDAnalysis.core.groups.AtomGroup.positions) without having +to write the entire state to file.

+
+

6.26.1. How to use the MemoryReader

+

The MemoryReader can be used to either directly generate a +trajectory as a numpy array or by transferring an existing trajectory +to memory.

+
+

6.26.1.1. In-memory representation of arbitrary trajectories

+

If sufficient memory is available to hold a whole trajectory in memory +then analysis can be sped up substantially by transferring the +trajectory to memory.

+

The most straightforward use of the MemoryReader is to simply +use the in_memory=True flag for the +Universe class, which +automatically transfers a trajectory to memory:

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import TPR, XTC
+
+universe = mda.Universe(TPR, XTC, in_memory=True)
+
+
+

Of course, sufficient memory has to be available to hold the whole +trajectory.

+
+
+

6.26.1.2. Switching a trajectory to an in-memory representation

+

The decision to transfer the trajectory to memory can be made at any +time with the +transfer_to_memory() method +of a Universe:

+
universe = mda.Universe(TPR, XTC)
+universe.transfer_to_memory()
+
+
+

This operation may take a while (with verbose=True a progress bar is +displayed) but then subsequent operations on the trajectory directly +operate on the in-memory array and will be very fast.

+
+
+

6.26.1.3. Constructing a Reader from a numpy array

+

The MemoryReader provides great flexibility because it +becomes possible to create a Universe directly +from a numpy array.

+

A simple example consists of a new universe created from the array +extracted from a DCD +timeseries():

+
import MDAnalysis as mda
+from MDAnalysisTests.datafiles import DCD, PSF
+from MDAnalysis.coordinates.memory import MemoryReader
+
+universe = mda.Universe(PSF, DCD)
+
+coordinates = universe.trajectory.timeseries(universe.atoms)
+universe2 = mda.Universe(PSF, coordinates, format=MemoryReader, order='afc')
+
+
+

Creating an in-memory trajectory with +AnalysisFromFunction()

+

The timeseries() is +currently only implemented for the +DCDReader. However, the +MDAnalysis.analysis.base.AnalysisFromFunction() can provide the +same functionality for any supported trajectory format:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PDB, XTC
+
+from MDAnalysis.coordinates.memory import MemoryReader
+from MDAnalysis.analysis.base import AnalysisFromFunction
+
+u = mda.Universe(PDB, XTC)
+
+coordinates = AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                                   u.atoms).run().results['timeseries']
+u2 = mda.Universe(PDB, coordinates, format=MemoryReader)
+
+
+
+
+

6.26.1.4. Creating an in-memory trajectory of a sub-system

+

Creating a trajectory for just a selection of an existing trajectory +requires the transfer of the appropriate coordinates as well as +creation of a topology of the sub-system. For the latter one can use +the Merge() function, for the former +the load_new() method of a +Universe together with the +MemoryReader. In the following, an in-memory trajectory of +only the protein is created:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PDB, XTC
+
+from MDAnalysis.coordinates.memory import MemoryReader
+from MDAnalysis.analysis.base import AnalysisFromFunction
+
+u = mda.Universe(PDB, XTC)
+protein = u.select_atoms("protein")
+
+coordinates = AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                                   protein).run().results['timeseries']
+u2 = mda.Merge(protein)            # create the protein-only Universe
+u2.load_new(coordinates, format=MemoryReader)
+
+
+

The protein coordinates are extracted into coordinates and then +the in-memory trajectory is loaded from these coordinates. In +principle, this could have all be done in one line:

+
u2 = mda.Merge(protein).load_new(
+         AnalysisFromFunction(lambda ag: ag.positions.copy(),
+                              protein).run().results['timeseries'],
+         format=MemoryReader)
+
+
+

The new Universe u2 can be used +to, for instance, write out a new trajectory or perform fast analysis +on the sub-system.

+
+
+
+

6.26.2. Classes

+
+
+class MDAnalysis.coordinates.memory.MemoryReader(coordinate_array, order='fac', dimensions=None, dt=1, filename=None, velocities=None, forces=None, **kwargs)[source]
+

MemoryReader works with trajectories represented as numpy arrays.

+

A trajectory reader interface to a numpy array of the coordinates. +For compatibility with the timeseries interface, support is provided for +specifying the order of columns through the order keyword.

+
+

New in version 0.16.0.

+
+
+

Changed in version 1.0.0: Support for the deprecated format keyword for +MemoryReader.timeseries() has now been removed.

+
+
+
Parameters
+
    +
  • coordinate_array (numpy.ndarray) – The underlying array of coordinates. The MemoryReader now +necessarily requires a np.ndarray

  • +
  • order ({"afc", "acf", "caf", "fac", "fca", "cfa"} (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates).

  • +
  • dimensions ([A, B, C, alpha, beta, gamma] (optional)) – unitcell dimensions (A, B, C, alpha, beta, gamma) +lengths A, B, C are in the MDAnalysis length unit (Å), and +angles are in degrees. An array of dimensions can be given, +which must then be shape (nframes, 6)

  • +
  • dt (float (optional)) – The time difference between frames (ps). If time +is set, then dt will be ignored.

  • +
  • filename (string (optional)) – The name of the file from which this instance is created. Set to None +when created from an array

  • +
  • velocities (numpy.ndarray (optional)) – Atom velocities. Must match shape of coordinate_array. Will share order +with coordinates.

  • +
  • forces (numpy.ndarray (optional)) – Atom forces. Must match shape of coordinate_array Will share order +with coordinates

  • +
+
+
Raises
+

TypeError if the coordinate array passed is not a np.ndarray

+
+
+
+

Note

+

At the moment, only a fixed dimension is supported, i.e., the same +unit cell for all frames in coordinate_array. See issue #1041.

+
+
+

Changed in version 0.19.0: The input to the MemoryReader now must be a np.ndarray +Added optional velocities and forces

+
+
+

Changed in version 2.2.0: Input kwargs are now stored under the _kwargs attribute, +and are passed on class creation in copy().

+
+
+
+OtherWriter(filename, **kwargs)
+

Returns a writer appropriate for filename.

+

Sets the default keywords start, step and dt (if +available). n_atoms is always set from Reader.n_atoms.

+
+

See also

+

Reader.Writer()

+
+
+ +
+
+Writer(filename, **kwargs)
+

A trajectory writer with the same properties as this trajectory.

+
+ +
+
+add_auxiliary(aux_spec: Optional[Union[str, Dict[str, str]]] = None, auxdata: Optional[Union[str, AuxReader]] = None, format: Optional[str] = None, **kwargs) None
+

Add auxiliary data to be read alongside trajectory.

+

Auxiliary data may be any data timeseries from the trajectory +additional to that read in by the trajectory reader. auxdata can +be an AuxReader instance, or the +data itself as e.g. a filename; in the latter case an appropriate +AuxReader is guessed from the +data/file format. An appropriate format may also be directly provided +as a key word argument.

+

On adding, the AuxReader is initially matched to the current timestep +of the trajectory, and will be updated when the trajectory timestep +changes (through a call to next() or jumping timesteps with +trajectory[i]).

+

The representative value(s) of the auxiliary data for each timestep (as +calculated by the AuxReader) are +stored in the current timestep in the ts.aux namespace under +aux_spec; e.g. to add additional pull force data stored in +pull-force.xvg:

+
u = MDAnalysis.Universe(PDB, XTC)
+u.trajectory.add_auxiliary('pull', 'pull-force.xvg')
+
+
+

The representative value for the current timestep may then be accessed +as u.trajectory.ts.aux.pull or u.trajectory.ts.aux['pull'].

+

The following applies to energy readers like the +EDRReader.

+

All data that is present in the (energy) file can be added by omitting +aux_spec like so:

+
u.trajectory.add_auxiliary(auxdata="ener.edr")
+
+
+

aux_spec is expected to be a dictionary that maps the desired +attribute name in the ts.aux namespace to the precise data to be +added as identified by a data_selector:

+
term_dict = {"temp": "Temperature", "epot": "Potential"}
+u.trajectory.add_auxiliary(term_dict, "ener.edr")
+
+
+

Adding this data can be useful, for example, to filter trajectory +frames based on non-coordinate data like the potential energy of each +time step. Trajectory slicing allows working on a subset of frames:

+
selected_frames = np.array([ts.frame for ts in u.trajectory
+                            if ts.aux.epot < some_threshold])
+subset = u.trajectory[selected_frames]
+
+
+
+

See also

+

remove_auxiliary()

+
+
+

Note

+

Auxiliary data is assumed to be time-ordered, with no duplicates. See +the Auxiliary API.

+
+
+ +
+
+add_transformations(*transformations)[source]
+

Add all transformations to be applied to the trajectory.

+

This function take as list of transformations as an argument. These +transformations are functions that will be called by the Reader and given +a Timestep object as argument, which will be transformed and returned +to the Reader. +The transformations can be part of the transformations +module, or created by the user, and are stored as a list transformations. +This list can only be modified once, and further calls of this function will +raise an exception.

+
u = MDAnalysis.Universe(topology, coordinates)
+workflow = [some_transform, another_transform, this_transform]
+u.trajectory.add_transformations(*workflow)
+
+
+
+
Parameters
+

transform_list (list) – list of all the transformations that will be applied to the coordinates

+
+
+ +
+ +
+
+property aux_list
+

Lists the names of added auxiliary data.

+
+ +
+
+check_slice_indices(start, stop, step)
+

Check frame indices are valid and clip to fit trajectory.

+

The usage follows standard Python conventions for range() but see +the warning below.

+
+
Parameters
+
    +
  • start (int or None) – Starting frame index (inclusive). None corresponds to the default +of 0, i.e., the initial frame.

  • +
  • stop (int or None) – Last frame index (exclusive). None corresponds to the default +of n_frames, i.e., it includes the last frame of the trajectory.

  • +
  • step (int or None) – step size of the slice, None corresponds to the default of 1, i.e, +include every frame in the range start, stop.

  • +
+
+
Returns
+

start, stop, step – Integers representing the slice

+
+
Return type
+

tuple (int, int, int)

+
+
+
+

Warning

+

The returned values start, stop and step give the expected result +when passed in range() but gives unexpected behavior when passed +in a slice when stop=None and step=-1

+

This can be a problem for downstream processing of the output from this +method. For example, slicing of trajectories is implemented by passing +the values returned by check_slice_indices() to range()

+
range(start, stop, step)
+
+
+

and using them as the indices to randomly seek to. On the other hand, +in MDAnalysis.analysis.base.AnalysisBase the values returned +by check_slice_indices() are used to splice the trajectory by +creating a slice instance

+
slice(start, stop, step)
+
+
+

This creates a discrepancy because these two lines are not equivalent:

+
range(10, -1, -1)             # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+range(10)[slice(10, -1, -1)]  # []
+
+
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+copy()[source]
+

Return a copy of this Memory Reader

+
+ +
+
+property dt: float
+

Time between two trajectory frames in picoseconds.

+
+ +
+
+property frame: int
+

Frame number of the current time step.

+

This is a simple short cut to Timestep.frame.

+
+ +
+
+get_array()[source]
+

Return underlying array.

+
+ +
+
+get_aux_attribute(auxname, attrname)
+

Get the value of attrname from the auxiliary auxname

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to get value for

  • +
  • attrname (str) – Name of gettable attribute in the auxiliary reader

  • +
+
+
+
+

See also

+

set_aux_attribute()

+
+
+ +
+
+get_aux_descriptions(auxnames=None)
+

Get descriptions to allow reloading the specified auxiliaries.

+

If no auxnames are provided, defaults to the full list of added +auxiliaries.

+

Passing the resultant description to add_auxiliary() will allow +recreation of the auxiliary. e.g., to duplicate all auxiliaries into a +second trajectory:

+
descriptions = trajectory_1.get_aux_descriptions()
+for aux in descriptions:
+    trajectory_2.add_auxiliary(**aux)
+
+
+
+
Returns
+

List of dictionaries of the args/kwargs describing each auxiliary.

+
+
Return type
+

list

+
+
+ +
+ +
+
+iter_as_aux(auxname)
+

Iterate through timesteps for which there is at least one assigned +step from the auxiliary auxname within the cutoff specified in auxname.

+ +
+ +
+
+iter_auxiliary(auxname, start=None, stop=None, step=None, selected=None)
+

Iterate through the auxiliary auxname independently of the trajectory.

+

Will iterate over the specified steps of the auxiliary (defaults to all +steps). Allows to access all values in an auxiliary, including those out +of the time range of the trajectory, without having to also iterate +through the trajectory.

+

After interation, the auxiliary will be repositioned at the current step.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to iterate over.

  • +
  • (start (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • stop (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • step) (optional) – Options for iterating over a slice of the auxiliary.

  • +
  • selected (lst | ndarray, optional) – List of steps to iterate over.

  • +
+
+
Yields
+

AuxStep object

+
+
+
+

See also

+

iter_as_aux()

+
+
+ +
+
+next() Timestep
+

Forward one step to next frame.

+
+ +
+
+next_as_aux(auxname)
+

Move to the next timestep for which there is at least one step from +the auxiliary auxname within the cutoff specified in auxname.

+

This allows progression through the trajectory without encountering +NaN representative values (unless these are specifically part of the +auxiliary data).

+

If the auxiliary cutoff is not set, where auxiliary steps are less frequent +(auxiliary.dt > trajectory.dt), this allows progression at the +auxiliary pace (rounded to nearest timestep); while if the auxiliary +steps are more frequent, this will work the same as calling +next().

+

See the Auxiliary API.

+
+

See also

+

iter_as_aux()

+
+
+ +
+
+static parse_n_atoms(filename, order='fac', **kwargs)[source]
+

Deduce number of atoms in a given array of coordinates

+
+
Parameters
+
    +
  • filename (numpy.ndarray) – data which will be used later in MemoryReader

  • +
  • order ({"afc", "acf", "caf", "fac", "fca", "cfa"} (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates).

  • +
+
+
Returns
+

n_atoms – number of atoms in system

+
+
Return type
+

int

+
+
+
+ +
+
+remove_auxiliary(auxname)
+

Clear data and close the AuxReader +for the auxiliary auxname.

+
+

See also

+

add_auxiliary()

+
+
+ +
+
+rename_aux(auxname, new)
+

Change the name of the auxiliary auxname to new.

+

Provided there is not already an auxiliary named new, the auxiliary +name will be changed in ts.aux namespace, the trajectory’s +list of added auxiliaries, and in the auxiliary reader itself.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to rename

  • +
  • new (str) – New name to try set

  • +
+
+
Raises
+

ValueError – If the name new is already in use by an existing auxiliary.

+
+
+
+ +
+
+rewind() Timestep
+

Position at beginning of trajectory

+
+ +
+
+set_array(coordinate_array, order='fac')[source]
+

Set underlying array in desired column order.

+
+
Parameters
+
    +
  • coordinate_array (ndarray object) – The underlying array of coordinates

  • +
  • order ({"afc", "acf", "caf", "fac", "fca", "cfa"} (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates).

  • +
+
+
+
+ +
+
+set_aux_attribute(auxname, attrname, new)
+

Set the value of attrname in the auxiliary auxname.

+
+
Parameters
+
    +
  • auxname (str) – Name of the auxiliary to alter

  • +
  • attrname (str) – Name of settable attribute in the auxiliary reader

  • +
  • new – New value to try set attrname to

  • +
+
+
+ +
+ +
+
+property time
+

Time of the current frame in MDAnalysis time units (typically ps).

+

This is either read straight from the Timestep, or calculated as +time = Timestep.frame * Timestep.dt

+
+ +
+
+timeseries(asel=None, start=0, stop=-1, step=1, order='afc')[source]
+

Return a subset of coordinate data for an AtomGroup in desired +column order. If no selection is given, it will return a view of the +underlying array, while a copy is returned otherwise.

+
+
Parameters
+
    +
  • asel (AtomGroup (optional)) – Atom selection. Defaults to None, in which case the full set of +coordinate data is returned. Note that in this case, a view +of the underlying numpy array is returned, while a copy of the +data is returned whenever asel is different from None.

  • +
  • start (int (optional)) – the start trajectory frame

  • +
  • stop (int (optional)) –

    the end trajectory frame

    +
    +

    Deprecated since version 2.4.0: Note that stop is currently inclusive but will be +changed in favour of being exclusive in version 3.0.

    +
    +

  • +
  • step (int (optional)) – the number of trajectory frames to skip

  • +
  • order ({"afc", "acf", "caf", "fac", "fca", "cfa"} (optional)) – the order/shape of the return data array, corresponding +to (a)tom, (f)rame, (c)oordinates all six combinations +of ‘a’, ‘f’, ‘c’ are allowed ie “fac” - return array +where the shape is (frame, number of atoms, +coordinates).

  • +
+
+
+
+

Changed in version 1.0.0: Deprecated format keyword has been removed. Use order instead.

+
+
+

Changed in version 2.4.0: ValueError now raised instead of NoDataError for empty input +AtomGroup

+
+
+ +
+
+property totaltime: float
+

Total length of the trajectory

+

The time is calculated as (n_frames - 1) * dt, i.e., we assume that +the first frame no time as elapsed. Thus, a trajectory with two frames will +be considered to have a length of a single time step dt and a +“trajectory” with a single frame will be reported as length 0.

+
+ +
+
+property transformations
+

Returns the list of transformations

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/null.html b/2.7.0-dev0/documentation_pages/coordinates/null.html new file mode 100644 index 0000000000..65cf5be070 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/null.html @@ -0,0 +1,221 @@ + + + + + + + 6.28. Null output — MDAnalysis.coordinates.null — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.28. Null output — MDAnalysis.coordinates.null

+

The NullWriter provides a Writer instance that behaves like +any other writer but effectively ignores its input and does not write +any output files. This is similar to writing to /dev/null.

+

This class exists to allow developers writing generic code and tests.

+
+

6.28.1. Classes

+
+
+class MDAnalysis.coordinates.null.NullWriter(filename, **kwargs)[source]
+

A trajectory Writer that does not do anything.

+

The NullWriter is the equivalent to /dev/null: it behaves like +a Writer but ignores all input. It can be used in order to +suppress output.

+
+
+units = {'length': 'Angstrom', 'time': 'ps'}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/pickle_readers.html b/2.7.0-dev0/documentation_pages/coordinates/pickle_readers.html new file mode 100644 index 0000000000..74b3ee4d96 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/pickle_readers.html @@ -0,0 +1,296 @@ + + + + + + + 6.32. Serialization of Coordinate Readers — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.32. Serialization of Coordinate Readers

+

To achieve a working implementation of parallelism, this document illustrates +the basic idea of how different coordinate readers are being serialized in MDAnalysis, +and what developers should do to serialize a new reader.

+

To make sure every Trajectory reader can be successfully +serialized, we implement picklable I/O classes (see Currently implemented picklable IO Formats). +When the file is pickled, filename and other necessary attributes of the open +file handle are saved. On unpickling, the file is opened by filename. +This means that for a successful unpickle, the original file still has to +be accessible with its filename. To retain the current frame of the trajectory, +_read_frame(previous frame)() will be called during unpickling.

+
+

6.32.1. How to serialize a new reader

+
+

6.32.1.1. File Access

+

If the new reader uses util.anyopen() +(e.g. MDAnalysis.coordinates.PDB.PDBReader), +the reading handler can be pickled without modification. +If the new reader uses I/O classes from other package +(e.g. MDAnalysis.coordinates.GSD.GSDReader), +and cannot be pickled natively, create a new picklable class inherited from +the file class in that package +(e.g. MDAnalysis.coordinates.GSD.GSDPicklable), +adding __getstate__(), +__setstate__() functions (or __reduce__() if needed. Consult the +pickle documentation of python) +to allow file handler serialization.

+
+
+

6.32.1.2. To seek or not to seek

+

Some I/O classes support seek() and tell() functions to allow the file +to be pickled with an offset. It is normally not needed for MDAnalysis with +random access. But if error occurs during testing, find a way to make the offset work. +Maybe this I/O class supports frame indexing? Maybe the file handler inside this I/O +class supports offset?

+

For example, in MDAnalysis.coordinates.TRZ.TRZReader, +_read_frame() is implemented by _seek() ing the file into +its previous frame and _read_next_timestep(), so the offset of the file is crucial +for such machinery to work.

+
+
+

6.32.1.3. Miscellaneous

+

If pickle still fails due to some unpicklable attributes, try to find a way +to pickle those, or write custom __getstate__() and __setstate__() +methods for the reader.

+

If the new reader is written in Cython, read lib.formats.libmdaxdr and +lib.formats.libdcd files as references.

+
+
+
+

6.32.2. Tests

+
+

6.32.2.1. _SingleFrameReader Test

+

If the new reader is a single-frame reader, the basic test should normally +inherited from _SingleFrameReader, where the pickliablity is tested.

+
+
+

6.32.2.2. BaseReaderTest and MultiframeReaderTest

+

If the test for the new reader uses BaseReaderTest or +MultiframeReaderTest, whether the current timestep information is +saved (the former), whether its relative position is maintained, +i.e. next() reads the right next timestep, and whether its last timestep +can be pickled, are already tested.

+
+
+

6.32.2.3. File handler Test

+

If the new reader accesses the file with util.anyopen(), add necessary +tests inside parallelism/test_multiprocessing.py for the reader.

+

If the new reader accessed the file with a new picklable I/O class, +add necessary tests inside utils/test_pickleio.py for the I/O class, +parallelism/test_multiprocessing.py for the reader.

+
+
+
+

6.32.3. Currently implemented picklable IO Formats

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates/timestep.html b/2.7.0-dev0/documentation_pages/coordinates/timestep.html new file mode 100644 index 0000000000..a516d02143 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates/timestep.html @@ -0,0 +1,614 @@ + + + + + + + 6.29. Timestep Class — MDAnalysis.coordinates.timestep — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6.29. Timestep Class — MDAnalysis.coordinates.timestep

+

Derive other Timestep, classes from the classes in this module. +The derived classes must follow the Trajectory API.

+
+

6.29.1. Timestep

+

A Timestep holds information for the current time frame in +the trajectory. It is one of the central data structures in +MDAnalysis.

+
+
+class MDAnalysis.coordinates.timestep.Timestep
+
+
+__init__()
+

Create a Timestep, representing a frame of a trajectory

+
+
Parameters
+
    +
  • n_atoms (uint64) – The total number of atoms this Timestep describes

  • +
  • positions (bool, optional) – Whether this Timestep has position information [True]

  • +
  • velocities (bool (optional)) – Whether this Timestep has velocity information [False]

  • +
  • forces (bool (optional)) – Whether this Timestep has force information [False]

  • +
  • reader (Reader (optional)) – A weak reference to the owning Reader. Used for +when attributes require trajectory manipulation (e.g. dt)

  • +
  • dt (float (optional)) – The time difference between frames (ps). If time +is set, then dt will be ignored.

  • +
  • time_offset (float (optional)) – The starting time from which to calculate time (in ps)

  • +
+
+
+
+

Changed in version 0.11.0: Added keywords for positions, velocities and forces. +Can add and remove position/velocity/force information by using +the has_* attribute.

+
+
+

Changed in version 2.3.0: Added the dtype attribute hardcoded to float32.

+
+
+ +
+
+classmethod from_coordinates(cls, positions=None, velocities=None, forces=None, **kwargs)
+

Create an instance of this Timestep, from coordinate data

+

Can pass position, velocity and force data to form a Timestep.

+
+

New in version 0.11.0.

+
+
+ +
+
+classmethod from_timestep(cls, Timestep other, **kwargs)
+

Create a copy of another Timestep, in the format of this Timestep

+
+

New in version 0.11.0.

+
+
+ +
+
+n_atoms
+

A read only view of the number of atoms this Timestep has

+
+

Changed in version 0.11.0: Changed to read only property

+
+
+ +
+
+frame
+

frame number (0-based)

+
+

Changed in version 0.11.0: Frames now 0-based; was 1-based

+
+
+ +
+
+time
+

The time in ps of this timestep

+

This is calculated as:

+
time = ts.data['time_offset'] + ts.time
+
+
+

Or, if the trajectory doesn’t provide time information:

+
time = ts.data['time_offset'] + ts.frame * ts.dt
+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+dt
+

The time difference in ps between timesteps

+
+

Note

+

This defaults to 1.0 ps in the absence of time data

+
+
+

New in version 0.11.0.

+
+
+ +
+
+positions
+

A record of the positions of all atoms in this Timestep +Setting this attribute will add positions to the Timestep if they +weren’t originally present.

+
+
Returns
+

positions – position data of shape (n_atoms, 3) for all atoms

+
+
Return type
+

numpy.ndarray with dtype numpy.float32

+
+
Raises
+

MDAnalysis.exceptions.NoDataError – if the Timestep has no position data

+
+
+
+

Changed in version 0.11.0: Now can raise NoDataError when no position data present

+
+
+ +
+
+velocities
+

A record of the velocities of all atoms in this Timestep +Setting this attribute will add velocities to the Timestep if they +weren’t originally present.

+
+
Returns
+

velocities – velocity data of shape (n_atoms, 3) for all atoms

+
+
Return type
+

numpy.ndarray with dtype numpy.float32

+
+
Raises
+

MDAnalysis.exceptions.NoDataError – if the Timestep has no velocity data

+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+forces
+

A record of the forces of all atoms in this Timestep +Setting this attribute will add forces to the Timestep if they +weren’t originally present.

+
+
Returns
+

forces – force data of shape (n_atoms, 3) for all atoms

+
+
Return type
+

numpy.ndarray with dtype numpy.float32

+
+
Raises
+
+
+
+
+ +
+
+has_positions
+

A boolean of whether this Timestep has position data +This can be changed to True or False to allocate space for +or remove the data.

+
+

New in version 0.11.0.

+
+
+ +
+
+has_velocities
+

A boolean of whether this Timestep has velocity data +This can be changed to True or False to allocate space for +or remove the data.

+
+

New in version 0.11.0.

+
+
+ +
+
+has_forces
+

A boolean of whether this Timestep has force data +This can be changed to True or False to allocate space for +or remove the data.

+
+

New in version 0.11.0.

+
+
+ +
+
+_pos
+

numpy.ndarray of dtype float32 of shape +(n_atoms, 3) and internal C order, holding the raw +cartesian coordinates (in MDAnalysis units, i.e. Å).

+
+

Note

+

Normally one does not directly access _pos but uses +the coordinates() +method of an AtomGroup but +sometimes it can be faster to directly use the raw +coordinates. Any changes to this array are immediately +reflected in atom positions. If the frame is written to a new +trajectory then the coordinates are changed. If a new +trajectory frame is loaded, then all contents of +_pos are overwritten.

+
+
+ +
+
+_velocities
+

numpy.ndarray of dtype float32. of shape +(n_atoms, 3), holding the raw velocities (in MDAnalysis +units, i.e. typically Å/ps).

+
+

Note

+

Normally velocities are accessed through the +velocities or the +velocities() +method of an AtomGroup

+

_velocities only exists if the has_velocities +flag is True

+
+
+

New in version 0.7.5.

+
+
+ +
+
+_forces
+

numpy.ndarray of dtype float32. of shape +(n_atoms, 3), holding the forces

+

_forces only exists if has_forces +is True

+
+

New in version 0.11.0: Added as optional to Timestep

+
+
+ +
+
+dtype
+
+
The NumPy dtype of the timestep, all arrays in the timestep will

have this dtype. Currently hardcoded to float32.

+
+
+
+

New in version 2.3.0: Added dtype

+
+
+ +
+
+dimensions
+

View of unitcell dimensions (A, B, C, alpha, beta, gamma)

+

lengths a, b, c are in the MDAnalysis length unit (Å), and +angles are in degrees.

+
+ +
+
+triclinic_dimensions
+

The unitcell dimensions represented as triclinic vectors

+
+
Returns
+

A (3, 3) numpy.ndarray of unit cell vectors

+
+
Return type
+

numpy.ndarray

+
+
+

Examples

+

The unitcell for a given system can be queried as either three +vectors lengths followed by their respective angle, or as three +triclinic vectors.

+
>>> ts.dimensions
+array([ 13.,  14.,  15.,  90.,  90.,  90.], dtype=float32)
+>>> ts.triclinic_dimensions
+array([[ 13.,   0.,   0.],
+       [  0.,  14.,   0.],
+       [  0.,   0.,  15.]], dtype=float32)
+
+
+

Setting the attribute also works:

+
>>> ts.triclinic_dimensions = [[15, 0, 0], [5, 15, 0], [5, 5, 15]]
+>>> ts.dimensions
+array([ 15.        ,  15.81138802,  16.58312416,  67.58049774,
+        72.45159912,  71.56504822], dtype=float32)
+
+
+ +
+

New in version 0.11.0.

+
+
+ +
+
+volume
+

volume of the unitcell

+
+ +
+
+data
+

dict that holds arbitrary per Timestep data

+
+

New in version 0.11.0.

+
+
+ +
+
+__getitem__()
+

Get a selection of coordinates

+

ts[i]

+
+

return coordinates for the i’th atom (0-based)

+
+

ts[start:stop:skip]

+
+

return an array of coordinates, where start, stop and skip +correspond to atom indices, +MDAnalysis.core.groups.Atom.index (0-based)

+
+
+ +
+
+__eq__()
+

Compare with another Timestep

+
+

New in version 0.11.0.

+
+
+ +
+
+__iter__()
+

Iterate over coordinates

+

for x in ts

+
+

iterate of the coordinates, atom by atom

+
+
+ +
+
+copy(self)
+

Make an independent (“deep”) copy of the whole Timestep.

+
+ +
+
+copy_slice(self, sel)
+

Make a new Timestep containing a subset of the original Timestep.

+
+
Parameters
+

sel (array_like or slice) – The underlying position, velocity, and force arrays are sliced +using a list, slice, or any array-like.

+
+
Returns
+

A Timestep object of the same type containing all header +information and all atom information relevant to the selection.

+
+
Return type
+

Timestep

+
+
+
+

Note

+

The selection must be a 0 based slice or array of the atom indices +in this Timestep

+
+

Example

+

Using a Python slice object:

+
new_ts = ts.copy_slice(slice(start, stop, step))
+
+
+

Using a list of indices:

+
new_ts = ts.copy_slice([0, 2, 10, 20, 23])
+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.11.0: Reworked to follow new Timestep API. Now will strictly only +copy official attributes of the Timestep.

+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/coordinates_modules.html b/2.7.0-dev0/documentation_pages/coordinates_modules.html new file mode 100644 index 0000000000..2c9f6ad13b --- /dev/null +++ b/2.7.0-dev0/documentation_pages/coordinates_modules.html @@ -0,0 +1,251 @@ + + + + + + + 6. Coordinates modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

6. Coordinates modules

+

The coordinates module contains the classes to read and write +trajectories. Typically, MDAnalysis recognizes Table of supported coordinate formats by the file extension and hence most users probably do not need to +concern themselves with classes and functions described here. However, +if MDAnalysis fails to recognize a coordinate file then the user can +provide the format in the keyword argument format to +Universe to force the format.

+

Coordinate formats

+
+ +
+

Coordinate core modules

+

The remaining pages are primarily of interest to +developers. Programmers and anyone trying to implement new +functionality should first read the Trajectory API.

+ +

In particular, all trajectory readers have to be +serializable and they should pass all tests +available in the MDAnalysisTests.coordinates.base.MultiframeReaderTest +or MDAnalysisTests.coordinates.base.BaseReaderTest.

+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/accessors.html b/2.7.0-dev0/documentation_pages/core/accessors.html new file mode 100644 index 0000000000..d017946ca3 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/accessors.html @@ -0,0 +1,283 @@ + + + + + + + 7.7. AtomGroup accessors — MDAnalysis.core.accessors — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

7.7. AtomGroup accessors — MDAnalysis.core.accessors

+

This module provides classes for accessing and converting AtomGroup +objects. It is used for the convert_to() +method to make it usable in two different ways: ag.convert_to("PACKAGE") or +ag.convert_to.package()

+

Example

+
>>> class SpeechWrapper:
+...     def __init__(self, person):
+...         self.person = person
+...     def __call__(self, *args):
+...         print(self.person.name, "says", *args)
+...     def whoami(self):
+...         print("I am %s" % self.person.name)
+...
+>>> class Person:
+...     def __init__(self, name):
+...         self.name = name
+...     say = Accessor("say", SpeechWrapper)
+...
+>>> bob = Person("Bob")
+>>> bob.say("hello")
+Bob says hello
+>>> bob.say.whoami()
+I am Bob
+
+
+
+

7.7.1. Classes

+
+
+class MDAnalysis.core.accessors.Accessor(name, accessor)[source]
+

Used to pass data between two classes

+
+
Parameters
+
    +
  • name (str) – Name of the property in the parent class

  • +
  • accessor (class) – A class that needs access to its parent’s instance

  • +
+
+
+

Example

+

If you want the property to be named “convert_to” in the AtomGroup class, +use:

+
>>> class AtomGroup:
+>>>     # ...
+>>>     convert_to = Accessor("convert_to", ConverterWrapper)
+
+
+

And when calling ag.convert_to.rdkit(), the “rdkit” method of the +ConverterWrapper will be able to have access to “ag”

+
+

New in version 2.0.0.

+
+
+ +
+
+class MDAnalysis.core.accessors.ConverterWrapper(ag)[source]
+

Convert AtomGroup to a structure from another Python +package.

+

The converters are accessible to any AtomGroup through the convert_to +property. ag.convert_to will return this ConverterWrapper, which can be +called directly with the name of the destination package as a string +(similarly to the old API), or through custom methods named after the +package (in lowercase) that are automatically constructed thanks to +metaclass magic.

+

Example

+

The code below converts a Universe to a parmed.structure.Structure

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import GRO
+>>> u = mda.Universe(GRO)
+>>> parmed_structure = u.atoms.convert_to('PARMED')
+>>> parmed_structure
+<Structure 47681 atoms; 11302 residues; 0 bonds; PBC (triclinic); NOT parametrized>
+
+
+

You can also directly use u.atoms.convert_to.parmed()

+
+
Parameters
+
    +
  • package (str) – The name of the package to convert to, e.g. "PARMED"

  • +
  • *args – Positional arguments passed to the converter

  • +
  • **kwargs – Keyword arguments passed to the converter

  • +
+
+
Returns
+

An instance of the structure type from another package.

+
+
Return type
+

output

+
+
Raises
+

ValueError: – No converter was found for the required package

+
+
+
+

New in version 1.0.0.

+
+
+

Changed in version 2.0.0: Moved the convert_to method to its own class. The old API is still +available and is now case-insensitive to package names, it also accepts +positional and keyword arguments. Each converter function can also +be accessed as a method with the name of the package in lowercase, i.e. +convert_to.parmed()

+
+
+
Parameters
+

ag (AtomGroup) – The AtomGroup to convert

+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/groups.html b/2.7.0-dev0/documentation_pages/core/groups.html new file mode 100644 index 0000000000..f156036eeb --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/groups.html @@ -0,0 +1,8113 @@ + + + + + + + 11.2.2. Core objects: Containers — MDAnalysis.core.groups — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.2.2. Core objects: Containers — MDAnalysis.core.groups

+

The Universe instance contains all the +particles in the system (which MDAnalysis calls Atom). Groups of +atoms are handled as AtomGroup instances. The +AtomGroup is probably the most important object in MDAnalysis because +virtually everything can be accessed through it. AtomGroup instances +can be easily created (e.g., from an AtomGroup.select_atoms() selection or +simply by slicing).

+

For convenience, chemically meaningful groups of Atoms such as a +Residue or a Segment (typically a whole molecule or all of the +solvent) also exist as containers, as well as groups of these units +(ResidueGroup, SegmentGroup).

+
+

11.2.2.1. Classes

+
+

11.2.2.1.1. Collections

+
+
+class MDAnalysis.core.groups.AtomGroup(*args, **kwargs)[source]
+

An ordered array of atoms.

+

Can be initiated from an iterable of Atoms:

+
ag = AtomGroup([Atom1, Atom2, Atom3])
+
+
+

Or from providing a list of indices and the +Universe it should belong to:

+
ag = AtomGroup([72, 14, 25], u)
+
+
+

Alternatively, an AtomGroup is generated by indexing/slicing +another AtomGroup, such as the group of all Atoms in +the Universe at +MDAnalysis.core.universe.Universe.atoms.

+

An AtomGroup can be indexed and sliced like a list:

+
ag[0], ag[-1]
+
+
+

will return the first and the last Atom in the group whereas the +slice:

+
ag[0:6:2]
+
+
+

returns an AtomGroup of every second element, corresponding to +indices 0, 2, and 4.

+

It also supports “advanced slicing” when the argument is a +numpy.ndarray or a list:

+
aslice = [0, 3, -1, 10, 3]
+ag[aslice]
+
+
+

will return a new AtomGroup of Atoms with those +indices in the old AtomGroup.

+

Finally, AtomGroups can be created from a selection. +See select_atoms().

+
+

Note

+

AtomGroups originating from a selection are sorted +and duplicate elements are removed. This is not true for +AtomGroups produced by slicing. Thus, slicing can be +used when the order of atoms is crucial (for instance, in order to +define angles or dihedrals).

+
+

AtomGroups can be compared and combined using group +operators. For instance, AtomGroups can be concatenated +using + or concatenate():

+
ag_concat = ag1 + ag2  # or ag_concat = ag1.concatenate(ag2)
+
+
+

When groups are concatenated, the order of the Atoms is +conserved. If Atoms appear several times in one of the +groups, the duplicates are kept in the resulting group. On the contrary to +concatenate(), union() treats the AtomGroups +as sets so that duplicates are removed from the resulting group, and +Atoms are ordered. The | operator is synomymous to +union():

+
ag_union = ag1 | ag2  # or ag_union = ag1.union(ag2)
+
+
+

The opposite operation to concatenate() is subtract(). This +method creates a new group with all the Atoms of the group +that are not in a given other group; the order of the Atoms +is kept, and so are duplicates. difference() is the set version of +subtract(). The resulting group is sorted and deduplicated.

+

All set methods are listed in the table below. These methods treat the +groups as sorted and deduplicated sets of Atoms.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Operation

Equivalent

Result

s.isdisjoint(t)

True if s and +t do not share +elements

s.issubset(t)

test if all elements of +s are part of t

s.is_strict_subset(t)

test if all elements of +s are part of t, +and s != t

s.issuperset(t)

test if all elements of +t are part of s

s.is_strict_superset(t)

test if all elements of +t are part of s, +and s != t

s.union(t)

s | t

new Group with elements +from both s and t

s.intersection(t)

s & t

new Group with elements +common to s and t

s.difference(t)

s - t

new Group with elements of +s that are not in t

s.symmetric_difference(t)

s ^ t

new Group with elements +that are part of s or +t but not both

+

The following methods keep the order of the atoms as well as duplicates.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Operation

Equivalent

Result

len(s)

number of elements (atoms, +residues or segment) in +the group

s == t

test if s and t +contain the same elements +in the same order

s.concatenate(t)

s + t

new Group with elements +from s and from t

s.subtract(t)

new Group with elements +from s that are not +in t

+

The in operator allows to test if an Atom is in the +AtomGroup.

+

AtomGroup instances are always bound to a +MDAnalysis.core.universe.Universe. They cannot exist in isolation.

+

During serialization, AtomGroup will be pickled with its bound +MDAnalysis.core.universe.Universe which means after unpickling, +a new MDAnalysis.core.universe.Universe will be created and +be attached by the new AtomGroup. If the Universe is serialized +with its AtomGroup, they will still be bound together afterwards:

+
>>> 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, u_pickled = pickle.load(pickle.dumps(g, u))
+>>> print("g_pickled.universe is u_pickled: ",
+>>>       u_pickle is g_pickled.universe)
+g_pickled.universe is u_pickled: True
+
+
+

If multiple AtomGroup are bound to the same +MDAnalysis.core.universe.Universe, they will bound to the same one +after serialization:

+
>>> u = mda.Universe(PSF, DCD)
+>>> g = u.atoms
+>>> h = u.atoms
+
+>>> 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
+
+>>> g_pickled, h_pickled = pickle.load(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
+
+
+

The aforementioned two cases are useful for implementation of parallel +analysis base classes. First, you always get an independent +MDAnalysis.core.universe.Universe +in the new process; you don’t have to worry about detaching and reattaching +Universe with AtomGroup. It also means the state of the +new pickled AtomGroup will not be changed with the old Universe, +So either the Universe has to pickled together with the AtomGroup +(e.g. as a tuple, or as attributes of the object to be pickled), or the +implicit new Universe (AtomGroup.Universe) needs to be used. +Second, When multiple AtomGroup need to be pickled, they will recognize if +they belong to the same Univese or not. +Also keep in mind that they need to be pickled together.

+ +
+

Deprecated since version 0.16.2: Instant selectors of AtomGroup will be removed in the 1.0 +release.

+
+
+

Changed in version 1.0.0: Removed instant selectors, use select_atoms(‘name …’) to select +atoms by name.

+
+
+

Changed in version 2.0.0: AtomGroup can always be pickled with or without its universe, +instead of failing when not finding its anchored universe.

+
+
+

Changed in version 2.1.0: Indexing an AtomGroup with None raises a TypeError.

+
+
+
+accumulate(attribute, function=<function sum>, compound='group')
+

Accumulates the attribute associated with (compounds of) the group.

+

Accumulates the attribute of Atoms in the group. +The accumulation per Residue, Segment, molecule, +or fragment can be obtained by setting the compound parameter +accordingly. By default, the method sums up all attributes per compound, +but any function that takes an array and returns an acuumulation over a +given axis can be used. For multi-dimensional input arrays, the +accumulation is performed along the first axis.

+
+
Parameters
+
    +
  • attribute (str or array_like) – Attribute or array of values to accumulate. +If a numpy.ndarray (or compatible) is provided, its first +dimension must have the same length as the total number of atoms in +the group.

  • +
  • function (callable, optional) – The function performing the accumulation. It must take the array of +attribute values to accumulate as its only positional argument and +accept an (optional) keyword argument axis allowing to specify +the axis along which the accumulation is performed.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the accumulation of all attributes associated with +atoms in the group will be returned as a single value. Otherwise, +the accumulation of the attributes per Segment, +Residue, molecule, or fragment will be returned as a 1d +array. Note that, in any case, only the Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

Acuumulation of the attribute. +If compound is set to 'group', the first dimension of the +attribute array will be contracted to a single value. +If compound is set to 'segments', 'residues', +'molecules', or 'fragments', the length of the first +dimension will correspond to the number of compounds. In all cases, +the other dimensions of the returned array will be of the original +shape (without the first dimension).

+
+
Return type
+

float or numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If the length of a provided attribute array does not correspond to + the number of atoms in the group.

  • +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums), or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the total charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.accumulate('charges')
+
+
+

To find the total mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.accumulate('masses', compound='residues')
+
+
+

To find the maximum atomic charge per fragment of a given +AtomGroup:

+
>>> sel.accumulate('charges', compound="fragments", function=np.max)
+
+
+
+

New in version 0.20.0.

+
+
+ +
+
+align_principal_axis(axis, vector)
+

Align principal axis with index axis with vector.

+
+
Parameters
+
    +
  • axis ({0, 1, 2}) – Index of the principal axis (0, 1, or 2), as produced by +principal_axes().

  • +
  • vector (array_like) – Vector to align principal axis with.

  • +
+
+
+

Notes

+

To align the long axis of a channel (the first principal axis, i.e. +axis = 0) with the z-axis:

+
u.atoms.align_principal_axis(0, [0,0,1])
+u.atoms.write("aligned.pdb")
+
+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property angle
+

This AtomGroup represented as an +MDAnalysis.core.topologyobjects.Angle object

+
+
Raises
+

ValueError – If the AtomGroup is not length 3

+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+asphericity(wrap=False, unwrap=False, compound='group')
+

Asphericity.

+

See [Dima2004b] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap and compound parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+asunique(sorted=False)[source]
+

Return a AtomGroup containing unique +Atoms only, with optional sorting.

+

If the AtomGroup is unique, this is the group itself.

+
+
Parameters
+

sorted (bool (optional)) – Whether or not the returned AtomGroup should be sorted +by index.

+
+
Returns
+

Unique AtomGroup

+
+
Return type
+

AtomGroup

+
+
+

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)
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+property atoms
+

The AtomGroup itself.

+
+

See also

+
+
copy

return a true copy of the AtomGroup

+
+
+
+
+

Changed in version 0.19.0: In previous versions, this returned a copy, but now +the AtomGroup itself is returned. This should +not affect any code but only speed up calculations.

+
+
+ +
+
+bbox(wrap=False)
+

Return the bounding box of the selection.

+

The lengths A,B,C of the orthorhombic enclosing box are

+
L = AtomGroup.bbox()
+A,B,C = L[1] - L[0]
+
+
+
+
Parameters
+

wrap (bool, optional) – If True, move all Atoms to the primary unit cell +before calculation. [False]

+
+
Returns
+

corners – 2x3 array giving corners of bounding box as +[[xmin, ymin, zmin], [xmax, ymax, zmax]].

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 0.7.2.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+property bfactors
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property bond
+

This AtomGroup represented as a +MDAnalysis.core.topologyobjects.Bond object

+
+
Raises
+

ValueError – If the AtomGroup is not length 2

+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+bsphere(wrap=False)
+

Return the bounding sphere of the selection.

+

The sphere is calculated relative to the +center of geometry.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms to the primary unit cell before +calculation. [False]

+
+
Returns
+

    +
  • R (float) – Radius of the bounding sphere.

  • +
  • center (numpy.ndarray) – Coordinates of the sphere center as [xcen, ycen, zcen].

  • +
+

+
+
+
+

New in version 0.7.3.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center(weights, wrap=False, unwrap=False, compound='group')
+

Weighted center of (compounds of) the group

+

Computes the weighted center of Atoms in the group. +Weighted centers per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the weights of a compound sum up to zero, the +coordinates of that compound’s weighted center will be nan (not a +number).

+
+
Parameters
+
    +
  • weights (array_like or None) – Weights to be used. Setting weights=None is equivalent to passing +identical weights for all atoms of the group.

  • +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not 'group' the center of each +compound will be calculated without moving any +Atoms to keep the compounds intact. Instead, the +resulting position vectors will be moved to the primary unit cell +after calculation. Default [False].

  • +
  • unwrap (bool, optional) –

    +
    If True, compounds will be unwrapped before computing their

    centers.

    +
    +
    +

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the weighted center of all atoms in the group will +be returned as a single position vector. Else, the weighted centers +of each Segment, Residue, molecule, or fragment +will be returned as an array of position vectors, i.e. a 2d array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the weighted center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments', 'residues', +'molecules', or 'fragments', the output will be a 2d array +of shape (n, 3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • ValueError – If both ‘wrap’ and ‘unwrap’ set to true.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the center of charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.center(sel.charges)
+
+
+

To find the centers of mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.center(sel.masses, compound='residues')
+
+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_charge(wrap=False, unwrap=False, compound='group')
+

Center of (absolute) charge of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \vert q_i \vert \boldsymbol r_i} + {\sum_i \vert q_i \vert}\]
+

where \(q_i\) is the charge and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of charge per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the charges of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of charge of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where +n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic charges.

+
+

New in version 2.2.0.

+
+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+center_of_geometry(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_mass(wrap=False, unwrap=False, compound='group')
+

Center of mass of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i m_i \boldsymbol r_i}{\sum m_i}\]
+

where \(m_i\) is the mass and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of mass per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the masses of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. a 2d +array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of mass of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where n +is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic masses.

+
+
+

Changed in version 0.8: Added pbc parameter

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' compounds; +added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+centroid(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+property cmap
+

This AtomGroup represented as an +MDAnalysis.core.topologyobjects.CMap object

+
+
Raises
+

ValueError – If the AtomGroup is not length 5

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+concatenate(other)
+

Concatenate with another Group or Component of the same level.

+

Duplicate entries and original order is preserved. It is synomymous to +the + operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with elements of self and other concatenated

+
+
Return type
+

Group

+
+
+

Example

+

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)
+
+
+
+

New in version 0.16.0.

+
+
+ +
+
+convert_to
+

alias of ConverterWrapper

+
+ +
+
+copy()
+

Get another group identical to this one.

+
+

New in version 0.19.0.

+
+
+ +
+
+difference(other)
+

Elements from this Group that do not appear in another

+

This method removes duplicate elements and sorts the result. As such, +it is different from subtract(). difference() is synomymous +to the - operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, without +duplicate elements

+
+
Return type
+

Group

+
+
+ +
+

New in version 0.16.

+
+
+ +
+
+property dihedral
+

This AtomGroup represented as a +Dihedral object

+
+
Raises
+

ValueError – If the AtomGroup is not length 4

+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+property dimensions
+

Obtain a copy of the dimensions of the currently loaded Timestep

+
+ +
+
+dipole_moment(**kwargs)
+

Dipole moment of the group or compounds in a group.

+
+\[\mu = |\boldsymbol{\mu}| = \sqrt{ \sum_{i=1}^{D} \mu^2 }\]
+

Where \(D\) is the number of dimensions, in this case 3.

+

Computes the dipole moment of Atoms in the group. +Dipole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is a net charge, the magnitude of the dipole +moment is dependent on the center chosen. +See dipole_vector().

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole moment(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+dipole_vector(wrap=False, unwrap=False, compound='group', center='mass')
+

Dipole vector of the group.

+
+\[\boldsymbol{\mu} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} )\]
+

Computes the dipole vector of Atoms in the group. +Dipole vector per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that the magnitude of the dipole moment is independent of the +center chosen unless the species has a net charge. In the case of +a charged group the dipole moment can be later adjusted with:

+
+\[\boldsymbol{\mu}_{COC} = \boldsymbol{\mu}_{COM} + +q_{ag}\mathbf{r}_{COM} - q_{ag}\boldsymbol{r}_{COC}\]
+

Where \(\mathbf{r}_{COM}\) is the center of mass and +\(\mathbf{r}_{COC}\) is the center of charge.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole vector(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,3) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property forces
+

Forces on each Atom in the AtomGroup.

+

A numpy.ndarray with +shape=(n_atoms, 3) +and dtype=numpy.float32.

+

The forces can be changed by assigning an array of the appropriate +shape, i.e. either (n_atoms, 3) to assign +individual forces or (3,) to assign the same force to all +Atoms (e.g. ag.forces = array([0,0,0]) will give all +Atoms a zero force).

+
+
Raises
+

NoDataError – If the Timestep does not + contain forces.

+
+
+
+ +
+
+property fragindices
+

The +fragment indices +of all Atoms in this +AtomGroup.

+

A numpy.ndarray with +shape=(n_atoms,) +and dtype=numpy.int64.

+
+

New in version 0.20.0.

+
+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property fragments
+

Read-only tuple of +fragments.

+

Contains all fragments that +any Atom in this +AtomGroup is part of.

+

A fragment is a +group of atoms which are +interconnected by Bonds, i.e., +there exists a path along one +or more Bonds between any pair +of Atoms +within a fragment. Thus, a fragment typically corresponds to a molecule.

+
+

Note

+
    +
  • The contents of the fragments may extend beyond the contents of this +AtomGroup.

  • +
+
+
+

New in version 0.9.0.

+
+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+groupby(topattrs)
+

Group together items in this group according to values of topattr

+
+
Parameters
+

topattrs (str or list) – One or more topology attributes to group components by. +Single arguments are passed as a string. Multiple arguments +are passed as a list.

+
+
Returns
+

Unique values of the multiple combinations of topology attributes +as keys, Groups as values.

+
+
Return type
+

dict

+
+
+

Example

+

To group atoms with the same mass together:

+
>>> ag.groupby('masses')
+{12.010999999999999: <AtomGroup with 462 atoms>,
+ 14.007: <AtomGroup with 116 atoms>,
+ 15.999000000000001: <AtomGroup with 134 atoms>}
+
+
+

To group atoms with the same residue name and mass together:

+
>>> ag.groupby(['resnames', 'masses'])
+{('ALA', 1.008): <AtomGroup with 95 atoms>,
+ ('ALA', 12.011): <AtomGroup with 57 atoms>,
+ ('ALA', 14.007): <AtomGroup with 19 atoms>,
+ ('ALA', 15.999): <AtomGroup with 19 atoms>},
+ ('ARG', 1.008): <AtomGroup with 169 atoms>,
+ ...}
+
+
+
>>> ag.groupby(['resnames', 'masses'])('ALA', 15.999)
+ <AtomGroup with 19 atoms>
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 0.18.0: The function accepts multiple attributes

+
+
+ +
+
+guess_bonds(vdwradii=None, fudge_factor=0.55, lower_bound=0.1)[source]
+

Guess bonds, angles, and dihedrals between the atoms in this +AtomGroup and add them to the underlying +universe.

+
+
Parameters
+
    +
  • vdwradii (dict, optional) – Dict relating atom types: vdw radii

  • +
  • fudge_factor (float, optional) – The factor by which atoms must overlap each other to be considered +a bond. Larger values will increase the number of bonds found. [0.55]

  • +
  • lower_bound (float, optional) – The minimum bond length. All bonds found shorter than this length +will be ignored. This is useful for parsing PDB with altloc records +where atoms with altloc A and B may be very close together and +there should be no chemical bond between them. [0.1]

  • +
+
+
+ +
+

New in version 0.10.0.

+
+
+

Changed in version 0.20.2: Now applies periodic boundary conditions when guessing bonds.

+
+
+

Changed in version 2.5.0: Corrected misleading docs, and now allows passing of fudge_factor +and lower_bound arguments.

+
+
+ +
+
+gyration_moments(wrap=False, unwrap=False, compound='group')
+

Moments of the gyration tensor.

+

The moments are defined as the eigenvalues of the gyration +tensor.

+
+\[\mathsf{T} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{r}_\mathrm{i} - + \mathbf{r}_\mathrm{COM})(\mathbf{r}_\mathrm{i} - \mathbf{r}_\mathrm{COM})\]
+

Where \(\mathbf{r}_\mathrm{COM}\) is the center of mass.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
Returns
+

principle_moments_of_gyration – Gyration vector(s) of (compounds of) the group in \(Å^2\). +If compound was set to 'group', the output will be a single +vector of length 3. Otherwise, the output will be a 2D array of shape +(n,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.5.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property improper
+

This AtomGroup represented as an +MDAnalysis.core.topologyobjects.ImproperDihedral object

+
+
Raises
+

ValueError – If the AtomGroup is not length 4

+
+
+
+

New in version 0.11.0.

+
+
+ +
+
+intersection(other)
+

Group of elements which are in both this Group and another

+

This method removes duplicate elements and sorts the result. It is +synomymous to the & operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the common elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

Intersections can be used when the select atoms string would +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)
+
+
+
+

See also

+

union

+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_subset(other)
+

If this Group is a subset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_superset(other)
+

If this Group is a superset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict superset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+isdisjoint(other)
+

If the Group has no elements in common with the other Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if the two Groups do not have common elements

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issubset(other)
+

If all elements of this Group are part of another Group

+

Note that an empty group is a subset of any group of the same level.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issuperset(other)
+

If all elements of another Group are part of this Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+property isunique
+

Boolean indicating whether all components of the group are unique, +i.e., the group contains no duplicates.

+

Examples

+
>>> ag = u.atoms[[2, 1, 2, 2, 1, 0]]
+>>> ag
+<AtomGroup with 6 atoms>
+>>> ag.isunique
+False
+>>> ag2 = ag.unique
+>>> ag2
+<AtomGroup with 3 atoms>
+>>> ag2.isunique
+True
+
+
+
+

See also

+

asunique

+
+
+

New in version 0.19.0.

+
+
+ +
+
+property ix
+

Unique indices of the components in the Group.

+ +
+ +
+
+property ix_array
+

Unique indices of the components in the Group.

+

For a Group, ix_array is the same as ix. This method +gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+moment_of_inertia(wrap=False, unwrap=False, compound='group')
+

Moment of inertia tensor relative to center of mass.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers and tensor of inertia.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +compound determines the behavior of wrap. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

moment_of_inertia – Moment of inertia tensor as a 3 x 3 numpy array.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

The moment of inertia tensor \(\mathsf{I}\) is calculated for a group of +\(N\) atoms with coordinates \(\mathbf{r}_i,\ 1 \le i \le N\) +relative to its center of mass from the relative coordinates

+
+\[\mathbf{r}'_i = \mathbf{r}_i - \frac{1}{\sum_{i=1}^{N} m_i} \sum_{i=1}^{N} m_i \mathbf{r}_i\]
+

as

+
+\[\mathsf{I} = \sum_{i=1}^{N} m_i \Big[(\mathbf{r}'_i\cdot\mathbf{r}'_i) \sum_{\alpha=1}^{3} + \hat{\mathbf{e}}_\alpha \otimes \hat{\mathbf{e}}_\alpha - \mathbf{r}'_i \otimes \mathbf{r}'_i\Big]\]
+

where \(\hat{\mathbf{e}}_\alpha\) are Cartesian unit vectors, or in Cartesian coordinates

+
+\[I_{\alpha,\beta} = \sum_{k=1}^{N} m_k + \Big(\big(\sum_{\gamma=1}^3 (x'^{(k)}_{\gamma})^2 \big)\delta_{\alpha,\beta} + - x'^{(k)}_{\alpha} x'^{(k)}_{\beta} \Big).\]
+

where \(x'^{(k)}_{\alpha}\) are the Cartesian coordinates of the +relative coordinates \(\mathbf{r}'_k\).

+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property n_atoms
+

Number of atoms in the AtomGroup.

+

Equivalent to len(self).

+
+ +
+
+property n_fragments
+

The number of unique +fragments the +Atoms of this +AtomGroup are part of.

+
+

New in version 0.20.0.

+
+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property n_residues
+

Number of unique Residues present in the +AtomGroup.

+

Equivalent to len(self.residues).

+
+ +
+
+property n_segments
+

Number of unique segments present in the AtomGroup.

+

Equivalent to len(self.segments).

+
+ +
+
+pack_into_box(box=None, inplace=True)
+

Shift all Atoms in this group to the primary unit +cell.

+
+
Parameters
+
    +
  • box (array_like) – Box dimensions, can be either orthogonal or triclinic information. +Cell dimensions must be in an identical to format to those returned +by MDAnalysis.coordinates.timestep.Timestep.dimensions, +[lx, ly, lz, alpha, beta, gamma]. If None, uses these +timestep dimensions.

  • +
  • inplace (bool) – True to change coordinates in place.

  • +
+
+
Returns
+

coords – Shifted atom coordinates.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

All atoms will be moved so that they lie between 0 and boxlength +\(L_i\) in all dimensions, i.e. the lower left corner of the +simulation box is taken to be at (0,0,0):

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\]
+

The default is to take unit cell information from the underlying +Timestep instance. The optional +argument box can be used to provide alternative unit cell information +(in the MDAnalysis standard format +[Lx, Ly, Lz, alpha, beta, gamma]).

+

Works with either orthogonal or triclinic box types.

+
+

Note

+

pack_into_box() is identical to wrap() with all default +keywords.

+
+ +
+

New in version 0.8.

+
+
+ +
+
+property positions
+

Coordinates of the Atoms in the AtomGroup.

+

A numpy.ndarray with +shape=(n_atoms, 3) +and dtype=numpy.float32.

+

The positions can be changed by assigning an array of the appropriate +shape, i.e., either (n_atoms, 3) to +assign individual coordinates, or (3,) to assign the same +coordinate to all Atoms (e.g., +ag.positions = array([0,0,0]) will move all Atoms +to the origin).

+
+

Note

+

Changing positions is not reflected in any files; reading any +frame from the +trajectory will +replace the change with that from the file except if the +trajectory is held +in memory, e.g., when the +transfer_to_memory() +method was used.

+
+
+
Raises
+

NoDataError – If the underlying Timestep + does not contain + positions.

+
+
+
+ +
+
+principal_axes(wrap=False)
+

Calculate the principal axes from the moment of inertia.

+

e1,e2,e3 = AtomGroup.principal_axes()

+

The eigenvectors are sorted by eigenvalue, i.e. the first one +corresponds to the highest eigenvalue and is thus the first principal +axes.

+

The eigenvectors form a right-handed coordinate system.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
Returns
+

axis_vectors – 3 x 3 array with v[0] as first, v[1] as second, and +v[2] as third eigenvector.

+
+
Return type
+

array

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Always return principal axes in right-hand convention.

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_moment(**kwargs)
+

Quadrupole moment of the group according to [Gray1984].

+
+\[Q = \sqrt{\frac{2}{3}{\hat{\mathsf{Q}}}:{\hat{\mathsf{Q}}}}\]
+

where the quadrupole moment is calculated from the tensor double +contraction of the traceless quadropole tensor \(\hat{\mathsf{Q}}\)

+

Computes the quadrupole moment of Atoms in the group. +Quadrupole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole moment is dependant on the +center chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole moment(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_tensor(wrap=False, unwrap=False, compound='group', center='mass')
+

Traceless quadrupole tensor of the group or compounds.

+

This tensor is first computed as the outer product of vectors from +a reference point to some atom, and multiplied by the atomic charge. +The tensor of each atom is then summed to produce the quadrupole +tensor of the group:

+
+\[\mathsf{Q} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} ) \otimes ( \mathbf{r}_{i} - \mathbf{r}_{COM} )\]
+

The traceless quadrupole tensor, \(\hat{\mathsf{Q}}\), is then +taken from:

+
+\[\hat{\mathsf{Q}} = \frac{3}{2} \mathsf{Q} - \frac{1}{2} +tr(\mathsf{Q})\]
+

Computes the quadrupole tensor of Atoms in the group. +Tensor per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole tensor is dependent on the +center (e.g., \(\mathbf{r}_{COM}\)) chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole tensor(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +tensor of shape (3,3). Otherwise, the output will be a 1d array +of shape (n,3,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+radius_of_gyration(wrap=False, **kwargs)
+

Radius of gyration.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property residues
+

A sorted ResidueGroup of the unique +Residues present in the AtomGroup.

+
+ +
+
+rotate(R, point=(0, 0, 0))
+

Apply a rotation matrix R to the selection’s coordinates. +\(\mathsf{R}\) is a 3x3 orthogonal matrix that transforms a vector +\(\mathbf{x} \rightarrow \mathbf{x}'\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x}\]
+

Atom coordinates are rotated in-place.

+
+
Parameters
+
    +
  • R (array_like) – 3x3 rotation matrix

  • +
  • point (array_like, optional) – Center of rotation

  • +
+
+
Return type
+

self

+
+
+

Notes

+

By default, rotates about the origin point=(0, 0, 0). To rotate +a group g around its center of geometry, use +g.rotate(R, point=g.center_of_geometry()).

+
+

See also

+
+
rotateby

rotate around given axis and angle

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+
+ +
+
+rotateby(angle, axis, point=None)
+

Apply a rotation to the selection’s coordinates.

+
+
Parameters
+
    +
  • angle (float) – Rotation angle in degrees.

  • +
  • axis (array_like) – Rotation axis vector.

  • +
  • point (array_like, optional) – Center of rotation. If None then the center of geometry of this +group is used.

  • +
+
+
Return type
+

self

+
+
+

Notes

+

The transformation from current coordinates \(\mathbf{x}\) +to new coordinates \(\mathbf{x}'\) is

+
+\[\mathbf{x}' = \mathsf{R}\,(\mathbf{x}-\mathbf{p}) + \mathbf{p}\]
+

where \(\mathsf{R}\) is the rotation by angle around the +axis going through point \(\mathbf{p}\).

+
+

See also

+

MDAnalysis.lib.transformations.rotation_matrix

+
+
calculate

math:mathsf{R}

+
+
+
+
+ +
+
+property segments
+

A sorted SegmentGroup of the unique segments present in the +AtomGroup.

+
+ +
+
+select_atoms(sel, *othersel, periodic=True, rtol=1e-05, atol=1e-08, updating=False, sorted=True, rdkit_kwargs=None, smarts_kwargs=None, **selgroups)[source]
+

Select atoms from within this Group using a selection string.

+

Returns an AtomGroup sorted according to their index in the +topology (this is to ensure that there are no duplicates, which can +happen with complicated selections).

+
+
Parameters
+
    +
  • sel (str) – string of the selection, eg “name Ca”, see below for possibilities.

  • +
  • othersel (iterable of str) – further selections to perform. The results of these selections +will be appended onto the results of the first.

  • +
  • periodic (bool (optional)) – for geometric selections, whether to account for atoms in different +periodic images when searching

  • +
  • atol (float, optional) – The absolute tolerance parameter for float comparisons. +Passed to :func:numpy.isclose.

  • +
  • rtol (float, optional) – The relative tolerance parameter for float comparisons. +Passed to :func:numpy.isclose.

  • +
  • updating (bool (optional)) – force the selection to be re evaluated each time the Timestep of the +trajectory is changed. See section on Dynamic selections below. +[True]

  • +
  • sorted (bool, optional) – Whether to sort the output AtomGroup by index.

  • +
  • rdkit_kwargs (dict (optional)) – Arguments passed to the +RDKitConverter when using +selection based on SMARTS queries

  • +
  • smarts_kwargs (dict (optional)) – Arguments passed internally to RDKit’s GetSubstructMatches.

  • +
  • **selgroups (keyword arguments of str: AtomGroup (optional)) – when using the “group” keyword in selections, groups are defined by +passing them as keyword arguments. See section on preexisting +selections below.

  • +
+
+
Raises
+

TypeError – If the arbitrary groups passed are not of type + MDAnalysis.core.groups.AtomGroup

+
+
+

Examples

+

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')
+
+
+

is equivalent to

+
>>> sel = universe.select_atoms('resname MET or resname GLY')
+
+
+

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
+<AtomGroup with 3420 atoms>
+
+
+

Existing 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)
+<AtomGroup with 1250 atoms>
+
+
+

Selections can be set to update automatically on frame change, by +setting the updating keyword argument to True. This will return +a UpdatingAtomGroup which can represent the solvation shell +around another object.

+
>>> universe.select_atoms("resname SOL and around 2.0 protein", updating=True)
+<Updating AtomGroup with 100 atoms>
+
+
+

Notes

+

If exact ordering of atoms is required (for instance, for +angle() or dihedral() calculations) +then one supplies selections separately in the required order. Also, +when multiple AtomGroup instances are concatenated with the ++ operator, then the order of Atom instances is preserved +and duplicates are not removed.

+
+

See also

+

Selection commands

+
+

Selection syntax

+

The selection parser understands the following CASE SENSITIVE +keywords:

+

Simple selections

+
+
+
protein, backbone, nucleic, nucleicbackbone

selects all atoms that belong to a standard set of residues; +a protein is identfied by a hard-coded set of residue names so +it may not work for esoteric residues.

+
+
segid seg-name

select by segid (as given in the topology), e.g. segid 4AKE +or segid DMPC

+
+
resid residue-number-range

resid can take a single residue number or a range of numbers. A +range consists of two numbers separated by a colon (inclusive) +such as resid 1:5. A residue number (“resid”) is taken +directly from the topology. +If icodes are present in the topology, then these will be +taken into account. Ie ‘resid 163B’ will only select resid +163 with icode B while ‘resid 163’ will select only residue 163. +Range selections will also respect icodes, so ‘resid 162-163B’ +will select all residues in 162 and those in 163 up to icode B.

+
+
resnum resnum-number-range

resnum is the canonical residue number; typically it is set to +the residue id in the original PDB structure.

+
+
resname residue-name

select by residue name, e.g. resname LYS

+
+
name atom-name

select by atom name (as given in the topology). Often, this is +force field dependent. Example: name CA (for C&alpha; atoms) +or name OW (for SPC water oxygen)

+
+
type atom-type

select by atom type; this is either a string or a number and +depends on the force field; it is read from the topology file +(e.g. the CHARMM PSF file contains numeric atom types). It has +non-sensical values when a PDB or GRO file is used as a topology

+
+
atom seg-name residue-number atom-name

a selector for a single atom consisting of segid resid atomname, +e.g. DMPC 1 C2 selects the C2 carbon of the first residue of +the DMPC segment

+
+
altloc alternative-location

a selection for atoms where alternative locations are available, +which is often the case with high-resolution crystal structures +e.g. resid 4 and resname ALA and altloc B selects only the +atoms of ALA-4 that have an altloc B record.

+
+
moltype molecule-type

select by molecule type, e.g. moltype Protein_A. At the +moment, only the TPR format defines the molecule type.

+
+
record_type record_type

for selecting either ATOM or HETATM from PDB-like files. +e.g. select_atoms('name CA and not record_type HETATM')

+
+
smarts SMARTS-query

select atoms using Daylight’s SMARTS queries, e.g. smarts +[#7;R] to find nitrogen atoms in rings. Requires RDKit. +All matches are combined as a single unique match. The smarts +selection accepts two sets of key word arguments from +select_atoms(): the rdkit_kwargs are passed internally to +RDKitConverter.convert() and the smarts_kwargs are passed to +RDKit’s GetSubstructMatches. +By default, the useChirality kwarg in rdkit_kwargs is set to true +and maxMatches in smarts_kwargs is +max(1000, 10 * n_atoms), where n_atoms is either +len(AtomGroup) or len(Universe.atoms), whichever is +applicable. Note that the number of matches can occasionally +exceed the default value of maxMatches, causing too few atoms +to be returned. If this occurs, a warning will be issued. The +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})
+<AtomGroup with 100 atoms>
+
+
+
+
chiral R | S

select a particular stereocenter. e.g. name C and chirality +S to select only S-chiral carbon atoms. Only R and +S will be possible options but other values will not raise +an error.

+
+
formalcharge formal-charge

select atoms based on their formal charge, e.g. +name O and formalcharge -1 to select all oxygens with a +negative 1 formal charge.

+
+
+
+

Boolean

+
+
+
not

all atoms not in the selection, e.g. not protein selects +all atoms that aren’t part of a protein

+
+
and, or

combine two selections according to the rules of boolean +algebra, e.g. protein and not resname ALA LYS +selects all atoms that belong to a protein, but are not in a +lysine or alanine residue

+
+
+
+

Geometric

+
+
+
around distance selection

selects all atoms a certain cutoff away from another selection, +e.g. around 3.5 protein selects all atoms not belonging to +protein that are within 3.5 Angstroms from the protein

+
+
point x y z distance

selects all atoms within a cutoff of a point in space, make sure +coordinate is separated by spaces, +e.g. point 5.0 5.0 5.0  3.5 selects all atoms within 3.5 +Angstroms of the coordinate (5.0, 5.0, 5.0)

+
+
prop [abs] property operator value

selects atoms based on position, using property x, y, +or z coordinate. Supports the abs keyword (for absolute +value) and the following operators: <, >, <=, >=, ==, !=. +For example, prop z >= 5.0 selects all atoms with z +coordinate greater than 5.0; prop abs z <= 5.0 selects all +atoms within -5.0 <= z <= 5.0.

+
+
sphzone radius selection

Selects all atoms that are within radius of the center of +geometry of selection

+
+
sphlayer inner radius outer radius selection

Similar to sphzone, but also excludes atoms that are within +inner radius of the selection COG

+
+
isolayer inner radius outer radius selection

Similar to sphlayer, but will find layer around all reference +layer, creating an iso-surface.

+
+
cyzone externalRadius zMax zMin selection

selects all atoms within a cylindric zone centered in the +center of geometry (COG) of a given selection, +e.g. cyzone 15 4 -8 protein and resid 42 selects the +center of geometry of protein and resid 42, and creates a +cylinder of external radius 15 centered on the COG. In z, the +cylinder extends from 4 above the COG to 8 below. Positive +values for zMin, or negative ones for zMax, are allowed.

+
+
cylayer innerRadius externalRadius zMax zMin selection

selects all atoms within a cylindric layer centered in the +center of geometry (COG) of a given selection, +e.g. cylayer 5 10 10 -8 protein selects the center of +geometry of protein, and creates a cylindrical layer of inner +radius 5, external radius 10 centered on the COG. In z, the +cylinder extends from 10 above the COG to 8 below. Positive +values for zMin, or negative ones for zMax, are allowed.

+
+
+
+

Connectivity

+
+
+
byres selection

selects all atoms that are in the same segment and residue as +selection, e.g. specify the subselection after the byres keyword

+
+
bonded selection

selects all atoms that are bonded to selection +eg: select name H and bonded name O selects only hydrogens +bonded to oxygens

+
+
+
+

Index

+
+
+
bynum index-range

selects all atoms within a range of (1-based) inclusive indices, +e.g. bynum 1 selects the first atom in the universe; +bynum 5:10 selects atoms 5 through 10 inclusive. All atoms +in the Universe are +consecutively numbered, and the index runs from 1 up to the +total number of atoms.

+
+
index index-range

selects all atoms within a range of (0-based) inclusive indices, +e.g. index 0 selects the first atom in the universe; +index 5:10 selects atoms 6 through 11 inclusive. All atoms +in the Universe are +consecutively numbered, and the index runs from 0 up to the +total number of atoms - 1.

+
+
+
+

Preexisting selections

+
+
+
group group-name

selects the atoms in the AtomGroup passed to the +function as a keyword argument named group-name. Only the +atoms common to group-name and the instance +select_atoms() +was called from will be considered, unless group is +preceded by the global keyword. group-name will be +included in the parsing just by comparison of atom indices. +This means that it is up to the user to make sure the +group-name group was defined in an appropriate +Universe.

+
+
global selection

by default, when issuing +select_atoms() from an +AtomGroup, selections and +subselections are returned intersected with the atoms of that +instance. Prefixing a selection term with global causes its +selection to be returned in its entirety. As an example, the +global keyword allows for +lipids.select_atoms("around 10 global protein") — where +lipids is a group that does not contain any proteins. Were +global absent, the result would be an empty selection since +the protein subselection would itself be empty. When issuing +select_atoms() from a +Universe, global is +ignored.

+
+
+
+
+
Dynamic selections

If select_atoms() is +invoked with named argument updating set to True, an +UpdatingAtomGroup instance will be +returned, instead of a regular +AtomGroup. It behaves just like +the latter, with the difference that the selection expressions are +re-evaluated every time the trajectory frame changes (this happens +lazily, only when the +UpdatingAtomGroup is accessed so +that there is no redundant updating going on). +Issuing an updating selection from an already updating group will +cause later updates to also reflect the updating of the base group. +A non-updating selection or a slicing operation made on an +UpdatingAtomGroup will return a +static AtomGroup, which will no +longer update across frames.

+
+
+
+

Changed in version 0.7.4: Added resnum selection.

+
+
+

Changed in version 0.8.1: Added group and fullgroup selections.

+
+
+

Changed in version 0.13.0: Added bonded selection.

+
+
+

Changed in version 0.16.0: Resid selection now takes icodes into account +where present.

+
+
+

Changed in version 0.16.0: Updating selections now possible by setting +the updating argument.

+
+
+

Changed in version 0.17.0: Added moltype and molnum selections.

+
+
+

Changed in version 0.19.0: Added strict type checking for passed groups. +Added periodic kwarg (default True)

+
+
+

Changed in version 0.19.2: Empty sel string now returns an empty Atom group.

+
+
+

Changed in version 1.0.0: The fullgroup selection has now been removed in favor of the +equivalent global group selection. +Removed flags affecting default behaviour for periodic selections; +periodic are now on by default (as with default flags)

+
+
+

Changed in version 2.0.0: Added the smarts selection. Added atol and rtol keywords +to select float values. Added the sort keyword. Added +rdkit_kwargs to pass parameters to the RDKitConverter.

+
+
+

Changed in version 2.2.0: Added smarts_kwargs to pass parameters to the RDKit +GetSubstructMatch for smarts selection.

+
+
+ +
+
+shape_parameter(wrap=False, unwrap=False, compound='group')
+

Shape parameter.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0. +Superfluous kwargs were removed.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+sort(key='ix', keyfunc=None)[source]
+

Returns a sorted AtomGroup using a specified attribute as the key.

+
+
Parameters
+
    +
  • key (str, optional) – The name of the AtomGroup attribute to sort by (e.g. ids, +ix. default= ix ).

  • +
  • keyfunc (callable, optional) – A function to convert multidimensional arrays to a single +dimension. This 1D array will be used as the sort key and +is required when sorting with an AtomGroup attribute +key which has multiple dimensions. Note: this argument +is ignored when the attribute is one dimensional.

  • +
+
+
Returns
+

Sorted AtomGroup.

+
+
Return type
+

AtomGroup

+
+
+

Example

+
>>> 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])
+>>> ag = ag.sort()
+>>> ag.ix
+array([0 1 2 3])
+>>> ag.positions
+array([[-11.921,  26.307,  10.41 ],
+       [-11.447,  26.741,   9.595],
+       [-12.44 ,  27.042,  10.926],
+       [-12.632,  25.619,  10.046]], dtype=float32)
+>>> ag = ag.sort("positions", lambda x: x[:, 1])
+>>> ag.positions
+array([[-12.632,  25.619,  10.046],
+       [-11.921,  26.307,  10.41 ],
+       [-11.447,  26.741,   9.595],
+       [-12.44 ,  27.042,  10.926]], dtype=float32)
+
+
+
+

Note

+

This uses a stable sort as implemented by +numpy.argsort(kind=’stable’).

+
+
+

New in version 2.0.0.

+
+
+ +
+
+split(level)[source]
+

Split AtomGroup into a list of +AtomGroups by level.

+
+
Parameters
+

level ({'atom', 'residue', 'molecule', 'segment'}) –

+
+
+
+

New in version 0.9.0.

+
+
+

Changed in version 0.17.0: Added the ‘molecule’ level.

+
+
+ +
+
+subtract(other)
+

Group with elements from this Group that don’t appear in other

+

The original order of this group is kept, as well as any duplicate +elements. If an element of this Group is duplicated and appears in +the other Group or Component, then all the occurences of that element +are removed from the returned Group.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, +conserves order and duplicates.

+
+
Return type
+

Group

+
+
+

Example

+

Unlike 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])
+
+
+
+

See also

+

concatenate, difference

+
+
+

New in version 0.16.

+
+
+ +
+
+symmetric_difference(other)
+

Group of elements which are only in one of this Group or another

+

This method removes duplicate elements and the result is sorted. It is +synomym to the ^ operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements that are in self or in other but not in +both, without duplicate elements

+
+
Return type
+

Group

+
+
+

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]
+
+
+
+

See also

+

difference

+
+
+

New in version 0.16.

+
+
+ +
+
+total_charge(compound='group')
+

Total charge of (compounds of) the group.

+

Computes the total charge of Atoms in the group. +Total charges per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If ‘group’, the total charge of all atoms in the group will +be returned as a single value. Otherwise, the total charges per +Segment, Residue, molecule, or fragment +will be returned as a 1d array. +Note that, in any case, only the charges of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total charge of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+total_mass(compound='group')
+

Total mass of (compounds of) the group.

+

Computes the total mass of Atoms in the group. +Total masses per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the total mass of all atoms in the group will be +returned as a single value. Otherwise, the total masses per +Segment, Residue, molecule, or fragment will be +returned as a 1d array. +Note that, in any case, only the masses of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total mass of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+transform(M)
+

Apply homogenous transformation matrix M to the coordinates.

+

Atom coordinates are rotated and translated in-place.

+
+
Parameters
+

M (array_like) – 4x4 matrix with the rotation in R = M[:3, :3] and the +translation in t = M[:3, 3].

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The rotation \(\mathsf{R}\) is about the origin and is applied +before the translation \(\mathbf{t}\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x} + \mathbf{t}\]
+
+ +
+
+translate(t)
+

Apply translation vector t to the selection’s coordinates.

+

Atom coordinates are translated in-place.

+
+
Parameters
+

t (array_like) – vector to translate coordinates with

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The method applies a translation to the AtomGroup +from current coordinates \(\mathbf{x}\) to new coordinates +\(\mathbf{x}'\):

+
+\[\mathbf{x}' = \mathbf{x} + \mathbf{t}\]
+
+ +
+
+property ts
+

Temporary Timestep that contains the selection coordinates.

+

A Timestep instance, +which can be passed to a trajectory writer.

+

If ts is modified then these modifications +will be present until the frame number changes (which +typically happens when the underlying +trajectory frame changes).

+

It is not possible to assign a new +Timestep to the +AtomGroup.ts attribute; change attributes of the object.

+
+ +
+
+union(other)
+

Group of elements either in this Group or another

+

On the contrary to concatenation, this method sort the elements and +removes duplicate ones. It is synomymous to the | operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the combined elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

In contrast to 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)
+
+
+
+

See also

+

concatenate, intersection

+
+
+

New in version 0.16.

+
+
+ +
+
+property unique
+

An AtomGroup containing sorted and unique +Atoms only.

+

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
+<AtomGroup with 6 atoms>
+>>> ag.ix
+array([2, 1, 2, 2, 1, 0], dtype=int64)
+>>> ag2 = ag.unique
+>>> ag2
+<AtomGroup with 3 atoms>
+>>> ag2.ix
+array([0, 1, 2], dtype=int64)
+>>> ag2.unique is ag2
+False
+
+
+
+

See also

+

asunique, ,

+
+

This function now always returns a copy.

+
+
+
+
+ +
+
+property universe
+

The underlying Universe the group +belongs to.

+
+ +
+
+unwrap(compound='fragments', reference='com', inplace=True)
+

Move atoms of this group so that bonds within the +group’s compounds aren’t split across periodic boundaries.

+

This function is most useful when atoms have been packed into the +primary unit cell, causing breaks mid-molecule, with the molecule then +appearing on either side of the unit cell. This is problematic for +operations such as calculating the center of mass of the molecule.

+
+-----------+       +-----------+
+|           |       |           |
+| 6       3 |       |         3 | 6
+| !       ! |       |         ! | !
+|-5-8   1-2-|  ==>  |       1-2-|-5-8
+| !       ! |       |         ! | !
+| 7       4 |       |         4 | 7
+|           |       |           |
++-----------+       +-----------+
+
+
+
+
Parameters
+
    +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to unwrap. Note that, in any case, all +atoms within each compound must be interconnected by bonds, i.e., +compounds must correspond to (parts of) molecules.

  • +
  • reference ({'com', 'cog', None}, optional) – If 'com' (center of mass) or 'cog' (center of geometry), the +unwrapped compounds will be shifted so that their individual +reference point lies within the primary unit cell. +If None, no such shift is performed.

  • +
  • inplace (bool, optional) – If True, coordinates are modified in place.

  • +
+
+
Returns
+

coords – Unwrapped atom coordinate array of shape (n, 3).

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • NoDataError – If compound is 'molecules' but the underlying topology does + not contain molecule information, or if reference is 'com' + but the topology does not contain masses.

  • +
  • ValueError – If reference is not one of 'com', 'cog', or None, or + if reference is 'com' and the total mass of any compound is + zero.

  • +
+
+
+
+

Note

+

Be aware of the fact that only atoms belonging to the group will +be unwrapped! If you want entire molecules to be unwrapped, make sure +that all atoms of these molecules are part of the group. +An AtomGroup containing all atoms of all fragments in the group ag +can be created with:

+
all_frag_atoms = sum(ag.fragments)
+
+
+
+
+

See also

+

make_whole(), wrap(), pack_into_box(), apply_PBC()

+
+
+

New in version 0.20.0.

+
+
+ +
+
+property ureybradley
+

This AtomGroup represented as an +MDAnalysis.core.topologyobjects.UreyBradley object

+
+
Raises
+

ValueError – If the AtomGroup is not length 2

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+property velocities
+

Velocities of the Atoms in the AtomGroup.

+

A numpy.ndarray with +shape=(n_atoms, 3) +and dtype=numpy.float32.

+

The velocities can be changed by assigning an array of the appropriate +shape, i.e. either (n_atoms, 3) to assign +individual velocities or (3,) to assign the same velocity to all +Atoms (e.g. ag.velocities = array([0,0,0]) will give +all Atoms zero velocity).

+
+
Raises
+

NoDataError – If the underlying Timestep + does not contain + velocities.

+
+
+
+ +
+
+wrap(compound='atoms', center='com', box=None, inplace=True)
+

Shift the contents of this group back into the primary unit cell +according to periodic boundary conditions.

+

Specifying a compound will keep the Atoms in each +compound together during the process. If compound is different from +'atoms', each compound as a whole will be shifted so that its +center lies within the primary unit cell.

+
+
Parameters
+
    +
  • compound ({'atoms', 'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to keep together during wrapping. Note that, +in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
  • center ({'com', 'cog'}) – How to define the center of a given group of atoms. If compound is +'atoms', this parameter is meaningless and therefore ignored.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma]. +If None, uses the +dimensions of the current time step.

  • +
  • inplace (bool, optional) – If True, coordinates will be changed in place.

  • +
+
+
Returns
+

Array of wrapped atom coordinates of dtype np.float32 and shape +(len(self.atoms.n_atoms), 3)

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'atoms', 'group', + 'segments', 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds or if + center is 'com' but the topology doesn’t contain masses.

  • +
+
+
+

Notes

+

All atoms of the group will be moved so that the centers of its +compounds lie within the primary periodic image. For orthorhombic unit +cells, the primary periodic image is defined as the half-open interval +\([0,L_i)\) between \(0\) and boxlength \(L_i\) in all +dimensions \(i\in\{x,y,z\}\), i.e., the origin of the of the +simulation box is taken to be at the origin \((0,0,0)\) of the +euclidian coordinate system. A compound center residing at position +\(x_i\) in dimension \(i\) will be shifted to \(x_i'\) +according to

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\,.\]
+

When specifying a compound, the translation is calculated based on +each compound. The same translation is applied to all atoms +within this compound, meaning it will not be broken by the shift. +This might however mean that not all atoms of a compound will be +inside the unit cell after wrapping, but rather will be the center of +the compound. +Be aware of the fact that only atoms belonging to the group will be +taken into account!

+

center allows to define how the center of each group is computed. +This can be either 'com' for center of mass, or 'cog' for +center of geometry.

+

box allows a unit cell to be given for the transformation. If not +specified, the dimensions +information from the current +Timestep will be used.

+
+

Note

+

AtomGroup.wrap() is currently faster than +ResidueGroup.wrap() or SegmentGroup.wrap().

+
+ +
+

New in version 0.9.2.

+
+
+

Changed in version 0.20.0: The method only acts on atoms belonging to the group and returns +the wrapped positions as a numpy.ndarray. +Added optional argument inplace.

+
+
+ +
+
+write(filename=None, file_format=None, filenamefmt='{trjname}_{frame}', frames=None, **kwargs)[source]
+

Write AtomGroup to a file.

+

The output can either be a coordinate file or a selection, depending on +the format.

+

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])
+
+
+
+
Parameters
+
    +
  • filename (str, optional) – None: create TRJNAME_FRAME.FORMAT from filenamefmt [None]

  • +
  • file_format (str, optional) – The name or extension of a coordinate, trajectory, or selection +file format such as PDB, CRD, GRO, VMD (tcl), PyMol (pml), Gromacs +(ndx) CHARMM (str) or Jmol (spt); case-insensitive [PDB]

  • +
  • filenamefmt (str, optional) – format string for default filename; use substitution tokens +‘trjname’ and ‘frame’ [“%(trjname)s_%(frame)d”]

  • +
  • bonds (str, optional) – how to handle bond information, especially relevant for PDBs. +"conect": write only the CONECT records defined in the original +file. "all": write out all bonds, both the original defined and +those guessed by MDAnalysis. None: do not write out bonds. +Default is "conect".

  • +
  • frames (array-like or slice or FrameIteratorBase or str, optional) – An ensemble of frames to write. The ensemble can be an list or +array of frame indices, a mask of booleans, an instance of +slice, or the value returned when a trajectory is indexed. +By default, frames is set to None and only the current frame +is written. If frames is set to “all”, then all the frame from +trajectory are written.

  • +
+
+
+
+

Changed in version 0.9.0: Merged with write_selection. This method can +now write both selections out.

+
+
+

Changed in version 0.19.0: Can write multiframe trajectories with the ‘frames’ argument.

+
+
+ +
+ +
+
+class MDAnalysis.core.groups.ResidueGroup(*args, **kwargs)[source]
+

ResidueGroup base class.

+

This class is used by a Universe for +generating its Topology-specific ResidueGroup class. All the +TopologyAttr components are obtained +from GroupBase, so this class only includes ad-hoc methods +specific to ResidueGroups.

+

ResidueGroups can be compared and combined using group operators. See the +list of these operators on GroupBase.

+
+

Deprecated since version 0.16.2: Instant selectors of Segments will be removed in the 1.0 release.

+
+
+

Changed in version 1.0.0: Removed instant selectors, use select_atoms instead

+
+
+

Changed in version 2.1.0: Indexing an ResidueGroup with None raises a TypeError.

+
+
+
+accumulate(attribute, function=<function sum>, compound='group')
+

Accumulates the attribute associated with (compounds of) the group.

+

Accumulates the attribute of Atoms in the group. +The accumulation per Residue, Segment, molecule, +or fragment can be obtained by setting the compound parameter +accordingly. By default, the method sums up all attributes per compound, +but any function that takes an array and returns an acuumulation over a +given axis can be used. For multi-dimensional input arrays, the +accumulation is performed along the first axis.

+
+
Parameters
+
    +
  • attribute (str or array_like) – Attribute or array of values to accumulate. +If a numpy.ndarray (or compatible) is provided, its first +dimension must have the same length as the total number of atoms in +the group.

  • +
  • function (callable, optional) – The function performing the accumulation. It must take the array of +attribute values to accumulate as its only positional argument and +accept an (optional) keyword argument axis allowing to specify +the axis along which the accumulation is performed.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the accumulation of all attributes associated with +atoms in the group will be returned as a single value. Otherwise, +the accumulation of the attributes per Segment, +Residue, molecule, or fragment will be returned as a 1d +array. Note that, in any case, only the Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

Acuumulation of the attribute. +If compound is set to 'group', the first dimension of the +attribute array will be contracted to a single value. +If compound is set to 'segments', 'residues', +'molecules', or 'fragments', the length of the first +dimension will correspond to the number of compounds. In all cases, +the other dimensions of the returned array will be of the original +shape (without the first dimension).

+
+
Return type
+

float or numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If the length of a provided attribute array does not correspond to + the number of atoms in the group.

  • +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums), or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the total charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.accumulate('charges')
+
+
+

To find the total mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.accumulate('masses', compound='residues')
+
+
+

To find the maximum atomic charge per fragment of a given +AtomGroup:

+
>>> sel.accumulate('charges', compound="fragments", function=np.max)
+
+
+
+

New in version 0.20.0.

+
+
+ +
+
+align_principal_axis(axis, vector)
+

Align principal axis with index axis with vector.

+
+
Parameters
+
    +
  • axis ({0, 1, 2}) – Index of the principal axis (0, 1, or 2), as produced by +principal_axes().

  • +
  • vector (array_like) – Vector to align principal axis with.

  • +
+
+
+

Notes

+

To align the long axis of a channel (the first principal axis, i.e. +axis = 0) with the z-axis:

+
u.atoms.align_principal_axis(0, [0,0,1])
+u.atoms.write("aligned.pdb")
+
+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+asphericity(wrap=False, unwrap=False, compound='group')
+

Asphericity.

+

See [Dima2004b] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap and compound parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+asunique(sorted=False)[source]
+

Return a ResidueGroup containing unique +Residues only, with optional sorting.

+

If the ResidueGroup is unique, this is the group itself.

+
+
Parameters
+

sorted (bool (optional)) – Whether or not the returned ResidueGroup should be sorted +by resindex.

+
+
Returns
+

Unique ResidueGroup

+
+
Return type
+

ResidueGroup

+
+
+

Examples

+
>>> rg = u.residues[[2, 1, 2, 2, 1, 0]]
+>>> rg
+<ResidueGroup with 6 residues>
+>>> rg.ix
+array([2, 1, 2, 2, 1, 0])
+>>> rg2 = rg.asunique()
+>>> rg2
+<ResidueGroup with 3 residues>
+>>> rg2.ix
+array([0, 1, 2])
+>>> rg2.asunique() is rg2
+True
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+property atoms
+

An AtomGroup of Atoms present in this +ResidueGroup.

+

The Atoms are ordered locally by Residue in the +ResidueGroup. Duplicates are not removed.

+
+ +
+
+bbox(wrap=False)
+

Return the bounding box of the selection.

+

The lengths A,B,C of the orthorhombic enclosing box are

+
L = AtomGroup.bbox()
+A,B,C = L[1] - L[0]
+
+
+
+
Parameters
+

wrap (bool, optional) – If True, move all Atoms to the primary unit cell +before calculation. [False]

+
+
Returns
+

corners – 2x3 array giving corners of bounding box as +[[xmin, ymin, zmin], [xmax, ymax, zmax]].

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 0.7.2.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+property bfactors
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+bsphere(wrap=False)
+

Return the bounding sphere of the selection.

+

The sphere is calculated relative to the +center of geometry.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms to the primary unit cell before +calculation. [False]

+
+
Returns
+

    +
  • R (float) – Radius of the bounding sphere.

  • +
  • center (numpy.ndarray) – Coordinates of the sphere center as [xcen, ycen, zcen].

  • +
+

+
+
+
+

New in version 0.7.3.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center(weights, wrap=False, unwrap=False, compound='group')
+

Weighted center of (compounds of) the group

+

Computes the weighted center of Atoms in the group. +Weighted centers per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the weights of a compound sum up to zero, the +coordinates of that compound’s weighted center will be nan (not a +number).

+
+
Parameters
+
    +
  • weights (array_like or None) – Weights to be used. Setting weights=None is equivalent to passing +identical weights for all atoms of the group.

  • +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not 'group' the center of each +compound will be calculated without moving any +Atoms to keep the compounds intact. Instead, the +resulting position vectors will be moved to the primary unit cell +after calculation. Default [False].

  • +
  • unwrap (bool, optional) –

    +
    If True, compounds will be unwrapped before computing their

    centers.

    +
    +
    +

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the weighted center of all atoms in the group will +be returned as a single position vector. Else, the weighted centers +of each Segment, Residue, molecule, or fragment +will be returned as an array of position vectors, i.e. a 2d array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the weighted center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments', 'residues', +'molecules', or 'fragments', the output will be a 2d array +of shape (n, 3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • ValueError – If both ‘wrap’ and ‘unwrap’ set to true.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the center of charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.center(sel.charges)
+
+
+

To find the centers of mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.center(sel.masses, compound='residues')
+
+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_charge(wrap=False, unwrap=False, compound='group')
+

Center of (absolute) charge of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \vert q_i \vert \boldsymbol r_i} + {\sum_i \vert q_i \vert}\]
+

where \(q_i\) is the charge and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of charge per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the charges of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of charge of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where +n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic charges.

+
+

New in version 2.2.0.

+
+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+center_of_geometry(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_mass(wrap=False, unwrap=False, compound='group')
+

Center of mass of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i m_i \boldsymbol r_i}{\sum m_i}\]
+

where \(m_i\) is the mass and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of mass per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the masses of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. a 2d +array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of mass of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where n +is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic masses.

+
+
+

Changed in version 0.8: Added pbc parameter

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' compounds; +added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+centroid(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+chi1_selections(n_name='N', ca_name='CA', cb_name='CB', cg_name='CG CG1 OG OG1 SG')
+

Select list of AtomGroups corresponding to the chi1 sidechain dihedral +N-CA-CB-CG.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
  • cb_name (str (optional)) – name for the beta-carbon atom

  • +
  • cg_name (str (optional)) – name for the gamma-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no CB and/or CG is found +then the corresponding item in the list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+concatenate(other)
+

Concatenate with another Group or Component of the same level.

+

Duplicate entries and original order is preserved. It is synomymous to +the + operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with elements of self and other concatenated

+
+
Return type
+

Group

+
+
+

Example

+

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)
+
+
+
+

New in version 0.16.0.

+
+
+ +
+
+copy()
+

Get another group identical to this one.

+
+

New in version 0.19.0.

+
+
+ +
+
+difference(other)
+

Elements from this Group that do not appear in another

+

This method removes duplicate elements and sorts the result. As such, +it is different from subtract(). difference() is synomymous +to the - operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, without +duplicate elements

+
+
Return type
+

Group

+
+
+ +
+

New in version 0.16.

+
+
+ +
+
+property dimensions
+

Obtain a copy of the dimensions of the currently loaded Timestep

+
+ +
+
+dipole_moment(**kwargs)
+

Dipole moment of the group or compounds in a group.

+
+\[\mu = |\boldsymbol{\mu}| = \sqrt{ \sum_{i=1}^{D} \mu^2 }\]
+

Where \(D\) is the number of dimensions, in this case 3.

+

Computes the dipole moment of Atoms in the group. +Dipole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is a net charge, the magnitude of the dipole +moment is dependent on the center chosen. +See dipole_vector().

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole moment(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+dipole_vector(wrap=False, unwrap=False, compound='group', center='mass')
+

Dipole vector of the group.

+
+\[\boldsymbol{\mu} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} )\]
+

Computes the dipole vector of Atoms in the group. +Dipole vector per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that the magnitude of the dipole moment is independent of the +center chosen unless the species has a net charge. In the case of +a charged group the dipole moment can be later adjusted with:

+
+\[\boldsymbol{\mu}_{COC} = \boldsymbol{\mu}_{COM} + +q_{ag}\mathbf{r}_{COM} - q_{ag}\boldsymbol{r}_{COC}\]
+

Where \(\mathbf{r}_{COM}\) is the center of mass and +\(\mathbf{r}_{COC}\) is the center of charge.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole vector(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,3) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+groupby(topattrs)
+

Group together items in this group according to values of topattr

+
+
Parameters
+

topattrs (str or list) – One or more topology attributes to group components by. +Single arguments are passed as a string. Multiple arguments +are passed as a list.

+
+
Returns
+

Unique values of the multiple combinations of topology attributes +as keys, Groups as values.

+
+
Return type
+

dict

+
+
+

Example

+

To group atoms with the same mass together:

+
>>> ag.groupby('masses')
+{12.010999999999999: <AtomGroup with 462 atoms>,
+ 14.007: <AtomGroup with 116 atoms>,
+ 15.999000000000001: <AtomGroup with 134 atoms>}
+
+
+

To group atoms with the same residue name and mass together:

+
>>> ag.groupby(['resnames', 'masses'])
+{('ALA', 1.008): <AtomGroup with 95 atoms>,
+ ('ALA', 12.011): <AtomGroup with 57 atoms>,
+ ('ALA', 14.007): <AtomGroup with 19 atoms>,
+ ('ALA', 15.999): <AtomGroup with 19 atoms>},
+ ('ARG', 1.008): <AtomGroup with 169 atoms>,
+ ...}
+
+
+
>>> ag.groupby(['resnames', 'masses'])('ALA', 15.999)
+ <AtomGroup with 19 atoms>
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 0.18.0: The function accepts multiple attributes

+
+
+ +
+
+gyration_moments(wrap=False, unwrap=False, compound='group')
+

Moments of the gyration tensor.

+

The moments are defined as the eigenvalues of the gyration +tensor.

+
+\[\mathsf{T} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{r}_\mathrm{i} - + \mathbf{r}_\mathrm{COM})(\mathbf{r}_\mathrm{i} - \mathbf{r}_\mathrm{COM})\]
+

Where \(\mathbf{r}_\mathrm{COM}\) is the center of mass.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
Returns
+

principle_moments_of_gyration – Gyration vector(s) of (compounds of) the group in \(Å^2\). +If compound was set to 'group', the output will be a single +vector of length 3. Otherwise, the output will be a 2D array of shape +(n,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.5.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+intersection(other)
+

Group of elements which are in both this Group and another

+

This method removes duplicate elements and sorts the result. It is +synomymous to the & operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the common elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

Intersections can be used when the select atoms string would +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)
+
+
+
+

See also

+

union

+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_subset(other)
+

If this Group is a subset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_superset(other)
+

If this Group is a superset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict superset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+isdisjoint(other)
+

If the Group has no elements in common with the other Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if the two Groups do not have common elements

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issubset(other)
+

If all elements of this Group are part of another Group

+

Note that an empty group is a subset of any group of the same level.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issuperset(other)
+

If all elements of another Group are part of this Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+property isunique
+

Boolean indicating whether all components of the group are unique, +i.e., the group contains no duplicates.

+

Examples

+
>>> ag = u.atoms[[2, 1, 2, 2, 1, 0]]
+>>> ag
+<AtomGroup with 6 atoms>
+>>> ag.isunique
+False
+>>> ag2 = ag.unique
+>>> ag2
+<AtomGroup with 3 atoms>
+>>> ag2.isunique
+True
+
+
+
+

See also

+

asunique

+
+
+

New in version 0.19.0.

+
+
+ +
+
+property ix
+

Unique indices of the components in the Group.

+ +
+ +
+
+property ix_array
+

Unique indices of the components in the Group.

+

For a Group, ix_array is the same as ix. This method +gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+moment_of_inertia(wrap=False, unwrap=False, compound='group')
+

Moment of inertia tensor relative to center of mass.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers and tensor of inertia.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +compound determines the behavior of wrap. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

moment_of_inertia – Moment of inertia tensor as a 3 x 3 numpy array.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

The moment of inertia tensor \(\mathsf{I}\) is calculated for a group of +\(N\) atoms with coordinates \(\mathbf{r}_i,\ 1 \le i \le N\) +relative to its center of mass from the relative coordinates

+
+\[\mathbf{r}'_i = \mathbf{r}_i - \frac{1}{\sum_{i=1}^{N} m_i} \sum_{i=1}^{N} m_i \mathbf{r}_i\]
+

as

+
+\[\mathsf{I} = \sum_{i=1}^{N} m_i \Big[(\mathbf{r}'_i\cdot\mathbf{r}'_i) \sum_{\alpha=1}^{3} + \hat{\mathbf{e}}_\alpha \otimes \hat{\mathbf{e}}_\alpha - \mathbf{r}'_i \otimes \mathbf{r}'_i\Big]\]
+

where \(\hat{\mathbf{e}}_\alpha\) are Cartesian unit vectors, or in Cartesian coordinates

+
+\[I_{\alpha,\beta} = \sum_{k=1}^{N} m_k + \Big(\big(\sum_{\gamma=1}^3 (x'^{(k)}_{\gamma})^2 \big)\delta_{\alpha,\beta} + - x'^{(k)}_{\alpha} x'^{(k)}_{\beta} \Big).\]
+

where \(x'^{(k)}_{\alpha}\) are the Cartesian coordinates of the +relative coordinates \(\mathbf{r}'_k\).

+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property n_atoms
+

Number of Atoms present in this ResidueGroup, +including duplicate residues (and thus, duplicate atoms).

+

Equivalent to len(self.atoms).

+
+ +
+
+property n_residues
+

Number of residues in the ResidueGroup.

+

Equivalent to len(self).

+
+ +
+
+property n_segments
+

Number of unique segments present in the ResidueGroup.

+

Equivalent to len(self.segments).

+
+ +
+
+omega_selections(c_name='C', n_name='N', ca_name='CA')
+

Select list of AtomGroups corresponding to the omega protein +backbone dihedral CA-C-N’-CA’.

+

omega describes the -C-N- peptide bond. Typically, it is trans (180 +degrees) although cis-bonds (0 degrees) are also occasionally observed +(especially near Proline).

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no C’ found in the +previous residue (by resid) then the corresponding item in the +list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+pack_into_box(box=None, inplace=True)
+

Shift all Atoms in this group to the primary unit +cell.

+
+
Parameters
+
    +
  • box (array_like) – Box dimensions, can be either orthogonal or triclinic information. +Cell dimensions must be in an identical to format to those returned +by MDAnalysis.coordinates.timestep.Timestep.dimensions, +[lx, ly, lz, alpha, beta, gamma]. If None, uses these +timestep dimensions.

  • +
  • inplace (bool) – True to change coordinates in place.

  • +
+
+
Returns
+

coords – Shifted atom coordinates.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

All atoms will be moved so that they lie between 0 and boxlength +\(L_i\) in all dimensions, i.e. the lower left corner of the +simulation box is taken to be at (0,0,0):

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\]
+

The default is to take unit cell information from the underlying +Timestep instance. The optional +argument box can be used to provide alternative unit cell information +(in the MDAnalysis standard format +[Lx, Ly, Lz, alpha, beta, gamma]).

+

Works with either orthogonal or triclinic box types.

+
+

Note

+

pack_into_box() is identical to wrap() with all default +keywords.

+
+ +
+

New in version 0.8.

+
+
+ +
+
+phi_selections(c_name='C', n_name='N', ca_name='CA')
+

Select list of AtomGroups corresponding to the phi protein +backbone dihedral C’-N-CA-C.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • list of AtomGroups – 4-atom selections in the correct order. If no C’ found in the +previous residue (by resid) then corresponding item in the list +is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+principal_axes(wrap=False)
+

Calculate the principal axes from the moment of inertia.

+

e1,e2,e3 = AtomGroup.principal_axes()

+

The eigenvectors are sorted by eigenvalue, i.e. the first one +corresponds to the highest eigenvalue and is thus the first principal +axes.

+

The eigenvectors form a right-handed coordinate system.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
Returns
+

axis_vectors – 3 x 3 array with v[0] as first, v[1] as second, and +v[2] as third eigenvector.

+
+
Return type
+

array

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Always return principal axes in right-hand convention.

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+psi_selections(c_name='C', n_name='N', ca_name='CA')
+

Select list of AtomGroups corresponding to the psi protein +backbone dihedral N-CA-C-N’.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no N’ found in the +following residue (by resid) then the corresponding item in the +list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_moment(**kwargs)
+

Quadrupole moment of the group according to [Gray1984].

+
+\[Q = \sqrt{\frac{2}{3}{\hat{\mathsf{Q}}}:{\hat{\mathsf{Q}}}}\]
+

where the quadrupole moment is calculated from the tensor double +contraction of the traceless quadropole tensor \(\hat{\mathsf{Q}}\)

+

Computes the quadrupole moment of Atoms in the group. +Quadrupole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole moment is dependant on the +center chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole moment(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_tensor(wrap=False, unwrap=False, compound='group', center='mass')
+

Traceless quadrupole tensor of the group or compounds.

+

This tensor is first computed as the outer product of vectors from +a reference point to some atom, and multiplied by the atomic charge. +The tensor of each atom is then summed to produce the quadrupole +tensor of the group:

+
+\[\mathsf{Q} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} ) \otimes ( \mathbf{r}_{i} - \mathbf{r}_{COM} )\]
+

The traceless quadrupole tensor, \(\hat{\mathsf{Q}}\), is then +taken from:

+
+\[\hat{\mathsf{Q}} = \frac{3}{2} \mathsf{Q} - \frac{1}{2} +tr(\mathsf{Q})\]
+

Computes the quadrupole tensor of Atoms in the group. +Tensor per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole tensor is dependent on the +center (e.g., \(\mathbf{r}_{COM}\)) chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole tensor(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +tensor of shape (3,3). Otherwise, the output will be a 1d array +of shape (n,3,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+radius_of_gyration(wrap=False, **kwargs)
+

Radius of gyration.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property residues
+

The ResidueGroup itself.

+
+

See also

+
+
copy

return a true copy of the ResidueGroup

+
+
+
+
+

Changed in version 0.19.0: In previous versions, this returned a copy, but now +the ResidueGroup itself is returned. This should +not affect any code but only speed up calculations.

+
+
+ +
+
+rotate(R, point=(0, 0, 0))
+

Apply a rotation matrix R to the selection’s coordinates. +\(\mathsf{R}\) is a 3x3 orthogonal matrix that transforms a vector +\(\mathbf{x} \rightarrow \mathbf{x}'\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x}\]
+

Atom coordinates are rotated in-place.

+
+
Parameters
+
    +
  • R (array_like) – 3x3 rotation matrix

  • +
  • point (array_like, optional) – Center of rotation

  • +
+
+
Return type
+

self

+
+
+

Notes

+

By default, rotates about the origin point=(0, 0, 0). To rotate +a group g around its center of geometry, use +g.rotate(R, point=g.center_of_geometry()).

+
+

See also

+
+
rotateby

rotate around given axis and angle

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+
+ +
+
+rotateby(angle, axis, point=None)
+

Apply a rotation to the selection’s coordinates.

+
+
Parameters
+
    +
  • angle (float) – Rotation angle in degrees.

  • +
  • axis (array_like) – Rotation axis vector.

  • +
  • point (array_like, optional) – Center of rotation. If None then the center of geometry of this +group is used.

  • +
+
+
Return type
+

self

+
+
+

Notes

+

The transformation from current coordinates \(\mathbf{x}\) +to new coordinates \(\mathbf{x}'\) is

+
+\[\mathbf{x}' = \mathsf{R}\,(\mathbf{x}-\mathbf{p}) + \mathbf{p}\]
+

where \(\mathsf{R}\) is the rotation by angle around the +axis going through point \(\mathbf{p}\).

+
+

See also

+

MDAnalysis.lib.transformations.rotation_matrix

+
+
calculate

math:mathsf{R}

+
+
+
+
+ +
+
+property segments
+

Get sorted SegmentGroup of the unique segments present in +the ResidueGroup.

+
+ +
+
+sequence(**kwargs)
+

Returns the amino acid sequence.

+

The format of the sequence is selected with the keyword format:

+ ++++ + + + + + + + + + + + + + + + + +

format

description

‘SeqRecord’

Bio.SeqRecord.SeqRecord (default)

‘Seq’

Bio.Seq.Seq

‘string’

string

+

The sequence is returned by default (keyword format = 'SeqRecord') +as a Bio.SeqRecord.SeqRecord instance, which can then be +further processed. In this case, all keyword arguments (such as the +id string or the name or the description) are directly passed to +Bio.SeqRecord.SeqRecord.

+

If the keyword format is set to 'Seq', all kwargs are ignored +and a Bio.Seq.Seq instance is returned. The difference to the +record is that the record also contains metadata and can be directly +used as an input for other functions in Bio.

+

If the keyword format is set to 'string', all kwargs are +ignored and a Python string is returned.

+

Example: Write FASTA file

+

Use Bio.SeqIO.write(), which takes sequence records:

+
import Bio.SeqIO
+
+# get the sequence record of a protein component of a Universe
+protein = u.select_atoms("protein")
+record = protein.sequence(id="myseq1", name="myprotein")
+
+Bio.SeqIO.write(record, "single.fasta", "fasta")
+
+
+

A FASTA file with multiple entries can be written with

+
Bio.SeqIO.write([record1, record2, ...], "multi.fasta", "fasta")
+
+
+
+
Parameters
+
    +
  • format (string, optional) –

      +
    • "string": return sequence as a string of 1-letter codes

    • +
    • "Seq": return a Bio.Seq.Seq instance

    • +
    • "SeqRecord": return a Bio.SeqRecord.SeqRecord +instance

    • +
    +
    +

    Default is "SeqRecord"

    +
    +

  • +
  • id (optional) – Sequence ID for SeqRecord (should be different for different +sequences)

  • +
  • name (optional) – Name of the protein.

  • +
  • description (optional) – Short description of the sequence.

  • +
  • kwargs (optional) – Any other keyword arguments that are understood by +class:Bio.SeqRecord.SeqRecord.

  • +
+
+
Raises
+
    +
  • ValueError

  • +
  • 1-letter IUPAC protein amino acid code; make sure to only

  • +
  • select protein residues.

  • +
  • TypeError

  • +
+
+
+
+

New in version 0.9.0.

+
+
+

Note

+

This requires the underlying topology to have resnames. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+shape_parameter(wrap=False, unwrap=False, compound='group')
+

Shape parameter.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0. +Superfluous kwargs were removed.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+subtract(other)
+

Group with elements from this Group that don’t appear in other

+

The original order of this group is kept, as well as any duplicate +elements. If an element of this Group is duplicated and appears in +the other Group or Component, then all the occurences of that element +are removed from the returned Group.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, +conserves order and duplicates.

+
+
Return type
+

Group

+
+
+

Example

+

Unlike 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])
+
+
+
+

See also

+

concatenate, difference

+
+
+

New in version 0.16.

+
+
+ +
+
+symmetric_difference(other)
+

Group of elements which are only in one of this Group or another

+

This method removes duplicate elements and the result is sorted. It is +synomym to the ^ operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements that are in self or in other but not in +both, without duplicate elements

+
+
Return type
+

Group

+
+
+

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]
+
+
+
+

See also

+

difference

+
+
+

New in version 0.16.

+
+
+ +
+
+total_charge(compound='group')
+

Total charge of (compounds of) the group.

+

Computes the total charge of Atoms in the group. +Total charges per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If ‘group’, the total charge of all atoms in the group will +be returned as a single value. Otherwise, the total charges per +Segment, Residue, molecule, or fragment +will be returned as a 1d array. +Note that, in any case, only the charges of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total charge of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+total_mass(compound='group')
+

Total mass of (compounds of) the group.

+

Computes the total mass of Atoms in the group. +Total masses per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the total mass of all atoms in the group will be +returned as a single value. Otherwise, the total masses per +Segment, Residue, molecule, or fragment will be +returned as a 1d array. +Note that, in any case, only the masses of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total mass of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+transform(M)
+

Apply homogenous transformation matrix M to the coordinates.

+

Atom coordinates are rotated and translated in-place.

+
+
Parameters
+

M (array_like) – 4x4 matrix with the rotation in R = M[:3, :3] and the +translation in t = M[:3, 3].

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The rotation \(\mathsf{R}\) is about the origin and is applied +before the translation \(\mathbf{t}\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x} + \mathbf{t}\]
+
+ +
+
+translate(t)
+

Apply translation vector t to the selection’s coordinates.

+

Atom coordinates are translated in-place.

+
+
Parameters
+

t (array_like) – vector to translate coordinates with

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The method applies a translation to the AtomGroup +from current coordinates \(\mathbf{x}\) to new coordinates +\(\mathbf{x}'\):

+
+\[\mathbf{x}' = \mathbf{x} + \mathbf{t}\]
+
+ +
+
+union(other)
+

Group of elements either in this Group or another

+

On the contrary to concatenation, this method sort the elements and +removes duplicate ones. It is synomymous to the | operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the combined elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

In contrast to 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)
+
+
+
+

See also

+

concatenate, intersection

+
+
+

New in version 0.16.

+
+
+ +
+
+property unique
+

Return a ResidueGroup containing sorted and unique +Residues only.

+

Examples

+
>>> rg = u.residues[[2, 1, 2, 2, 1, 0]]
+>>> rg
+<ResidueGroup with 6 residues>
+>>> rg.ix
+array([2, 1, 2, 2, 1, 0])
+>>> rg2 = rg.unique
+>>> rg2
+<ResidueGroup with 3 residues>
+>>> rg2.ix
+array([0, 1, 2])
+>>> rg2.unique is rg2
+False
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 0.19.0: If the ResidueGroup is already +unique, ResidueGroup.unique now returns the group itself +instead of a copy.

+
+
+

Changed in version 2.0.0: This function now always returns a copy.

+
+
+ +
+
+property universe
+

The underlying Universe the group +belongs to.

+
+ +
+
+unwrap(compound='fragments', reference='com', inplace=True)
+

Move atoms of this group so that bonds within the +group’s compounds aren’t split across periodic boundaries.

+

This function is most useful when atoms have been packed into the +primary unit cell, causing breaks mid-molecule, with the molecule then +appearing on either side of the unit cell. This is problematic for +operations such as calculating the center of mass of the molecule.

+
+-----------+       +-----------+
+|           |       |           |
+| 6       3 |       |         3 | 6
+| !       ! |       |         ! | !
+|-5-8   1-2-|  ==>  |       1-2-|-5-8
+| !       ! |       |         ! | !
+| 7       4 |       |         4 | 7
+|           |       |           |
++-----------+       +-----------+
+
+
+
+
Parameters
+
    +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to unwrap. Note that, in any case, all +atoms within each compound must be interconnected by bonds, i.e., +compounds must correspond to (parts of) molecules.

  • +
  • reference ({'com', 'cog', None}, optional) – If 'com' (center of mass) or 'cog' (center of geometry), the +unwrapped compounds will be shifted so that their individual +reference point lies within the primary unit cell. +If None, no such shift is performed.

  • +
  • inplace (bool, optional) – If True, coordinates are modified in place.

  • +
+
+
Returns
+

coords – Unwrapped atom coordinate array of shape (n, 3).

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • NoDataError – If compound is 'molecules' but the underlying topology does + not contain molecule information, or if reference is 'com' + but the topology does not contain masses.

  • +
  • ValueError – If reference is not one of 'com', 'cog', or None, or + if reference is 'com' and the total mass of any compound is + zero.

  • +
+
+
+
+

Note

+

Be aware of the fact that only atoms belonging to the group will +be unwrapped! If you want entire molecules to be unwrapped, make sure +that all atoms of these molecules are part of the group. +An AtomGroup containing all atoms of all fragments in the group ag +can be created with:

+
all_frag_atoms = sum(ag.fragments)
+
+
+
+
+

See also

+

make_whole(), wrap(), pack_into_box(), apply_PBC()

+
+
+

New in version 0.20.0.

+
+
+ +
+
+wrap(compound='atoms', center='com', box=None, inplace=True)
+

Shift the contents of this group back into the primary unit cell +according to periodic boundary conditions.

+

Specifying a compound will keep the Atoms in each +compound together during the process. If compound is different from +'atoms', each compound as a whole will be shifted so that its +center lies within the primary unit cell.

+
+
Parameters
+
    +
  • compound ({'atoms', 'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to keep together during wrapping. Note that, +in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
  • center ({'com', 'cog'}) – How to define the center of a given group of atoms. If compound is +'atoms', this parameter is meaningless and therefore ignored.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma]. +If None, uses the +dimensions of the current time step.

  • +
  • inplace (bool, optional) – If True, coordinates will be changed in place.

  • +
+
+
Returns
+

Array of wrapped atom coordinates of dtype np.float32 and shape +(len(self.atoms.n_atoms), 3)

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'atoms', 'group', + 'segments', 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds or if + center is 'com' but the topology doesn’t contain masses.

  • +
+
+
+

Notes

+

All atoms of the group will be moved so that the centers of its +compounds lie within the primary periodic image. For orthorhombic unit +cells, the primary periodic image is defined as the half-open interval +\([0,L_i)\) between \(0\) and boxlength \(L_i\) in all +dimensions \(i\in\{x,y,z\}\), i.e., the origin of the of the +simulation box is taken to be at the origin \((0,0,0)\) of the +euclidian coordinate system. A compound center residing at position +\(x_i\) in dimension \(i\) will be shifted to \(x_i'\) +according to

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\,.\]
+

When specifying a compound, the translation is calculated based on +each compound. The same translation is applied to all atoms +within this compound, meaning it will not be broken by the shift. +This might however mean that not all atoms of a compound will be +inside the unit cell after wrapping, but rather will be the center of +the compound. +Be aware of the fact that only atoms belonging to the group will be +taken into account!

+

center allows to define how the center of each group is computed. +This can be either 'com' for center of mass, or 'cog' for +center of geometry.

+

box allows a unit cell to be given for the transformation. If not +specified, the dimensions +information from the current +Timestep will be used.

+
+

Note

+

AtomGroup.wrap() is currently faster than +ResidueGroup.wrap() or SegmentGroup.wrap().

+
+ +
+

New in version 0.9.2.

+
+
+

Changed in version 0.20.0: The method only acts on atoms belonging to the group and returns +the wrapped positions as a numpy.ndarray. +Added optional argument inplace.

+
+
+ +
+ +
+
+class MDAnalysis.core.groups.SegmentGroup(*args, **kwargs)[source]
+

SegmentGroup base class.

+

This class is used by a Universe for +generating its Topology-specific SegmentGroup class. All the +TopologyAttr components are obtained +from GroupBase, so this class only includes ad-hoc methods specific +to SegmentGroups.

+

SegmentGroups can be compared and combined using +group operators. See the list of these operators on GroupBase.

+
+

Deprecated since version 0.16.2: Instant selectors of Segments will be removed in the 1.0 release.

+
+
+

Changed in version 1.0.0: Removed instant selectors, use select_atoms instead

+
+
+

Changed in version 2.1.0: Indexing an SegmentGroup with None raises a TypeError.

+
+
+
+accumulate(attribute, function=<function sum>, compound='group')
+

Accumulates the attribute associated with (compounds of) the group.

+

Accumulates the attribute of Atoms in the group. +The accumulation per Residue, Segment, molecule, +or fragment can be obtained by setting the compound parameter +accordingly. By default, the method sums up all attributes per compound, +but any function that takes an array and returns an acuumulation over a +given axis can be used. For multi-dimensional input arrays, the +accumulation is performed along the first axis.

+
+
Parameters
+
    +
  • attribute (str or array_like) – Attribute or array of values to accumulate. +If a numpy.ndarray (or compatible) is provided, its first +dimension must have the same length as the total number of atoms in +the group.

  • +
  • function (callable, optional) – The function performing the accumulation. It must take the array of +attribute values to accumulate as its only positional argument and +accept an (optional) keyword argument axis allowing to specify +the axis along which the accumulation is performed.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the accumulation of all attributes associated with +atoms in the group will be returned as a single value. Otherwise, +the accumulation of the attributes per Segment, +Residue, molecule, or fragment will be returned as a 1d +array. Note that, in any case, only the Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

Acuumulation of the attribute. +If compound is set to 'group', the first dimension of the +attribute array will be contracted to a single value. +If compound is set to 'segments', 'residues', +'molecules', or 'fragments', the length of the first +dimension will correspond to the number of compounds. In all cases, +the other dimensions of the returned array will be of the original +shape (without the first dimension).

+
+
Return type
+

float or numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If the length of a provided attribute array does not correspond to + the number of atoms in the group.

  • +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums), or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the total charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.accumulate('charges')
+
+
+

To find the total mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.accumulate('masses', compound='residues')
+
+
+

To find the maximum atomic charge per fragment of a given +AtomGroup:

+
>>> sel.accumulate('charges', compound="fragments", function=np.max)
+
+
+
+

New in version 0.20.0.

+
+
+ +
+
+align_principal_axis(axis, vector)
+

Align principal axis with index axis with vector.

+
+
Parameters
+
    +
  • axis ({0, 1, 2}) – Index of the principal axis (0, 1, or 2), as produced by +principal_axes().

  • +
  • vector (array_like) – Vector to align principal axis with.

  • +
+
+
+

Notes

+

To align the long axis of a channel (the first principal axis, i.e. +axis = 0) with the z-axis:

+
u.atoms.align_principal_axis(0, [0,0,1])
+u.atoms.write("aligned.pdb")
+
+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+asphericity(wrap=False, unwrap=False, compound='group')
+

Asphericity.

+

See [Dima2004b] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap and compound parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+asunique(sorted=False)[source]
+

Return a SegmentGroup containing unique +Segments only, with optional sorting.

+

If the SegmentGroup is unique, this is the group itself.

+
+
Parameters
+

sorted (bool (optional)) – Whether or not the returned SegmentGroup should be sorted +by segindex.

+
+
Returns
+

Unique SegmentGroup

+
+
Return type
+

SegmentGroup

+
+
+

Examples

+
>>> sg = u.segments[[2, 1, 2, 2, 1, 0]]
+>>> sg
+<SegmentGroup with 6 segments>
+>>> sg.ix
+array([2, 1, 2, 2, 1, 0])
+>>> sg2 = sg.asunique()
+>>> sg2
+<SegmentGroup with 3 segments>
+>>> sg2.ix
+array([0, 1, 2])
+>>> sg2.asunique() is sg2
+True
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+property atoms
+

An AtomGroup of Atoms present in this +SegmentGroup.

+

The Atoms are ordered locally by Residue, which +are further ordered by Segment in the SegmentGroup. +Duplicates are not removed.

+
+ +
+
+bbox(wrap=False)
+

Return the bounding box of the selection.

+

The lengths A,B,C of the orthorhombic enclosing box are

+
L = AtomGroup.bbox()
+A,B,C = L[1] - L[0]
+
+
+
+
Parameters
+

wrap (bool, optional) – If True, move all Atoms to the primary unit cell +before calculation. [False]

+
+
Returns
+

corners – 2x3 array giving corners of bounding box as +[[xmin, ymin, zmin], [xmax, ymax, zmax]].

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 0.7.2.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+property bfactors
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+bsphere(wrap=False)
+

Return the bounding sphere of the selection.

+

The sphere is calculated relative to the +center of geometry.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms to the primary unit cell before +calculation. [False]

+
+
Returns
+

    +
  • R (float) – Radius of the bounding sphere.

  • +
  • center (numpy.ndarray) – Coordinates of the sphere center as [xcen, ycen, zcen].

  • +
+

+
+
+
+

New in version 0.7.3.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center(weights, wrap=False, unwrap=False, compound='group')
+

Weighted center of (compounds of) the group

+

Computes the weighted center of Atoms in the group. +Weighted centers per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the weights of a compound sum up to zero, the +coordinates of that compound’s weighted center will be nan (not a +number).

+
+
Parameters
+
    +
  • weights (array_like or None) – Weights to be used. Setting weights=None is equivalent to passing +identical weights for all atoms of the group.

  • +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not 'group' the center of each +compound will be calculated without moving any +Atoms to keep the compounds intact. Instead, the +resulting position vectors will be moved to the primary unit cell +after calculation. Default [False].

  • +
  • unwrap (bool, optional) –

    +
    If True, compounds will be unwrapped before computing their

    centers.

    +
    +
    +

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the weighted center of all atoms in the group will +be returned as a single position vector. Else, the weighted centers +of each Segment, Residue, molecule, or fragment +will be returned as an array of position vectors, i.e. a 2d array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the weighted center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments', 'residues', +'molecules', or 'fragments', the output will be a 2d array +of shape (n, 3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'group', 'segments', + 'residues', 'molecules', or 'fragments'.

  • +
  • ValueError – If both ‘wrap’ and ‘unwrap’ set to true.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds.

  • +
+
+
+

Examples

+

To find the center of charge of a given AtomGroup:

+
>>> sel = u.select_atoms('prop mass > 4.0')
+>>> sel.center(sel.charges)
+
+
+

To find the centers of mass per residue of all CA Atoms:

+
>>> sel = u.select_atoms('name CA')
+>>> sel.center(sel.masses, compound='residues')
+
+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_charge(wrap=False, unwrap=False, compound='group')
+

Center of (absolute) charge of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \vert q_i \vert \boldsymbol r_i} + {\sum_i \vert q_i \vert}\]
+

where \(q_i\) is the charge and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of charge per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the charges of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of charge of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where +n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic charges.

+
+

New in version 2.2.0.

+
+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+center_of_geometry(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+center_of_mass(wrap=False, unwrap=False, compound='group')
+

Center of mass of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i m_i \boldsymbol r_i}{\sum m_i}\]
+

where \(m_i\) is the mass and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of mass per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the masses of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. a 2d +array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of mass of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where n +is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic masses.

+
+
+

Changed in version 0.8: Added pbc parameter

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' compounds; +added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+centroid(wrap=False, unwrap=False, compound='group')
+

Center of geometry of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \boldsymbol r_i}{\sum_i 1}\]
+

where \(\boldsymbol r_i\) of Atoms \(i\). +Centers of geometry per Residue or per Segment can +be obtained by setting the compound parameter accordingly.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. If True and compound is +'segments' or 'residues', the center of each compound will +be calculated without moving any Atoms to keep the +compounds intact. Instead, the resulting position vectors will be +moved to the primary unit cell after calculation. Default False.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – If 'group', the center of geometry of all Atoms +in the group will be returned as a single position vector. Else, +the centers of geometry of each Segment or +Residue will be returned as an array of position vectors, +i.e. a 2d array. Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the geometric center(s) of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d array of shape (n, 3) where n is the +number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' +compounds

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 1.0.0: Removed flags affecting default behaviour

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+concatenate(other)
+

Concatenate with another Group or Component of the same level.

+

Duplicate entries and original order is preserved. It is synomymous to +the + operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with elements of self and other concatenated

+
+
Return type
+

Group

+
+
+

Example

+

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)
+
+
+
+

New in version 0.16.0.

+
+
+ +
+
+copy()
+

Get another group identical to this one.

+
+

New in version 0.19.0.

+
+
+ +
+
+difference(other)
+

Elements from this Group that do not appear in another

+

This method removes duplicate elements and sorts the result. As such, +it is different from subtract(). difference() is synomymous +to the - operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, without +duplicate elements

+
+
Return type
+

Group

+
+
+ +
+

New in version 0.16.

+
+
+ +
+
+property dimensions
+

Obtain a copy of the dimensions of the currently loaded Timestep

+
+ +
+
+dipole_moment(**kwargs)
+

Dipole moment of the group or compounds in a group.

+
+\[\mu = |\boldsymbol{\mu}| = \sqrt{ \sum_{i=1}^{D} \mu^2 }\]
+

Where \(D\) is the number of dimensions, in this case 3.

+

Computes the dipole moment of Atoms in the group. +Dipole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is a net charge, the magnitude of the dipole +moment is dependent on the center chosen. +See dipole_vector().

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole moment(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+dipole_vector(wrap=False, unwrap=False, compound='group', center='mass')
+

Dipole vector of the group.

+
+\[\boldsymbol{\mu} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} )\]
+

Computes the dipole vector of Atoms in the group. +Dipole vector per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that the magnitude of the dipole moment is independent of the +center chosen unless the species has a net charge. In the case of +a charged group the dipole moment can be later adjusted with:

+
+\[\boldsymbol{\mu}_{COC} = \boldsymbol{\mu}_{COM} + +q_{ag}\mathbf{r}_{COM} - q_{ag}\boldsymbol{r}_{COC}\]
+

Where \(\mathbf{r}_{COM}\) is the center of mass and +\(\mathbf{r}_{COC}\) is the center of charge.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole vector(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,3) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+groupby(topattrs)
+

Group together items in this group according to values of topattr

+
+
Parameters
+

topattrs (str or list) – One or more topology attributes to group components by. +Single arguments are passed as a string. Multiple arguments +are passed as a list.

+
+
Returns
+

Unique values of the multiple combinations of topology attributes +as keys, Groups as values.

+
+
Return type
+

dict

+
+
+

Example

+

To group atoms with the same mass together:

+
>>> ag.groupby('masses')
+{12.010999999999999: <AtomGroup with 462 atoms>,
+ 14.007: <AtomGroup with 116 atoms>,
+ 15.999000000000001: <AtomGroup with 134 atoms>}
+
+
+

To group atoms with the same residue name and mass together:

+
>>> ag.groupby(['resnames', 'masses'])
+{('ALA', 1.008): <AtomGroup with 95 atoms>,
+ ('ALA', 12.011): <AtomGroup with 57 atoms>,
+ ('ALA', 14.007): <AtomGroup with 19 atoms>,
+ ('ALA', 15.999): <AtomGroup with 19 atoms>},
+ ('ARG', 1.008): <AtomGroup with 169 atoms>,
+ ...}
+
+
+
>>> ag.groupby(['resnames', 'masses'])('ALA', 15.999)
+ <AtomGroup with 19 atoms>
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 0.18.0: The function accepts multiple attributes

+
+
+ +
+
+gyration_moments(wrap=False, unwrap=False, compound='group')
+

Moments of the gyration tensor.

+

The moments are defined as the eigenvalues of the gyration +tensor.

+
+\[\mathsf{T} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{r}_\mathrm{i} - + \mathbf{r}_\mathrm{COM})(\mathbf{r}_\mathrm{i} - \mathbf{r}_\mathrm{COM})\]
+

Where \(\mathbf{r}_\mathrm{COM}\) is the center of mass.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
Returns
+

principle_moments_of_gyration – Gyration vector(s) of (compounds of) the group in \(Å^2\). +If compound was set to 'group', the output will be a single +vector of length 3. Otherwise, the output will be a 2D array of shape +(n,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.5.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+intersection(other)
+

Group of elements which are in both this Group and another

+

This method removes duplicate elements and sorts the result. It is +synomymous to the & operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the common elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

Intersections can be used when the select atoms string would +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)
+
+
+
+

See also

+

union

+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_subset(other)
+

If this Group is a subset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+is_strict_superset(other)
+

If this Group is a superset of another Group but not identical

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a strict superset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+isdisjoint(other)
+

If the Group has no elements in common with the other Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if the two Groups do not have common elements

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issubset(other)
+

If all elements of this Group are part of another Group

+

Note that an empty group is a subset of any group of the same level.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+issuperset(other)
+

If all elements of another Group are part of this Group

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

True if this Group is a subset of the other one

+
+
Return type
+

bool

+
+
+
+

New in version 0.16.

+
+
+ +
+
+property isunique
+

Boolean indicating whether all components of the group are unique, +i.e., the group contains no duplicates.

+

Examples

+
>>> ag = u.atoms[[2, 1, 2, 2, 1, 0]]
+>>> ag
+<AtomGroup with 6 atoms>
+>>> ag.isunique
+False
+>>> ag2 = ag.unique
+>>> ag2
+<AtomGroup with 3 atoms>
+>>> ag2.isunique
+True
+
+
+
+

See also

+

asunique

+
+
+

New in version 0.19.0.

+
+
+ +
+
+property ix
+

Unique indices of the components in the Group.

+ +
+ +
+
+property ix_array
+

Unique indices of the components in the Group.

+

For a Group, ix_array is the same as ix. This method +gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+moment_of_inertia(wrap=False, unwrap=False, compound='group')
+

Moment of inertia tensor relative to center of mass.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers and tensor of inertia.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +compound determines the behavior of wrap. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

moment_of_inertia – Moment of inertia tensor as a 3 x 3 numpy array.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

The moment of inertia tensor \(\mathsf{I}\) is calculated for a group of +\(N\) atoms with coordinates \(\mathbf{r}_i,\ 1 \le i \le N\) +relative to its center of mass from the relative coordinates

+
+\[\mathbf{r}'_i = \mathbf{r}_i - \frac{1}{\sum_{i=1}^{N} m_i} \sum_{i=1}^{N} m_i \mathbf{r}_i\]
+

as

+
+\[\mathsf{I} = \sum_{i=1}^{N} m_i \Big[(\mathbf{r}'_i\cdot\mathbf{r}'_i) \sum_{\alpha=1}^{3} + \hat{\mathbf{e}}_\alpha \otimes \hat{\mathbf{e}}_\alpha - \mathbf{r}'_i \otimes \mathbf{r}'_i\Big]\]
+

where \(\hat{\mathbf{e}}_\alpha\) are Cartesian unit vectors, or in Cartesian coordinates

+
+\[I_{\alpha,\beta} = \sum_{k=1}^{N} m_k + \Big(\big(\sum_{\gamma=1}^3 (x'^{(k)}_{\gamma})^2 \big)\delta_{\alpha,\beta} + - x'^{(k)}_{\alpha} x'^{(k)}_{\beta} \Big).\]
+

where \(x'^{(k)}_{\alpha}\) are the Cartesian coordinates of the +relative coordinates \(\mathbf{r}'_k\).

+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property n_atoms
+

Number of atoms present in the SegmentGroup, including +duplicate segments (and thus, duplicate atoms).

+

Equivalent to len(self.atoms).

+
+ +
+
+property n_residues
+

Number of residues present in this SegmentGroup, including +duplicate segments (and thus, residues).

+

Equivalent to len(self.residues).

+
+ +
+
+property n_segments
+

Number of segments in the SegmentGroup.

+

Equivalent to len(self).

+
+ +
+
+pack_into_box(box=None, inplace=True)
+

Shift all Atoms in this group to the primary unit +cell.

+
+
Parameters
+
    +
  • box (array_like) – Box dimensions, can be either orthogonal or triclinic information. +Cell dimensions must be in an identical to format to those returned +by MDAnalysis.coordinates.timestep.Timestep.dimensions, +[lx, ly, lz, alpha, beta, gamma]. If None, uses these +timestep dimensions.

  • +
  • inplace (bool) – True to change coordinates in place.

  • +
+
+
Returns
+

coords – Shifted atom coordinates.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

All atoms will be moved so that they lie between 0 and boxlength +\(L_i\) in all dimensions, i.e. the lower left corner of the +simulation box is taken to be at (0,0,0):

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\]
+

The default is to take unit cell information from the underlying +Timestep instance. The optional +argument box can be used to provide alternative unit cell information +(in the MDAnalysis standard format +[Lx, Ly, Lz, alpha, beta, gamma]).

+

Works with either orthogonal or triclinic box types.

+
+

Note

+

pack_into_box() is identical to wrap() with all default +keywords.

+
+ +
+

New in version 0.8.

+
+
+ +
+
+principal_axes(wrap=False)
+

Calculate the principal axes from the moment of inertia.

+

e1,e2,e3 = AtomGroup.principal_axes()

+

The eigenvectors are sorted by eigenvalue, i.e. the first one +corresponds to the highest eigenvalue and is thus the first principal +axes.

+

The eigenvectors form a right-handed coordinate system.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
Returns
+

axis_vectors – 3 x 3 array with v[0] as first, v[1] as second, and +v[2] as third eigenvector.

+
+
Return type
+

array

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Always return principal axes in right-hand convention.

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_moment(**kwargs)
+

Quadrupole moment of the group according to [Gray1984].

+
+\[Q = \sqrt{\frac{2}{3}{\hat{\mathsf{Q}}}:{\hat{\mathsf{Q}}}}\]
+

where the quadrupole moment is calculated from the tensor double +contraction of the traceless quadropole tensor \(\hat{\mathsf{Q}}\)

+

Computes the quadrupole moment of Atoms in the group. +Quadrupole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole moment is dependant on the +center chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole moment(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+quadrupole_tensor(wrap=False, unwrap=False, compound='group', center='mass')
+

Traceless quadrupole tensor of the group or compounds.

+

This tensor is first computed as the outer product of vectors from +a reference point to some atom, and multiplied by the atomic charge. +The tensor of each atom is then summed to produce the quadrupole +tensor of the group:

+
+\[\mathsf{Q} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} ) \otimes ( \mathbf{r}_{i} - \mathbf{r}_{COM} )\]
+

The traceless quadrupole tensor, \(\hat{\mathsf{Q}}\), is then +taken from:

+
+\[\hat{\mathsf{Q}} = \frac{3}{2} \mathsf{Q} - \frac{1}{2} +tr(\mathsf{Q})\]
+

Computes the quadrupole tensor of Atoms in the group. +Tensor per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole tensor is dependent on the +center (e.g., \(\mathbf{r}_{COM}\)) chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole tensor(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +tensor of shape (3,3). Otherwise, the output will be a 1d array +of shape (n,3,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+radius_of_gyration(wrap=False, **kwargs)
+

Radius of gyration.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property residues
+

A ResidueGroup of Residues present in this +SegmentGroup.

+

The Residues are ordered locally by +Segment in the SegmentGroup. Duplicates are not +removed.

+
+ +
+
+rotate(R, point=(0, 0, 0))
+

Apply a rotation matrix R to the selection’s coordinates. +\(\mathsf{R}\) is a 3x3 orthogonal matrix that transforms a vector +\(\mathbf{x} \rightarrow \mathbf{x}'\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x}\]
+

Atom coordinates are rotated in-place.

+
+
Parameters
+
    +
  • R (array_like) – 3x3 rotation matrix

  • +
  • point (array_like, optional) – Center of rotation

  • +
+
+
Return type
+

self

+
+
+

Notes

+

By default, rotates about the origin point=(0, 0, 0). To rotate +a group g around its center of geometry, use +g.rotate(R, point=g.center_of_geometry()).

+
+

See also

+
+
rotateby

rotate around given axis and angle

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+
+ +
+
+rotateby(angle, axis, point=None)
+

Apply a rotation to the selection’s coordinates.

+
+
Parameters
+
    +
  • angle (float) – Rotation angle in degrees.

  • +
  • axis (array_like) – Rotation axis vector.

  • +
  • point (array_like, optional) – Center of rotation. If None then the center of geometry of this +group is used.

  • +
+
+
Return type
+

self

+
+
+

Notes

+

The transformation from current coordinates \(\mathbf{x}\) +to new coordinates \(\mathbf{x}'\) is

+
+\[\mathbf{x}' = \mathsf{R}\,(\mathbf{x}-\mathbf{p}) + \mathbf{p}\]
+

where \(\mathsf{R}\) is the rotation by angle around the +axis going through point \(\mathbf{p}\).

+
+

See also

+

MDAnalysis.lib.transformations.rotation_matrix

+
+
calculate

math:mathsf{R}

+
+
+
+
+ +
+
+property segments
+

The SegmentGroup itself.

+
+

See also

+
+
copy

return a true copy of the SegmentGroup

+
+
+
+
+

Changed in version 0.19.0: In previous versions, this returned a copy, but now +the SegmentGroup itself is returned. This should +not affect any code but only speed up calculations.

+
+
+ +
+
+shape_parameter(wrap=False, unwrap=False, compound='group')
+

Shape parameter.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0. +Superfluous kwargs were removed.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+subtract(other)
+

Group with elements from this Group that don’t appear in other

+

The original order of this group is kept, as well as any duplicate +elements. If an element of this Group is duplicated and appears in +the other Group or Component, then all the occurences of that element +are removed from the returned Group.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements of self that are not in other, +conserves order and duplicates.

+
+
Return type
+

Group

+
+
+

Example

+

Unlike 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])
+
+
+
+

See also

+

concatenate, difference

+
+
+

New in version 0.16.

+
+
+ +
+
+symmetric_difference(other)
+

Group of elements which are only in one of this Group or another

+

This method removes duplicate elements and the result is sorted. It is +synomym to the ^ operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the elements that are in self or in other but not in +both, without duplicate elements

+
+
Return type
+

Group

+
+
+

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]
+
+
+
+

See also

+

difference

+
+
+

New in version 0.16.

+
+
+ +
+
+total_charge(compound='group')
+

Total charge of (compounds of) the group.

+

Computes the total charge of Atoms in the group. +Total charges per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If ‘group’, the total charge of all atoms in the group will +be returned as a single value. Otherwise, the total charges per +Segment, Residue, molecule, or fragment +will be returned as a 1d array. +Note that, in any case, only the charges of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total charge of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have charges. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+total_mass(compound='group')
+

Total mass of (compounds of) the group.

+

Computes the total mass of Atoms in the group. +Total masses per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the total mass of all atoms in the group will be +returned as a single value. Otherwise, the total masses per +Segment, Residue, molecule, or fragment will be +returned as a 1d array. +Note that, in any case, only the masses of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total mass of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+

Note

+

This requires the underlying topology to have masses. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+transform(M)
+

Apply homogenous transformation matrix M to the coordinates.

+

Atom coordinates are rotated and translated in-place.

+
+
Parameters
+

M (array_like) – 4x4 matrix with the rotation in R = M[:3, :3] and the +translation in t = M[:3, 3].

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The rotation \(\mathsf{R}\) is about the origin and is applied +before the translation \(\mathbf{t}\):

+
+\[\mathbf{x}' = \mathsf{R}\mathbf{x} + \mathbf{t}\]
+
+ +
+
+translate(t)
+

Apply translation vector t to the selection’s coordinates.

+

Atom coordinates are translated in-place.

+
+
Parameters
+

t (array_like) – vector to translate coordinates with

+
+
Return type
+

self

+
+
+
+

See also

+
+
MDAnalysis.lib.transformations

module of all coordinate transforms

+
+
+
+

Notes

+

The method applies a translation to the AtomGroup +from current coordinates \(\mathbf{x}\) to new coordinates +\(\mathbf{x}'\):

+
+\[\mathbf{x}' = \mathbf{x} + \mathbf{t}\]
+
+ +
+
+union(other)
+

Group of elements either in this Group or another

+

On the contrary to concatenation, this method sort the elements and +removes duplicate ones. It is synomymous to the | operator.

+
+
Parameters
+

other (Group or Component) – Group or Component with other.level same as self.level

+
+
Returns
+

Group with the combined elements of self and other, without +duplicate elements

+
+
Return type
+

Group

+
+
+

Example

+

In contrast to 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)
+
+
+
+

See also

+

concatenate, intersection

+
+
+

New in version 0.16.

+
+
+ +
+
+property unique
+

Return a SegmentGroup containing sorted and unique +Segments only.

+

Examples

+
>>> sg = u.segments[[2, 1, 2, 2, 1, 0]]
+>>> sg
+<SegmentGroup with 6 segments>
+>>> sg.ix
+array([2, 1, 2, 2, 1, 0])
+>>> sg2 = sg.unique
+>>> sg2
+<SegmentGroup with 3 segments>
+>>> sg2.ix
+array([0, 1, 2])
+>>> sg2.unique is sg2
+False
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 0.19.0: If the SegmentGroup is already +unique, SegmentGroup.unique now returns the group itself +instead of a copy.

+
+
+

Changed in version 2.0.0: This function now always returns a copy.

+
+
+ +
+
+property universe
+

The underlying Universe the group +belongs to.

+
+ +
+
+unwrap(compound='fragments', reference='com', inplace=True)
+

Move atoms of this group so that bonds within the +group’s compounds aren’t split across periodic boundaries.

+

This function is most useful when atoms have been packed into the +primary unit cell, causing breaks mid-molecule, with the molecule then +appearing on either side of the unit cell. This is problematic for +operations such as calculating the center of mass of the molecule.

+
+-----------+       +-----------+
+|           |       |           |
+| 6       3 |       |         3 | 6
+| !       ! |       |         ! | !
+|-5-8   1-2-|  ==>  |       1-2-|-5-8
+| !       ! |       |         ! | !
+| 7       4 |       |         4 | 7
+|           |       |           |
++-----------+       +-----------+
+
+
+
+
Parameters
+
    +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to unwrap. Note that, in any case, all +atoms within each compound must be interconnected by bonds, i.e., +compounds must correspond to (parts of) molecules.

  • +
  • reference ({'com', 'cog', None}, optional) – If 'com' (center of mass) or 'cog' (center of geometry), the +unwrapped compounds will be shifted so that their individual +reference point lies within the primary unit cell. +If None, no such shift is performed.

  • +
  • inplace (bool, optional) – If True, coordinates are modified in place.

  • +
+
+
Returns
+

coords – Unwrapped atom coordinate array of shape (n, 3).

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • NoDataError – If compound is 'molecules' but the underlying topology does + not contain molecule information, or if reference is 'com' + but the topology does not contain masses.

  • +
  • ValueError – If reference is not one of 'com', 'cog', or None, or + if reference is 'com' and the total mass of any compound is + zero.

  • +
+
+
+
+

Note

+

Be aware of the fact that only atoms belonging to the group will +be unwrapped! If you want entire molecules to be unwrapped, make sure +that all atoms of these molecules are part of the group. +An AtomGroup containing all atoms of all fragments in the group ag +can be created with:

+
all_frag_atoms = sum(ag.fragments)
+
+
+
+
+

See also

+

make_whole(), wrap(), pack_into_box(), apply_PBC()

+
+
+

New in version 0.20.0.

+
+
+ +
+
+wrap(compound='atoms', center='com', box=None, inplace=True)
+

Shift the contents of this group back into the primary unit cell +according to periodic boundary conditions.

+

Specifying a compound will keep the Atoms in each +compound together during the process. If compound is different from +'atoms', each compound as a whole will be shifted so that its +center lies within the primary unit cell.

+
+
Parameters
+
    +
  • compound ({'atoms', 'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +Which type of compound to keep together during wrapping. Note that, +in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
  • center ({'com', 'cog'}) – How to define the center of a given group of atoms. If compound is +'atoms', this parameter is meaningless and therefore ignored.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma]. +If None, uses the +dimensions of the current time step.

  • +
  • inplace (bool, optional) – If True, coordinates will be changed in place.

  • +
+
+
Returns
+

Array of wrapped atom coordinates of dtype np.float32 and shape +(len(self.atoms.n_atoms), 3)

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • ValueError – If compound is not one of 'atoms', 'group', + 'segments', 'residues', 'molecules', or 'fragments'.

  • +
  • NoDataError – If compound is 'molecule' but the topology doesn’t + contain molecule information (molnums) or if compound is + 'fragments' but the topology doesn’t contain bonds or if + center is 'com' but the topology doesn’t contain masses.

  • +
+
+
+

Notes

+

All atoms of the group will be moved so that the centers of its +compounds lie within the primary periodic image. For orthorhombic unit +cells, the primary periodic image is defined as the half-open interval +\([0,L_i)\) between \(0\) and boxlength \(L_i\) in all +dimensions \(i\in\{x,y,z\}\), i.e., the origin of the of the +simulation box is taken to be at the origin \((0,0,0)\) of the +euclidian coordinate system. A compound center residing at position +\(x_i\) in dimension \(i\) will be shifted to \(x_i'\) +according to

+
+\[x_i' = x_i - \left\lfloor\frac{x_i}{L_i}\right\rfloor\,.\]
+

When specifying a compound, the translation is calculated based on +each compound. The same translation is applied to all atoms +within this compound, meaning it will not be broken by the shift. +This might however mean that not all atoms of a compound will be +inside the unit cell after wrapping, but rather will be the center of +the compound. +Be aware of the fact that only atoms belonging to the group will be +taken into account!

+

center allows to define how the center of each group is computed. +This can be either 'com' for center of mass, or 'cog' for +center of geometry.

+

box allows a unit cell to be given for the transformation. If not +specified, the dimensions +information from the current +Timestep will be used.

+
+

Note

+

AtomGroup.wrap() is currently faster than +ResidueGroup.wrap() or SegmentGroup.wrap().

+
+ +
+

New in version 0.9.2.

+
+
+

Changed in version 0.20.0: The method only acts on atoms belonging to the group and returns +the wrapped positions as a numpy.ndarray. +Added optional argument inplace.

+
+
+ +
+ +
+
+class MDAnalysis.core.groups.UpdatingAtomGroup(*args, **kwargs)[source]
+

AtomGroup subclass that dynamically updates its selected atoms.

+

Accessing any attribute/method of an UpdatingAtomGroup instance +triggers a check for the last frame the group was updated. If the last +frame matches the current trajectory frame, the attribute is returned +normally; otherwise the group is updated (the stored selections are +re-applied), and only then is the attribute returned.

+
+

New in version 0.16.0.

+
+
+
Parameters
+
    +
  • base_group (AtomGroup) – group on which selections are to be applied.

  • +
  • selections (a tuple of Selection) – instances selections ready to be applied to base_group.

  • +
+
+
+
+
+property atoms
+

Get a static AtomGroup identical to the group of currently +selected Atoms in the UpdatingAtomGroup.

+

By returning a static AtomGroup it becomes possible to +compare the contents of the group between trajectory frames. See the +Example below.

+
+

Note

+

The atoms attribute of an UpdatingAtomGroup behaves +differently from AtomGroup.atoms: the latter returns the +AtomGroup itself whereas the former returns a +AtomGroup and not an UpdatingAtomGroup (for this, use +UpdatingAtomGroup.copy()).

+
+

Example

+

The static 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:

+
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
+
+    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
+
+
+

By remembering the atoms of the current time step in +water_shell_prev, it becomes possible to use the subtraction +of AtomGroups to find the water molecules that +changed.

+
+

See also

+
+
copy

return a true copy of the UpdatingAtomGroup

+
+
+
+
+ +
+
+copy()[source]
+

Get another UpdatingAtomGroup identical to this one.

+
+

New in version 0.19.0.

+
+
+ +
+
+property is_uptodate
+

Checks whether the selection needs updating based on frame number only.

+

Modifications to the coordinate data that render selections stale are +not caught, and in those cases is_uptodate may return an +erroneous value.

+
+
Returns
+

True if the group’s selection is up-to-date, False +otherwise.

+
+
Return type
+

bool

+
+
+
+ +
+
+update_selection()[source]
+

Forces the reevaluation and application of the group’s selection(s).

+

This method is triggered automatically when accessing attributes, if +the last update occurred under a different trajectory frame.

+
+ +
+ +
+
+

11.2.2.1.2. Chemical units

+
+
+class MDAnalysis.core.groups.Atom(*args, **kwargs)[source]
+

Atom base class.

+

This class is used by a Universe for +generating its Topology-specific Atom class. All the +TopologyAttr components are obtained +from ComponentBase, so this class only includes ad-hoc methods +specific to Atoms.

+
+
+property bfactor
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property bonded_atoms
+

An AtomGroup of all +Atoms bonded to this +Atom.

+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property force
+

Force on the atom.

+

The force can be changed by assigning an array of shape (3,).

+
+

Note

+

changing the force is not reflected in any files; reading any +frame from the trajectory will replace the change with that +from the file

+
+
+
Raises
+

NoDataError – If the underlying Timestep + does not contain + forces.

+
+
+
+ +
+
+property fragindex
+

The index (ID) of the +fragment this +Atom is part of.

+
+

New in version 0.20.0.

+
+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property fragment
+

An AtomGroup representing the +fragment this Atom is part of.

+

A fragment is a +group of atoms which are +interconnected by Bonds, i.e., +there exists a path along one +or more Bonds between any pair +of Atoms +within a fragment. Thus, a fragment typically corresponds to a molecule.

+
+

New in version 0.9.0.

+
+
+

Note

+

This requires the underlying topology to have bonds. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+property ix
+

Unique index of this component.

+

If this component is an Atom, this is the index of the +Atom. +If it is a Residue, this is the index of the Residue. +If it is a Segment, this is the index of the Segment.

+
+ +
+
+property ix_array
+

Unique index of this component as an array.

+

This method gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+property position
+

Coordinates of the atom.

+

The position can be changed by assigning an array of length (3,).

+
+

Note

+

changing the position is not reflected in any files; reading +any frame from the trajectory will replace the change with +that from the file

+
+
+
Raises
+

NoDataError – If the underlying Timestep + does not contain + positions.

+
+
+
+ +
+
+property velocity
+

Velocity of the atom.

+

The velocity can be changed by assigning an array of shape (3,).

+
+

Note

+

changing the velocity is not reflected in any files; reading +any frame from the trajectory will replace the change with +that from the file

+
+
+
Raises
+

NoDataError – If the underlying Timestep + does not contain + velocities.

+
+
+
+ +
+ +
+
+class MDAnalysis.core.groups.Residue(*args, **kwargs)[source]
+

Residue base class.

+

This class is used by a Universe for +generating its Topology-specific Residue class. All the +TopologyAttr components are obtained +from ComponentBase, so this class only includes ad-hoc methods +specific to Residues.

+
+
+property atoms
+

An AtomGroup of Atoms present in this +Residue.

+
+ +
+
+property bfactors
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+chi1_selection(n_name='N', ca_name='CA', cb_name='CB', cg_name='CG CG1 OG OG1 SG')
+

Select AtomGroup corresponding to the chi1 sidechain dihedral N-CA-CB-*G. +The gamma atom is taken to be the heavy atom in the gamma position. If more than one +heavy atom is present (e.g. CG1 and CG2), the one with the lower number is used (CG1).

+
+

Warning

+

This numbering of chi1 atoms here in following with the IUPAC 1970 rules. +However, it should be noted that analyses which use dihedral angles may have +different definitions. For example, the +MDAnalysis.analysis.dihedrals.Janin class does not incorporate +amino acids where the gamma atom is not carbon, into its chi1 selections.

+
+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
  • cb_name (str (optional)) – name for the beta-carbon atom

  • +
  • cg_name (str (optional)) – name for the gamma-carbon atom

  • +
+
+
Returns
+

4-atom selection in the correct order. If no CB and/or CG is found +then this method returns None.

+
+
Return type
+

AtomGroup

+
+
+
+

New in version 0.7.5.

+
+
+

Changed in version 1.0.0: Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+property ix
+

Unique index of this component.

+

If this component is an Atom, this is the index of the +Atom. +If it is a Residue, this is the index of the Residue. +If it is a Segment, this is the index of the Segment.

+
+ +
+
+property ix_array
+

Unique index of this component as an array.

+

This method gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+omega_selection(c_name='C', n_name='N', ca_name='CA')
+

Select AtomGroup corresponding to the omega protein backbone dihedral +CA-C-N’-CA’.

+

omega describes the -C-N- peptide bond. Typically, it is trans (180 +degrees) although cis-bonds (0 degrees) are also occasionally observed +(especially near Proline).

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no C’ found in the +previous residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+phi_selection(c_name='C', n_name='N', ca_name='CA')
+

Select AtomGroup corresponding to the phi protein backbone dihedral +C’-N-CA-C.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no C’ found in the +previous residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+psi_selection(c_name='C', n_name='N', ca_name='CA')
+

Select AtomGroup corresponding to the psi protein backbone dihedral +N-CA-C-N’.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no N’ found in the +following residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+

Note

+

This requires the underlying topology to have names. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+property segment
+

The Segment this Residue belongs to.

+
+ +
+ +
+
+class MDAnalysis.core.groups.Segment(*args, **kwargs)[source]
+

Segment base class.

+

This class is used by a Universe for +generating its Topology-specific Segment class. All the +TopologyAttr components are obtained +from ComponentBase, so this class only includes ad-hoc methods +specific to Segments.

+
+

Deprecated since version 0.16.2: Instant selectors of Segments will be removed in the +1.0 release.

+
+
+

Changed in version 1.0.0: Removed instant selectors, use either segment.residues[…] to select +residue by number, or segment.residues[segment.residue.resnames = …] +to select by resname.

+
+
+
+property atoms
+

An AtomGroup of Atoms present in this +Segment.

+
+ +
+
+property bfactors
+

Bfactor alias with warning

+
+

Note

+

This requires the underlying topology to have tempfactors. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+get_connections(typename, outside=True)
+

Get bonded connections between atoms as a +TopologyGroup.

+
+
Parameters
+
    +
  • typename (str) – group name. One of {“bonds”, “angles”, “dihedrals”, +“impropers”, “ureybradleys”, “cmaps”}

  • +
  • outside (bool (optional)) – Whether to include connections involving atoms outside +this group.

  • +
+
+
Returns
+

    +
  • TopologyGroup – containing the bonded group of choice, i.e. bonds, angles, +dihedrals, impropers, ureybradleys or cmaps.

  • +
  • .. versionadded:: 1.1.0

  • +
+

+
+
+
+ +
+
+property ix
+

Unique index of this component.

+

If this component is an Atom, this is the index of the +Atom. +If it is a Residue, this is the index of the Residue. +If it is a Segment, this is the index of the Segment.

+
+ +
+
+property ix_array
+

Unique index of this component as an array.

+

This method gives a consistent API between components and groups.

+
+

See also

+

ix

+
+
+ +
+
+property residues
+

A ResidueGroup of Residues present in this +Segment.

+
+ +
+ +
+
+

11.2.2.1.3. Levels

+

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:

+
u = mda.Universe()
+
+ag = u.atoms[:10]
+at = u.atoms[11]
+
+ag.level == at.level  # Returns True
+
+ag.level.singular  # Returns Atom class
+at.level.plural  # Returns AtomGroup class
+
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/init.html b/2.7.0-dev0/documentation_pages/core/init.html new file mode 100644 index 0000000000..d6454e4704 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/init.html @@ -0,0 +1,187 @@ + + + + + + + 11.1. Core functions of MDAnalysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.1. Core functions of MDAnalysis

+

The basic class is an AtomGroup; the whole +simulation is called the +Universe. Selections are computed on an +AtomGroup and return another +AtomGroup.

+

To get started, load the Universe:

+
u = Universe(topology_file, trajectory_file)
+
+
+

A simple selection of all water oxygens within 4 A of the protein:

+
water_shell = u.select_atoms('name OH2 and around 4.0 protein')
+water_shell.n_atoms           # how many waters were selected
+water_shell.total_mass()       # their total mass
+
+
+

AtomGroup instances have various methods that +allow calculation of simple properties. For more complicated analysis, obtain +the coordinates as a numpy array

+
coords = water_shell.positions
+
+
+

and write your own Python code.

+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/selection.html b/2.7.0-dev0/documentation_pages/core/selection.html new file mode 100644 index 0000000000..48424d1e4d --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/selection.html @@ -0,0 +1,611 @@ + + + + + + + 11.4.1. Atom selection Hierarchy — MDAnalysis.core.selection — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.4.1. Atom selection Hierarchy — MDAnalysis.core.selection

+

This module contains objects that represent selections. They are +constructed and then applied to the group.

+

In general, Parser.parse() creates a Selection object +from a selection string. This Selection object is then passed +an AtomGroup through its +apply() method to apply the +Selection to the AtomGroup.

+

This is all invisible to the user through the +select_atoms() method of an +AtomGroup.

+
+
+
+class MDAnalysis.core.selection.AromaticSelection(parser, tokens)[source]
+

Select aromatic atoms.

+

Aromaticity is available in the aromaticities attribute and is made +available through RDKit

+
+ +
+
+class MDAnalysis.core.selection.BackboneSelection(parser, tokens)[source]
+

A BackboneSelection contains all atoms with name ‘N’, ‘CA’, ‘C’, ‘O’.

+

This excludes OT* on C-termini +(which are included by, eg VMD’s backbone selection).

+
+

Changed in version 1.0.1: bb_atoms changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+class MDAnalysis.core.selection.BaseSelection(parser, tokens)[source]
+

Selection of atoms in nucleobases.

+

Recognized atom names (from CHARMM):

+
+

‘N9’, ‘N7’, ‘C8’, ‘C5’, ‘C4’, ‘N3’, ‘C2’, ‘N1’, ‘C6’, +‘O6’,’N2’,’N6’, ‘O2’,’N4’,’O4’,’C5M’

+
+
+

Changed in version 1.0.1: base_atoms changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+class MDAnalysis.core.selection.BoolSelection(parser, tokens)[source]
+

Selection for boolean values

+
+ +
+
+class MDAnalysis.core.selection.ByNumSelection(parser, tokens)[source]
+
+ +
+
+class MDAnalysis.core.selection.ByResSelection(parser, tokens)[source]
+

Selects all atoms that are in the same segment and residue as selection

+
+

Changed in version 1.0.0: Use "resindices" instead of "resids" (see #2669 and #2672)

+
+
+ +
+
+MDAnalysis.core.selection.FLOAT_PATTERN = '-?\\d*\\.?\\d*(?:e[-+]?\\d+)?'
+

Regular expression for recognizing a floating point number in a selection. +Numbers such as 1.2, 1.2e-01, -1.2 are all parsed as Python floats.

+
+ +
+
+class MDAnalysis.core.selection.FloatRangeSelection(parser, tokens)[source]
+

Range selection for float values

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+MDAnalysis.core.selection.INT_PATTERN = '-?\\d+'
+

Regular expression for recognizing un/signed integers in a selection.

+
+ +
+
+class MDAnalysis.core.selection.NucleicBackboneSelection(parser, tokens)[source]
+

Contains all atoms with name “P”, “C5’”, C3’”, “O3’”, “O5’”.

+

These atoms are only recognized if they are in a residue matched +by the NucleicSelection.

+
+

Changed in version 1.0.1: bb_atoms changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+class MDAnalysis.core.selection.NucleicSelection(parser, tokens)[source]
+

All atoms in nucleic acid residues with recognized residue names.

+

Recognized residue names:

+
    +
  • +
    from the CHARMM force field ::

    awk ‘/RESI/ {printf “’”’”%s”’”’,”,$2 }’ top_all27_prot_na.rtf

    +
    +
    +
  • +
  • recognized: ‘ADE’, ‘URA’, ‘CYT’, ‘GUA’, ‘THY’

  • +
  • recognized (CHARMM in Gromacs): ‘DA’, ‘DU’, ‘DC’, ‘DG’, ‘DT’

  • +
+
+

Changed in version 0.8: additional Gromacs selections

+
+
+

Changed in version 1.0.1: nucl_res changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+class MDAnalysis.core.selection.NucleicSugarSelection(parser, tokens)[source]
+

Contains all atoms with name C1’, C2’, C3’, C4’, O2’, O4’, O3’.

+
+

Changed in version 1.0.1: sug_atoms changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+class MDAnalysis.core.selection.PropertySelection(parser, tokens)[source]
+

Some of the possible properties: +x, y, z, radius, mass,

+
+

Changed in version 2.0.0: changed == operator to use np.isclose instead of np.equals. +Added atol and rtol keywords to control np.isclose +tolerance.

+
+

Possible splitting around operator:

+

prop x < 5 +prop x< 5 +prop x <5 +prop x<5

+
+ +
+
+class MDAnalysis.core.selection.ProteinSelection(parser, tokens)[source]
+

Consists of all residues with recognized residue names.

+

Recognized residue names in ProteinSelection.prot_res.

+
+
    +
  • +
    from the CHARMM force field::

    awk ‘/RESI/ {printf “’”’”%s”’”’,”,$2 }’ top_all27_prot_lipid.rtf

    +
    +
    +
  • +
  • manually added special CHARMM, OPLS/AA and Amber residue names.

  • +
+
+ +
+

Changed in version 1.0.1: prot_res changed to set (from numpy array) +performance improved by ~100x on larger systems

+
+
+ +
+
+MDAnalysis.core.selection.RANGE_PATTERN = '\\s*(?:[:-]| to )\\s*'
+

Regular expression for recognising a range separator. +Delimiters include “:”, “-”, “to” and can have arbitrary whitespace.

+
+ +
+
+class MDAnalysis.core.selection.RangeSelection(parser, tokens)[source]
+

Range selection for int values

+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.selection.ResidSelection(parser, tokens)[source]
+

Select atoms based on numerical fields

+

Allows the use of ‘:’, ‘-’ and ‘to’ to specify a range of values +For example

+
+

resid 1:10

+
+
+ +
+
+class MDAnalysis.core.selection.SameSelection(parser, tokens)[source]
+

Selects all atoms that have the same subkeyword value as any atom in selection

+
+

Changed in version 1.0.0: Map "residue" to "resindices" and "segment" to +"segindices" (see #2669 and #2672)

+
+
+ +
+
+class MDAnalysis.core.selection.SelectionParser(*p, **k)[source]
+

A small parser for selection expressions. Demonstration of +recursive descent parsing using Precedence climbing (see +http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm). Transforms +expressions into nested Selection tree.

+

For reference, the grammar that we parse is

+
E(xpression)--> Exp(0)
+Exp(p) -->      P {B Exp(q)}
+P -->           U Exp(q) | "(" E ")" | v
+B(inary) -->    "and" | "or"
+U(nary) -->     "not"
+T(erms) -->     segid [value]
+                | resname [value]
+                | resid [value]
+                | name [value]
+                | type [value]
+
+
+
+
+expect(token)[source]
+

Anticipate and remove a given token

+
+ +
+
+parse(selectstr, selgroups, periodic=None, atol=1e-08, rtol=1e-05, sorted=True, rdkit_kwargs=None, smarts_kwargs=None)[source]
+

Create a Selection object from a string.

+
+
Parameters
+
    +
  • selectstr (str) – The string that describes the selection

  • +
  • selgroups (AtomGroups) – AtomGroups to be used in group selections

  • +
  • periodic (bool, optional) – for distance based selections, whether to consider +periodic boundary conditions

  • +
  • atol (float, optional) – The absolute tolerance parameter for float comparisons. +Passed to numpy.isclose().

  • +
  • rtol (float, optional) – The relative tolerance parameter for float comparisons. +Passed to numpy.isclose().

  • +
  • sorted (bool, optional) – Whether to sorted the output AtomGroup.

  • +
  • rdkit_kwargs (dict, optional) – Arguments passed to the RDKitConverter when using selection based +on SMARTS queries

  • +
  • smarts_kwargs (dict, optional) – Arguments passed internally to RDKit’s GetSubstructMatches.

  • +
+
+
Returns
+

    +
  • The appropriate Selection object. Use the .apply method on

  • +
  • this to perform the selection.

  • +
+

+
+
Raises
+

SelectionError – If anything goes wrong in creating the Selection object.

+
+
+
+

Changed in version 2.0.0: Added atol and rtol keywords to select float values. Added +rdkit_kwargs to pass arguments to the RDKitConverter

+
+
+

Changed in version 2.2.0: Added smarts_kwargs argument, allowing users to pass a +a dictionary of arguments to RDKit’s GetSubstructMatches.

+
+
+ +
+ +
+
+class MDAnalysis.core.selection.SingleCharSelection(parser, tokens)[source]
+

for when an attribute is just a single character, eg RSChirality

+
+

New in version 2.1.0.

+
+
+ +
+
+class MDAnalysis.core.selection.SmartsSelection(parser, tokens)[source]
+

Select atoms based on SMARTS queries.

+

Uses RDKit to run the query and converts the result to MDAnalysis. +Supports chirality.

+
+

Changed in version 2.2.0: rdkit_wargs and smarts_kwargs can now be passed to control +the behaviour of the RDKit converter and RDKit’s GetSubstructMatches +respectively. +The default maxMatches value passed to GetSubstructMatches has +been changed from 1000 to max(1000, n_atoms * 10) in order to +limit cases where too few matches were generated. A warning is now also +thrown if maxMatches has been reached.

+
+
+ +
+
+MDAnalysis.core.selection.gen_selection_class(singular, attrname, dtype, per_object)[source]
+

Selection class factory for arbitrary TopologyAttrs.

+

Normally this should not be used except within the codebase +or by developers; it is called by the metaclass +MDAnalysis.core.topologyattrs._TopologyAttrMeta to +auto-generate suitable selection classes by creating a token +with the topology attribute (singular) name. The function +uses the provided dtype to choose which Selection class +to subclass:

+ +

Other value types are not yet supported and will raise a +ValueError. The classes are created in the _selectors +module to avoid namespace clashes.

+
+
Parameters
+
    +
  • singular (str) – singular name of TopologyAttr

  • +
  • attrname (str) – attribute name of TopologyAttr

  • +
  • dtype (type) – type of TopologyAttr

  • +
  • per_object (str) – level of TopologyAttr

  • +
+
+
Returns
+

selection

+
+
Return type
+

subclass of Selection

+
+
Raises
+

ValueError – If dtype is not one of the supported types

+
+
+

Example

+

The function creates a class inside _selectors and returns it. +Normally it should not need to be manually called, as it is created +for each TopologyAttr:

+
>>> gen_selection_class("resname", "resnames", object, "residue")
+<class 'MDAnalysis.core.selection._selectors.ResnameSelection'>
+
+
+

Simply generating this selector is sufficient for the keyword to be +accessible by select_atoms(), +as that is automatically handled by +_Selectionmeta.

+
+

See also

+

MDAnalysis.core.topologyattrs._TopologyAttrMeta,

+
+
+ +
+
+MDAnalysis.core.selection.grab_not_keywords(tokens)[source]
+

Pop tokens from the left until you hit a keyword

+
+
Parameters
+

tokens (collections.deque) – deque of strings, some tokens some not

+
+
Returns
+

values – All non keywords found until a keyword was hit

+
+
Return type
+

list of strings

+
+
+
+

Note

+

This function pops the values from the deque

+
+

Examples

+

grab_not_keywords([‘H’, ‘and’,’resname’, ‘MET’]) +>>> [‘H’]

+

grab_not_keywords([‘H’, ‘Ca’, ‘N’, ‘and’,’resname’, ‘MET’]) +>>> [‘H’, ‘Ca’ ,’N’]

+

grab_not_keywords([‘and’,’resname’, ‘MET’]) +>>> []

+
+ +
+
+MDAnalysis.core.selection.is_keyword(val)[source]
+

Is val a selection keyword?

+
+
Returns False on any of the following strings:
    +
  • keys in SELECTIONDICT (tokens from Selection objects)

  • +
  • keys in OPERATIONS (tokens from LogicOperations)

  • +
  • (Parentheses)

  • +
  • The value None (used as EOF in selection strings)

  • +
+
+
+
+ +
+
+MDAnalysis.core.selection.join_separated_values(values)[source]
+

Join range values that are separated by whitespace

+
+
Parameters
+

values (list) – list of value strings

+
+
Returns
+

values

+
+
Return type
+

list of strings

+
+
+

Examples

+

join_separated_values([‘37’, ‘to’, ‘22’]) +>>> [‘37 to 22’]

+
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.core.selection.return_empty_on_apply(func)[source]
+

Decorator to return empty AtomGroups from the apply() function +without evaluating it

+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/topology.html b/2.7.0-dev0/documentation_pages/core/topology.html new file mode 100644 index 0000000000..ea9e0da31c --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/topology.html @@ -0,0 +1,594 @@ + + + + + + + 11.3.1. Core Topology object — MDAnalysis.core.topology — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.3.1. Core Topology object — MDAnalysis.core.topology

+
+

New in version 0.16.0.

+
+

Topology is the core object that holds all topology information.

+

TODO: Add in-depth discussion.

+

Notes

+

For developers: In MDAnalysis 0.16.0 this new topology system was +introduced and discussed as issue #363; this issue contains key +information and discussions on the new system. The issue number 363 +is also being used as a short-hand in discussions to refer to the new +topology system.

+
+

11.3.1.1. Classes

+
+
+class MDAnalysis.core.topology.Topology(n_atoms=1, n_res=1, n_seg=1, attrs=None, atom_resindex=None, residue_segindex=None)[source]
+

In-memory, array-based topology database.

+

The topology model of MDanalysis features atoms, which must each be a +member of one residue. Each residue, in turn, must be a member of one +segment. The details of maintaining this heirarchy, and mappings of atoms +to residues, residues to segments, and vice-versa, are handled internally +by this object.

+
+
Parameters
+
    +
  • n_atoms (int) – number of atoms in topology. Must be larger then 1 at each level

  • +
  • n_residues (int) – number of residues in topology. Must be larger then 1 at each level

  • +
  • n_segments (int) – number of segments in topology. Must be larger then 1 at each level

  • +
  • attrs (TopologyAttr objects) – components of the topology to be included

  • +
  • atom_resindex (array) – 1-D array giving the resindex of each atom in the system

  • +
  • residue_segindex (array) – 1-D array giving the segindex of each residue in the system

  • +
+
+
+
+
+add_Residue(segment, **new_attrs)[source]
+
+
Return type
+

residx of the new Residue

+
+
Raises
+

NoDataError – If not all data was provided. This error is raised before any changes

+
+
+
+

Changed in version 2.1.0: Added use of _add_new to TopologyAttr resize

+
+
+ +
+
+add_Segment(**new_attrs)[source]
+

Adds a new Segment to the Topology

+
+
Parameters
+

new_attrs (dict) – the new attributes for the new segment, eg {‘segid’: ‘B’}

+
+
Raises
+

NoDataError – if an attribute wasn’t specified.

+
+
Returns
+

ix – the idx of the new segment

+
+
Return type
+

int

+
+
+
+

Changed in version 2.1.0: Added use of _add_new to resize topology attrs

+
+
+ +
+
+add_TopologyAttr(topologyattr)[source]
+

Add a new TopologyAttr to the Topology.

+
+
Parameters
+

topologyattr (TopologyAttr) –

+
+
+
+ +
+
+copy()[source]
+

Return a deepcopy of this Topology

+
+ +
+
+del_TopologyAttr(topologyattr)[source]
+

Remove a TopologyAttr from the Topology.

+

If it is not present, nothing happens.

+
+
Parameters
+

topologyattr (TopologyAttr) –

+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+property guessed_attributes
+

A list of the guessed attributes in this topology

+
+ +
+
+property read_attributes
+

A list of the attributes read from the topology

+
+ +
+ +
+
+class MDAnalysis.core.topology.TransTable(n_atoms, n_residues, n_segments, atom_resindex=None, residue_segindex=None)[source]
+

Membership tables with methods to translate indices across levels.

+

There are three levels; Atom, Residue and Segment. Each Atom must +belong in a Residue, each Residue must belong to a Segment.

+

When translating upwards, eg finding which Segment a Residue belongs in, +a single numpy array is returned. When translating downwards, two options +are available; a concatenated result (suffix _1) or a list for each parent +object (suffix _2d).

+
+
Parameters
+
    +
  • n_atoms (int) – number of atoms in topology

  • +
  • n_residues (int) – number of residues in topology

  • +
  • n_segments (int) – number of segments in topology

  • +
  • atom_resindex (1-D array) – resindex for each atom in the topology; the number of unique values in +this array must be <= n_residues, and the array must be length +n_atoms; giving None defaults to placing all atoms in residue 0

  • +
  • residue_segindex (1-D array) – segindex for each residue in the topology; the number of unique values +in this array must be <= n_segments, and the array must be length +n_residues; giving None defaults to placing all residues in segment 0

  • +
+
+
+
+
+n_atoms
+

number of atoms in topology

+
+
Type
+

int

+
+
+
+ +
+
+n_residues
+

number of residues in topology

+
+
Type
+

int

+
+
+
+ +
+
+n_segments
+

number of segments in topology

+
+
Type
+

int

+
+
+
+ +
+
+size
+

tuple (n_atoms, n_residues, n_segments) describing the shape of +the TransTable

+
+
Type
+

tuple

+
+
+
+ +
+
+.. versionchanged:: 2.3.0
+

Lazy building RA and SR.

+
+ +
+
+atoms2residues(aix)[source]
+

Get residue indices for each atom.

+
+
Parameters
+

aix (array) – atom indices

+
+
Returns
+

rix – residue index for each atom

+
+
Return type
+

array

+
+
+
+ +
+
+atoms2segments(aix)[source]
+

Get segment indices for each atom.

+
+
Parameters
+

aix (array) – atom indices

+
+
Returns
+

rix – segment index for each atom

+
+
Return type
+

array

+
+
+
+ +
+
+copy()[source]
+

Return a deepcopy of this Transtable

+
+ +
+
+move_atom(aix, rix)[source]
+

Move aix to be in rix

+
+ +
+
+move_residue(rix, six)[source]
+

Move rix to be in six

+
+ +
+
+residues2atoms_1d(rix)[source]
+

Get atom indices collectively represented by given residue indices.

+
+
Parameters
+

rix (array) – residue indices

+
+
Returns
+

aix – indices of atoms present in residues, collectively

+
+
Return type
+

array

+
+
+
+ +
+
+residues2atoms_2d(rix)[source]
+

Get atom indices represented by each residue index.

+
+
Parameters
+

rix (array) – residue indices

+
+
Returns
+

raix – each element corresponds to a residue index, in order given in +rix, with each element being an array of the atom indices present +in that residue

+
+
Return type
+

list

+
+
+
+ +
+
+residues2segments(rix)[source]
+

Get segment indices for each residue.

+
+
Parameters
+

rix (array) – residue indices

+
+
Returns
+

six – segment index for each residue

+
+
Return type
+

array

+
+
+
+ +
+
+segments2atoms_1d(six)[source]
+

Get atom indices collectively represented by given segment indices.

+
+
Parameters
+

six (array) – segment indices

+
+
Returns
+

aix – sorted indices of atoms present in segments, collectively

+
+
Return type
+

array

+
+
+
+ +
+
+segments2atoms_2d(six)[source]
+

Get atom indices represented by each segment index.

+
+
Parameters
+

six (array) – residue indices

+
+
Returns
+

saix – each element corresponds to a segment index, in order given in +six, with each element being an array of the atom indices present +in that segment

+
+
Return type
+

list

+
+
+
+ +
+
+segments2residues_1d(six)[source]
+

Get residue indices collectively represented by given segment indices

+
+
Parameters
+

six (array) – segment indices

+
+
Returns
+

rix – sorted indices of residues present in segments, collectively

+
+
Return type
+

array

+
+
+
+ +
+
+segments2residues_2d(six)[source]
+

Get residue indices represented by each segment index.

+
+
Parameters
+

six (array) – residue indices

+
+
Returns
+

srix – each element corresponds to a segment index, in order given in +six, with each element being an array of the residue indices +present in that segment

+
+
Return type
+

list

+
+
+
+ +
+ +
+
+

11.3.1.2. Helper functions

+
+
+MDAnalysis.core.topology.make_downshift_arrays(upshift, nparents)[source]
+

From an upwards translation table, create the opposite direction

+

Turns a many to one mapping (eg atoms to residues) to a one to many mapping +(residues to atoms)

+
+
Parameters
+
    +
  • upshift (array_like) – Array of integers describing which parent each item belongs to

  • +
  • nparents (integer) – Total number of parents that exist.

  • +
+
+
Returns
+

downshift – An array of arrays, each containing the indices of the children +of each parent. Length nparents + 1

+
+
Return type
+

array_like (dtype object)

+
+
+

Examples

+

To find the residue to atom mappings for a given atom to residue mapping:

+
>>> import numpy as np
+>>> import MDAnalysis as mda
+>>> from MDAnalysis.core.topology import make_downshift_arrays
+>>> atom2res = np.array([0, 1, 0, 2, 2, 0, 2])
+>>> make_downshift_arrays(atom2res, 3)
+array([array([0, 2, 5]), array([1]), array([3, 4, 6]), None], dtype=object)
+
+
+

Entry 0 corresponds to residue 0 and says that this contains atoms 0, 2 & 5

+

Notes

+

The final entry in the return array will be None to ensure that the +dtype of the array is object.

+
+

Warning

+

This means negative indexing should never +be used with these arrays.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/topologyattrs.html b/2.7.0-dev0/documentation_pages/core/topologyattrs.html new file mode 100644 index 0000000000..e16947653b --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/topologyattrs.html @@ -0,0 +1,2108 @@ + + + + + + + 11.3.3. Topology attribute objects — MDAnalysis.core.topologyattrs — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.3.3. Topology attribute objects — MDAnalysis.core.topologyattrs

+

Common TopologyAttr instances that are used by most topology +parsers.

+

TopologyAttrs are used to contain attributes such as atom names or resids. +These are usually read by the TopologyParser.

+

References

+
+
+
Gray1984
+

C. G. Gray, Keith E. Gubbins, and C. G. Joslin. Theory of molecular fluids. Number 9 in The International series of monographs on chemistry. Oxford University Press, Oxford ; New York, 1984. ISBN 978-0-19-855602-2.

+
+
+
+
+
+
+class MDAnalysis.core.topologyattrs.AltLocs(vals, guessed=False)[source]
+

AltLocs for each atom

+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Angles(values, types=None, guessed=False, order=None)[source]
+

Angles between three atoms

+

Initialise with a list of 3 long tuples +E.g., [(0, 1, 2), (1, 2, 3), (2, 3, 4)]

+

These indices refer to the atom indices.

+
+ +
+
+class MDAnalysis.core.topologyattrs.Aromaticities(values, guessed=False)[source]
+

Aromaticity

+
+
+dtype
+

alias of bool

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.AtomAttr(values, guessed=False)[source]
+

Base class for atom attributes.

+
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+get_segments(sg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+
+set_residues(rg, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+
+set_segments(sg, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.AtomStringAttr(vals, guessed=False)[source]
+
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Atomids(values, guessed=False)[source]
+

ID for each atom.

+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Atomindices[source]
+

Globally unique indices for each atom in the group.

+

If the group is an AtomGroup, then this gives the index for each atom in +the group. This is the unambiguous identifier for each atom in the +topology, and it is not alterable.

+

If the group is a ResidueGroup or SegmentGroup, then this gives the indices +of each atom represented in the group in a 1-D array, in the order of the +elements in that group.

+
+
+dtype
+

alias of int

+
+ +
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

Get segment attributes for a given SegmentGroup

+
+ +
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Atomnames(vals, guessed=False)[source]
+

Name for each atom.

+
+
+chi1_selection(n_name='N', ca_name='CA', cb_name='CB', cg_name='CG CG1 OG OG1 SG')[source]
+

Select AtomGroup corresponding to the chi1 sidechain dihedral N-CA-CB-*G. +The gamma atom is taken to be the heavy atom in the gamma position. If more than one +heavy atom is present (e.g. CG1 and CG2), the one with the lower number is used (CG1).

+
+

Warning

+

This numbering of chi1 atoms here in following with the IUPAC 1970 rules. +However, it should be noted that analyses which use dihedral angles may have +different definitions. For example, the +MDAnalysis.analysis.dihedrals.Janin class does not incorporate +amino acids where the gamma atom is not carbon, into its chi1 selections.

+
+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
  • cb_name (str (optional)) – name for the beta-carbon atom

  • +
  • cg_name (str (optional)) – name for the gamma-carbon atom

  • +
+
+
Returns
+

4-atom selection in the correct order. If no CB and/or CG is found +then this method returns None.

+
+
Return type
+

AtomGroup

+
+
+
+

New in version 0.7.5.

+
+
+

Changed in version 1.0.0: Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

+
+
+ +
+
+chi1_selections(n_name='N', ca_name='CA', cb_name='CB', cg_name='CG CG1 OG OG1 SG')[source]
+

Select list of AtomGroups corresponding to the chi1 sidechain dihedral +N-CA-CB-CG.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
  • cb_name (str (optional)) – name for the beta-carbon atom

  • +
  • cg_name (str (optional)) – name for the gamma-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no CB and/or CG is found +then the corresponding item in the list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+ +
+
+dtype
+

alias of object

+
+ +
+
+omega_selection(c_name='C', n_name='N', ca_name='CA')[source]
+

Select AtomGroup corresponding to the omega protein backbone dihedral +CA-C-N’-CA’.

+

omega describes the -C-N- peptide bond. Typically, it is trans (180 +degrees) although cis-bonds (0 degrees) are also occasionally observed +(especially near Proline).

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no C’ found in the +previous residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+ +
+
+omega_selections(c_name='C', n_name='N', ca_name='CA')[source]
+

Select list of AtomGroups corresponding to the omega protein +backbone dihedral CA-C-N’-CA’.

+

omega describes the -C-N- peptide bond. Typically, it is trans (180 +degrees) although cis-bonds (0 degrees) are also occasionally observed +(especially near Proline).

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no C’ found in the +previous residue (by resid) then the corresponding item in the +list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+ +
+
+phi_selection(c_name='C', n_name='N', ca_name='CA')[source]
+

Select AtomGroup corresponding to the phi protein backbone dihedral +C’-N-CA-C.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no C’ found in the +previous residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+ +
+
+phi_selections(c_name='C', n_name='N', ca_name='CA')[source]
+

Select list of AtomGroups corresponding to the phi protein +backbone dihedral C’-N-CA-C.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • list of AtomGroups – 4-atom selections in the correct order. If no C’ found in the +previous residue (by resid) then corresponding item in the list +is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+ +
+
+psi_selection(c_name='C', n_name='N', ca_name='CA')[source]
+

Select AtomGroup corresponding to the psi protein backbone dihedral +N-CA-C-N’.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • AtomGroup – 4-atom selection in the correct order. If no N’ found in the +following residue (by resid) then this method returns None.

  • +
  • .. versionchanged:: 1.0.0 – Added arguments for flexible atom names and refactored code for +faster atom matching with boolean arrays.

  • +
+

+
+
+
+ +
+
+psi_selections(c_name='C', n_name='N', ca_name='CA')[source]
+

Select list of AtomGroups corresponding to the psi protein +backbone dihedral N-CA-C-N’.

+
+
Parameters
+
    +
  • c_name (str (optional)) – name for the backbone C atom

  • +
  • n_name (str (optional)) – name for the backbone N atom

  • +
  • ca_name (str (optional)) – name for the alpha-carbon atom

  • +
+
+
Returns
+

    +
  • List of AtomGroups – 4-atom selections in the correct order. If no N’ found in the +following residue (by resid) then the corresponding item in the +list is None.

  • +
  • .. versionadded:: 1.0.0

  • +
+

+
+
+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Atomtypes(vals, guessed=False)[source]
+

Type for each atom

+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Bonds(values, types=None, guessed=False, order=None)[source]
+

Bonds between two atoms

+

Must be initialised by a list of zero based tuples. +These indices refer to the atom indices. +E.g., ` [(0, 1), (1, 2), (2, 3)]`

+

Also adds the bonded_atoms, fragment and fragments +attributes.

+
+
+bonded_atoms()[source]
+

An AtomGroup of all +Atoms bonded to this +Atom.

+
+ +
+
+fragindex()[source]
+

The index (ID) of the +fragment this +Atom is part of.

+
+

New in version 0.20.0.

+
+
+ +
+
+fragindices()[source]
+

The +fragment indices +of all Atoms in this +AtomGroup.

+

A numpy.ndarray with +shape=(n_atoms,) +and dtype=numpy.int64.

+
+

New in version 0.20.0.

+
+
+ +
+
+fragment()[source]
+

An AtomGroup representing the +fragment this Atom is part of.

+

A fragment is a +group of atoms which are +interconnected by Bonds, i.e., +there exists a path along one +or more Bonds between any pair +of Atoms +within a fragment. Thus, a fragment typically corresponds to a molecule.

+
+

New in version 0.9.0.

+
+
+ +
+
+fragments()[source]
+

Read-only tuple of +fragments.

+

Contains all fragments that +any Atom in this +AtomGroup is part of.

+

A fragment is a +group of atoms which are +interconnected by Bonds, i.e., +there exists a path along one +or more Bonds between any pair +of Atoms +within a fragment. Thus, a fragment typically corresponds to a molecule.

+
+

Note

+
    +
  • The contents of the fragments may extend beyond the contents of this +AtomGroup.

  • +
+
+
+

New in version 0.9.0.

+
+
+ +
+
+n_fragments()[source]
+

The number of unique +fragments the +Atoms of this +AtomGroup are part of.

+
+

New in version 0.20.0.

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.CMaps(values, types=None, guessed=False, order=None)[source]
+

A connection between five atoms +.. versionadded:: 1.0.0

+
+ +
+
+class MDAnalysis.core.topologyattrs.ChainIDs(vals, guessed=False)[source]
+

ChainID per atom

+
+

Note

+

This is an attribute of the Atom, not Residue or Segment

+
+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Charges(values, guessed=False)[source]
+
+
+center_of_charge(wrap=False, unwrap=False, compound='group')[source]
+

Center of (absolute) charge of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i \vert q_i \vert \boldsymbol r_i} + {\sum_i \vert q_i \vert}\]
+

where \(q_i\) is the charge and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of charge per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the charges of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of charge of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where +n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic charges.

+
+

New in version 2.2.0.

+
+
+
+ +
+
+dipole_moment(**kwargs)[source]
+

Dipole moment of the group or compounds in a group.

+
+\[\mu = |\boldsymbol{\mu}| = \sqrt{ \sum_{i=1}^{D} \mu^2 }\]
+

Where \(D\) is the number of dimensions, in this case 3.

+

Computes the dipole moment of Atoms in the group. +Dipole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is a net charge, the magnitude of the dipole +moment is dependent on the center chosen. +See dipole_vector().

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole moment(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+dipole_vector(wrap=False, unwrap=False, compound='group', center='mass')[source]
+

Dipole vector of the group.

+
+\[\boldsymbol{\mu} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} )\]
+

Computes the dipole vector of Atoms in the group. +Dipole vector per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that the magnitude of the dipole moment is independent of the +center chosen unless the species has a net charge. In the case of +a charged group the dipole moment can be later adjusted with:

+
+\[\boldsymbol{\mu}_{COC} = \boldsymbol{\mu}_{COM} + +q_{ag}\mathbf{r}_{COM} - q_{ag}\boldsymbol{r}_{COC}\]
+

Where \(\mathbf{r}_{COM}\) is the center of mass and +\(\mathbf{r}_{COC}\) is the center of charge.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single dipole vector returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 2d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Dipole vector(s) of (compounds of) the group in \(eÅ\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,3) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+dtype
+

alias of float

+
+ +
+
+get_residues(rg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+get_segments(sg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+quadrupole_moment(**kwargs)[source]
+

Quadrupole moment of the group according to [Gray1984].

+
+\[Q = \sqrt{\frac{2}{3}{\hat{\mathsf{Q}}}:{\hat{\mathsf{Q}}}}\]
+

where the quadrupole moment is calculated from the tensor double +contraction of the traceless quadropole tensor \(\hat{\mathsf{Q}}\)

+

Computes the quadrupole moment of Atoms in the group. +Quadrupole per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole moment is dependant on the +center chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole moment(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+quadrupole_tensor(wrap=False, unwrap=False, compound='group', center='mass')[source]
+

Traceless quadrupole tensor of the group or compounds.

+

This tensor is first computed as the outer product of vectors from +a reference point to some atom, and multiplied by the atomic charge. +The tensor of each atom is then summed to produce the quadrupole +tensor of the group:

+
+\[\mathsf{Q} = \sum_{i=1}^{N} q_{i} ( \mathbf{r}_{i} - +\mathbf{r}_{COM} ) \otimes ( \mathbf{r}_{i} - \mathbf{r}_{COM} )\]
+

The traceless quadrupole tensor, \(\hat{\mathsf{Q}}\), is then +taken from:

+
+\[\hat{\mathsf{Q}} = \frac{3}{2} \mathsf{Q} - \frac{1}{2} +tr(\mathsf{Q})\]
+

Computes the quadrupole tensor of Atoms in the group. +Tensor per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+

Note that when there is an unsymmetrical plane in the molecule or +group, the magnitude of the quadrupole tensor is dependent on the +center (e.g., \(\mathbf{r}_{COM}\)) chosen and cannot be translated.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', ) – ‘fragments’}, optional +If 'group', a single quadrupole value returns. Otherwise, an +array of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. +a 1d array. +Note that, in any case, only the positions of +Atoms belonging to the group will be taken into +account.

  • +
  • center ({'mass', 'charge'}, optional) – Choose whether the dipole vector is calculated at the center of +“mass” or the center of “charge”, default is “mass”.

  • +
+
+
Returns
+

Quadrupole tensor(s) of (compounds of) the group in \(eÅ^2\). +If compound was set to 'group', the output will be a single +tensor of shape (3,3). Otherwise, the output will be a 1d array +of shape (n,3,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+total_charge(compound='group')[source]
+

Total charge of (compounds of) the group.

+

Computes the total charge of Atoms in the group. +Total charges per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If ‘group’, the total charge of all atoms in the group will +be returned as a single value. Otherwise, the total charges per +Segment, Residue, molecule, or fragment +will be returned as a 1d array. +Note that, in any case, only the charges of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total charge of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Dihedrals(values, types=None, guessed=False, order=None)[source]
+

A connection between four sequential atoms

+
+ +
+
+class MDAnalysis.core.topologyattrs.Elements(vals, guessed=False)[source]
+

Element for each atom

+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Epsilon14s(values, guessed=False)[source]
+

The epsilon LJ parameter for 1-4 interactions

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Epsilons(values, guessed=False)[source]
+

The epsilon LJ parameter

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.FormalCharges(values, guessed=False)[source]
+

Formal charge on each atom

+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.GBScreens(values, guessed=False)[source]
+

Generalized Born screening factor

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.ICodes(vals, guessed=False)[source]
+

Insertion code for Atoms

+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Impropers(values, types=None, guessed=False, order=None)[source]
+

An imaginary dihedral between four atoms

+
+ +
+
+class MDAnalysis.core.topologyattrs.Masses(values, guessed=False)[source]
+
+
+align_principal_axis(axis, vector)[source]
+

Align principal axis with index axis with vector.

+
+
Parameters
+
    +
  • axis ({0, 1, 2}) – Index of the principal axis (0, 1, or 2), as produced by +principal_axes().

  • +
  • vector (array_like) – Vector to align principal axis with.

  • +
+
+
+

Notes

+

To align the long axis of a channel (the first principal axis, i.e. +axis = 0) with the z-axis:

+
u.atoms.align_principal_axis(0, [0,0,1])
+u.atoms.write("aligned.pdb")
+
+
+
+ +
+
+asphericity(wrap=False, unwrap=False, compound='group')[source]
+

Asphericity.

+

See [Dima2004b] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap and compound parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+ +
+
+center_of_mass(wrap=False, unwrap=False, compound='group')[source]
+

Center of mass of (compounds of) the group

+
+\[\boldsymbol R = \frac{\sum_i m_i \boldsymbol r_i}{\sum m_i}\]
+

where \(m_i\) is the mass and \(\boldsymbol r_i\) the +position of atom \(i\) in the given +MDAnalysis.core.groups.AtomGroup. +Centers of mass per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly. If the masses of a compound sum up to zero, the +center of mass coordinates of that compound will be nan (not a +number).

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the center of mass of all atoms in the group will +be returned as a single position vector. Otherwise, the centers of +mass of each Segment, Residue, molecule, or +fragment will be returned as an array of position vectors, i.e. a 2d +array. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

center – Position vector(s) of the center(s) of mass of the group. +If compound was set to 'group', the output will be a single +position vector. +If compound was set to 'segments' or 'residues', the +output will be a 2d coordinate array of shape (n, 3) where n +is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

This method can only be accessed if the underlying topology has +information about atomic masses.

+
+
+

Changed in version 0.8: Added pbc parameter

+
+
+

Changed in version 0.19.0: Added compound parameter

+
+
+

Changed in version 0.20.0: Added 'molecules' and 'fragments' compounds; +added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+dtype
+

alias of float64

+
+ +
+
+get_residues(rg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+get_segments(sg)[source]
+

By default, the values for each atom present in the set of residues +are returned in a single array. This behavior can be overriden in child +attributes.

+
+ +
+
+gyration_moments(wrap=False, unwrap=False, compound='group')[source]
+

Moments of the gyration tensor.

+

The moments are defined as the eigenvalues of the gyration +tensor.

+
+\[\mathsf{T} = \frac{1}{N} \sum_{i=1}^{N} (\mathbf{r}_\mathrm{i} - + \mathbf{r}_\mathrm{COM})(\mathbf{r}_\mathrm{i} - \mathbf{r}_\mathrm{COM})\]
+

Where \(\mathbf{r}_\mathrm{COM}\) is the center of mass.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
Returns
+

principle_moments_of_gyration – Gyration vector(s) of (compounds of) the group in \(Å^2\). +If compound was set to 'group', the output will be a single +vector of length 3. Otherwise, the output will be a 2D array of shape +(n,3) where n is the number of compounds.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.5.0.

+
+
+ +
+
+moment_of_inertia(wrap=False, unwrap=False, compound='group')[source]
+

Moment of inertia tensor relative to center of mass.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True and compound is 'group', move all atoms to the +primary unit cell before calculation. +If True and compound is not group, the +centers of mass of each compound will be calculated without moving +any atoms to keep the compounds intact. Instead, the resulting +center-of-mass position vectors will be moved to the primary unit +cell after calculation.

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their +centers and tensor of inertia.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +compound determines the behavior of wrap. +Note that, in any case, only the positions of Atoms +belonging to the group will be taken into account.

  • +
+
+
Returns
+

moment_of_inertia – Moment of inertia tensor as a 3 x 3 numpy array.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+

The moment of inertia tensor \(\mathsf{I}\) is calculated for a group of +\(N\) atoms with coordinates \(\mathbf{r}_i,\ 1 \le i \le N\) +relative to its center of mass from the relative coordinates

+
+\[\mathbf{r}'_i = \mathbf{r}_i - \frac{1}{\sum_{i=1}^{N} m_i} \sum_{i=1}^{N} m_i \mathbf{r}_i\]
+

as

+
+\[\mathsf{I} = \sum_{i=1}^{N} m_i \Big[(\mathbf{r}'_i\cdot\mathbf{r}'_i) \sum_{\alpha=1}^{3} + \hat{\mathbf{e}}_\alpha \otimes \hat{\mathbf{e}}_\alpha - \mathbf{r}'_i \otimes \mathbf{r}'_i\Big]\]
+

where \(\hat{\mathbf{e}}_\alpha\) are Cartesian unit vectors, or in Cartesian coordinates

+
+\[I_{\alpha,\beta} = \sum_{k=1}^{N} m_k + \Big(\big(\sum_{\gamma=1}^3 (x'^{(k)}_{\gamma})^2 \big)\delta_{\alpha,\beta} + - x'^{(k)}_{\alpha} x'^{(k)}_{\beta} \Big).\]
+

where \(x'^{(k)}_{\alpha}\) are the Cartesian coordinates of the +relative coordinates \(\mathbf{r}'_k\).

+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 0.20.0: Added unwrap parameter

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+principal_axes(wrap=False)[source]
+

Calculate the principal axes from the moment of inertia.

+

e1,e2,e3 = AtomGroup.principal_axes()

+

The eigenvectors are sorted by eigenvalue, i.e. the first one +corresponds to the highest eigenvalue and is thus the first principal +axes.

+

The eigenvectors form a right-handed coordinate system.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
Returns
+

axis_vectors – 3 x 3 array with v[0] as first, v[1] as second, and +v[2] as third eigenvector.

+
+
Return type
+

array

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 1.0.0: Always return principal axes in right-hand convention.

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+radius_of_gyration(wrap=False, **kwargs)[source]
+

Radius of gyration.

+
+
Parameters
+

wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

+
+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0.

+
+
+ +
+
+shape_parameter(wrap=False, unwrap=False, compound='group')[source]
+

Shape parameter.

+

See [Dima2004a] for background information.

+
+
Parameters
+
    +
  • wrap (bool, optional) – If True, move all atoms within the primary unit cell before +calculation. [False]

  • +
  • unwrap (bool, optional) – If True, compounds will be unwrapped before computing their centers.

  • +
  • compound ({'group', 'segments', 'residues', 'molecules', 'fragments'}, optional) – Which type of component to keep together during unwrapping.

  • +
+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.8: Added pbc keyword

+
+
+

Changed in version 2.1.0: Renamed pbc kwarg to wrap. pbc is still accepted but +is deprecated and will be removed in version 3.0. +Superfluous kwargs were removed.

+
+
+

Changed in version 2.5.0: Added calculation for any compound type

+
+
+ +
+
+total_mass(compound='group')[source]
+

Total mass of (compounds of) the group.

+

Computes the total mass of Atoms in the group. +Total masses per Residue, Segment, molecule, or +fragment can be obtained by setting the compound parameter +accordingly.

+
+
Parameters
+

compound ({'group', 'segments', 'residues', 'molecules', 'fragments'},) – optional +If 'group', the total mass of all atoms in the group will be +returned as a single value. Otherwise, the total masses per +Segment, Residue, molecule, or fragment will be +returned as a 1d array. +Note that, in any case, only the masses of Atoms +belonging to the group will be taken into account.

+
+
Returns
+

Total mass of (compounds of) the group. +If compound was set to 'group', the output will be a single +value. Otherwise, the output will be a 1d array of shape (n,) +where n is the number of compounds.

+
+
Return type
+

float or numpy.ndarray

+
+
+
+

Changed in version 0.20.0: Added compound parameter

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Molnums(values, guessed=False)[source]
+

Index of molecule from 0

+
+
+dtype
+

alias of int64

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Moltypes(vals, guessed=False)[source]
+

Name of the molecule type

+

Two molecules that share a molecule type share a common template topology.

+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.NonbondedIndices(values, guessed=False)[source]
+

Nonbonded index (AMBER)

+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Occupancies(values, guessed=False)[source]
+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.RMin14s(values, guessed=False)[source]
+

The Rmin/2 LJ parameter for 1-4 interactions

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.RMins(values, guessed=False)[source]
+

The Rmin/2 LJ parameter

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.RSChirality(values, guessed=False)[source]
+

R/S chirality

+
+ +
+
+class MDAnalysis.core.topologyattrs.Radii(values, guessed=False)[source]
+

Radii for each atom

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.RecordTypes(vals, guessed=False)[source]
+

For PDB-like formats, indicates if ATOM or HETATM

+

Defaults to ‘ATOM’

+
+

Changed in version 0.20.0: Now stores array of dtype object rather than boolean mapping

+
+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Resids(values, guessed=False)[source]
+

Residue ID

+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.ResidueAttr(values, guessed=False)[source]
+
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

By default, the values for each residue present in the set of +segments are returned in a single array. This behavior can be overriden +in child attributes.

+
+ +
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+
+set_residues(rg, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+
+set_segments(sg, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.ResidueStringAttr(vals, guessed=False)[source]
+
+
+set_residues(ag, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Resindices[source]
+

Globally unique resindices for each residue in the group.

+

If the group is an AtomGroup, then this gives the resindex for each atom in +the group. This unambiguously determines each atom’s residue membership. +Resetting these values changes the residue membership of the atoms.

+

If the group is a ResidueGroup or SegmentGroup, then this gives the +resindices of each residue represented in the group in a 1-D array, in the +order of the elements in that group.

+
+
+dtype
+

alias of int

+
+ +
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

Get segment attributes for a given SegmentGroup

+
+ +
+
+set_residues(rg, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Resnames(vals, guessed=False)[source]
+
+
+dtype
+

alias of object

+
+ +
+
+sequence(**kwargs)[source]
+

Returns the amino acid sequence.

+

The format of the sequence is selected with the keyword format:

+ ++++ + + + + + + + + + + + + + + + + +

format

description

‘SeqRecord’

Bio.SeqRecord.SeqRecord (default)

‘Seq’

Bio.Seq.Seq

‘string’

string

+

The sequence is returned by default (keyword format = 'SeqRecord') +as a Bio.SeqRecord.SeqRecord instance, which can then be +further processed. In this case, all keyword arguments (such as the +id string or the name or the description) are directly passed to +Bio.SeqRecord.SeqRecord.

+

If the keyword format is set to 'Seq', all kwargs are ignored +and a Bio.Seq.Seq instance is returned. The difference to the +record is that the record also contains metadata and can be directly +used as an input for other functions in Bio.

+

If the keyword format is set to 'string', all kwargs are +ignored and a Python string is returned.

+

Example: Write FASTA file

+

Use Bio.SeqIO.write(), which takes sequence records:

+
import Bio.SeqIO
+
+# get the sequence record of a protein component of a Universe
+protein = u.select_atoms("protein")
+record = protein.sequence(id="myseq1", name="myprotein")
+
+Bio.SeqIO.write(record, "single.fasta", "fasta")
+
+
+

A FASTA file with multiple entries can be written with

+
Bio.SeqIO.write([record1, record2, ...], "multi.fasta", "fasta")
+
+
+
+
Parameters
+
    +
  • format (string, optional) –

      +
    • "string": return sequence as a string of 1-letter codes

    • +
    • "Seq": return a Bio.Seq.Seq instance

    • +
    • "SeqRecord": return a Bio.SeqRecord.SeqRecord +instance

    • +
    +
    +

    Default is "SeqRecord"

    +
    +

  • +
  • id (optional) – Sequence ID for SeqRecord (should be different for different +sequences)

  • +
  • name (optional) – Name of the protein.

  • +
  • description (optional) – Short description of the sequence.

  • +
  • kwargs (optional) – Any other keyword arguments that are understood by +class:Bio.SeqRecord.SeqRecord.

  • +
+
+
Raises
+
    +
  • ValueError

  • +
  • 1-letter IUPAC protein amino acid code; make sure to only

  • +
  • select protein residues.

  • +
  • TypeError

  • +
+
+
+
+

New in version 0.9.0.

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Resnums(values, guessed=False)[source]
+
+
+dtype
+

alias of int

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Segids(vals, guessed=False)[source]
+
+
+dtype
+

alias of object

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Segindices[source]
+

Globally unique segindices for each segment in the group.

+

If the group is an AtomGroup, then this gives the segindex for each atom in +the group. This unambiguously determines each atom’s segment membership. +It is not possible to set these, since membership in a segment is an +attribute of each atom’s residue.

+

If the group is a ResidueGroup or SegmentGroup, then this gives the +segindices of each segment represented in the group in a 1-D array, in the +order of the elements in that group.

+
+
+dtype
+

alias of int

+
+ +
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

Get segment attributes for a given SegmentGroup

+
+ +
+
+set_segments(sg, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.SegmentAttr(values, guessed=False)[source]
+

Base class for segment attributes.

+
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

Get segment attributes for a given SegmentGroup

+
+ +
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+
+set_residues(rg, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+
+set_segments(sg, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.SegmentStringAttr(vals, guessed=False)[source]
+
+
+set_segments(ag, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.SolventRadii(values, guessed=False)[source]
+

Intrinsic solvation radius

+
+
+dtype
+

alias of float

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.Tempfactors(values, guessed=False)[source]
+

Tempfactor for atoms

+
+
+bfactor(**kwargs)[source]
+

Bfactor alias with warning

+
+ +
+
+bfactor_setter(**kwargs)[source]
+

Bfactor alias with warning

+
+ +
+
+bfactors(**kwargs)[source]
+

Bfactor alias with warning

+
+ +
+
+bfactors_setter(**kwargs)[source]
+

Bfactor alias with warning

+
+ +
+
+dtype
+

alias of float

+
+ +
+
+group
+

alias of SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.TopologyAttr(values, guessed=False)[source]
+

Base class for Topology attributes.

+
+

Note

+

This class is intended to be subclassed, and mostly amounts to +a skeleton. The methods here should be present in all +TopologyAttr child classes, but by default they raise +appropriate exceptions.

+
+
+
+attrname
+

the name used for the attribute when attached to a Topology object

+
+
Type
+

str

+
+
+
+ +
+
+singular
+

name for the attribute on a singular object (Atom/Residue/Segment)

+
+
Type
+

str

+
+
+
+ +
+
+per_object
+

If there is a strict mapping between Component and Attribute

+
+
Type
+

str

+
+
+
+ +
+
+dtype
+

Type to coerce this attribute to be. For string use ‘object’

+
+
Type
+

int/float/object

+
+
+
+ +
+
+top
+

handle for the Topology object TopologyAttr is associated with

+
+
Type
+

Topology

+
+
+
+ +
+
+copy()[source]
+

Return a deepcopy of this attribute

+
+ +
+
+classmethod from_blank(n_atoms=None, n_residues=None, n_segments=None, values=None)[source]
+

Create a blank version of this TopologyAttribute

+
+
Parameters
+
    +
  • n_atoms (int, optional) – Size of the TopologyAttribute atoms

  • +
  • n_residues (int, optional) – Size of the TopologyAttribute residues

  • +
  • n_segments (int, optional) – Size of the TopologyAttribute segments

  • +
  • values (optional) – Initial values for the TopologyAttribute

  • +
+
+
+
+ +
+
+get_atoms(ag)[source]
+

Get atom attributes for a given AtomGroup

+
+ +
+
+get_residues(rg)[source]
+

Get residue attributes for a given ResidueGroup

+
+ +
+
+get_segments(sg)[source]
+

Get segment attributes for a given SegmentGroup

+
+ +
+
+property is_guessed
+

Bool of if the source of this information is a guess

+
+ +
+
+set_atoms(ag, values)[source]
+

Set atom attributes for a given AtomGroup

+
+ +
+
+set_residues(rg, values)[source]
+

Set residue attributes for a given ResidueGroup

+
+ +
+
+set_segments(sg, values)[source]
+

Set segmentattributes for a given SegmentGroup

+
+ +
+ +
+
+class MDAnalysis.core.topologyattrs.UreyBradleys(values, types=None, guessed=False, order=None)[source]
+

Angles between two atoms

+

Initialise with a list of 2 long tuples

+

These indices refer to the atom indices.

+
+

New in version 1.0.0.

+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/topologyobjects.html b/2.7.0-dev0/documentation_pages/core/topologyobjects.html new file mode 100644 index 0000000000..ddbb1e4d8a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/topologyobjects.html @@ -0,0 +1,919 @@ + + + + + + + 11.3.2. Core Topology Objects — MDAnalysis.core.topologyobjects — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.3.2. Core Topology Objects — MDAnalysis.core.topologyobjects

+

The building blocks for MDAnalysis’ description of topology

+
+
+
+class MDAnalysis.core.topologyobjects.Angle(ix, universe, type=None, guessed=False, order=None)[source]
+

An angle between three Atom instances. +Atom 2 is the apex of the angle

+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Now a subclass of TopologyObject; now uses +__slots__ and stores atoms in atoms attribute

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+angle(pbc=True)[source]
+

Returns the angle in degrees of this Angle.

+

Angle between atoms 0 and 2 with apex at 1:

+
   2
+  /
+ /
+1------0
+
+
+
+

Note

+

The numerical precision is typically not better than +4 decimals (and is only tested to 3 decimals).

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.17.0: Fixed angles close to 180 giving NaN

+
+
+

Changed in version 0.19.0: Added pbc keyword, default True

+
+
+
+ +
+
+value(pbc=True)
+

Returns the angle in degrees of this Angle.

+

Angle between atoms 0 and 2 with apex at 1:

+
   2
+  /
+ /
+1------0
+
+
+
+

Note

+

The numerical precision is typically not better than +4 decimals (and is only tested to 3 decimals).

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.17.0: Fixed angles close to 180 giving NaN

+
+
+

Changed in version 0.19.0: Added pbc keyword, default True

+
+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.Bond(ix, universe, type=None, guessed=False, order=None)[source]
+

A bond between two Atom instances.

+

Two Bond instances can be compared with the == and +!= operators. A bond is equal to another if the same atom +numbers are connected and they have the same bond order. The +ordering of the two atom numbers is ignored as is the fact that a +bond was guessed.

+

The presence of a particular atom can also be queried:

+
>>> Atom in Bond
+
+
+

will return either True or False.

+
+

Changed in version 0.9.0: Now a subclass of TopologyObject. Changed class to use +__slots__ and stores atoms in atoms attribute.

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+length(pbc=True)[source]
+

Length of the bond.

+
+

Changed in version 0.11.0: Added pbc keyword

+
+
+

Changed in version 0.19.0: Changed default of pbc to True

+
+
+ +
+
+partner(Atom)[source]
+
+
Returns
+

    +
  • the other Atom in this

  • +
  • bond

  • +
+

+
+
+
+ +
+
+value(pbc=True)
+

Length of the bond.

+
+

Changed in version 0.11.0: Added pbc keyword

+
+
+

Changed in version 0.19.0: Changed default of pbc to True

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.CMap(ix, universe, type=None, guessed=False, order=None)[source]
+

Coupled-torsion correction map term between five +Atom instances.

+
+

New in version 1.0.0.

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+ +
+
+class MDAnalysis.core.topologyobjects.Dihedral(ix, universe, type=None, guessed=False, order=None)[source]
+

Dihedral (dihedral angle) between four +Atom instances.

+

The dihedral is defined as the angle between the planes formed by +Atoms (1, 2, 3) and (2, 3, 4).

+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Now a subclass of TopologyObject; now uses __slots__ +and stores atoms in atoms attribute.

+
+
+

Changed in version 0.11.0: Renamed to Dihedral (was Torsion)

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+dihedral(pbc=True)[source]
+

Calculate the dihedral angle in degrees.

+

Dihedral angle around axis connecting atoms 1 and 2 (i.e. the angle +between the planes spanned by atoms (0,1,2) and (1,2,3)):

+
        3
+        |
+  1-----2
+ /
+0
+
+
+
+

Note

+

The numerical precision is typically not better than +4 decimals (and is only tested to 3 decimals).

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.19.0: Added pbc keyword, default True

+
+
+
+ +
+
+value(pbc=True)
+

Calculate the dihedral angle in degrees.

+

Dihedral angle around axis connecting atoms 1 and 2 (i.e. the angle +between the planes spanned by atoms (0,1,2) and (1,2,3)):

+
        3
+        |
+  1-----2
+ /
+0
+
+
+
+

Note

+

The numerical precision is typically not better than +4 decimals (and is only tested to 3 decimals).

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.19.0: Added pbc keyword, default True

+
+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.ImproperDihedral(ix, universe, type=None, guessed=False, order=None)[source]
+

Improper Dihedral (improper dihedral angle) between four +Atom instances.

+

MDAnalysis treats the improper dihedral angle as the angle between +the planes formed by Atoms (1, 2, 3) and (2, 3, 4).

+
+

Warning

+

Definitions of Atom ordering in improper dihedrals +can change. Check the definitions here against +your software.

+
+
+

New in version 0.9.0.

+
+
+

Changed in version 0.11.0: Renamed to ImproperDihedral (was Improper_Torsion)

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+improper()[source]
+

Improper dihedral angle in degrees.

+
+

Note

+

The numerical precision is typically not better than +4 decimals (and is only tested to 3 decimals).

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.TopologyDict(topologygroup)[source]
+

A customised dictionary designed for sorting the bonds, angles and +dihedrals present in a group of atoms.

+

Usage:

+
topologydict = TopologyDict(members)
+
+
+

TopologyDicts are also built lazily from a TopologyGroup.topDict +attribute.

+

The TopologyDict collects all the selected topology type from the +atoms and categorises them according to the types of the atoms within. A +TopologyGroup containing all of a given bond type can be made by +querying with the appropriate key. The keys to the TopologyDict +are a tuple of the atom types that the bond represents and can be viewed +using the keys() method.

+

For example, from a system containing pure ethanol

+
>>> td = u.bonds.topDict
+>>> td.keys()
+[('C', 'C'),
+ ('C', 'H'),
+ ('O', 'H'),
+ ('C', 'O')]
+>>> td['C', 'O']
+< TopologyGroup containing 912 bonds >
+
+
+
+

Note

+

The key for a bond is taken from the type attribute of the atoms.

+

Getting and setting types of bonds is done smartly, so a C-C-H +angle is considered identical to a H-C-C angle.

+
+

Duplicate entries are automatically removed upon creation and +combination of different Dicts. This means a bond between atoms +1 and 2 will only ever appear once in a dict despite both atoms 1 +and 2 having the bond in their bond attribute.

+

Two TopologyDict instances can be combined using +addition and it will not create any duplicate bonds in the process.

+
+
Parameters
+

members – A list of TopologyObject instances

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Changed initialisation to use a list of TopologyObject +instances instead of list of atoms; now used from within +TopologyGroup instead of accessed from AtomGroup.

+
+
+
+keys()[source]
+

Returns a list of the different types of available bonds

+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.TopologyGroup(bondidx, universe, btype=None, type=None, guessed=None, order=None)[source]
+

A container for a groups of bonds.

+

All bonds of a certain types can be retrieved from within the +TopologyGroup by querying with a tuple of types:

+
tg2 = tg.select_bonds([key])
+
+
+

Where key describes the desired bond as a tuple of the involved +Atom types, as defined by the .type Atom +attribute). A list of available keys can be displayed using the +types() method.

+

Alternatively, all the bonds which are in a given +AtomGroup can be extracted using +atomgroup_intersection():

+
tg2 = tg.atomgroup_intersection(ag)
+
+
+

This allows the keyword strict to be given, which forces all members of +all bonds to be inside the AtomGroup passed to it.

+

Finally, a TopologyGroup can be sliced similarly to AtomGroups:

+
tg2 = tg[5:10]
+
+
+

The bonds(), angles() and dihedrals() methods offer +a “shortcut” to the Cython distance calculation functions in +MDAnalysis.lib.distances.

+

TopologyGroups can be combined with TopologyGroups of the same bond +type (ie can combine two angle containing TopologyGroups).

+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Overhauled completely: (1) Added internal TopologyDict +accessible by the topDict attribute. (2) +selectBonds() allows the topDict to be queried +with tuple of types. (3) Added atomgroup_intersection() +to allow bonds which are in a given AtomGroup to be retrieved.

+
+
+

Changed in version 0.10.0: Added from_indices() constructor, allowing class to be created +from indices. +Can now create empty Group. +Renamed dump_contents() to to_indices()

+
+
+

Changed in version 0.11.0: Added values method to return the size of each object in this group +Deprecated selectBonds method in favour of select_bonds

+
+
+

Changed in version 0.19.0: Empty TopologyGroup now returns correctly shaped empty array via +indices property and to_indices()

+
+
+
+angles(result=None, pbc=False)[source]
+

Calculates the angle in radians formed between a bond +between atoms 1 and 2 and a bond between atoms 2 & 3

+
+
Parameters
+
    +
  • result (array_like) – allows a predefined results array to be used, note that this +will be overwritten

  • +
  • pbc (bool) – apply periodic boundary conditions when calculating angles +[False] this is important when connecting vectors between +atoms might require minimum image convention

  • +
+
+
Returns
+

    +
  • angles (ndarray)

  • +
  • .. versionchanged :: 0.9.0 – Added pbc option (default False)

  • +
+

+
+
+
+ +
+
+property atom1
+

The first atom in each TopologyObject in this Group

+
+ +
+
+property atom2
+

The second atom in each TopologyObject in this Group

+
+ +
+
+property atom3
+

The third atom in each TopologyObject in this Group

+
+ +
+
+property atom4
+

The fourth atom in each TopologyObject in this Group

+
+ +
+
+atomgroup_intersection(ag, **kwargs)[source]
+

Retrieve all bonds from within this TopologyGroup that are within +the AtomGroup which is passed.

+
+
Parameters
+
    +
  • ag (AtomGroup) – The :class:~MDAnalysis.core.groups.AtomGroup to intersect +with.

  • +
  • strict (bool) – Only retrieve bonds which are completely contained within the +AtomGroup. [False]

  • +
+
+
+
+

New in version 0.9.0.

+
+
+ +
+
+bonds(pbc=False, result=None)[source]
+

Calculates the distance between all bonds in this TopologyGroup

+
+
Keywords
+
+
pbc

apply periodic boundary conditions when calculating distance +[False]

+
+
result

allows a predefined results array to be used, +note that this will be overwritten

+
+
+
+
+

Uses cython implementation

+
+ +
+
+dihedrals(result=None, pbc=False)[source]
+

Calculate the dihedral angle in radians for this topology +group.

+

Defined as the angle between a plane formed by atoms 1, 2 and +3 and a plane formed by atoms 2, 3 and 4.

+
+
Parameters
+
    +
  • result (array_like) – allows a predefined results array to be used, note that this +will be overwritten

  • +
  • pbc (bool) – apply periodic boundary conditions when calculating angles +[False] this is important when connecting vectors between +atoms might require minimum image convention

  • +
+
+
Returns
+

    +
  • angles (ndarray)

  • +
  • .. versionchanged:: 0.9.0 – Added pbc option (default False)

  • +
+

+
+
+
+ +
+
+dump_contents()
+

Return a data structure with atom indices describing the bonds.

+

This format should be identical to the original contents of the +entries in universe._topology. +Note that because bonds are sorted as they are initialised, the order +that atoms are defined in each entry might be reversed.

+
+
Returns
+

    +
  • indices (tuple) – A tuple of tuples which define the contents of this +TopologyGroup in terms of the atom numbers. (0 based +index within u.atoms)

  • +
  • .. versionadded:: 0.9.0

  • +
  • .. versionchanged:: 0.10.0 – Renamed from “dump_contents” to “to_indices”

  • +
+

+
+
+
+ +
+
+property indices
+

all bond indices

+
+

See also

+
+
to_indices

function that just returns indices

+
+
+
+
+ +
+
+selectBonds(selection)
+

Retrieves a selection from this topology group based on types.

+
+ +
+
+select_bonds(selection)[source]
+

Retrieves a selection from this topology group based on types.

+
+ +
+
+to_indices()[source]
+

Return a data structure with atom indices describing the bonds.

+

This format should be identical to the original contents of the +entries in universe._topology. +Note that because bonds are sorted as they are initialised, the order +that atoms are defined in each entry might be reversed.

+
+
Returns
+

    +
  • indices (tuple) – A tuple of tuples which define the contents of this +TopologyGroup in terms of the atom numbers. (0 based +index within u.atoms)

  • +
  • .. versionadded:: 0.9.0

  • +
  • .. versionchanged:: 0.10.0 – Renamed from “dump_contents” to “to_indices”

  • +
+

+
+
+
+ +
+
+property topDict
+

Returns the TopologyDict for this topology group.

+

This is used for the select_bonds method when fetching a certain type +of bond.

+

This is a cached property so will be generated the first time it is +accessed.

+
+ +
+
+types()[source]
+

Return a list of the bond types in this TopologyGroup

+
+ +
+
+property universe
+

The Universe that we belong to

+
+ +
+
+values(**kwargs)[source]
+

Return the size of each object in this Group

+
+
Keywords
+
+
pbc

apply periodic boundary conditions when calculating distance +[False]

+
+
result

allows a predefined results array to be used, +note that this will be overwritten

+
+
+
+
+
+

New in version 0.11.0.

+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.TopologyObject(ix, universe, type=None, guessed=False, order=None)[source]
+

Base class for all Topology items.

+

Defines the behaviour by which Bonds/Angles/etc in MDAnalysis should +behave.

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.10.0: All TopologyObject now keep track of if they were guessed or not +via the is_guessed managed property.

+
+
+

New in version 0.11.0: Added the value method to return the size of the object

+
+
+

Changed in version 2.6.0: Updated Atom ID representation order to match that of AtomGroup indices

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+property atoms
+

Atoms within this Bond

+
+ +
+
+property indices
+

Tuple of indices describing this object

+
+

New in version 0.10.0.

+
+
+ +
+
+property type
+

Type of the bond as a tuple

+
+

Note

+

When comparing types, it is important to consider the reverse +of the type too, i.e.:

+
a.type == b.type or a.type == b.type[::-1]
+
+
+
+
+ +
+ +
+
+class MDAnalysis.core.topologyobjects.UreyBradley(ix, universe, type=None, guessed=False, order=None)[source]
+

A Urey-Bradley angle between two Atom instances. +Two UreyBradley instances can be compared with the == and +!= operators. A UreyBradley angle is equal to another if the same atom +numbers are involved.

+
+

New in version 1.0.0.

+
+

Create a topology object

+
+
Parameters
+
    +
  • ix (numpy array) – indices of the Atoms

  • +
  • universe (MDAnalysis.Universe) –

  • +
  • type (optional) – Type of the bond

  • +
  • guessed (optional) – If the Bond is guessed

  • +
+
+
+
+
+distance(pbc=True)[source]
+

Distance between the atoms.

+
+ +
+
+partner(Atom)[source]
+
+
Returns
+

    +
  • the other Atom in this

  • +
  • interaction

  • +
+

+
+
+
+ +
+
+value(pbc=True)
+

Distance between the atoms.

+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core/universe.html b/2.7.0-dev0/documentation_pages/core/universe.html new file mode 100644 index 0000000000..076549cc68 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core/universe.html @@ -0,0 +1,1040 @@ + + + + + + + 11.2.1. Core object: Universe — MDAnalysis.core.universe — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11.2.1. Core object: Universe — MDAnalysis.core.universe

+

The Universe class ties a topology +and a trajectory together. Almost all code in MDAnalysis starts with a +Universe.

+

Normally, a Universe is created from files:

+
import MDAnalysis as mda
+u = mda.Universe("topology.psf", "trajectory.dcd")
+
+
+

In order to construct new simulation system it is also convenient to +construct a Universe from existing +AtomGroup instances with the +Merge() function.

+
+

11.2.1.1. Classes

+
+
+class MDAnalysis.core.universe.Universe(topology=None, *coordinates, all_coordinates=False, format=None, topology_format=None, transformations=None, guess_bonds=False, vdwradii=None, fudge_factor=0.55, lower_bound=0.1, in_memory=False, in_memory_step=1, **kwargs)[source]
+

The MDAnalysis Universe contains all the information describing the system.

+

The system always requires a topology file — in the simplest case just +a list of atoms. This can be a CHARMM/NAMD PSF file or a simple coordinate +file with atom informations such as XYZ, PDB, GROMACS GRO or TPR, or CHARMM +CRD. See Table of Supported Topology Formats for what kind of topologies can +be read.

+

A trajectory file provides coordinates; the coordinates have to be +ordered in the same way as the list of atoms in the topology. A trajectory +can be a single frame such as a PDB, CRD, or GRO file, or it can be a MD +trajectory (in CHARMM/NAMD/LAMMPS DCD, GROMACS XTC/TRR, AMBER nc, generic +XYZ format, …). See Table of supported coordinate formats for what can be +read as a “trajectory”.

+

As a special case, when the topology is a file that contains atom +information and coordinates (such as XYZ, PDB, GRO or CRD, see +Table of supported coordinate formats) then the coordinates are immediately +loaded from the “topology” file unless a trajectory is supplied.

+
+
Parameters
+
    +
  • topology (str, stream, Topology, numpy.ndarray, None) – A CHARMM/XPLOR PSF topology file, PDB file or Gromacs GRO file; used to +define the list of atoms. If the file includes bond information, +partial charges, atom masses, … then these data will be available to +MDAnalysis. Alternatively, an existing +MDAnalysis.core.topology.Topology instance may be given, +numpy coordinates, or None for an empty universe.

  • +
  • coordinates (str, stream, list of str, list of stream (optional)) – Coordinates can be provided as files of +a single frame (eg a PDB, CRD, or GRO file); a list of single +frames; or a trajectory file (in CHARMM/NAMD/LAMMPS DCD, Gromacs +XTC/TRR, or generic XYZ format). The coordinates must be +ordered in the same way as the list of atoms in the topology. +See Table of supported coordinate formats for what can be read +as coordinates. Alternatively, streams can be given.

  • +
  • topology_format (str, None, default None) – Provide the file format of the topology file; None guesses it from +the file extension. Can also pass a subclass of +MDAnalysis.topology.base.TopologyReaderBase to define a custom +reader to be used on the topology file.

  • +
  • format (str, None, default None) – Provide the file format of the coordinate or trajectory file; None +guesses it from the file extension. Note that this keyword has no +effect if a list of file names is supplied because the “chained” reader +has to guess the file format for each individual list member. +Can also pass a subclass of MDAnalysis.coordinates.base.ProtoReader +to define a custom reader to be used on the trajectory file.

  • +
  • all_coordinates (bool, default False) – If set to True specifies that if more than one filename is passed +they are all to be used, if possible, as coordinate files (employing a +MDAnalysis.coordinates.chain.ChainReader). The +default behavior is to take the first file as a topology and the +remaining as coordinates. The first argument will always always be used +to infer a topology regardless of all_coordinates.

  • +
  • guess_bonds (bool, default False) – Once Universe has been loaded, attempt to guess the connectivity +between atoms. This will populate the .bonds, .angles, and .dihedrals +attributes of the Universe.

  • +
  • vdwradii (dict, None, default None) – For use with guess_bonds. Supply a dict giving a vdwradii for each +atom type which are used in guessing bonds.

  • +
  • fudge_factor (float, default [0.55]) – For use with guess_bonds. Supply the factor by which atoms must +overlap each other to be considered a bond.

  • +
  • lower_bound (float, default [0.1]) – For use with guess_bonds. Supply the minimum bond length.

  • +
  • transformations (function or list, None, default None) – Provide a list of transformations that you wish to apply to the +trajectory upon reading. Transformations can be found in +MDAnalysis.transformations, or can be user-created.

  • +
  • in_memory (bool, default False) – After reading in the trajectory, transfer it to an in-memory +representations, which allow for manipulation of coordinates.

  • +
  • in_memory_step (int, default 1) – Only read every nth frame into in-memory representation.

  • +
  • continuous (bool, default False) – The continuous option is used by the +ChainReader, which contains the +functionality to treat independent trajectory files as a single virtual +trajectory.

  • +
  • **kwargs (extra arguments are passed to the topology parser.) –

  • +
+
+
+
+
+trajectory
+

currently loaded trajectory reader; readers are described in +Coordinates modules

+
+
Type
+

base.ReaderBase or base.SingleFrameReaderBase

+
+
+
+ +
+
+dimensions
+

system dimensions (simulation unit cell, if set in the +trajectory) at the current time step +(see MDAnalysis.coordinates.timestep.Timestep.dimensions). +The unit cell can be set for the current time step (but the change is +not permanent unless written to a file).

+
+
Type
+

numpy.ndarray

+
+
+
+ +
+
+atoms
+

all particles (Atom) in the system, +as read from the topology file

+
+
Type
+

AtomGroup

+
+
+
+ +
+
+residues
+

all residues (Residue) in the system

+
+
Type
+

ResidueGroup

+
+
+
+ +
+
+segments
+

all segments (Segment) in the system

+
+
Type
+

SegmentGroup

+
+
+
+ +
+
+bonds
+

all bonds (if defined in the topology) as provided by +Universe.atoms.bonds

+
+
Type
+

topologyattrs.Bonds

+
+
+
+ +
+
+angles
+

all angles (if defined in the topology), same as +Universe.atoms.angles

+
+
Type
+

topologyattrs.Angles

+
+
+
+ +
+
+dihedrals
+

all dihedral angles (if defined in the topology), same as +Universe.atoms.dihedrals

+
+
Type
+

topologyattrs.Dihedrals

+
+
+
+ +
+
+impropers
+

all improper dihedral angles (if defined in the topology), same as +Universe.atoms.impropers

+
+
Type
+

topologyattrs.Impropers

+
+
+
+ +

Examples

+

Examples for setting up a Universe:

+
u = Universe(topology, trajectory)          # read system from file(s)
+u = Universe(pdbfile)                       # read atoms and coordinates from PDB or GRO
+u = Universe(topology, [traj1, traj2, ...]) # read from a list of trajectories
+u = Universe(topology, traj1, traj2, ...)   # read from multiple trajectories
+
+
+

Load new data into a universe (replaces old trajectory and does not append):

+
u.load_new(trajectory)                      # read from a new trajectory file
+
+
+

Selecting atoms with select_atoms()

+
ag = u.select_atoms(...)
+
+
+

returns an AtomGroup.

+
+

Changed in version 1.0.0: Universe() now raises an error. Use Universe(None) or Universe.empty() instead. +Removed instant selectors.

+
+
+

Changed in version 2.0.0: Universe now can be (un)pickled. +topology and trajectory are reserved upon unpickle.

+
+
+

Changed in version 2.5.0: Added fudge_factor and lower_bound parameters for use with +guess_bonds.

+
+
+
+add_Residue(segment=None, **attrs)[source]
+

Add a new Residue to this Universe

+

New Residues will not contain any Atoms, but can be assigned to Atoms +as per usual. If the Universe contains multiple segments, this must +be specified as a keyword.

+
+
Parameters
+
    +
  • segment (MDAnalysis.Segment) – If there are multiple segments, then the Segment that the new +Residue will belong in must be specified.

  • +
  • attrs (dict) – For each Residue attribute, the value for the new Residue must be +specified

  • +
+
+
Return type
+

A reference to the new Residue

+
+
Raises
+

NoDataError – If any information was missing. This happens before any changes have + been made, ie the change is rolled back.

+
+
+

Example

+

Adding a new GLY residue, then placing atoms within it:

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> u = mda.Universe(PSF, DCD)
+>>> newres = u.add_Residue(segment=u.segments[0], resid=42, resname='GLY', resnum=0)
+>>> u.atoms[[1, 2, 3]].residues = newres
+>>> u.select_atoms('resname GLY and resid 42 and resnum 0')
+<AtomGroup with 3 atoms>
+
+
+
+ +
+
+add_Segment(**attrs)[source]
+

Add a new Segment to this Universe

+
+
Parameters
+

attrs (dict) – For each Segment attribute as a key, give the value in the new +Segment

+
+
Return type
+

A reference to the new Segment

+
+
Raises
+

NoDataError – If any attributes were not specified as a keyword.

+
+
+
+ +
+
+add_TopologyAttr(topologyattr, values=None)[source]
+

Add a new topology attribute to the Universe

+

Adding a TopologyAttribute to the Universe makes it available to +all AtomGroups etc throughout the Universe.

+
+
Parameters
+
    +
  • topologyattr (TopologyAttr or string) – Either a MDAnalysis TopologyAttr object or the name of a possible +topology attribute.

  • +
  • values (np.ndarray, optional) – If initiating an attribute from a string, the initial values to +use. If not supplied, the new TopologyAttribute will have empty +or zero values.

  • +
+
+
+

Example

+

For example to add bfactors to a Universe:

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> u = mda.Universe(PSF, DCD)
+>>> u.add_TopologyAttr('tempfactors')
+>>> u.atoms.tempfactors
+array([0., 0., 0., ..., 0., 0., 0.])
+
+
+
+

Changed in version 0.17.0: Can now also add TopologyAttrs with a string of the name of the +attribute to add (eg ‘charges’), can also supply initial values +using values keyword.

+
+
+

Changed in version 1.1.0: Now warns when adding bfactors to a Universe with +existing tempfactors, or adding tempfactors to a +Universe with existing bfactors. +In version 2.0, MDAnalysis will stop treating +tempfactors and bfactors as separate attributes. Instead, +they will be aliases of the same attribute.

+
+
+ +
+
+add_angles(values, types=None, guessed=False)[source]
+

Add new Angles to this Universe.

+
+
Parameters
+
    +
  • values (iterable of tuples, AtomGroups, or Angles; or TopologyGroup) – An iterable of: tuples of 3 atom indices, or AtomGroups with 3 atoms, +or Angles. If every value is a Angle, all +keywords are ignored. +If AtomGroups, Angles, or a TopologyGroup are passed, +they must be from the same Universe.

  • +
  • types (iterable (optional, default None)) – None, or an iterable of hashable values with the same length as values

  • +
  • guessed (bool or iterable (optional, default False)) – bool, or an iterable of hashable values with the same length as values

  • +
  • versionadded: (..) – 1.0.0:

  • +
+
+
+
+ +
+
+add_bonds(values, types=None, guessed=False, order=None)[source]
+

Add new Bonds to this Universe.

+
+
Parameters
+
    +
  • values (iterable of tuples, AtomGroups, or Bonds; or TopologyGroup) – An iterable of: tuples of 2 atom indices, or AtomGroups with 2 atoms, +or Bonds. If every value is a Bond, all +keywords are ignored. +If AtomGroups, Bonds, or a TopologyGroup are passed, +they must be from the same Universe.

  • +
  • types (iterable (optional, default None)) – None, or an iterable of hashable values with the same length as values

  • +
  • guessed (bool or iterable (optional, default False)) – bool, or an iterable of hashable values with the same length as values

  • +
  • order (iterable (optional, default None)) – None, or an iterable of hashable values with the same length as values

  • +
+
+
+

Example

+

Adding TIP4P water bonds with a list of AtomGroups:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import GRO
+u = mda.Universe(GRO)
+sol = u.select_atoms('resname SOL')
+ow_hw1 = sol.select_atoms('name OW or name HW1').split('residue')
+ow_hw2 = sol.select_atoms('name OW or name HW2').split('residue')
+ow_mw = sol.select_atoms('name OW or name MW').split('residue')
+u.add_bonds(ow_hw1 + ow_hw2 + ow_mw)
+
+
+

You can only add bonds from the same Universe. If you would like to add +AtomGroups, Bonds, or a TopologyGroup from a different Universe, convert +them to indices first.

+
from MDAnalysis.tests.datafiles import PSF
+u2 = mda.Universe(PSF)
+
+#  assuming you have already added bonds to u
+u2.add_bonds(u.bonds.to_indices())
+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+add_dihedrals(values, types=None, guessed=False)[source]
+

Add new Dihedrals to this Universe.

+
+
Parameters
+
    +
  • values (iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup) – An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, +or Dihedrals. If every value is a Dihedral, all +keywords are ignored. +If AtomGroups, Dihedrals, or a TopologyGroup are passed, +they must be from the same Universe.

  • +
  • types (iterable (optional, default None)) – None, or an iterable of hashable values with the same length as values

  • +
  • guessed (bool or iterable (optional, default False)) – bool, or an iterable of hashable values with the same length as values

  • +
+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+add_impropers(values, types=None, guessed=False)[source]
+

Add new Impropers to this Universe.

+
+
Parameters
+
    +
  • values (iterable of tuples, AtomGroups, or Impropers; or TopologyGroup) – An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, +or Impropers. If every value is an Improper, all +keywords are ignored. +If AtomGroups, Impropers, or a TopologyGroup are passed, +they must be from the same Universe.

  • +
  • types (iterable (optional, default None)) – None, or an iterable of hashable values with the same length as values

  • +
  • guessed (bool or iterable (optional, default False)) – bool, or an iterable of hashable values with the same length as values

  • +
+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+property coord
+

Reference to current timestep and coordinates of universe.

+

The raw trajectory coordinates are Universe.coord.positions, +represented as a numpy.float32 array.

+

Because coord is a reference to a +Timestep, it changes its contents +while one is stepping through the trajectory.

+
+

Note

+

In order to access the coordinates it is better to use the +AtomGroup.positions() method; for instance, all coordinates of +the Universe as a numpy array: Universe.atoms.positions().

+
+
+ +
+
+copy()[source]
+

Return an independent copy of this Universe

+
+ +
+
+del_TopologyAttr(topologyattr)[source]
+

Remove a topology attribute from the Universe

+

Removing a TopologyAttribute from the Universe makes it unavailable to +all AtomGroups etc throughout the Universe.

+
+
Parameters
+

topologyattr (TopologyAttr or string) – Either a MDAnalysis TopologyAttr object or the name of a possible +topology attribute.

+
+
+

Example

+

For example to remove bfactors to a Universe:

+
>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> u = mda.Universe(PSF, DCD)
+>>> u.add_TopologyAttr('tempfactors')
+>>> hasattr(u.atoms[:3], 'tempfactors')
+True
+>>>
+>>> u.del_TopologyAttr('tempfactors')
+>>> hasattr(u.atoms[:3], 'tempfactors')
+False
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+delete_angles(values)[source]
+

Delete Angles from this Universe.

+
+
Parameters
+

values (iterable of tuples, AtomGroups, or Angles; or TopologyGroup) – An iterable of: tuples of 3 atom indices, or AtomGroups with 3 atoms, +or Angles. +If AtomGroups, Angles, or a TopologyGroup are passed, +they must be from the same Universe.

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+delete_bonds(values)[source]
+

Delete Bonds from this Universe.

+
+
Parameters
+

values (iterable of tuples, AtomGroups, or Bonds; or TopologyGroup) – An iterable of: tuples of 2 atom indices, or AtomGroups with 2 atoms, +or Bonds. +If AtomGroups, Bonds, or a TopologyGroup are passed, +they must be from the same Universe.

+
+
+

Example

+

Deleting bonds from a Universe:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PSF
+u = mda.Universe(PSF)
+
+#  delete first 5 bonds
+u.delete_bonds(u.bonds[:5])
+
+
+

If you are deleting bonds in the form of AtomGroups, Bonds, or a +TopologyGroup, they must come from the same Universe. If you want to +delete bonds from another Universe, convert them to indices first.

+
from MDAnalysis.tests.datafiles import PDB
+u2 = mda.Universe(PDB)
+
+u.delete_bonds(u2.bonds.to_indices())
+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+delete_dihedrals(values)[source]
+

Delete Dihedrals from this Universe.

+
+
Parameters
+

values (iterable of tuples, AtomGroups, or Dihedrals; or TopologyGroup) – An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, +or Dihedrals. +If AtomGroups, Dihedrals, or a TopologyGroup are passed, +they must be from the same Universe.

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+delete_impropers(values)[source]
+

Delete Impropers from this Universe.

+
+
Parameters
+

values (iterable of tuples, AtomGroups, or Impropers; or TopologyGroup) – An iterable of: tuples of 4 atom indices, or AtomGroups with 4 atoms, +or Impropers. +If AtomGroups, Angles, or a TopologyGroup are passed, +they must be from the same Universe.

+
+
+
+

New in version 1.0.0.

+
+
+ +
+
+classmethod empty(n_atoms, n_residues=1, n_segments=1, n_frames=1, atom_resindex=None, residue_segindex=None, trajectory=False, velocities=False, forces=False)[source]
+

Create a blank Universe

+

Useful for building a Universe without requiring existing files, +for example for system building.

+

If trajectory is set to True, a +MDAnalysis.coordinates.memory.MemoryReader will be +attached to the Universe.

+
+
Parameters
+
    +
  • n_atoms (int) – number of Atoms in the Universe

  • +
  • n_residues (int, default 1) – number of Residues in the Universe, defaults to 1

  • +
  • n_segments (int, default 1) – number of Segments in the Universe, defaults to 1

  • +
  • n_frames (int, default 1) – number of Frames in the Universe, defaults to 1

  • +
  • atom_resindex (array like, optional) – mapping of atoms to residues, e.g. with 6 atoms, +atom_resindex=[0, 0, 1, 1, 2, 2] would put 2 atoms +into each of 3 residues.

  • +
  • residue_segindex (array like, optional) – mapping of residues to segments

  • +
  • trajectory (bool, optional) – if True, attaches a +MDAnalysis.coordinates.memory.MemoryReader allowing +coordinates to be set and written.

  • +
  • velocities (bool, optional) – include velocities in the +MDAnalysis.coordinates.memory.MemoryReader

  • +
  • forces (bool, optional) – include forces in the +MDAnalysis.coordinates.memory.MemoryReader

  • +
+
+
Returns
+

Universe instance with dummy +values for atoms and undefined coordinates/velocities/forces

+
+
Return type
+

Universe

+
+
+

Examples

+

For example to create a new Universe with 6 atoms in 2 residues, with +positions for the atoms and a mass attribute:

+
u = mda.Universe.empty(6, 2,
+                       atom_resindex=np.array([0, 0, 0, 1, 1, 1]),
+                       trajectory=True,
+      )
+u.add_TopologyAttr('masses')
+
+
+
+

New in version 0.17.0.

+
+
+

Changed in version 0.19.0: The attached Reader when trajectory=True is now a MemoryReader

+
+
+

Changed in version 1.0.0: Universes can now be created with 0 atoms

+
+
+ +
+
+classmethod from_smiles(smiles, sanitize=True, addHs=True, generate_coordinates=True, numConfs=1, rdkit_kwargs={}, **kwargs)[source]
+

Create a Universe from a SMILES string with rdkit

+
+
Parameters
+
    +
  • smiles (str) – SMILES string

  • +
  • sanitize (bool (optional, default True)) – Toggle the sanitization of the molecule

  • +
  • addHs (bool (optional, default True)) – Add all necessary hydrogens to the molecule

  • +
  • generate_coordinates (bool (optional, default True)) – Generate 3D coordinates using RDKit’s +AllChem.EmbedMultipleConfs() function. Requires adding +hydrogens with the addHs parameter

  • +
  • numConfs (int (optional, default 1)) – Number of frames to generate coordinates for. Ignored if +generate_coordinates=False

  • +
  • rdkit_kwargs (dict (optional)) – Other arguments passed to the RDKit EmbedMultipleConfs() +function

  • +
  • kwargs (dict) – Parameters passed on Universe creation

  • +
+
+
Returns
+

universe – contains atom names and topology information (bonds) derived from +the input SMILES string; coordinates are included if +generate_coordinates was set to True

+
+
Return type
+

Universe

+
+
+

Examples

+

To create a Universe with 10 conformers of ethanol:

+
>>> from rdkit.Chem import AllChem
+>>> u = mda.Universe.from_smiles('CCO', numConfs=10)
+>>> u
+<Universe with 9 atoms>
+>>> u.trajectory
+<RDKitReader with 10 frames of 9 atoms>
+
+
+

To use a different conformer generation algorithm, like ETKDGv3:

+
>>> u = mda.Universe.from_smiles('CCO', rdkit_kwargs=dict(
+...      params=AllChem.ETKDGv3()))
+>>> u.trajectory
+<RDKitReader with 1 frames of 9 atoms>
+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+property kwargs
+

keyword arguments used to initialize this universe

+
+ +
+
+load_new(filename, format=None, in_memory=False, in_memory_step=1, **kwargs)[source]
+

Load coordinates from filename.

+

The file format of filename is autodetected from the file name suffix +or can be explicitly set with the format keyword. A sequence of files +can be read as a single virtual trajectory by providing a list of +filenames.

+
+
Parameters
+
    +
  • filename (str or list) – the coordinate file (single frame or trajectory) or a list of +filenames, which are read one after another.

  • +
  • format (str or list or object (optional)) – provide the file format of the coordinate or trajectory file; +None guesses it from the file extension. Note that this +keyword has no effect if a list of file names is supplied because +the “chained” reader has to guess the file format for each +individual list member [None]. Can also pass a subclass of +MDAnalysis.coordinates.base.ProtoReader to define a custom +reader to be used on the trajectory file.

  • +
  • in_memory (bool (optional)) –

    Directly load trajectory into memory with the +MemoryReader

    +
    +

    New in version 0.16.0.

    +
    +

  • +
  • **kwargs (dict) – Other kwargs are passed to the trajectory reader (only for +advanced use)

  • +
+
+
Returns
+

universe

+
+
Return type
+

Universe

+
+
Raises
+

TypeError – if trajectory format can not be determined or no appropriate + trajectory reader found

+
+
+
+

Changed in version 0.8: If a list or sequence that is provided for filename only contains +a single entry then it is treated as single coordinate file. This +has the consequence that it is not read by the +ChainReader but directly by +its specialized file format reader, which typically has more +features than the +ChainReader.

+
+
+

Changed in version 0.17.0: Now returns a Universe instead of the tuple of file/array +and detected file type.

+
+
+

Changed in version 2.4.0: Passes through kwargs if in_memory=True.

+
+
+ +
+
+property models
+

Models in this Universe.

+

The MMTF format can define various models for a given structure. The +topology (eg residue identity) can change between different models, +resulting in a different number of atoms in each model.

+
+
Return type
+

A list of AtomGroups, each representing a single model.

+
+
+
+

Note

+

This requires the underlying topology to have models. Otherwise, a +NoDataError is raised.

+
+
+ +
+
+select_atoms(*args, **kwargs)[source]
+

Select atoms.

+ +
+ +
+
+transfer_to_memory(start=None, stop=None, step=None, verbose=False, **kwargs)[source]
+

Transfer the trajectory to in memory representation.

+

Replaces the current trajectory reader object with one of type +MDAnalysis.coordinates.memory.MemoryReader to support in-place +editing of coordinates.

+
+
Parameters
+
    +
  • start (int, optional) – start reading from the nth frame.

  • +
  • stop (int, optional) – read upto and excluding the nth frame.

  • +
  • step (int, optional) – Read in every nth frame. [1]

  • +
  • verbose (bool, optional) – Will print the progress of loading trajectory to memory, if +set to True. Default value is False.

  • +
+
+
+
+

New in version 0.16.0.

+
+
+

Changed in version 2.4.0: Passes through kwargs to MemoryReader

+
+
+ +
+ +
+
+

11.2.1.2. Functions

+
+
+MDAnalysis.core.universe.Merge(*args)[source]
+

Create a new new Universe from one or more +AtomGroup instances.

+
+
Parameters
+

*args (AtomGroup) – One or more AtomGroups.

+
+
Returns
+

universe

+
+
Return type
+

Universe

+
+
Raises
+
    +
  • ValueError – Too few arguments or an AtomGroup is empty and

  • +
  • TypeError – Arguments are not AtomGroup instances.

  • +
+
+
+

Notes

+

The resulting Universe will only inherit the common topology +attributes that all merged universes share.

+

AtomGroup instances can come from different Universes, or can come +directly from a select_atoms() call.

+

Merge can also be used with a single AtomGroup if the +user wants to, for example, re-order the atoms in the Universe.

+

If multiple AtomGroup instances from the same Universe +are given, the merge will first simply “add” together the +AtomGroup instances.

+

Merging does not create a full trajectory but only a single structure even +if the input consists of one or more trajectories. However, one can use +the MemoryReader to construct a +trajectory for the new Universe as described under +Creating an in-memory trajectory of a sub-system.

+

Example

+

In this example, protein, ligand, and solvent were externally prepared in +three different PDB files. They are loaded into separate Universe +objects (where they could be further manipulated, e.g. renumbered, +relabeled, rotated, …) The Merge() command is used to combine all +of them together:

+
u1 = Universe("protein.pdb")
+u2 = Universe("ligand.pdb")
+u3 = Universe("solvent.pdb")
+u = Merge(u1.select_atoms("protein"), u2.atoms, u3.atoms)
+u.atoms.write("system.pdb")
+
+
+

The complete system is then written out to a new PDB file.

+
+

Changed in version 0.9.0: Raises exceptions instead of assertion errors.

+
+
+

Changed in version 0.16.0: The trajectory is now a +MemoryReader.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/core_modules.html b/2.7.0-dev0/documentation_pages/core_modules.html new file mode 100644 index 0000000000..5e01bedb97 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/core_modules.html @@ -0,0 +1,224 @@ + + + + + + + 11. Core modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

11. Core modules

+

The MDAnalysis.core modules contain functionality essential for +MDAnalysis, such as the central data structures in +MDAnalysis.core.universe and MDAnalysis.core.groups or +the selection definitions and parsing in +MDAnalysis.core.selection.

+ +
+

11.2. Important objects for users

+

All users of MDAnalysis need to understand the two most important +classes in this section, namely the +Universe and the +AtomGroup.

+ +
+
+

11.3. Topology system

+

The topology system is primarily of interest to developers.

+ + +
+
+

11.4. Selection system

+

The selection system is primarily of interest to developers.

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/exceptions.html b/2.7.0-dev0/documentation_pages/exceptions.html new file mode 100644 index 0000000000..2020c57837 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/exceptions.html @@ -0,0 +1,232 @@ + + + + + + + 16. Custom exceptions and warnings — MDAnalysis.exceptions — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

16. Custom exceptions and warnings — MDAnalysis.exceptions

+
+
+
+exception MDAnalysis.exceptions.ApplicationError[source]
+

Raised when an external application failed.

+

The error code is specific for the application.

+
+

New in version 0.7.7.

+
+
+ +
+
+exception MDAnalysis.exceptions.ConversionWarning[source]
+

Warning indicating a problem with converting between units.

+
+ +
+
+exception MDAnalysis.exceptions.DuplicateWarning[source]
+

Warning indicating possible problems arising from an +AtomGroup / +ResidueGroup / +SegmentGroup containing duplicate +Atoms / +Residues / +Segments.

+
+

New in version 0.19.0.

+
+
+ +
+
+exception MDAnalysis.exceptions.FileFormatWarning[source]
+

Warning indicating possible problems with a file format.

+
+ +
+
+exception MDAnalysis.exceptions.MissingDataWarning[source]
+

Warning indicating is that required data are missing.

+
+ +
+
+exception MDAnalysis.exceptions.NoDataError[source]
+

Raised when empty input is not allowed or required data are missing.

+
+

Changed in version 1.0.0: Now a subclass of AttributeError as well as ValueError

+
+
+ +
+
+exception MDAnalysis.exceptions.SelectionError[source]
+

Raised when a atom selection failed.

+
+ +
+
+exception MDAnalysis.exceptions.SelectionWarning[source]
+

Warning indicating a possible problem with a selection.

+
+ +
+
+exception MDAnalysis.exceptions.StreamWarning[source]
+

Warning indicating a possible problem with a stream.

+

StreamWarning is used when streams are substituted for simple access +by filename (see in particular +NamedStream). This does not work everywhere +in MDAnalysis (yet).

+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/NeighborSearch.html b/2.7.0-dev0/documentation_pages/lib/NeighborSearch.html new file mode 100644 index 0000000000..23dffad820 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/NeighborSearch.html @@ -0,0 +1,233 @@ + + + + + + + 13.2.3. Neighbor Search wrapper for MDAnalysis — MDAnalysis.lib.NeighborSearch — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.3. Neighbor Search wrapper for MDAnalysis — MDAnalysis.lib.NeighborSearch

+

This module contains classes that allow neighbor searches directly with +AtomGroup objects from MDAnalysis.

+
+
+
+class MDAnalysis.lib.NeighborSearch.AtomNeighborSearch(atom_group: AtomGroup, box: Optional[Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]] = None)[source]
+

This class can be used to find all atoms/residues/segments within the +radius of a given query position.

+

For the neighbor search, this class is a wrapper around +capped_distance.

+
+
Parameters
+
    +
  • atom_list (AtomGroup) – list of atoms

  • +
  • box (array-like or None, optional, default None) – Simulation cell dimensions in the form of +MDAnalysis.trajectory.timestep.Timestep.dimensions when +periodic boundary conditions should be taken into account for +the calculation of contacts.

  • +
+
+
+
+
+search(atoms: AtomGroup, radius: float, level: str = 'A') Optional[Union[AtomGroup, ResidueGroup, SegmentGroup]][source]
+

Return all atoms/residues/segments that are within radius of the +atoms in atoms.

+
+
Parameters
+
+
+
Returns
+

    +
  • AtomGroup (AtomGroup) – When level='A', AtomGroup is being returned.

  • +
  • ResidueGroup (ResidueGroup) – When level='R', ResidueGroup is being returned.

  • +
  • SegmentGroup (SegmentGroup) – When level='S', SegmentGroup is being returned.

  • +
+

+
+
+
+

Changed in version 2.0.0: Now returns AtomGroup (when empty this is now an empty +AtomGroup instead of an empty list), ResidueGroup, +or a SegmentGroup

+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/c_distances.html b/2.7.0-dev0/documentation_pages/lib/c_distances.html new file mode 100644 index 0000000000..9de92cd2a9 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/c_distances.html @@ -0,0 +1,187 @@ + + + + + + + 13.2.2.1. Distance calculation library — MDAnalysis.lib.c_distances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.2.1. Distance calculation library — MDAnalysis.lib.c_distances

+

Serial versions of all distance calculations

+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/c_distances_openmp.html b/2.7.0-dev0/documentation_pages/lib/c_distances_openmp.html new file mode 100644 index 0000000000..a616246dc0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/c_distances_openmp.html @@ -0,0 +1,187 @@ + + + + + + + 13.2.2.2. Parallel distance calculation library — MDAnalysis.lib.c_distances_openmp — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.2.2. Parallel distance calculation library — MDAnalysis.lib.c_distances_openmp

+

Contains OpenMP versions of the contents of “calc_distances.h”

+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/correlations.html b/2.7.0-dev0/documentation_pages/lib/correlations.html new file mode 100644 index 0000000000..a37429d44a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/correlations.html @@ -0,0 +1,355 @@ + + + + + + + 13.2.11. Correlations utilities — MDAnalysis.lib.correlations — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.11. Correlations utilities — MDAnalysis.lib.correlations

+
+
Authors
+

Paul Smith & Mateusz Bieniek

+
+
Year
+

2020

+
+
Copyright
+

GNU Public License v2

+
+
+
+

New in version 1.0.0.

+
+

This module is primarily for internal use by other analysis modules. It +provides functionality for calculating the time autocorrelation function +of a binary variable (i.e one that is either true or false at each +frame for a given atom/molecule/set of molecules). This module includes +functions for calculating both the time continuous autocorrelation and +the intermittent autocorrelation. The function autocorrelation() +calculates the continuous autocorrelation only. The data may be +pre-processed using the function intermittency() in order to +acount for intermittency before passing the results to +autocorrelation().

+

This module is inspired by seemingly disparate analyses that rely on the same +underlying calculation, including the survival probability of water around +proteins [Araya-Secchi2014], hydrogen bond lifetimes +[Gowers2015, Araya-Secchi2014], and the rate of cholesterol +flip-flop in lipid bilayers [Gu2019].

+
+

See also

+

Analysis tools that make use of modules:

+
+
    +
  • +
    MDAnalysis.analysis.waterdynamics.SurvivalProbability

    Calculates the continuous or intermittent survival probability +of an atom group in a region of interest.

    +
    +
    +
  • +
  • +
    MDAnalysis.analysis.hbonds.hbond_analysis

    Calculates the continuous or intermittent hydrogen bond +lifetime.

    +
    +
    +
  • +
+
+
+

References

+
+
+
Gowers2015(1,2)
+

Richard J. Gowers and Paola Carbone. A multiscale approach to model hydrogen bonding: the case of polyamide. The journal of Chemical Physics, 142(22):224907, 2015. doi:10.1063/1.4922445.

+
+
Araya-Secchi2014(1,2,3)
+

Raul Araya-Secchi, Tomas Perez-Acle, Seung-gu Kang, Tien Huynh, Alejandro Bernardin, Yerko Escalona, Jose-Antonio Garate, Agustin D. Martínez, Isaac E. García, Juan C. Sáez, and Ruhong Zhou. Characterization of a novel water pocket inside the human cx26 hemichannel structure. Biophysical Journal, 107(3):599–612, 2014. doi:10.1016/j.bpj.2014.05.037.

+
+
Gu2019
+

Ruo-Xu Gu, Svetlana Baoukina, and D. Peter Tieleman. Cholesterol flip-flop in heterogeneous membranes. Journal of Chemical Theory and Computation, 15(3):2064–2070, 2019. doi:10.1021/acs.jctc.8b00933.

+
+
+
+
+
+

13.2.12. Autocorrelation Function

+
+
+MDAnalysis.lib.correlations.autocorrelation(list_of_sets, tau_max, window_step=1)[source]
+

Implementation of a discrete autocorrelation function.

+

The autocorrelation of a property \(x\) from a time \(t=t_0\) to \(t=t_0 + \tau\) +is given by:

+
+\[C(\tau) = \langle \frac{ x(t_0)x(t_0 +\tau) }{ x(t_0)x(t_0) } \rangle\]
+

where \(x\) may represent any property of a particle, such as velocity or +potential energy.

+

This function is an implementation of a special case of the time +autocorrelation function in which the property under consideration can +be encoded with indicator variables, \(0\) and \(1\), to represent the binary +state of said property. This special case is often referred to as the +survival probability (\(S(\tau)\)). As an example, in calculating the survival +probability of water molecules within 5 Å of a protein, each water +molecule will either be within this cutoff range (\(1\)) or not (\(0\)). The +total number of water molecules within the cutoff at time \(t_0\) will be +given by \(N(t_0)\). Other cases include the Hydrogen Bond Lifetime as +well as the translocation rate of cholesterol across a bilayer.

+

The survival probability of a property of a set of particles is +given by:

+
+\[S(\tau) = \langle \frac{ N(t_0, t_0 + \tau )} { N(t_0) }\rangle\]
+

where \(N(t0)\) is the number of particles at time \(t_0\) for which the feature +is observed, and \(N(t0, t_0 + \tau)\) is the number of particles for which +this feature is present at every frame from \(t_0\) to \(N(t0, t_0 + \tau)\). +The angular brackets represent an average over all time origins, \(t_0\).

+

See [Araya-Secchi2014] for a description survival probability.

+
+
Parameters
+
    +
  • list_of_sets (list) – List of sets. Each set corresponds to data from a single frame. Each element in a set +may be, for example, an atom id or a tuple of atoms ids. In the case of calculating the +survival probability of water around a protein, these atom ids in a given set will be +those of the atoms which are within a cutoff distance of the protein at a given frame.

  • +
  • tau_max (int) – The last tau (lag time, inclusive) for which to calculate the autocorrelation. e.g if tau_max = 20, +the survival probability will be calculated over 20 frames.

  • +
  • window_step (int, optional) –

    +
    The step size for t0 to perform autocorrelation. Ideally, window_step will be larger than

    tau_max to ensure independence of each window for which the calculation is performed. +Default is 1.

    +
    +
    +

  • +
+
+
Returns
+

    +
  • tau_timeseries (list of int) – the values of tau for which the autocorrelation was calculated

  • +
  • timeseries (list of int) – the autocorelation values for each of the tau values

  • +
  • timeseries_data (list of list of int) – the raw data from which the autocorrelation is computed, i.e \(S(\tau)\) at each window. +This allows the time dependant evolution of \(S(\tau)\) to be investigated.

  • +
  • .. versionadded:: 0.19.2

  • +
+

+
+
+
+ +
+
+

13.2.13. Intermittency Function

+
+
+MDAnalysis.lib.correlations.correct_intermittency(list_of_sets, intermittency)[source]
+

Preprocess data to allow intermittent behaviour prior to calling autocorrelation().

+

Survival probabilty may be calculated either with a strict continuous requirement or +a less strict intermittency. If calculating the survival probability water around a +protein for example, in the former case the water must be within a cutoff distance +of the protein at every frame from \(t_0\) to \(t_0 + \tau\) in order for it to be considered +present at \(t_0 + \tau\). In the intermittent case, the water molecule is allowed to +leave the region of interest for up to a specified consecutive number of frames whilst still +being considered present at \(t_0 + \tau\).

+

This function pre-processes data, such as the atom ids of water molecules within a cutoff +distance of a protein at each frame, in order to allow for intermittent behaviour, with a +single pass over the data.

+

For example, if an atom is absent for a number of frames equal or smaller than the parameter +intermittency, then this absence will be removed and thus the atom is considered to have +not left. +e.g 7,A,A,7 with intermittency=2 will be replaced by 7,7,7,7, where A=absence.

+

The returned data can be used as input to the function autocorrelation() in order +to calculate the survival probability with a given intermittency.

+

See [Gowers2015] for a description of intermittency in the +calculation of hydrogen bond lifetimes.

+

# TODO - is intermittency consitent with list of sets of sets? (hydrogen bonds)

+
+
Parameters
+
    +
  • list_of_sets (list) – In the simple case of e.g survival probability, a list of sets of atom ids present at each frame, where a +single set contains atom ids at a given frame, e.g [{0, 1}, {0}, {0}, {0, 1}]

  • +
  • intermittency (int) – The maximum gap allowed. The default intermittency=0 means that if the datapoint is missing at any frame, no +changes are made to the data. With the value of intermittency=2, all datapoints missing for up to two +consecutive frames will be instead be considered present.

  • +
+
+
Returns
+

list_of_sets – returns a new list with the IDs with added IDs which disappeared for <= intermittency. +e.g If [{0, 1}, {0}, {0}, {0, 1}] is a list of sets of atom ids present at each frame and intermittency=2, +both atoms will be considered present throughout and thus the returned list of sets will be +[{0, 1}, {0, 1}, {0, 1}, {0, 1}].

+
+
Return type
+

list

+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/distances.html b/2.7.0-dev0/documentation_pages/lib/distances.html new file mode 100644 index 0000000000..09d7ab4873 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/distances.html @@ -0,0 +1,1055 @@ + + + + + + + 13.2.1. Fast distance array computation — MDAnalysis.lib.distances — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.1. Fast distance array computation — MDAnalysis.lib.distances

+

Fast C-routines to calculate arrays of distances or angles from coordinate +arrays. Distance functions can accept a NumPy np.ndarray or an +AtomGroup. Many of the functions also exist +in parallel versions, which typically provide higher performance than the +serial code. The boolean attribute MDAnalysis.lib.distances.USED_OPENMP can +be checked to see if OpenMP was used in the compilation of MDAnalysis.

+
+

13.2.1.1. Selection of acceleration (“backend”)

+

All functions take the optional keyword backend, which determines the type of +acceleration. Currently, the following choices are implemented (backend is +case-insensitive):

+ + +++++ + + + + + + + + + + + + + + + + +
Available backends for accelerated distance functions.

backend

module

description

“serial”

c_distances

serial implementation in C/Cython

“OpenMP”

c_distances_openmp

parallel implementation in C/Cython +with OpenMP

+
+
+

13.2.1.2. Use of the distopia library

+

MDAnalysis has developed a standalone library, distopia for accelerating +the distance functions in this module using explicit SIMD vectorisation. +This can provide many-fold speedups in calculating distances. Distopia is +under active development and as such only a selection of functions in this +module are covered. Consult the following table to see if the function +you wish to use is covered by distopia. For more information see the +distopia documentation.

+ + ++++ + + + + + + + + + + +
Functions available using the distopia backend.

Functions

Notes

MDAnalysis.lib.distances.calc_bonds

Doesn’t support triclinic boxes

+

If distopia is installed, the functions in this table will accept the key +‘distopia’ for the backend keyword argument. If the distopia backend is +selected the distopia library will be used to calculate the distances. Note +that for functions listed in this table distopia is not the default backend +if and must be selected.

+
+

Note

+

Distopia does not currently support triclinic simulation boxes. If you +specify distopia as the backend and your simulation box is triclinic, +the function will fall back to the default serial backend.

+
+
+

Note

+

Due to the use of Instruction Set Architecture (ISA) specific SIMD +intrinsics in distopia via VCL2, the precision of your results may +depend on the ISA available on your machine. However, in all tested cases +distopia satisfied the accuracy thresholds used to the functions in this +module. Please document any issues you encounter with distopia’s accuracy +in the relevant distopia issue on the MDAnalysis GitHub repository.

+
+
+

New in version 0.13.0.

+
+
+

Changed in version 2.3.0: Distance functions can now accept an +AtomGroup or an np.ndarray

+
+
+

Changed in version 2.5.0: Interface to the distopia package added.

+
+
+
+

13.2.1.3. Functions

+
+
+MDAnalysis.lib.distances.distance_array(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], configuration: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculate all possible distances between a reference set and another +configuration.

+

If there are n positions in reference and m positions in +configuration, a distance array of shape (n, m) will be computed.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

If a 2D numpy array of dtype numpy.float64 with the shape (n, m) +is provided in result, then this preallocated array is filled. This can +speed up calculations.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array of shape (3,) or (n, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • configuration (numpy.ndarray or AtomGroup) – Configuration coordinate array of shape (3,) or (m, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array which must have the shape (n, m) and dtype +numpy.float64. +Avoids creating the array which saves time when the function +is called repeatedly.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

d – Array containing the distances d[i,j] between reference coordinates +i and configuration coordinates j.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n, m))

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts single coordinates as input.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.self_distance_array(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculate all possible distances within a configuration reference.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

If a 1D numpy array of dtype numpy.float64 with the shape +(n*(n-1)/2,) is provided in result, then this preallocated array is +filled. This can speed up calculations.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array of shape (3,) or (n, 3) (dtype is +arbitrary, will be converted to numpy.float32 internally). Also +accepts an AtomGroup.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array which must have the shape (n*(n-1)/2,) and +dtype numpy.float64. Avoids creating the array which saves time when +the function is called repeatedly.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

d – Array containing the distances dist[i,j] between reference +coordinates i and j at position d[k]. Loop through d:

+
for i in range(n):
+    for j in range(i + 1, n):
+        k += 1
+        dist[i, j] = d[k]
+
+
+

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n*(n-1)/2,))

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.capped_distance(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], configuration: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], max_cutoff: float, min_cutoff: Optional[float] = None, box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, method: Optional[str] = None, return_distances: Optional[bool] = True)[source]
+

Calculates pairs of indices corresponding to entries in the reference +and configuration arrays which are separated by a distance lying within +the specified cutoff(s). Optionally, these distances can be returned as +well.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

An automatic guessing of the optimal method to calculate the distances is +included in the function. An optional keyword for the method is also +provided. Users can enforce a particular method with this functionality. +Currently brute force, grid search, and periodic KDtree methods are +implemented.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array with shape (3,) or (n, 3). Also +accepts an AtomGroup.

  • +
  • configuration (numpy.ndarray or AtomGroup) – Configuration coordinate array with shape (3,) or (m, 3). Also +accepts an AtomGroup.

  • +
  • max_cutoff (float) – Maximum cutoff distance between the reference and configuration.

  • +
  • min_cutoff (float, optional) – Minimum cutoff distance between reference and configuration.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • method ({'bruteforce', 'nsgrid', 'pkdtree'}, optional) – Keyword to override the automatic guessing of the employed search +method.

  • +
  • return_distances (bool, optional) – If set to True, distances will also be returned.

  • +
+
+
Returns
+

    +
  • pairs (numpy.ndarray (dtype=numpy.int64, shape=(n_pairs, 2))) – Pairs of indices, corresponding to coordinates in the reference and +configuration arrays such that the distance between them lies within +the interval (min_cutoff, max_cutoff]. +Each row in pairs is an index pair [i, j] corresponding to the +i-th coordinate in reference and the j-th coordinate in +configuration.

  • +
  • distances (numpy.ndarray (dtype=numpy.float64, shape=(n_pairs,)), optional) – Distances corresponding to each pair of indices. Only returned if +return_distances is True. distances[k] corresponds to the +k-th pair returned in pairs and gives the distance between the +coordinates reference[pairs[k, 0]] and +configuration[pairs[k, 1]].

    +
    pairs, distances = capped_distances(reference, configuration,
    +                                    max_cutoff, return_distances=True)
    +for k, [i, j] in enumerate(pairs):
    +    coord1 = reference[i]
    +    coord2 = configuration[j]
    +    distance = distances[k]
    +
    +
    +
  • +
+

+
+
+ +
+

Changed in version 1.0.1: nsgrid was temporarily removed and replaced with pkdtree due to issues +relating to its reliability and accuracy (Issues #2919, #2229, #2345, +#2670, #2930)

+
+
+

Changed in version 1.0.2: nsgrid enabled again

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.self_capped_distance(reference: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], max_cutoff: float, min_cutoff: Optional[float] = None, box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, method: Optional[str] = None, return_distances: Optional[bool] = True)[source]
+

Calculates pairs of indices corresponding to entries in the reference +array which are separated by a distance lying within the specified +cutoff(s). Optionally, these distances can be returned as well.

+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

An automatic guessing of the optimal method to calculate the distances is +included in the function. An optional keyword for the method is also +provided. Users can enforce a particular method with this functionality. +Currently brute force, grid search, and periodic KDtree methods are +implemented.

+
+
Parameters
+
    +
  • reference (numpy.ndarray or AtomGroup) – Reference coordinate array with shape (3,) or (n, 3). Also +accepts an AtomGroup.

  • +
  • max_cutoff (float) – Maximum cutoff distance between reference coordinates.

  • +
  • min_cutoff (float, optional) – Minimum cutoff distance between reference coordinates.

  • +
  • box (array_like, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • method ({'bruteforce', 'nsgrid', 'pkdtree'}, optional) – Keyword to override the automatic guessing of the employed search +method.

  • +
  • return_distances (bool, optional) – If set to True, distances will also be returned.

  • +
+
+
Returns
+

    +
  • pairs (numpy.ndarray (dtype=numpy.int64, shape=(n_pairs, 2))) – Pairs of indices, corresponding to coordinates in the reference array +such that the distance between them lies within the interval +(min_cutoff, max_cutoff]. +Each row in pairs is an index pair [i, j] corresponding to the +i-th and the j-th coordinate in reference.

  • +
  • distances (numpy.ndarray (dtype=numpy.float64, shape=(n_pairs,))) – Distances corresponding to each pair of indices. Only returned if +return_distances is True. distances[k] corresponds to the +k-th pair returned in pairs and gives the distance between the +coordinates reference[pairs[k, 0]] and reference[pairs[k, 1]].

    +
    pairs, distances = self_capped_distances(reference, max_cutoff,
    +                                         return_distances=True)
    +for k, [i, j] in enumerate(pairs):
    +    coord1 = reference[i]
    +    coord2 = reference[j]
    +    distance = distances[k]
    +
    +
    +
  • +
+

+
+
+
+

Note

+

Currently supports brute force, grid-based, and periodic KDtree search +methods.

+
+ +
+

Changed in version 0.20.0: Added return_distances keyword.

+
+
+

Changed in version 1.0.1: nsgrid was temporarily removed and replaced with pkdtree due to issues +relating to its reliability and accuracy (Issues #2919, #2229, #2345, +#2670, #2930)

+
+
+

Changed in version 1.0.2: enabled nsgrid again

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.calc_bonds(coords1: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords2: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculates the bond lengths between pairs of atom positions from the two +coordinate arrays coords1 and coords2, which must contain the same +number of coordinates. coords1[i] and coords2[i] represent the +positions of atoms connected by the i-th bond. If single coordinates are +supplied, a single distance will be returned.

+

In comparison to distance_array() and self_distance_array(), +which calculate distances between all possible combinations of coordinates, +calc_bonds() only calculates distances between pairs of coordinates, +similar to:

+
numpy.linalg.norm(a - b) for a, b in zip(coords1, coords2)
+
+
+

If the optional argument box is supplied, the minimum image convention is +applied when calculating distances. Either orthogonal or triclinic boxes are +supported.

+

If a numpy array of dtype numpy.float64 with shape (n,) (for n +coordinate pairs) is provided in result, then this preallocated array is +filled. This can speed up calculations.

+
+
Parameters
+
    +
  • coords1 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) for one half of a +single or n bonds, respectively (dtype is arbitrary, will be +converted to numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords2 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) for the other half of +a single or n bonds, respectively (dtype is arbitrary, will be +converted to numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • box (numpy.ndarray, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array of dtype numpy.float64 and shape (n,) +(for n coordinate pairs). Avoids recreating the array in repeated +function calls.

  • +
  • backend ({'serial', 'OpenMP', 'distopia'}, optional) – Keyword selecting the type of acceleration. Defaults to ‘serial’.

  • +
+
+
Returns
+

bondlengths – numpy.float64 Array containing the bond lengths between each pair of +coordinates. If two single coordinates were supplied, their distance is +returned as a single number instead of an array.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n,)) or

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts single coordinates as input.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+

Changed in version 2.5.0: Can now optionally use the fast distance functions from distopia

+
+
+ +
+
+MDAnalysis.lib.distances.calc_angles(coords1: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords2: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords3: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculates the angles formed between triplets of atom positions from the +three coordinate arrays coords1, coords2, and coords3. All coordinate +arrays must contain the same number of coordinates.

+

The coordinates in coords2 represent the apices of the angles:

+
  2---3
+ /
+1
+
+
+

Configurations where the angle is undefined (e.g., when coordinates 1 or 3 +of a triplet coincide with coordinate 2) result in a value of zero for +that angle.

+

If the optional argument box is supplied, periodic boundaries are taken +into account when constructing the connecting vectors between coordinates, +i.e., the minimum image convention is applied for the vectors forming the +angles. Either orthogonal or triclinic boxes are supported.

+

If a numpy array of dtype numpy.float64 with shape (n,) (for n +coordinate triplets) is provided in result, then this preallocated array +is filled. This can speed up calculations.

+
+
Parameters
+
    +
  • coords1 (numpy.ndarray or AtomGroup) – Array of shape (3,) or (n, 3) containing the coordinates of one +side of a single or n angles, respectively (dtype is arbitrary, will +be converted to numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords2 (numpy.ndarray or AtomGroup) – Array of shape (3,) or (n, 3) containing the coordinates of the +apices of a single or n angles, respectively (dtype is arbitrary, +will be converted to numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords3 (numpy.ndarray or AtomGroup) – Array of shape (3,) or (n, 3) containing the coordinates of the +other side of a single or n angles, respectively (dtype is +arbitrary, will be converted to numpy.float32 internally). +Also accepts an AtomGroup.

  • +
  • box (numpy.ndarray, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array of dtype numpy.float64 and shape (n,) +(for n coordinate triplets). Avoids recreating the array in repeated +function calls.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

angles – Array containing the angles between each triplet of coordinates. Values +are returned in radians (rad). If three single coordinates were +supplied, the angle is returned as a single number instead of an array.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n,)) or numpy.float64

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Added optional box argument to account for periodic boundaries in +calculation

+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts single coordinates as input.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.calc_dihedrals(coords1: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords2: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords3: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], coords4: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, result: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Calculates the dihedral angles formed between quadruplets of positions +from the four coordinate arrays coords1, coords2, coords3, and +coords4, which must contain the same number of coordinates.

+

The dihedral angle formed by a quadruplet of positions (1,2,3,4) is +calculated around the axis connecting positions 2 and 3 (i.e., the angle +between the planes spanned by positions (1,2,3) and (2,3,4)):

+
        4
+        |
+  2-----3
+ /
+1
+
+
+

If all coordinates lie in the same plane, the cis configuration corresponds +to a dihedral angle of zero, and the trans configuration to \(\pi\) +radians (180 degrees). Configurations where the dihedral angle is undefined +(e.g., when all coordinates lie on the same straight line) result in a value +of nan (not a number) for that dihedral.

+

If the optional argument box is supplied, periodic boundaries are taken +into account when constructing the connecting vectors between coordinates, +i.e., the minimum image convention is applied for the vectors forming the +dihedral angles. Either orthogonal or triclinic boxes are supported.

+

If a numpy array of dtype numpy.float64 with shape (n,) (for n +coordinate quadruplets) is provided in result then this preallocated array +is filled. This can speed up calculations.

+
+
Parameters
+
    +
  • coords1 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) containing the 1st +positions in dihedrals (dtype is arbitrary, will be converted to +numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords2 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) containing the 2nd +positions in dihedrals (dtype is arbitrary, will be converted to +numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords3 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) containing the 3rd +positions in dihedrals (dtype is arbitrary, will be converted to +numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • coords4 (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) containing the 4th +positions in dihedrals (dtype is arbitrary, will be converted to +numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • box (numpy.ndarray, optional) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • result (numpy.ndarray, optional) – Preallocated result array of dtype numpy.float64 and shape (n,) +(for n coordinate quadruplets). Avoids recreating the array in +repeated function calls.

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

dihedrals – Array containing the dihedral angles formed by each quadruplet of +coordinates. Values are returned in radians (rad). If four single +coordinates were supplied, the dihedral angle is returned as a single +number instead of an array. The range of dihedral angle is +\((-\pi, \pi)\).

+
+
Return type
+

numpy.ndarray (dtype=numpy.float64, shape=(n,)) or numpy.float64

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.9.0: Added optional box argument to account for periodic boundaries in +calculation

+
+
+

Changed in version 0.11.0: Renamed from calc_torsions to calc_dihedrals

+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts single coordinates as input.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.apply_PBC(coords: Union[ndarray[Any, dtype[_ScalarType_co]], AtomGroup], box: Optional[ndarray[Any, dtype[_ScalarType_co]]] = None, backend: str = 'serial') ndarray[Any, dtype[_ScalarType_co]][source]
+

Moves coordinates into the primary unit cell.

+
+
Parameters
+
    +
  • coords (numpy.ndarray or AtomGroup) – Coordinate array of shape (3,) or (n, 3) (dtype is arbitrary, +will be converted to numpy.float32 internally). Also accepts an +AtomGroup.

  • +
  • box (numpy.ndarray) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

newcoords – Array containing coordinates that all lie within the primary unit cell +as defined by box.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float32, shape=coords.shape)

+
+
+
+

New in version 0.8.

+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts (and, likewise, returns) single coordinates.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as an +argument in any position and checks inputs using type hinting.

+
+
+ +
+
+MDAnalysis.lib.distances.transform_RtoS(coords, box, backend='serial')[source]
+

Transform an array of coordinates from real space to S space (a.k.a. +lambda space)

+

S space represents fractional space within the unit cell for this system.

+

Reciprocal operation to transform_StoR().

+
+
Parameters
+
    +
  • coords (numpy.ndarray) – A (3,) or (n, 3) array of coordinates (dtype is arbitrary, will +be converted to numpy.float32 internally).

  • +
  • box (numpy.ndarray) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

newcoords – An array containing fractional coordiantes.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float32, shape=coords.shape)

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts (and, likewise, returns) a single coordinate.

+
+
+ +
+
+MDAnalysis.lib.distances.transform_StoR(coords, box, backend='serial')[source]
+

Transform an array of coordinates from S space into real space.

+

S space represents fractional space within the unit cell for this system.

+

Reciprocal operation to transform_RtoS()

+
+
Parameters
+
    +
  • coords (numpy.ndarray) – A (3,) or (n, 3) array of coordinates (dtype is arbitrary, will +be converted to numpy.float32 internally).

  • +
  • box (numpy.ndarray) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
  • backend ({'serial', 'OpenMP'}, optional) – Keyword selecting the type of acceleration.

  • +
+
+
Returns
+

newcoords – An array containing real space coordiantes.

+
+
Return type
+

numpy.ndarray (dtype=numpy.float32, shape=coords.shape)

+
+
+
+

Changed in version 0.13.0: Added backend keyword.

+
+
+

Changed in version 0.19.0: Internal dtype conversion of input coordinates to numpy.float32. +Now also accepts (and, likewise, returns) a single coordinate.

+
+
+ +
+
+MDAnalysis.lib.distances.augment_coordinates(coordinates, box, r)
+

Calculates the periodic images of particles which are within a distance +r from the box walls.

+

The algorithm works by generating explicit periodic images of atoms residing +close to any of the six box walls. The steps involved in generating images +involves the evaluation of reciprocal box vectors followed by the +calculation of distances of atoms from the walls by means of projection onto +the reciprocal vectors. If the distance is less than a specified cutoff +distance, relevant periodic images are generated using box translation +vectors \(\vec{t}\) with

+
+\[\vec{t}=l\cdot\vec{a}+m\cdot\vec{b}+n\cdot \vec{c}\,,\]
+

where \(l,\,m,\,n \in \{-1,\,0,\,1\}\) are the neighboring cell indices +in \(x\)-, \(y\)-, and \(z\)-direction relative to the central +cell with box vectors \(\vec{a},\,\vec{b},\,\vec{c}\).

+

For instance, an atom close to the \(xy\)-plane containing the origin +will generate a periodic image outside the central cell and close to the +opposite \(xy\)-plane of the box, i.e., shifted by +\(\vec{t} = 0\cdot\vec{a}+0\cdot\vec{b}+1\cdot\vec{c}=\vec{c}\).

+

Likewise, if the particle is close to more than one box walls, images along +the diagonals are also generated:

+
                            x            x
++------------+                +------------+
+|            |   augment      |            |
+|            |   ------->     |            |
+|          o |              x |          o |
++------------+                +------------+
+
+
+
+
Parameters
+
    +
  • coordinates (numpy.ndarray) – Input coordinate array of shape (n, 3) and dtype numpy.float32 +used to generate duplicate images in the vicinity of the central cell. All +coordinates must be within the primary unit cell.

  • +
  • box (numpy.ndarray) – Box dimensions of shape (6,) and dtype numpy.float32. The +dimensions must be provided in the same format as returned +by MDAnalysis.coordinates.base.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma]

  • +
  • r (float) – Thickness of cutoff region for duplicate image generation.

  • +
+
+
Returns
+

    +
  • output (numpy.ndarray) – Coordinates of duplicate (augmented) particles (dtype numpy.float32).

  • +
  • indices (numpy.ndarray) – Original indices of the augmented coordinates (dtype numpy.int64). +Maps the indices of augmented particles to their original particle index +such that indices[augmented_index] = original_index.

  • +
+

+
+
+
+

Note

+

Output does not return coordinates from the initial array. +To merge the particles with their respective images, the following operation +is necessary when generating the images:

+
images, mapping = augment_coordinates(coordinates, box, max_cutoff)
+all_coords = numpy.concatenate([coordinates, images])
+
+
+
+
+

See also

+

undo_augment()

+
+
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.distances.undo_augment(results, translation, nreal)
+

Translate augmented indices back to original indices.

+
+
Parameters
+
    +
  • results (numpy.ndarray) – Array of dtype numpy.int64 containing coordinate indices, including +“augmented” indices.

  • +
  • translation (numpy.ndarray) – Index map of dtype numpy.int64 linking the augmented indices to the +original particle indices such that +translation[augmented_index] = original_index.

  • +
  • nreal (int) – Number of real coordinates, i.e., indices in results equal or larger +than this need to be mapped to their real counterpart.

  • +
+
+
Returns
+

results – Modified input results with all the augmented indices translated to +their corresponding initial original indices.

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

Modifies the results array in place.

+
+
+

See also

+

augment_coordinates()

+
+
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.distances.minimize_vectors(vectors, box)[source]
+

Apply minimum image convention to an array of vectors

+

This function is required for calculating the correct vectors between two +points. A naive approach of ag1.positions - ag2.positions will not +provide the minimum vectors between particles, even if all particles are +within the primary unit cell (box).

+
+
Parameters
+
    +
  • vectors (numpy.ndarray) – Vector array of shape (n, 3), either float32 or float64. These +represent many vectors (such as between two particles).

  • +
  • box (numpy.ndarray) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

  • +
+
+
Returns
+

minimized_vectors – Same shape and dtype as input. The vectors from the input, but +minimized according to the size of the box.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.1.0.

+
+
+ +
+
+
+

13.2.2. Low-level modules for MDAnalysis.lib.distances

+

MDAnalysis.lib._distances contains low level access to the +serial MDAnalysis Cython functions in distances. These have +little to no error checking done on inputs so should be used with +caution. Similarly, MDAnalysis.lib._distances_openmp contains +the OpenMP-enable functions.

+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/formats/libdcd.html b/2.7.0-dev0/documentation_pages/lib/formats/libdcd.html new file mode 100644 index 0000000000..94b4896392 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/formats/libdcd.html @@ -0,0 +1,381 @@ + + + + + + + 13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd

+

libdcd contains the class DCDFile to read and write frames of a +DCD file. The class tries to behave similar to a normal file object.

+

libdcd contains the classes DCDFile, which can be used to read +and write frames from and to DCD files. These classes are used internally by +MDAnalysis in MDAnalysis.coordinates.DCD. They behave similar to normal +file objects.

+

For example, one can use a DCDFile to directly calculate mean +coordinates (where the coordinates are stored in x attribute of the +namedtuple frame):

+
with DCDFile("trajectory.dcd") as dcd:
+    header = dcd.header
+    mean = np.zeros((header['natoms'], 3))
+    # iterate over trajectory
+    for frame in dcd:
+        mean += frame.x
+mean /= header['natoms']
+
+
+

Besides iteration one can also seek to arbitrary frames using the +seek() method. Note that instead of seeking to a byte-offset as +for normal Python streams, the seek and tell method of DCDFile operate on +complete trajectory frames.

+

Acknowledgements

+

libdcd contains and is originally based on DCD reading and writing code +from VMD’s molfile plugin and catdcd.

+
+
+
+class MDAnalysis.lib.formats.libdcd.DCDFile(fname, mode='r')
+

File like wrapper for DCD files

+

This class can be similar to the normal file objects in python. The read() +function will return a frame and all information in it instead of a single +line. Additionally the context-manager protocol is supported as well.

+

DCDFile can read typical DCD files created by e.g., CHARMM, NAMD, or LAMMPS. It +reads raw data from the trajectory and hence interpretation of, for instance, +different unitcell conventions or time and length units, has to be handled in +higher level code. Reading and writing does not support fixed atoms or 4D +coordinates.

+
+
Parameters
+
    +
  • fname (str) – The filename to open.

  • +
  • mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

  • +
+
+
+

Examples

+
>>> from MDAnalysis.lib.formats.libdcd import DCDFile
+>>> with DCDFile('foo.dcd') as f:
+>>>     for frame in f:
+>>>         print(frame.x)
+
+
+

Notes

+

DCD is not a well defined format. One consequence of this is that different +programs like CHARMM and NAMD are using different convention to store the +unitcell information. The DCDFile will read the unitcell +information as is when available. Post processing depending on the program +this DCD file was written with is necessary. Have a look at the MDAnalysis +DCD reader for possible post processing into a common unitcell data +structure. You can also find more information how different programs store +unitcell information in DCD on the mdawiki . This class can be pickled. +The pickle will store filename, mode, current frame

+
+
+charmm_bitfield
+

This DCDFile reader can process files written by different MD simulation +programs. For files produced by CHARMM or other programs that follow +the same convention we are reading a special CHARMM bitfield that +stores different flags about additional information that is stored in +the dcd. The bit flags are:

+
DCD_IS_CHARMM       = 0x01
+DCD_HAS_4DIMS       = 0x02
+DCD_HAS_EXTRA_BLOCK = 0x04
+
+
+

Here DCD_HAS_EXTRA_BLOCK means that unitcell information is stored.

+
+ +
+
+close()
+

Close the open DCD file

+
+ +
+
+header
+

returns: * dict of header values needed to write new dcd. +* natoms (number of atoms) +* istart (starting frame number) +* nsavc (number of frames between saves) +* delta (integrator time step.) +* charm (bitfield integer if file contains special CHARMM information) +* remarks (remark string, max 240 bytes.)

+
+ +
+
+open(mode='r')
+

Open a DCD file

+

If another DCD file is currently opened it will be closed

+
+
Parameters
+

mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

+
+
+
+ +
+
+read()
+

Read next dcd frame

+
+
Returns
+

DCDFrame – positions are in x and unitcell in unitcell attribute of DCDFrame

+
+
Return type
+

namedtuple

+
+
+

Notes

+

unitcell is read as is from DCD. Post processing depending on the program this +DCD file was written with is necessary. Have a look at the MDAnalysis DCD reader +for possible post processing into a common unitcell data structure.

+
+ +
+
+readframes(start=None, stop=None, step=None, order='fac', indices=None)
+

read multiple frames at once

+
+
Parameters
+
    +
  • start (int (optional)) – starting frame, default to 0

  • +
  • stop (int (optional)) – stop frame, default to n_frames

  • +
  • step (int (optional)) – step between frames read, defaults to 1

  • +
  • order (str (optional)) – give order of returned array with f:frames, a:atoms, c:coordinates

  • +
  • indices (array_like (optional)) – only read selected atoms. In None read all.

  • +
+
+
Returns
+

DCDFrame – positions are in x and unitcell in unitcell attribute of DCDFrame. +Here the attributes contain the positions for all frames in the given order

+
+
Return type
+

namedtuple

+
+
+

Notes

+

unitcell is read as it from DCD. Post processing depending the program +this DCD file was written with is necessary. Have a look at the +MDAnalysis DCD reader for possible post processing into a common +unitcell data structure.

+
+ +
+
+seek(frame)
+

Seek to Frame.

+
+
Parameters
+

frame (int) – seek the file to given frame (0-based)

+
+
+
+ +
+
+tell()
+
+
Return type
+

current frame (0-based)

+
+
+
+ +
+
+write(xyz, box=None)
+

write one frame into DCD file.

+
+
Parameters
+
    +
  • xyz (array_like, shape=(natoms, 3)) – cartesian coordinates

  • +
  • box (array_like, shape=(6) (optional)) – Box vectors for this frame. Can be left to skip writing a unitcell

  • +
+
+
+
+ +
+
+write_header(remarks, natoms, istart, nsavc, delta, is_periodic)
+

Write DCD header

+

This function needs to be called before the first frame can be written.

+
+
Parameters
+
    +
  • remarks (str) – remarks of DCD file. Writes up to 239 characters (ASCII). The +character 240 will be the null terminator

  • +
  • natoms (int) – number of atoms to write

  • +
  • istart (int) – starting frame number

  • +
  • nsavc (int) – number of frames between saves

  • +
  • delta (float) – integrator time step. The time for 1 frame is nsavc * delta

  • +
  • is_periodic (bool) – write unitcell information. Also pretends that file was written by CHARMM 24

  • +
+
+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/formats/libmdaxdr.html b/2.7.0-dev0/documentation_pages/lib/formats/libmdaxdr.html new file mode 100644 index 0000000000..e54aa055f5 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/formats/libmdaxdr.html @@ -0,0 +1,555 @@ + + + + + + + 13.3.1. Low-level Gromacs XDR trajectory reading — MDAnalysis.lib.formats.libmdaxdr — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.3.1. Low-level Gromacs XDR trajectory reading — MDAnalysis.lib.formats.libmdaxdr

+

libmdaxdr contains the classes XTCFile and +TRRFile. Both can be used to read and write frames from and to +Gromacs XTC and TRR files. These classes are used internally by MDAnalysis in +MDAnalysis.coordinates.XTC and MDAnalysis.coordinates.TRR. They +behave similar to normal file objects.

+

For example, one can use a XTCFile to directly calculate mean +coordinates (where the coordinates are stored in x attribute of the +namedtuple frame):

+
with XTCFile("trajectory.xtc") as xtc:
+   n_atoms = xtc.n_atoms
+   mean = np.zeros((n_atoms, 3))
+   # iterate over trajectory
+   for frame in xtc:
+       mean += frame.x
+
+
+

The XTCFile class can be useful as a compressed storage format.

+

Besides iteration, XTCFile and TRRFile one can also seek to +arbitrary frames using the seek() method. This is provided by +lazily generating a offset list for stored frames. The offset list is generated +the first time len() or :~XTCFile.seek is called.

+

(For more details on how to use XTCFile and TRRFile on their +own please see the source code in lib/formats/libmdaxdr.pyx for the time being.)

+
+
+
+class MDAnalysis.lib.formats.libmdaxdr.TRRFile
+

File-like wrapper for gromacs TRR files.

+

This class can be similar to the normal file objects in python. The read() +function will return a frame and all information in it instead of a single +line. Additionally the context-manager protocoll is supported as well.

+
+
Parameters
+
    +
  • fname (str) – The filename to open.

  • +
  • mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

  • +
+
+
+

Examples

+
>>> from MDAnalysis.lib.formats.libmdaxdr import TRRFile
+>>> with TRRFile('foo.trr') as f:
+>>>     for frame in f:
+>>>         print(frame.x)
+
+
+

Notes

+

This class can be pickled. The pickle will store filename, mode, current +frame and offsets

+
+

Changed in version 2.4.0: Added read_direct_xvf method to read into an existing positions array

+
+
+
+calc_offsets()
+

read byte offsets from TRR file directly

+
+ +
+
+close()
+

Close the open XDR file

+
+
Raises
+

IOError

+
+
+
+ +
+
+offsets
+

get byte offsets from current xdr file

+
+

See also

+

set_offsets

+
+
+ +
+
+open(fname, mode)
+

Open a XDR file

+

If another XDR file is currently opened it will be closed

+
+
Parameters
+
    +
  • fname (str) – The filename to open.

  • +
  • mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

  • +
+
+
Raises
+

IOError

+
+
+
+ +
+
+read()
+

Read next frame in the TRR file

+
+
Returns
+

frame – namedtuple with frame information

+
+
Return type
+

libmdaxdr.TRRFrame

+
+
+
+

See also

+

TRRFrame, XTCFile

+
+
+
Raises
+

IOError

+
+
+
+ +
+
+read_direct_xvf(positions, velocities, forces)
+

Read next frame in the TRR file with positions read directly into +a pre-existing array.

+
+
Parameters
+

positions (np.ndarray) – positions array to read positions into

+
+
Returns
+

frame – namedtuple with frame information

+
+
Return type
+

libmdaxdr.TRRFrame

+
+
+
+

See also

+

TRRFrame, XTCFile

+
+
+
Raises
+

IOError

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+seek(frame)
+

Seek to Frame.

+

Please note that this function will generate internal file offsets if +they haven’t been set before. For large file this means the first seek +can be very slow. Later seeks will be very fast.

+
+
Parameters
+

frame (int) – seek the file to given frame

+
+
Raises
+

IOError

+
+
+
+ +
+
+set_offsets(offsets)
+

set frame offsets

+
+ +
+
+tell()
+

Get current frame

+
+ +
+
+write(xyz, velocity, forces, box, step, time, _lambda, natoms)
+

write one frame into TRR file.

+
+
Parameters
+
    +
  • xyz (array_like, shape=(n_atoms, 3), optional) – cartesion coordinates. Only written if not None.

  • +
  • velocity (array_like, shape=(n_atoms, 3), optional) – cartesion velocities. Only written if not None.

  • +
  • forces (array_like, shape=(n_atoms, 3), optional) – cartesion forces. Only written if not None.

  • +
  • box (array_like, shape=(3, 3)) – Box vectors for this frame

  • +
  • step (int) – current step number, 1 indexed

  • +
  • time (float) – current time

  • +
  • _lambda (float) – current lambda value

  • +
  • natoms (int) – number of atoms in frame

  • +
+
+
Raises
+

IOError

+
+
+
+ +
+ +
+
+class MDAnalysis.lib.formats.libmdaxdr.XTCFile
+

File-like wrapper for gromacs XTC files.

+

This class can be similar to the normal file objects in python. The read() +function will return a frame and all information in it instead of a single +line. Additionally the context-manager protocoll is supported as well.

+
+
Parameters
+
    +
  • fname (str) – The filename to open.

  • +
  • mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

  • +
+
+
+

Examples

+
>>> from MDAnalysis.lib.formats.libmdaxdr import XTCFile
+>>> with XTCFile('foo.trr') as f:
+>>>     for frame in f:
+>>>         print(frame.x)
+
+
+

Notes

+

This class can be pickled. The pickle will store filename, mode, current +frame and offsets

+
+

Changed in version 2.4.0: Added read_direct_x method to read into an existing positions array

+
+
+
+calc_offsets()
+

Calculate offsets from XTC file directly

+
+ +
+
+close()
+

Close the open XDR file

+
+
Raises
+

IOError

+
+
+
+ +
+
+offsets
+

get byte offsets from current xdr file

+
+

See also

+

set_offsets

+
+
+ +
+
+open(fname, mode)
+

Open a XDR file

+

If another XDR file is currently opened it will be closed

+
+
Parameters
+
    +
  • fname (str) – The filename to open.

  • +
  • mode (('r', 'w')) – The mode in which to open the file, either ‘r’ read or ‘w’ write

  • +
+
+
Raises
+

IOError

+
+
+
+ +
+
+read()
+

Read next frame in the XTC file

+
+
Returns
+

frame – namedtuple with frame information

+
+
Return type
+

libmdaxdr.XTCFrame

+
+
+
+

See also

+

XTCFrame, TRRFile

+
+
+
Raises
+

IOError

+
+
+
+ +
+
+read_direct_x(positions)
+

Read next frame in the XTC file with positions read directly into +a pre-existing array.

+
+
Parameters
+

positions (np.ndarray) – positions array to read positions into

+
+
Returns
+

frame – namedtuple with frame information

+
+
Return type
+

libmdaxdr.XTCFrame

+
+
+
+

See also

+

XTCFrame, TRRFile

+
+
+
Raises
+

IOError

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+seek(frame)
+

Seek to Frame.

+

Please note that this function will generate internal file offsets if +they haven’t been set before. For large file this means the first seek +can be very slow. Later seeks will be very fast.

+
+
Parameters
+

frame (int) – seek the file to given frame

+
+
Raises
+

IOError

+
+
+
+ +
+
+set_offsets(offsets)
+

set frame offsets

+
+ +
+
+tell()
+

Get current frame

+
+ +
+
+write(xyz, box, step, time, precision=1000.0)
+

write one frame to the XTC file

+
+
Parameters
+
    +
  • xyz (array_like, shape=(n_atoms, 3)) – cartesion coordinates

  • +
  • box (array_like, shape=(3, 3)) – Box vectors for this frame

  • +
  • step (int) – current step number, 1 indexed

  • +
  • time (float) – current time

  • +
  • precision (float (optional)) – precision of saved trajectory, see Notes

  • +
+
+
+

Notes

+

Gromacs specifies the precision a little bit strange. The coordinates +will be multiplied by precision and then converted to an integer. This +means a precision of 1000 yields an accuracy of 3 decimal places.

+
+
Raises
+

IOError

+
+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/log.html b/2.7.0-dev0/documentation_pages/lib/log.html new file mode 100644 index 0000000000..0fa6dfbb84 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/log.html @@ -0,0 +1,425 @@ + + + + + + + 13.2.6. Setting up logging — MDAnalysis.lib.log — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.6. Setting up logging — MDAnalysis.lib.log

+

Configure logging for MDAnalysis. Import this module if logging is +desired in application code.

+

Logging to a file and the console is set up by default as described +under logging to multiple destinations.

+

The top level logger of the library is named MDAnalysis by +convention; a simple logger that writes to the console and logfile can +be created with the create() function. This only has to be done +once. For convenience, the default MDAnalysis logger can be created +with MDAnalysis.start_logging():

+
import MDAnalysis
+MDAnalysis.start_logging()
+
+
+

Once this has been done, MDAnalysis will write messages to the logfile +(named MDAnalysis.log by default but this can be changed with the +optional argument to start_logging()).

+

Any code can log to the MDAnalysis logger by using

+
import logging
+logger = logging.getLogger('MDAnalysis.MODULENAME')
+
+# use the logger, for example at info level:
+logger.info("Starting task ...")
+
+
+

The important point is that the name of the logger begins with +“MDAnalysis.”.

+
+

Note

+

The logging module in the standard library contains in depth +documentation about using logging.

+
+
+

13.2.6.1. Convenience functions

+

Two convenience functions at the top level make it easy to start and +stop the default MDAnalysis logger.

+
+
+MDAnalysis.start_logging(logfile='MDAnalysis.log', version='2.7.0-dev0')[source]
+

Start logging of messages to file and console.

+

The default logfile is named MDAnalysis.log and messages are +logged with the tag MDAnalysis.

+
+ +
+
+MDAnalysis.stop_logging()[source]
+

Stop logging to logfile and console.

+
+ +
+
+

13.2.6.2. Other functions and classes for logging purposes

+
+

Changed in version 2.0.0: Deprecated MDAnalysis.lib.log.ProgressMeter has now been removed.

+
+
+
+
+
+class MDAnalysis.lib.log.NullHandler(level=0)[source]
+

Silent Handler.

+

Useful as a default:

+
h = NullHandler()
+logging.getLogger("MDAnalysis").addHandler(h)
+del h
+
+
+

see the advice on logging and libraries in +http://docs.python.org/library/logging.html?#configuring-logging-for-a-library

+

Initializes the instance - basically setting the formatter to None +and the filter list to empty.

+
+
+emit(record)[source]
+

Do whatever it takes to actually log the specified logging record.

+

This version is intended to be implemented by subclasses and so +raises a NotImplementedError.

+
+ +
+ +
+
+class MDAnalysis.lib.log.ProgressBar(*_, **__)[source]
+

Display a visual progress bar and time estimate.

+

The ProgressBar decorates an iterable object, returning an +iterator which acts exactly like the original iterable, but prints a +dynamically updating progressbar every time a value is requested. See the +example below for how to use it when iterating over the frames of a +trajectory.

+
+
Parameters
+
    +
  • iterable (iterable, optional) – Iterable to decorate with a progressbar. +Leave blank to manually manage the updates.

  • +
  • verbose (bool, optional) – If True (the default) then show the progress bar, unless the +disable keyword is set to True (disable takes precedence over +verbose). If verbose is set to None then the progress bar is +displayed (like True), unless this is a non-TTY output device +(see disable).

  • +
  • desc (str, optional) – Prefix for the progressbar.

  • +
  • total (int or float, optional) – The number of expected iterations. If unspecified, +len(iterable) is used if possible. If float("inf") or as a last +resort, only basic progress statistics are displayed +(no ETA, no progressbar).

  • +
  • leave (bool, optional) – If [default: True], keeps all traces of the progressbar +upon termination of iteration. +If None, will leave only if position is 0.

  • +
  • file (io.TextIOWrapper or io.StringIO, optional) – Specifies where to output the progress messages (default: +sys.stderr). Uses file.write() and file.flush() +methods. For encoding, see write_bytes.

  • +
  • ncols (int, optional) – The width of the entire output message. If specified, +dynamically resizes the progressbar to stay within this bound. +If unspecified, attempts to use environment width. The +fallback is a meter width of 10 and no limit for the counter and +statistics. If 0, will not print any meter (only stats).

  • +
  • mininterval (float, optional) – Minimum progress display update interval [default: 0.1] seconds.

  • +
  • maxinterval (float, optional) – Maximum progress display update interval [default: 10] seconds. +Automatically adjusts miniters to correspond to mininterval +after long display update lag. Only works if dynamic_miniters +or monitor thread is enabled.

  • +
  • miniters (int or float, optional) – Minimum progress display update interval, in iterations. +If 0 and dynamic_miniters, will automatically adjust to equal +mininterval (more CPU efficient, good for tight loops). +If > 0, will skip display of specified number of iterations. +Tweak this and mininterval to get very efficient loops. +If your progress is erratic with both fast and slow iterations +(network, skipping items, etc) you should set miniters=1.

  • +
  • ascii (bool or str, optional) – If unspecified or False, use unicode (smooth blocks) to fill +the meter. The fallback is to use ASCII characters ” 123456789#”.

  • +
  • disable (bool, optional) – Whether to disable the entire progressbar wrapper +[default: False]. If set to None, disable on non-TTY.

  • +
  • unit (str, optional) – String that will be used to define the unit of each iteration +[default: it].

  • +
  • unit_scale (bool or int or float, optional) – If 1 or True, the number of iterations will be reduced/scaled +automatically and a metric prefix following the +International System of Units standard will be added +(kilo, mega, etc.) [default: False]. If any other non-zero +number, will scale total and n.

  • +
  • dynamic_ncols (bool, optional) – If set, constantly alters ncols and nrows to the +environment (allowing for window resizes) [default: False].

  • +
  • smoothing (float, optional) – Exponential moving average smoothing factor for speed estimates +(ignored in GUI mode). Ranges from 0 (average speed) to 1 +(current/instantaneous speed) [default: 0.3].

  • +
  • bar_format (str, optional) –

    Specify a custom bar string formatting. May impact performance. +[default: '{l_bar}{bar}{r_bar}'], where l_bar='{desc}: +{percentage:3.0f}%|' and r_bar='| {n_fmt}/{total_fmt} +[{elapsed}<{remaining}, {rate_fmt}{postfix}]'

    +

    Possible vars: l_bar, bar, r_bar, n, n_fmt, total, total_fmt, +percentage, elapsed, elapsed_s, ncols, nrows, desc, unit, +rate, rate_fmt, rate_noinv, rate_noinv_fmt, +rate_inv, rate_inv_fmt, postfix, unit_divisor, +remaining, remaining_s.

    +

    Note that a trailing “: ” is automatically removed after {desc} +if the latter is empty.

    +

  • +
  • initial (int or float, optional) – The initial counter value. Useful when restarting a progress bar +[default: 0]. If using float, consider specifying {n:.3f} +or similar in bar_format, or specifying unit_scale.

  • +
  • position (int, optional) – Specify the line offset to print this bar (starting from 0) +Automatic if unspecified. +Useful to manage multiple bars at once (e.g., from threads).

  • +
  • postfix (dict or *, optional) – Specify additional stats to display at the end of the bar. +Calls set_postfix(**postfix) if possible (dict).

  • +
  • unit_divisor (float, optional) – [default: 1000], ignored unless unit_scale is True.

  • +
  • write_bytes (bool, optional) – If (default: None) and file is unspecified, +bytes will be written in Python 2. If True will also write +bytes. In all other cases will default to unicode.

  • +
  • lock_args (tuple, optional) – Passed to refresh for intermediate output +(initialisation, iterating, and updating).

  • +
  • nrows (int, optional) – The screen height. If specified, hides nested bars outside this +bound. If unspecified, attempts to use environment height. +The fallback is 20.

  • +
+
+
Returns
+

out

+
+
Return type
+

decorated iterator.

+
+
+

Example

+

To get a progress bar when analyzing a trajectory:

+
from MDAnalysis.lib.log import ProgressBar
+
+...
+
+for ts in ProgressBar(u.trajectory):
+   # perform analysis
+
+
+

will produce something similar to

+
30%|███████████                       | 3/10 [00:13<00:30,  4.42s/it]
+
+
+

in a terminal or Jupyter notebook.

+
+

See also

+

The ProgressBar is derived from tqdm.auto.tqdm; see the +tqdm documentation for further details on how to use it.

+
+
+ +
+
+MDAnalysis.lib.log.clear_handlers(logger)[source]
+

clean out handlers in the library top level logger

+

(only important for reload/debug cycles…)

+
+ +
+
+MDAnalysis.lib.log.create(logger_name='MDAnalysis', logfile='MDAnalysis.log')[source]
+

Create a top level logger.

+
    +
  • The file logger logs everything (including DEBUG).

  • +
  • The console logger only logs INFO and above.

  • +
+

Logging to a file and the console as described under logging to +multiple destinations.

+

The top level logger of MDAnalysis is named MDAnalysis. Note +that we are configuring this logger with console output. If a root +logger also does this then we will get two output lines to the +console.

+
+ +
+
+MDAnalysis.lib.log.start_logging(logfile='MDAnalysis.log', version='2.7.0-dev0')[source]
+

Start logging of messages to file and console.

+

The default logfile is named MDAnalysis.log and messages are +logged with the tag MDAnalysis.

+
+ +
+
+MDAnalysis.lib.log.stop_logging()[source]
+

Stop logging to logfile and console.

+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/mdamath.html b/2.7.0-dev0/documentation_pages/lib/mdamath.html new file mode 100644 index 0000000000..1c81e7121f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/mdamath.html @@ -0,0 +1,575 @@ + + + + + + + 13.2.7. Mathematical helper functions — MDAnalysis.lib.mdamath — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.7. Mathematical helper functions — MDAnalysis.lib.mdamath

+

Helper functions for common mathematical operations. Some of these functions +are written in C/cython for higher performance.

+
+

13.2.7.1. Linear algebra

+
+
+MDAnalysis.lib.mdamath.normal(vec1: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], vec2: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) ndarray[Any, dtype[_ScalarType_co]][source]
+

Returns the unit vector normal to two vectors.

+
+\[\hat{\mathbf{n}} = \frac{\mathbf{v}_1 \times \mathbf{v}_2}{|\mathbf{v}_1 \times \mathbf{v}_2|}\]
+

If the two vectors are collinear, the vector \(\mathbf{0}\) is returned.

+
+

Changed in version 0.11.0: Moved into lib.mdamath

+
+
+ +
+
+MDAnalysis.lib.mdamath.norm(v: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) float[source]
+

Calculate the norm of a vector v.

+
+\[v = \sqrt{\mathbf{v}\cdot\mathbf{v}}\]
+

This version is faster then numpy.linalg.norm because it only works for a +single vector and therefore can skip a lot of the additional fuss +linalg.norm does.

+
+
Parameters
+

v (array_like) – 1D array of shape (N) for a vector of length N

+
+
Returns
+

norm of the vector

+
+
Return type
+

float

+
+
+
+ +
+
+MDAnalysis.lib.mdamath.pdot(a: ndarray[Any, dtype[_ScalarType_co]], b: ndarray[Any, dtype[_ScalarType_co]]) ndarray[Any, dtype[_ScalarType_co]][source]
+

Pairwise dot product.

+

a must be the same shape as b.

+
+
Parameters
+
+
+
Return type
+

numpy.ndarray of shape (N,)

+
+
+
+ +
+
+MDAnalysis.lib.mdamath.pnorm(a: ndarray[Any, dtype[_ScalarType_co]]) ndarray[Any, dtype[_ScalarType_co]][source]
+

Euclidean norm of each vector in a matrix

+
+
Parameters
+

a (numpy.ndarray of shape (N, M)) –

+
+
Return type
+

numpy.ndarray of shape (N,)

+
+
+
+ +
+
+MDAnalysis.lib.mdamath.angle(a: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], b: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) float[source]
+

Returns the angle between two vectors in radians

+
+

Changed in version 0.11.0: Moved into lib.mdamath

+
+
+

Changed in version 1.0.0: Changed rounding-off code to use np.clip(). Values lower than +-1.0 now return np.pi instead of -np.pi

+
+
+ +
+
+MDAnalysis.lib.mdamath.dihedral(ab: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], bc: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], cd: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) float[source]
+

Returns the dihedral angle in radians between vectors connecting A,B,C,D.

+

The dihedral measures the rotation around bc:

+
  ab
+A---->B
+       \ bc
+       _\'
+         C---->D
+           cd
+
+
+

The dihedral angle is restricted to the range -π <= x <= π.

+
+

New in version 0.8.

+
+
+

Changed in version 0.11.0: Moved into lib.mdamath

+
+
+ +
+
+MDAnalysis.lib.mdamath.stp(vec1: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], vec2: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], vec3: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) float[source]
+

Takes the scalar triple product of three vectors.

+

Returns the volume V of the parallel epiped spanned by the three +vectors

+
+\[V = \mathbf{v}_3 \cdot (\mathbf{v}_1 \times \mathbf{v}_2)\]
+
+

Changed in version 0.11.0: Moved into lib.mdamath

+
+
+ +
+
+MDAnalysis.lib.mdamath.sarrus_det(matrix: ndarray[Any, dtype[_ScalarType_co]]) Union[float, ndarray[Any, dtype[_ScalarType_co]]][source]
+

Computes the determinant of a 3x3 matrix according to the +rule of Sarrus.

+

If an array of 3x3 matrices is supplied, determinants are computed per +matrix and returned as an appropriately shaped numpy array.

+
+
Parameters
+

matrix (numpy.ndarray) – An array of shape (..., 3, 3) with the 3x3 matrices residing in the +last two dimensions.

+
+
Returns
+

det – The determinant(s) of matrix. +If matrix.shape == (3, 3), the determinant will be returned as a +scalar. If matrix.shape == (..., 3, 3), the determinants will be +returned as a numpy.ndarray of shape (...,) and dtype +numpy.float64.

+
+
Return type
+

float or numpy.ndarray

+
+
Raises
+

ValueError: – If matrix has less than two dimensions or its last two dimensions + are not of shape (3, 3).

+
+
+
+

New in version 0.20.0.

+
+
+ +
+
+MDAnalysis.lib.mdamath.triclinic_box(x: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], y: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], z: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) ndarray[Any, dtype[_ScalarType_co]][source]
+

Convert the three triclinic box vectors to +[lx, ly, lz, alpha, beta, gamma].

+

If the resulting box is invalid, i.e., any box length is zero or negative, +or any angle is outside the open interval (0, 180), a zero vector will +be returned.

+

All angles are in degrees and defined as follows:

+
    +
  • alpha = angle(y,z)

  • +
  • beta  = angle(x,z)

  • +
  • gamma = angle(x,y)

  • +
+
+
Parameters
+
    +
  • x (array_like) – Array of shape (3,) representing the first box vector

  • +
  • y (array_like) – Array of shape (3,) representing the second box vector

  • +
  • z (array_like) – Array of shape (3,) representing the third box vector

  • +
+
+
Returns
+

A numpy array of shape (6,) and dtype np.float32 providing the +unitcell dimensions in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions:

+

[lx, ly, lz, alpha, beta, gamma].

+

Invalid boxes are returned as a zero vector.

+

+
+
Return type
+

numpy.ndarray

+
+
+
+

Note

+

Definition of angles: http://en.wikipedia.org/wiki/Lattice_constant

+
+
+

See also

+

triclinic_vectors()

+
+
+

Changed in version 0.20.0: Calculations are performed in double precision and invalid box vectors +result in an all-zero box.

+
+
+ +
+
+MDAnalysis.lib.mdamath.triclinic_vectors(dimensions: ~typing.Union[~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]], ~numpy._typing._nested_sequence._NestedSequence[~numpy._typing._array_like._SupportsArray[~numpy.dtype[~typing.Any]]], bool, int, float, complex, str, bytes, ~numpy._typing._nested_sequence._NestedSequence[~typing.Union[bool, int, float, complex, str, bytes]]], dtype: ~typing.Union[~numpy.dtype[~typing.Any], None, type[typing.Any], ~numpy._typing._dtype_like._SupportsDType[~numpy.dtype[~typing.Any]], str, tuple[typing.Any, int], tuple[typing.Any, typing.Union[typing.SupportsIndex, collections.abc.Sequence[typing.SupportsIndex]]], list[typing.Any], ~numpy._typing._dtype_like._DTypeDict, tuple[typing.Any, typing.Any]] = <class 'numpy.float32'>) ndarray[Any, dtype[_ScalarType_co]][source]
+

Convert [lx, ly, lz, alpha, beta, gamma] to a triclinic matrix +representation.

+

Original code by Tsjerk Wassenaar posted on the Gromacs mailinglist.

+

If dimensions indicates a non-periodic system (i.e., all lengths are +zero), zero vectors are returned. The same applies for invalid dimensions, +i.e., any box length is zero or negative, or any angle is outside the open +interval (0, 180).

+
+
Parameters
+
+
+
Returns
+

box_matrix – A numpy array of shape (3, 3) and dtype dtype, +with box_matrix[0] containing the first, box_matrix[1] the +second, and box_matrix[2] the third box vector.

+
+
Return type
+

numpy.ndarray

+
+
+

Notes

+
    +
  • The first vector is guaranteed to point along the x-axis, i.e., it has the +form (lx, 0, 0).

  • +
  • The second vector is guaranteed to lie in the x/y-plane, i.e., its +z-component is guaranteed to be zero.

  • +
  • If any box length is negative or zero, or if any box angle is zero, the +box is treated as invalid and an all-zero-matrix is returned.

  • +
+
+

Changed in version 0.7.6: Null-vectors are returned for non-periodic (or missing) unit cell.

+
+
+

Changed in version 0.20.0: * Calculations are performed in double precision and zero vectors are + also returned for invalid boxes. +* Added optional output dtype parameter.

+
+
+ +
+
+MDAnalysis.lib.mdamath.box_volume(dimensions: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]) float[source]
+

Return the volume of the unitcell described by dimensions.

+

The volume is computed as the product of the box matrix trace, with the +matrix obtained from triclinic_vectors(). +If the box is invalid, i.e., any box length is zero or negative, or any +angle is outside the open interval (0, 180), the resulting volume will +be zero.

+
+
Parameters
+

dimensions (array_like) –

Unitcell dimensions provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions:

+

[lx, ly, lz, alpha, beta, gamma].

+

+
+
Returns
+

volume – The volume of the unitcell. Will be zero for invalid boxes.

+
+
Return type
+

float

+
+
+
+

Changed in version 0.20.0: Calculations are performed in double precision and zero is returned +for invalid dimensions.

+
+
+ +
+
+

13.2.7.2. Connectivity

+
+
+MDAnalysis.lib.mdamath.make_whole(atomgroup, reference_atom=None, inplace=True)
+

Move all atoms in a single molecule so that bonds don’t split over +images.

+

This function is most useful when atoms have been packed into the primary +unit cell, causing breaks mid molecule, with the molecule then appearing +on either side of the unit cell. This is problematic for operations +such as calculating the center of mass of the molecule.

+
+-----------+     +-----------+
+|           |     |           |
+| 6       3 |     |         3 | 6
+| !       ! |     |         ! | !
+|-5-8   1-2-| ->  |       1-2-|-5-8
+| !       ! |     |         ! | !
+| 7       4 |     |         4 | 7
+|           |     |           |
++-----------+     +-----------+
+
+
+
+
Parameters
+
    +
  • atomgroup (AtomGroup) – The MDAnalysis.core.groups.AtomGroup to work with. +The positions of this are modified in place. All these atoms +must belong to the same molecule or fragment.

  • +
  • reference_atom (Atom) – The atom around which all other atoms will be moved. +Defaults to atom 0 in the atomgroup.

  • +
  • inplace (bool, optional) – If True, coordinates are modified in place.

  • +
+
+
Returns
+

coords – The unwrapped atom coordinates.

+
+
Return type
+

numpy.ndarray

+
+
Raises
+
    +
  • NoDataError – There are no bonds present. + (See guess_bonds())

  • +
  • ValueError – The algorithm fails to work. This is usually + caused by the atomgroup not being a single fragment. + (ie the molecule can’t be traversed by following bonds)

  • +
+
+
+

Example

+

Make fragments whole:

+
from MDAnalysis.lib.mdamath import make_whole
+
+# This algorithm requires bonds, these can be guessed!
+u = mda.Universe(......, guess_bonds=True)
+
+# MDAnalysis can split AtomGroups into their fragments
+# based on bonding information.
+# Note that this function will only handle a single fragment
+# at a time, necessitating a loop.
+for frag in u.atoms.fragments:
+    make_whole(frag)
+
+
+

Alternatively, to keep a single atom in place as the anchor:

+
# This will mean that atomgroup[10] will NOT get moved,
+# and all other atoms will move (if necessary).
+make_whole(atomgroup, reference_atom=atomgroup[10])
+
+
+ +
+

New in version 0.11.0.

+
+
+

Changed in version 0.20.0: Inplace-modification of atom positions is now optional, and positions +are returned as a numpy array.

+
+
+ +
+
+MDAnalysis.lib.mdamath.find_fragments(atoms, bondlist)
+

Calculate distinct fragments from nodes (atom indices) and edges (pairs +of atom indices).

+
+
Parameters
+
    +
  • atoms (array_like) – 1-D Array of atom indices (dtype will be converted to numpy.int64 +internally)

  • +
  • bonds (array_like) – 2-D array of bonds (dtype will be converted to numpy.int32 +internally), where bonds[i, 0] and bonds[i, 1] are the +indices of atoms connected by the i-th bond. Any bonds referring to +atom indices not in atoms will be ignored.

  • +
+
+
Returns
+

    +
  • fragments (list) – List of arrays, each containing the atom indices of a fragment.

  • +
  • .. versionaddded:: 0.19.0

  • +
+

+
+
+
+ +
+

New in version 0.11.0.

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/nsgrid.html b/2.7.0-dev0/documentation_pages/lib/nsgrid.html new file mode 100644 index 0000000000..4140e407c5 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/nsgrid.html @@ -0,0 +1,398 @@ + + + + + + + 13.2.4. Neighbor search library — MDAnalysis.lib.nsgrid — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.4. Neighbor search library — MDAnalysis.lib.nsgrid

+
+

13.2.4.1. About the code

+

This Neighbor search library is a serialized Cython version greatly +inspired by the NS grid search implemented in +GROMACS .

+

GROMACS 4.x code (more precisely +nsgrid.c +and ns.c ) +was used as reference to write this file.

+

GROMACS 4.x code is released under the GNU Public Licence v2.

+
+
+

13.2.4.2. About the algorithm

+

The neighbor search implemented here is based on +cell lists which allow +computation of pairs 1 with a cost of \(O(N)\), instead +of \(O(N^2)\). The basic algorithm is described in +Appendix F, Page 552 of +Understanding Molecular Dynamics: From Algorithm to Applications by Frenkel and Smit.

+

In brief, the algorithm divides the domain into smaller subdomains called cells +and distributes every particle to these cells based on their positions. Subsequently, +any distance based query first identifies the corresponding cell position in the +domain followed by distance evaluations within the identified cell and +neighboring cells only. Care must be taken to ensure that cellsize is +greater than the desired search distance, otherwise all of the neighbours might +not reflect in the results.

+
+
1
+

a pair correspond to two particles that are considered as neighbors .

+
+
+
+

New in version 0.19.0.

+
+
+

Changed in version 1.0.2: Rewrote module

+
+
+

Changed in version 2.1.0: Capped max grid dimension to 1290, which when cubed is the max value of +a 32 bit signed integer.

+
+
+
+

13.2.4.3. Classes

+
+
+
+
+class MDAnalysis.lib.nsgrid.FastNS(cutoff, coords, box, pbc=True)
+

Grid based search between positions

+

Minimum image convention is used for distance evaluations +if pbc is set to True.

+
+

Changed in version 1.0.2: Rewrote to fix bugs with triclinic boxes

+
+

If box is not supplied, the range of coordinates i.e. +[xmax, ymax, zmax] - [xmin, ymin, zmin] should be used +to construct a pseudo box. Subsequently, the origin should also be +shifted to [xmin, ymin, zmin]. These arguments must be provided +to the function.

+
+
Parameters
+
    +
  • cutoff (float) – Desired cutoff distance

  • +
  • coords (numpy.ndarray) – atom coordinates of shape (N, 3) for N atoms. +dtype=numpy.float32. For Non-PBC calculations, +all the coords must be within the bounding box specified +by box

  • +
  • box (numpy.ndarray) – Box dimension of shape (6, ). The dimensions must be +provided in the same format as returned +by MDAnalysis.coordinates.base.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma]. For non-PBC +evaluations, provide an orthogonal bounding box +(dtype = numpy.float32)

  • +
  • pbc (boolean) – Handle to switch periodic boundary conditions on/off [True]

  • +
+
+
+
+

Note

+
    +
  • pbc=False Only works for orthogonal boxes.

  • +
  • Care must be taken such that all particles are inside +the bounding box as defined by the box argument for non-PBC +calculations.

  • +
  • In case of Non-PBC calculations, a bounding box must be provided +to encompass all the coordinates as well as the search coordinates. +The dimension should be similar to box argument but for +an orthogonal box. For instance, one valid set of argument +for box for the case of no PBC could be +[10, 10, 10, 90, 90, 90]

  • +
  • Following operations are advisable for non-PBC calculations

  • +
+
lmax = all_coords.max(axis=0)
+lmin = all_coords.min(axis=0)
+pseudobox[:3] = 1.1*(lmax - lmin)
+pseudobox[3:] = 90.
+shift = all_coords.copy()
+shift -= lmin
+gridsearch = FastNS(max_cutoff, shift, box=pseudobox, pbc=False)
+
+
+
+
+
+search(self, float[:, :] search_coords)
+

Search a group of atoms against initialized coordinates

+

Creates a new grid with the query atoms and searches +against the initialized coordinates. The search is exclusive +i.e. only the pairs (i, j) such that atom[i] from query atoms +and atom[j] from the initialized set of coordinates is stored as +neighbors.

+

PBC-aware/non PBC-aware calculations are automatically enabled during +the instantiation of :class:FastNS.

+
+
Parameters
+

search_coords (numpy.ndarray) – Query coordinates of shape (N, 3) where +N is the number of queries

+
+
Returns
+

results – An NSResults object holding neighbor search results, which +can be accessed by its methods get_pairs() and +get_pair_distances().

+
+
Return type
+

NSResults

+
+
+
+

Note

+

For non-PBC aware calculations, the current implementation doesn’t work +if any of the query coordinates lies outside the box supplied to +FastNS.

+
+
+ +
+ +

Searches all the pairs within the initialized coordinates

+

All the pairs among the initialized coordinates are registered +in hald the time. Although the algorithm is still the same, but +the distance checks can be reduced to half in this particular case +as every pair need not be evaluated twice.

+
+
Returns
+

results – An NSResults object holding neighbor search results, which +can be accessed by its methods get_pairs() and +get_pair_distances().

+
+
Return type
+

NSResults

+
+
+
+ +
+ +
+
+class MDAnalysis.lib.nsgrid.NSResults
+

Class to store the results

+

All outputs from FastNS are stored in an instance of this class. +All methods of FastNS return an instance of this class, which can +be used to generate the desired results on demand.

+
+
+get_pair_distances(self)
+

Returns all the distances corresponding to each pair of neighbors

+

Returns an array of shape N where N is the number of pairs +among the query atoms and initial atoms within a specified distance. +Every element [i] corresponds to the distance between +pairs[i, 0] and pairs[i, 1], where pairs is the array +obtained from get_pairs()

+
+
Returns
+

distances – distances between pairs of query and initial +atom coordinates of shape N

+
+
Return type
+

numpy.ndarray

+
+
+
+

See also

+

get_pairs()

+
+
+ +
+
+get_pairs(self)
+

Returns all the pairs within the desired cutoff distance

+

Returns an array of shape (N, 2), where N is the number of pairs +between reference and configuration within the specified distance. +For every pair (i, j), reference[i] and configuration[j] are +atom positions such that reference is the position of query +atoms while configuration coontains the position of group of +atoms used to search against the query atoms.

+
+
Returns
+

pairs – pairs of atom indices of neighbors from query +and initial atom coordinates of shape (N, 2)

+
+
Return type
+

numpy.ndarray

+
+
+
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/picklable_file_io.html b/2.7.0-dev0/documentation_pages/lib/picklable_file_io.html new file mode 100644 index 0000000000..66d6e0d219 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/picklable_file_io.html @@ -0,0 +1,589 @@ + + + + + + + 13.2.14. Picklable read-only I/O classes — MDAnalysis.lib.picklable_file_io — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.14. Picklable read-only I/O classes — MDAnalysis.lib.picklable_file_io

+

Provide with an interface for pickling read-only IO file object. +These classes are used for further pickling MDAnalysis.core.universe +in a object composition approach.

+
+
+class MDAnalysis.lib.picklable_file_io.FileIOPicklable(name, mode='r')[source]
+

File object (read-only) that can be pickled.

+

This class provides a file-like object (as returned by open(), +namely io.FileIO) that, unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename and position of the open file handle in +the file are saved. On unpickling, the file is opened by filename, +and the file is seeked to the saved position. +This means that for a successful unpickle, the original file still has to +be accessible with its filename.

+
+

Note

+

This class only supports reading files in binary mode. If you need to open +a file in text mode, use the pickle_open().

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode (str) – only reading (‘r’) mode works. It exists to be consistent +with a wider API.

  • +
+
+
+

Example

+
>>> file = FileIOPicklable(PDB)
+>>> file.readline()
+>>> file_pickled = pickle.loads(pickle.dumps(file))
+>>> print(file.tell(), file_pickled.tell())
+    55 55
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+class MDAnalysis.lib.picklable_file_io.BufferIOPicklable(raw)[source]
+

A picklable buffer object for read-only FileIO object.

+

This class provides a buffered io.BufferedReader +that can be pickled. +Note that this only works in read mode.

+
+
Parameters
+

raw (FileIO object) –

+
+
+

Example

+
file = FileIOPicklable('filename')
+buffer_wrapped = BufferIOPicklable(file)
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+class MDAnalysis.lib.picklable_file_io.TextIOPicklable(raw)[source]
+

Character and line based picklable file-like object.

+

This class provides a file-like 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) –

+
+
+

Example

+
file = FileIOPicklable('filename')
+text_wrapped = TextIOPicklable(file)
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+class MDAnalysis.lib.picklable_file_io.BZ2Picklable(name, mode='rb')[source]
+

File object (read-only) for bzip2 (de)compression that can be pickled.

+

This class provides a file-like object (as returned by bz2.open(), +namely bz2.BZ2File) that, unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename and position of the open file handle in +the file are saved. On unpickling, the file is opened by filename, +and the file is seeked to the saved position. +This means that for a successful unpickle, the original file still has to +be accessible with its filename.

+
+

Note

+

This class only supports reading files in binary mode. If you need to open +to open a compressed file in text mode, use bz2_pickle_open().

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode (str) – can only be ‘r’, ‘rb’ to make pickle work.

  • +
+
+
+

Example

+
>>> file = BZ2Picklable(XYZ_bz2)
+>>> file.readline()
+>>> file_pickled = pickle.loads(pickle.dumps(file))
+>>> print(file.tell(), file_pickled.tell())
+    5 5
+
+
+ +
+

New in version 2.0.0.

+
+

Open a bzip2-compressed file.

+

If filename is a str, bytes, or PathLike object, it gives the +name of the file to be opened. Otherwise, it should be a file +object, which will be used to read or write the compressed data.

+

mode can be ‘r’ for reading (default), ‘w’ for (over)writing, +‘x’ for creating exclusively, or ‘a’ for appending. These can +equivalently be given as ‘rb’, ‘wb’, ‘xb’, and ‘ab’.

+

If mode is ‘w’, ‘x’ or ‘a’, compresslevel can be a number between 1 +and 9 specifying the level of compression: 1 produces the least +compression, and 9 (default) produces the most compression.

+

If mode is ‘r’, the input file may be the concatenation of +multiple compressed streams.

+
+ +
+
+class MDAnalysis.lib.picklable_file_io.GzipPicklable(name, mode='rb')[source]
+

Gzip file object (read-only) that can be pickled.

+

This class provides a file-like object (as returned by gzip.open(), +namely gzip.GzipFile) that, unlike standard Python file objects, +can be pickled. Only read mode is supported.

+

When the file is pickled, filename and position of the open file handle in +the file are saved. On unpickling, the file is opened by filename, +and the file is seeked to the saved position. +This means that for a successful unpickle, the original file still has to +be accessible with its filename.

+
+

Note

+

This class only supports reading files in binary mode. If you need to open +to open a compressed file in text mode, use the gzip_pickle_open().

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode (str) – can only be ‘r’, ‘rb’ to make pickle work.

  • +
+
+
+

Example

+
>>> file = GzipPicklable(MMTF_gz)
+>>> file.readline()
+>>> file_pickled = pickle.loads(pickle.dumps(file))
+>>> print(file.tell(), file_pickled.tell())
+    1218 1218
+
+
+ +
+

New in version 2.0.0.

+
+

Constructor for the GzipFile class.

+

At least one of fileobj and filename must be given a +non-trivial value.

+

The new class instance is based on fileobj, which can be a regular +file, an io.BytesIO object, or any other object which simulates a file. +It defaults to None, in which case filename is opened to provide +a file object.

+

When fileobj is not None, the filename argument is only used to be +included in the gzip file header, which may include the original +filename of the uncompressed file. It defaults to the filename of +fileobj, if discernible; otherwise, it defaults to the empty string, +and in this case the original filename is not included in the header.

+

The mode argument can be any of ‘r’, ‘rb’, ‘a’, ‘ab’, ‘w’, ‘wb’, ‘x’, or +‘xb’ depending on whether the file will be read or written. The default +is the mode of fileobj if discernible; otherwise, the default is ‘rb’. +A mode of ‘r’ is equivalent to one of ‘rb’, and similarly for ‘w’ and +‘wb’, ‘a’ and ‘ab’, and ‘x’ and ‘xb’.

+

The compresslevel argument is an integer from 0 to 9 controlling the +level of compression; 1 is fastest and produces the least compression, +and 9 is slowest and produces the most compression. 0 is no compression +at all. The default is 9.

+

The mtime argument is an optional numeric timestamp to be written +to the last modification time field in the stream when compressing. +If omitted or None, the current time is used.

+
+ +
+
+MDAnalysis.lib.picklable_file_io.pickle_open(name, mode='rt')[source]
+

Open file and return a stream with pickle function implemented.

+

This function returns a FileIOPicklable object wrapped in a +BufferIOPicklable class when given the “rb” reading mode, +or a FileIOPicklable object wrapped in a TextIOPicklable class with the “r” +or “rt” reading mode. It can be used as a context manager, and replace the +built-in open() function in read mode that only returns an +unpicklable file object. +In order to serialize a MDAnalysis.core.Universe, this function +can used to open trajectory/topology files. This object composition is more +flexible and easier than class inheritance to implement pickling +for new readers.

+
+

Note

+

Can be only used with read mode.

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode ({'r', 'rt', 'rb'} (optional)) – ‘r’: open for reading in text mode; +‘rt’: read in text mode (default); +‘rb’: read in binary mode;

  • +
+
+
Returns
+

stream-like object – when mode is ‘r’ or ‘rt’, returns TextIOPicklable; +when mode is ‘rb’, returns BufferIOPicklable

+
+
Return type
+

BufferIOPicklable or TextIOPicklable

+
+
Raises
+

ValueError – if mode is not one of the allowed read modes

+
+
+

Examples

+

open as context manager:

+
with pickle_open('filename') as f:
+    line = f.readline()
+
+
+

open as function:

+
f = pickle_open('filename')
+line = f.readline()
+f.close()
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.lib.picklable_file_io.bz2_pickle_open(name, mode='rb')[source]
+

Open a bzip2-compressed file in binary or text mode +with pickle function implemented.

+

This function returns a BZ2Picklable object when given the “rb” or “r” +reading mode, or a BZ2Picklable object wrapped in a TextIOPicklable class +with the “rt” reading mode. +It can be used as a context manager, and replace the built-in +bz2.open() function in read mode that only returns an +unpicklable file object.

+
+

Note

+

Can be only used with read mode.

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode ({'r', 'rt', 'rb'} (optional)) – ‘r’: open for reading in binary mode; +‘rt’: read in text mode; +‘rb’: read in binary mode; (default)

  • +
+
+
Returns
+

stream-like object – when mode is ‘rt’, returns TextIOPicklable; +when mode is ‘r’ or ‘rb’, returns BZ2Picklable

+
+
Return type
+

BZ2Picklable or TextIOPicklable

+
+
Raises
+

ValueError – if mode is not one of the allowed read modes

+
+
+

Examples

+

open as context manager:

+
with bz2_pickle_open('filename') as f:
+    line = f.readline()
+
+
+

open as function:

+
f = bz2_pickle_open('filename')
+line = f.readline()
+f.close()
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.lib.picklable_file_io.gzip_pickle_open(name, mode='rb')[source]
+

Open a gzip-compressed file in binary or text mode +with pickle function implemented.

+

This function returns a GzipPicklable object when given the “rb” or “r” +reading mode, or a GzipPicklable object wrapped in a TextIOPicklable class +with the “rt” reading mode. +It can be used as a context manager, and replace the built-in +gzip.open() function in read mode that only returns an +unpicklable file object.

+
+

Note

+

Can be only used with read mode.

+
+
+
Parameters
+
    +
  • name (str) – either a text or byte string giving the name (and the path +if the file isn’t in the current working directory) of the file to +be opened.

  • +
  • mode ({'r', 'rt', 'rb'} (optional)) – ‘r’: open for reading in binary mode; +‘rt’: read in text mode; +‘rb’: read in binary mode; (default)

  • +
+
+
Returns
+

stream-like object – when mode is ‘rt’, returns TextIOPicklable; +when mode is ‘r’ or ‘rb’, returns GzipPicklable

+
+
Return type
+

GzipPicklable or TextIOPicklable

+
+
Raises
+

ValueError – if mode is not one of the allowed read modes

+
+
+

Examples

+

open as context manager:

+
with gzip_pickle_open('filename') as f:
+    line = f.readline()
+
+
+

open as function:

+
f = gzip_pickle_open('filename')
+line = f.readline()
+f.close()
+
+
+ +
+

New in version 2.0.0.

+
+
+ +
+

New in version 2.0.0.

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/pkdtree.html b/2.7.0-dev0/documentation_pages/lib/pkdtree.html new file mode 100644 index 0000000000..88cad405ec --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/pkdtree.html @@ -0,0 +1,338 @@ + + + + + + + 13.2.5. PeriodicKDTree — MDAnalysis.lib.pkdtree — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.5. PeriodicKDTree — MDAnalysis.lib.pkdtree

+

This module contains a class to allow searches on a KDTree involving periodic +boundary conditions.

+
+
+
+class MDAnalysis.lib.pkdtree.PeriodicKDTree(box: Optional[Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]]] = None, leafsize: int = 10)[source]
+

Wrapper around scipy.spatial.cKDTree

+

Creates an object which can handle periodic as well as +non periodic boundary condtions depending on the parameters +provided while constructing the tree.

+

To enable periodic boundary conditions, box dimensions must be +provided. Periodic Boundary conditions are implemented by creating +duplicates of the particles which are within the specified cutoff +distance from the boundary. These duplicates along with the +original particle coordinates are used with the cKDTree without +any special treatment due to PBC beyond this point. The final +results after any operation with duplicate particle indices can be +traced back to the original particle using the +MDAnalysis.lib.distances.undo_augment() function.

+
+
Parameters
+
    +
  • box (array-like or None, optional, default None) – Simulation cell dimensions in the form of +MDAnalysis.trajectory.timestep.Timestep.dimensions when +periodic boundary conditions should be taken into account for +the calculation of contacts.

  • +
  • leafsize (int (optional)) – Number of entries in leafs of the KDTree. If you suffer poor +performance you can play around with this number. Increasing the +leafsize will speed up the construction of the KDTree but +slow down the search.

  • +
+
+
+
+
+get_indices() ndarray[Any, dtype[_ScalarType_co]][source]
+

Return the neighbors from the last query.

+
+
Returns
+

indices – neighbors for the last query points and search radius

+
+
Return type
+

NDArray

+
+
+
+ +
+
+property pbc
+

Flag to indicate the presence of periodic boundaries.

+
    +
  • True if PBC are taken into account

  • +
  • False if no unitcell dimension is available.

  • +
+

This is a managed attribute and can only be read.

+
+ +
+
+search(centers: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], radius: float) ndarray[Any, dtype[_ScalarType_co]][source]
+

Search all points within radius from centers and their periodic images.

+

All the centers coordinates are wrapped around the central cell +to enable distance evaluations from points in the tree +and their images.

+
+
Parameters
+
    +
  • centers (array_like (N,3)) – coordinate array to search for neighbors

  • +
  • radius (float) – maximum distance to search for neighbors.

  • +
+
+
+
+ +
+
+search_pairs(radius: float) ndarray[Any, dtype[_ScalarType_co]][source]
+

Search all the pairs within a specified radius

+
+
Parameters
+

radius (float) – Maximum distance between pairs of coordinates

+
+
Returns
+

pairs – Indices of all the pairs which are within the specified radius

+
+
Return type
+

array

+
+
+
+ +
+
+search_tree(centers: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], radius: float) ndarray[source]
+

Searches all the pairs within radius between centers +and coords

+

coords are the already initialized coordinates in the tree +during set_coords(). +centers are wrapped around the primary unit cell +if PBC is desired. Minimum image convention (PBC) is +activated if the box argument is provided during +class initialization

+
+
Parameters
+
    +
  • centers (array_like (N,3)) – coordinate array to search for neighbors

  • +
  • radius (float) – maximum distance to search for neighbors.

  • +
+
+
Returns
+

pairs – all the pairs between coords and centers

+
+
Return type
+

array

+
+
+
+

Note

+

This method constructs another tree from the centers +and queries the previously built tree (built in +set_coords())

+
+
+ +
+
+set_coords(coords: Union[_SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[Union[bool, int, float, complex, str, bytes]]], cutoff: Optional[float] = None) None[source]
+

Constructs KDTree from the coordinates

+

Wrapping of coordinates to the primary unit cell is enforced +before any distance evaluations. If periodic boundary conditions +are enabled, then duplicate particles are generated in the +vicinity of the box. An additional array mapping is also +generated which can be later used to trace the origin of +duplicate particle coordinates.

+

For non-periodic calculations, cutoff should not be provided +the parameter is only required for periodic calculations.

+
+
Parameters
+
    +
  • coords (array_like) – Coordinate array of shape (N, 3) for N atoms.

  • +
  • cutoff (float) – Specified cutoff distance to create duplicate images +Typically equivalent to the desired search radius +or the maximum of the desired cutoff radius. Relevant images +corresponding to every atom which lies +within cutoff distance from either of the box boundary +will be generated.

  • +
+
+
+ +
+ +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/qcprot.html b/2.7.0-dev0/documentation_pages/lib/qcprot.html new file mode 100644 index 0000000000..e743e8c093 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/qcprot.html @@ -0,0 +1,321 @@ + + + + + + + 13.2.9. Fast QCP RMSD structure alignment — MDAnalysis.lib.qcprot — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.9. Fast QCP RMSD structure alignment — MDAnalysis.lib.qcprot

+
+
Author
+

Joshua L. Adelman, University of Pittsburgh

+
+
Author
+

Robert R. Delgado, Cornell University and Arizona State University

+
+
Contact
+

jla65@pitt.edu

+
+
Year
+

2011, 2016

+
+
Licence
+

BSD

+
+
+

PyQCPROT is a python/cython implementation of Douglas Theobald’s QCP +method for calculating the minimum RMSD between two structures +[Theobald2005] and determining the optimal least-squares rotation +matrix [Liu2010].

+

A full description of the method, along with the original C implementation can +be found at http://theobald.brandeis.edu/qcp/

+
+

See also

+
+
MDAnalysis.analysis.align

Align structures using CalcRMSDRotationalMatrix()

+
+
MDAnalysis.analysis.rms.rmsd

Calculate the RMSD between two structures using CalcRMSDRotationalMatrix()

+
+
+
+
+

Changed in version 0.16.0: Call signatures were changed to directly interface with MDAnalysis +coordinate arrays: shape (N, 3)

+
+

References

+

If you use this QCP rotation calculation method in a publication, please +reference:

+
+
Theobald2005
+

Douglas L. Theobald (2005) +“Rapid calculation of RMSD using a quaternion-based characteristic +polynomial.” Acta Crystallographica A 61(4):478-480.

+
+
Liu2010
+

Pu Liu, Dmitris K. Agrafiotis, and Douglas L. Theobald (2010) +“Fast determination of the optimal rotational matrix for macromolecular +superpositions.” J. Comput. Chem. 31, 1561-1563.

+
+
+
+

13.2.9.1. Functions

+

Users will typically use the CalcRMSDRotationalMatrix() function.

+
+
+MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix(ref, conf, N, rot, weights)
+

Calculate the RMSD & rotational matrix.

+
+
Parameters
+
    +
  • ref (ndarray, np.float64_t) – reference structure coordinates

  • +
  • conf (ndarray, np.float64_t) – condidate structure coordinates

  • +
  • N (int) – size of the system

  • +
  • rot (ndarray, np.float64_t) – array to store rotation matrix. Must be flat

  • +
  • weights (ndarray, npfloat64_t (optional)) – weights for each component

  • +
+
+
Returns
+

    +
  • rmsd (float) – RMSD value

  • +
  • .. versionchanged:: 0.16.0 – Array size changed from 3xN to Nx3.

  • +
+

+
+
+
+ +
+
+MDAnalysis.lib.qcprot.InnerProduct(A, coords1, coords2, N, weight)
+

Calculate the inner product of two structures.

+
+
Parameters
+
    +
  • A (ndarray np.float64_t) – result inner product array, modified in place

  • +
  • coords1 (ndarray np.float64_t) – reference structure

  • +
  • coord2 (ndarray np.float64_t) – candidate structure

  • +
  • N (int) – size of system

  • +
  • weights (ndarray np.float64_t (optional)) – use to calculate weighted inner product

  • +
+
+
Returns
+

+

+
+
+

Notes

+
    +
  1. You MUST center the structures, coords1 and coords2, before calling this +function.

  2. +
  3. Coordinates are stored as Nx3 arrays (as everywhere else in MDAnalysis).

  4. +
+
+

Changed in version 0.16.0: Array size changed from 3xN to Nx3.

+
+
+ +
+
+MDAnalysis.lib.qcprot.FastCalcRMSDAndRotation(rot, A, E0, N)
+

Calculate the RMSD, and/or the optimal rotation matrix.

+
+
Parameters
+
    +
  • rot (ndarray np.float64_t) – result rotation matrix, modified inplace

  • +
  • A (ndarray np.float64_t) – the inner product of two structures

  • +
  • E0 (float64) – 0.5 * (G1 + G2)

  • +
  • N (int) – size of the system

  • +
+
+
Returns
+

rmsd – RMSD value for two structures

+
+
Return type
+

float

+
+
+
+

Changed in version 0.16.0: Array sized changed from 3xN to Nx3.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/transformations.html b/2.7.0-dev0/documentation_pages/lib/transformations.html new file mode 100644 index 0000000000..347b8ba3df --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/transformations.html @@ -0,0 +1,687 @@ + + + + + + + 13.2.8. Homogeneous Transformation Matrices and Quaternions — MDAnalysis.lib.transformations — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.8. Homogeneous Transformation Matrices and Quaternions — MDAnalysis.lib.transformations

+

A library for calculating 4x4 matrices for translating, rotating, reflecting, +scaling, shearing, projecting, orthogonalizing, and superimposing arrays of +3D homogeneous coordinates as well as for converting between rotation matrices, +Euler angles, and quaternions. Also includes an Arcball control object and +functions to decompose transformation matrices.

+
+
Authors
+

Christoph Gohlke, +Laboratory for Fluorescence Dynamics, University of California, Irvine

+
+
Version
+

2010.05.10

+
+
Licence
+

BSD 3-clause

+
+
+
+

13.2.8.1. Requirements

+ +

Notes

+

The API is not stable yet and is expected to change between revisions.

+

This Python code is not optimized for speed. Refer to the transformations.c +module for a faster implementation of some functions.

+

Documentation in HTML format can be generated with epydoc.

+

Matrices (M) can be inverted using numpy.linalg.inv(M), concatenated using +numpy.dot(M0, M1), or used to transform homogeneous coordinates (v) using +numpy.dot(M, v) for shape (4, *) “point of arrays”, respectively +numpy.dot(v, M.T) for shape (*, 4) “array of points”.

+

Use the transpose of transformation matrices for OpenGL glMultMatrixd().

+

Calculations are carried out with numpy.float64 precision.

+

Vector, point, quaternion, and matrix function arguments are expected to be +“array like”, i.e. tuple, list, or numpy arrays.

+

Return types are numpy arrays unless specified otherwise.

+

Angles are in radians unless specified otherwise.

+

Quaternions w+ix+jy+kz are represented as [w, x, y, z].

+

A triple of Euler angles can be applied/interpreted in 24 ways, which can +be specified using a 4 character string or encoded 4-tuple:

+
+
    +
  • Axes 4-string: e.g. ‘sxyz’ or ‘ryxy’

    +
      +
    • first character : rotations are applied to ‘s’tatic or ‘r’otating frame

    • +
    • remaining characters : successive rotation axis ‘x’, ‘y’, or ‘z’

    • +
    +
  • +
  • Axes 4-tuple: e.g. (0, 0, 0, 0) or (1, 1, 1, 1)

    +
      +
    • inner axis: code of axis (‘x’:0, ‘y’:1, ‘z’:2) of rightmost matrix.

    • +
    • parity : even (0) if inner axis ‘x’ is followed by ‘y’, ‘y’ is followed +by ‘z’, or ‘z’ is followed by ‘x’. Otherwise odd (1).

    • +
    • repetition : first and last axis are same (1) or different (0).

    • +
    • frame : rotations are applied to static (0) or rotating (1) frame.

    • +
    +
  • +
+
+

References

+
+
    +
  1. Ronald Goldman. Matrices and transformations. In Graphics Gems I, pages 472–475. Morgan Kaufmann, USA, 1990.

  2. +
  3. Ken Shoemake. Uniform random rotations. In David Kirk, editor, Graphics Gems III, pages 124–132. Academic Press, 1992.

  4. +
  5. Charles F.F. Karney. Quaternions in molecular modeling. Journal of Molecular Graphics and Modelling, 25(5):595–604, 2007. doi:https://doi.org/10.1016/j.jmgm.2006.04.002.

  6. +
  7. Itzhack Y. Bar-Itzhack. New method for extracting the quaternion from a rotation matrix. Journal of Guidance, Control, and Dynamics, 23(6):1085–1087, 2000. doi:10.2514/2.4654.

  8. +
  9. Ronald N. Goldman. Vii.4 - more matrices and transformations: shear and pseudo-perspective. In JAMES ARVO, editor, Graphics Gems II, pages 338–341. Morgan Kaufmann, San Diego, 1991. URL: https://www.sciencedirect.com/science/article/pii/B9780080507545500724, doi:https://doi.org/10.1016/B978-0-08-050754-5.50072-4.

  10. +
  11. Spencer W. Thomas. Vii.1 - decomposing a matrix into simple transformations. In JAMES ARVO, editor, Graphics Gems II, pages 320–323. Morgan Kaufmann, San Diego, 1991. URL: https://www.sciencedirect.com/science/article/pii/B9780080507545500694, doi:https://doi.org/10.1016/B978-0-08-050754-5.50069-4.

  12. +
  13. Ronald N. Goldman. Vii.2 - recovering the data from the transformation matrix. In James Arvo, editor, Graphics Gems II, pages 324–331. Morgan Kaufmann, San Diego, 1991. URL: https://www.sciencedirect.com/science/article/pii/B9780080507545500700, doi:https://doi.org/10.1016/B978-0-08-050754-5.50070-0.

  14. +
  15. Ken Shoemake. Euler angle conversion. In Paul S. Heckbert, editor, Graphics Gems IV, pages 222–229. Morgan Kaufmann, 1994.

  16. +
  17. Ken Shoemake. Arcball rotation control. In Paul S. Heckbert, editor, Graphics Gems IV, pages 175–192. Morgan Kaufmann, 1994.

  18. +
  19. Ken Shoemake. Quaternions. In URL: https://www.ljll.math.upmc.fr/~frey/papers/scientific%20visualisation/Shoemake%20K.,%20Quaternions.pdf.

  20. +
  21. James Diebel. Representing attitude: euler angles, unit quaternions, and rotation vectors. In 2006.

  22. +
  23. W. Kabsch. A discussion of the solution for the best rotation to relate two sets of vectors. Acta Crystallographica Section A, 34(5):827–828, Sep 1978. URL: https://doi.org/10.1107/S0567739478001680, doi:10.1107/S0567739478001680.

  24. +
  25. Berthold Horn. Closed-form solution of absolute orientation using unit quaternions. Journal of the Optical Society A, 4:629–642, 04 1987. doi:10.1364/JOSAA.4.000629.

  26. +
  27. JMP van Waveren. From quaternion to matrix and back. In 2005. URL: http://www.intel.com/cd/ids/developer/asmo-na/eng/293748.htm.

  28. +
+
+

Examples

+
>>> from MDAnalysis.lib.transformations import *
+>>> import numpy as np
+>>> alpha, beta, gamma = 0.123, -1.234, 2.345
+>>> origin, xaxis, yaxis, zaxis = (0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)
+>>> I = identity_matrix()
+>>> Rx = rotation_matrix(alpha, xaxis)
+>>> Ry = rotation_matrix(beta, yaxis)
+>>> Rz = rotation_matrix(gamma, zaxis)
+>>> R = concatenate_matrices(Rx, Ry, Rz)
+>>> euler = euler_from_matrix(R, 'rxyz')
+>>> np.allclose([alpha, beta, gamma], euler)
+True
+>>> Re = euler_matrix(alpha, beta, gamma, 'rxyz')
+>>> is_same_transform(R, Re)
+True
+>>> al, be, ga = euler_from_matrix(Re, 'rxyz')
+>>> is_same_transform(Re, euler_matrix(al, be, ga, 'rxyz'))
+True
+>>> qx = quaternion_about_axis(alpha, xaxis)
+>>> qy = quaternion_about_axis(beta, yaxis)
+>>> qz = quaternion_about_axis(gamma, zaxis)
+>>> q = quaternion_multiply(qx, qy)
+>>> q = quaternion_multiply(q, qz)
+>>> Rq = quaternion_matrix(q)
+>>> is_same_transform(R, Rq)
+True
+>>> S = scale_matrix(1.23, origin)
+>>> T = translation_matrix((1, 2, 3))
+>>> Z = shear_matrix(beta, xaxis, origin, zaxis)
+>>> R = random_rotation_matrix(np.random.rand(3))
+>>> M = concatenate_matrices(T, R, Z, S)
+>>> scale, shear, angles, trans, persp = decompose_matrix(M)
+>>> np.allclose(scale, 1.23)
+True
+>>> np.allclose(trans, (1, 2, 3))
+True
+>>> np.allclose(shear, (0, math.tan(beta), 0))
+True
+>>> is_same_transform(R, euler_matrix(axes='sxyz', *angles))
+True
+>>> M1 = compose_matrix(scale, shear, angles, trans, persp)
+>>> is_same_transform(M, M1)
+True
+
+
+
+
+

13.2.8.2. Functions

+
+

Changed in version 0.11.0: Transformations library moved from MDAnalysis.core.transformations to +MDAnalysis.lib.transformations

+
+
+
+
+
+class MDAnalysis.lib.transformations.Arcball(initial=None)[source]
+

Virtual Trackball Control.

+
>>> from MDAnalysis.lib.transformations import Arcball
+>>> import numpy as np
+>>> ball = Arcball()
+>>> ball = Arcball(initial=np.identity(4))
+>>> ball.place([320, 320], 320)
+>>> ball.down([500, 250])
+>>> ball.drag([475, 275])
+>>> R = ball.matrix()
+>>> np.allclose(np.sum(R), 3.90583455)
+True
+>>> ball = Arcball(initial=[1, 0, 0, 0])
+>>> ball.place([320, 320], 320)
+>>> ball.setaxes([1,1,0], [-1, 1, 0])
+>>> ball.setconstrain(True)
+>>> ball.down([400, 200])
+>>> ball.drag([200, 400])
+>>> R = ball.matrix()
+>>> np.allclose(np.sum(R), 0.2055924)
+True
+>>> ball.next()
+
+
+

Initialize virtual trackball control.

+

initial : quaternion or rotation matrix

+
+
+down(point)[source]
+

Set initial cursor window coordinates and pick constrain-axis.

+
+ +
+
+drag(point)[source]
+

Update current cursor window coordinates.

+
+ +
+
+getconstrain()[source]
+

Return state of constrain to axis mode.

+
+ +
+
+matrix()[source]
+

Return homogeneous rotation matrix.

+
+ +
+
+next(acceleration=0.0)[source]
+

Continue rotation in direction of last drag.

+
+ +
+
+place(center, radius)[source]
+

Place Arcball, e.g. when window size changes.

+
+
centersequence[2]

Window coordinates of trackball center.

+
+
radiusfloat

Radius of trackball in window coordinates.

+
+
+
+ +
+
+setaxes(*axes)[source]
+

Set axes to constrain rotations.

+
+ +
+
+setconstrain(constrain)[source]
+

Set state of constrain to axis mode.

+
+ +
+ +
+
+MDAnalysis.lib.transformations.arcball_nearest_axis(point, axes)[source]
+

Return axis, which arc is nearest to point.

+
+ +
+
+MDAnalysis.lib.transformations.compose_matrix(scale=None, shear=None, angles=None, translate=None, perspective=None)[source]
+

Return transformation matrix from sequence of transformations.

+

This is the inverse of the decompose_matrix function.

+
+
Sequence of transformations:

scale : vector of 3 scaling factors +shear : list of shear factors for x-y, x-z, y-z axes +angles : list of Euler angles about static x, y, z axes +translate : translation vector along x, y, z axes +perspective : perspective partition of matrix

+
+
+
>>> from MDAnalysis.lib.transformations import (compose_matrix,
+...     decompose_matrix, is_same_transform)
+>>> import math
+>>> import numpy as np
+>>> scale = np.random.random(3) - 0.5
+>>> shear = np.random.random(3) - 0.5
+>>> angles = (np.random.random(3) - 0.5) * (2*math.pi)
+>>> trans = np.random.random(3) - 0.5
+>>> persp = np.random.random(4) - 0.5
+>>> M0 = compose_matrix(scale, shear, angles, trans, persp)
+>>> result = decompose_matrix(M0)
+>>> M1 = compose_matrix(*result)
+>>> is_same_transform(M0, M1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.concatenate_matrices(*matrices)[source]
+

Return concatenation of series of transformation matrices.

+
>>> from MDAnalysis.lib.transformations import concatenate_matrices
+>>> import numpy as np
+>>> M = np.random.rand(16).reshape((4, 4)) - 0.5
+>>> np.allclose(M, concatenate_matrices(M))
+True
+>>> np.allclose(np.dot(M, M.T), concatenate_matrices(M, M.T))
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.decompose_matrix(matrix)[source]
+

Return sequence of transformations from transformation matrix.

+
+
matrixarray_like

Non-degenerative homogeneous transformation matrix

+
+
Return tuple of:

scale : vector of 3 scaling factors +shear : list of shear factors for x-y, x-z, y-z axes +angles : list of Euler angles about static x, y, z axes +translate : translation vector along x, y, z axes +perspective : perspective partition of matrix

+
+
+

Raise ValueError if matrix is of wrong type or degenerative.

+
>>> from MDAnalysis.lib.transformations import (translation_matrix,
+...     decompose_matrix, scale_matrix, euler_matrix)
+>>> import numpy as np
+>>> T0 = translation_matrix((1, 2, 3))
+>>> scale, shear, angles, trans, persp = decompose_matrix(T0)
+>>> T1 = translation_matrix(trans)
+>>> np.allclose(T0, T1)
+True
+>>> S = scale_matrix(0.123)
+>>> scale, shear, angles, trans, persp = decompose_matrix(S)
+>>> scale[0]
+0.123
+>>> R0 = euler_matrix(1, 2, 3)
+>>> scale, shear, angles, trans, persp = decompose_matrix(R0)
+>>> R1 = euler_matrix(*angles)
+>>> np.allclose(R0, R1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.euler_from_quaternion(quaternion, axes='sxyz')[source]
+

Return Euler angles from quaternion for specified axis sequence.

+
>>> from MDAnalysis.lib.transformations import euler_from_quaternion
+>>> import numpy as np
+>>> angles = euler_from_quaternion([0.99810947, 0.06146124, 0, 0])
+>>> np.allclose(angles, [0.123, 0, 0])
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.projection_from_matrix(matrix, pseudo=False)[source]
+

Return projection plane and perspective point from projection matrix.

+

Return values are same as arguments for projection_matrix function: +point, normal, direction, perspective, and pseudo.

+
>>> from MDAnalysis.lib.transformations import (projection_matrix,
+...     projection_from_matrix, is_same_transform)
+>>> import numpy as np
+>>> point = np.random.random(3) - 0.5
+>>> normal = np.random.random(3) - 0.5
+>>> direct = np.random.random(3) - 0.5
+>>> persp = np.random.random(3) - 0.5
+>>> P0 = projection_matrix(point, normal)
+>>> result = projection_from_matrix(P0)
+>>> P1 = projection_matrix(*result)
+>>> is_same_transform(P0, P1)
+True
+>>> P0 = projection_matrix(point, normal, direct)
+>>> result = projection_from_matrix(P0)
+>>> P1 = projection_matrix(*result)
+>>> is_same_transform(P0, P1)
+True
+>>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=False)
+>>> result = projection_from_matrix(P0, pseudo=False)
+>>> P1 = projection_matrix(*result)
+>>> is_same_transform(P0, P1)
+True
+>>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=True)
+>>> result = projection_from_matrix(P0, pseudo=True)
+>>> P1 = projection_matrix(*result)
+>>> is_same_transform(P0, P1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.quaternion_imag(quaternion)[source]
+

Return imaginary part of quaternion.

+
>>> from MDAnalysis.lib.transformations import quaternion_imag
+>>> quaternion_imag([3.0, 0.0, 1.0, 2.0])
+[0.0, 1.0, 2.0]
+
+
+
+ +
+
+MDAnalysis.lib.transformations.quaternion_real(quaternion)[source]
+

Return real part of quaternion.

+
>>> from MDAnalysis.lib.transformations import quaternion_real
+>>> quaternion_real([3.0, 0.0, 1.0, 2.0])
+3.0
+
+
+
+ +
+
+MDAnalysis.lib.transformations.reflection_from_matrix(matrix)[source]
+

Return mirror plane point and normal vector from reflection matrix.

+
>>> from MDAnalysis.lib.transformations import (reflection_matrix,
+...     reflection_from_matrix, is_same_transform)
+>>> import numpy as np
+>>> v0 = np.random.random(3) - 0.5
+>>> v1 = np.random.random(3) - 0.5
+>>> M0 = reflection_matrix(v0, v1)
+>>> point, normal = reflection_from_matrix(M0)
+>>> M1 = reflection_matrix(point, normal)
+>>> is_same_transform(M0, M1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.rotation_from_matrix(matrix)[source]
+

Return rotation angle and axis from rotation matrix.

+
>>> from MDAnalysis.lib.transformations import (rotation_matrix,
+...     is_same_transform, rotation_from_matrix)
+>>> import random, math
+>>> import numpy as np
+>>> angle = (random.random() - 0.5) * (2*math.pi)
+>>> direc = np.random.random(3) - 0.5
+>>> point = np.random.random(3) - 0.5
+>>> R0 = rotation_matrix(angle, direc, point)
+>>> angle, direc, point = rotation_from_matrix(R0)
+>>> R1 = rotation_matrix(angle, direc, point)
+>>> is_same_transform(R0, R1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.rotaxis(a, b)[source]
+

Return the rotation axis to rotate vector a into b.

+
+
Parameters
+
    +
  • a (array_like) – two vectors

  • +
  • b (array_like) – two vectors

  • +
+
+
Returns
+

c – vector to rotate a into b

+
+
Return type
+

np.ndarray

+
+
+
+

Note

+

If a == b this will always return [1, 0, 0]

+
+
+ +
+
+MDAnalysis.lib.transformations.scale_from_matrix(matrix)[source]
+

Return scaling factor, origin and direction from scaling matrix.

+
>>> from MDAnalysis.lib.transformations import (scale_matrix,
+...      scale_from_matrix, is_same_transform)
+>>> import random
+>>> import numpy as np
+>>> factor = random.random() * 10 - 5
+>>> origin = np.random.random(3) - 0.5
+>>> direct = np.random.random(3) - 0.5
+>>> S0 = scale_matrix(factor, origin)
+>>> factor, origin, direction = scale_from_matrix(S0)
+>>> S1 = scale_matrix(factor, origin, direction)
+>>> is_same_transform(S0, S1)
+True
+>>> S0 = scale_matrix(factor, origin, direct)
+>>> factor, origin, direction = scale_from_matrix(S0)
+>>> S1 = scale_matrix(factor, origin, direction)
+>>> is_same_transform(S0, S1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.shear_from_matrix(matrix)[source]
+

Return shear angle, direction and plane from shear matrix.

+
>>> from MDAnalysis.lib.transformations import (shear_matrix,
+...     shear_from_matrix, is_same_transform)
+>>> import random, math
+>>> import numpy as np
+>>> angle = (random.random() - 0.5) * 4*math.pi
+>>> direct = np.random.random(3) - 0.5
+>>> point = np.random.random(3) - 0.5
+>>> normal = np.cross(direct, np.random.random(3))
+>>> S0 = shear_matrix(angle, direct, point, normal)
+>>> angle, direct, point, normal = shear_from_matrix(S0)
+>>> S1 = shear_matrix(angle, direct, point, normal)
+>>> is_same_transform(S0, S1)
+True
+
+
+
+ +
+
+MDAnalysis.lib.transformations.translation_from_matrix(matrix)[source]
+

Return translation vector from translation matrix.

+
>>> from MDAnalysis.lib.transformations import (translation_matrix,
+...     translation_from_matrix)
+>>> import numpy as np
+>>> v0 = np.random.random(3) - 0.5
+>>> v1 = translation_from_matrix(translation_matrix(v0))
+>>> np.allclose(v0, v1)
+True
+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib/util.html b/2.7.0-dev0/documentation_pages/lib/util.html new file mode 100644 index 0000000000..71c705ca0f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib/util.html @@ -0,0 +1,1605 @@ + + + + + + + 13.2.10. Helper functions — MDAnalysis.lib.util — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13.2.10. Helper functions — MDAnalysis.lib.util

+

Small helper functions that don’t fit anywhere else.

+
+

Changed in version 0.11.0: Moved mathematical functions into lib.mdamath

+
+
+

13.2.10.1. Files and directories

+
+
+MDAnalysis.lib.util.filename(name, ext=None, keep=False)[source]
+

Return a new name that has suffix attached; replaces other extensions.

+
+
Parameters
+
    +
  • name (str or NamedStream) – filename; extension is replaced unless keep=True; +name can also be a NamedStream (and its +NamedStream.name will be changed accordingly)

  • +
  • ext (None or str) – extension to use in the new filename

  • +
  • keep (bool) –

      +
    • False: replace existing extension with ext;

    • +
    • True: keep old extension if one existed

    • +
    +

  • +
+
+
+
+

Changed in version 0.9.0: Also permits NamedStream to pass through.

+
+
+ +
+
+MDAnalysis.lib.util.openany(datasource, mode='rt', reset=True)[source]
+

Context manager for anyopen().

+

Open the datasource and close it when the context of the with +statement exits.

+

datasource can be a filename or a stream (see isstream()). A stream +is reset to its start if possible (via seek() or +reset()).

+

The advantage of this function is that very different input sources +(“streams”) can be used for a “file”, ranging from files on disk (including +compressed files) to open file objects to sockets and strings—as long as +they have a file-like interface.

+
+
Parameters
+
    +
  • datasource (a file or a stream) –

  • +
  • mode ({'r', 'w'} (optional)) – open in r(ead) or w(rite) mode

  • +
  • reset (bool (optional)) – try to read (mode ‘r’) the stream from the start [True]

  • +
+
+
+

Examples

+

Open a gzipped file and process it line by line:

+
with openany("input.pdb.gz") as pdb:
+    for line in pdb:
+        if line.startswith('ATOM'):
+            print(line)
+
+
+

Open a URL and read it:

+
import urllib2
+with openany(urllib2.urlopen("https://www.mdanalysis.org/")) as html:
+    print(html.read())
+
+
+
+

See also

+

anyopen()

+
+
+ +
+
+MDAnalysis.lib.util.anyopen(datasource, mode='rt', reset=True)[source]
+

Open datasource (gzipped, bzipped, uncompressed) and return a stream.

+

datasource can be a filename or a stream (see isstream()). By +default, a stream is reset to its start if possible (via +seek() or reset()).

+

If possible, the attribute stream.name is set to the filename or +“<stream>” if no filename could be associated with the datasource.

+
+
Parameters
+
    +
  • datasource – a file (from file or open()) or a stream (e.g. from +urllib2.urlopen() or io.StringIO)

  • +
  • mode ({'r', 'w', 'a'} (optional)) – Open in r(ead), w(rite) or a(ppend) mode. This string is directly +passed to the file opening handler (either Python’s openfe, bz2, or +gzip). More complex modes are supported if the file opening handler +supports it.

  • +
  • reset (bool (optional)) – try to read (mode ‘r’) the stream from the start

  • +
+
+
Return type
+

file-like object

+
+
+
+

See also

+
+
openany()

to be used with the with statement.

+
+
+
+
+

Changed in version 0.9.0: Only returns the stream and tries to set stream.name = filename instead of the previous +behavior to return a tuple (stream, filename).

+
+
+

Changed in version 2.0.0: New read handlers support pickle functionality +if datasource is a filename. +They return a custom picklable file stream in +MDAnalysis.lib.picklable_file_io.

+
+
+ +
+
+MDAnalysis.lib.util.greedy_splitext(p)[source]
+

Split extension in path p at the left-most separator.

+

Extensions are taken to be separated from the filename with the +separator os.extsep (as used by os.path.splitext()).

+
+
Parameters
+

p (str) – path

+
+
Returns
+

(root, extension) – where root is the full path and filename with all +extensions removed whereas extension is the string of +all extensions.

+
+
Return type
+

tuple

+
+
+

Example

+
>>> from MDAnalysis.lib.util import greedy_splitext
+>>> greedy_splitext("/home/joe/protein.pdb.bz2")
+('/home/joe/protein', '.pdb.bz2')
+
+
+
+ +
+
+MDAnalysis.lib.util.which(program)[source]
+

Determine full path of executable program on PATH.

+

(Jay at http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python)

+
+
Parameters
+

programe (str) – name of the executable

+
+
Returns
+

path – absolute path to the executable if it can be found, else None

+
+
Return type
+

str or None

+
+
+
+ +
+
+MDAnalysis.lib.util.realpath(*args)[source]
+

Join all args and return the real path, rooted at /.

+

Expands ‘~’, ‘~user’, and environment variables such as $HOME.

+

Returns None if any of the args is None.

+
+ +
+
+MDAnalysis.lib.util.get_ext(filename)[source]
+

Return the lower-cased extension of filename without a leading dot.

+
+
Parameters
+

filename (str) –

+
+
Returns
+

    +
  • root (str)

  • +
  • ext (str)

  • +
+

+
+
+
+ +
+
+MDAnalysis.lib.util.check_compressed_format(root, ext)[source]
+

Check if this is a supported gzipped/bzip2ed file format and return UPPERCASE format.

+
+
Parameters
+
    +
  • root (str) – path of a file, without extension ext

  • +
  • ext (str) – extension (currently only “bz2” and “gz” are recognized as compressed formats)

  • +
+
+
Returns
+

format – upper case format extension if the compression can be handled by +openany()

+
+
Return type
+

str

+
+
+
+

See also

+
+
openany

function that is used to open and decompress formats on the fly; only compression formats implemented in openany() are recognized

+
+
+
+
+ +
+
+MDAnalysis.lib.util.format_from_filename_extension(filename)[source]
+

Guess file format from the file extension.

+
+
Parameters
+

filename (str) –

+
+
Returns
+

format

+
+
Return type
+

str

+
+
Raises
+

TypeError – if the file format cannot be determined

+
+
+
+ +
+
+MDAnalysis.lib.util.guess_format(filename)[source]
+

Return the format of filename

+

The current heuristic simply looks at the filename extension and can work +around compressed format extensions.

+
+
Parameters
+

filename (str or stream) – path to the file or a stream, in which case filename.name is looked +at for a hint to the format

+
+
Returns
+

format – format specifier (upper case)

+
+
Return type
+

str

+
+
Raises
+

ValueError – if the heuristics are insufficient to guess a supported format

+
+
+
+

New in version 0.11.0: Moved into lib.util

+
+
+ +
+
+

13.2.10.2. Streams

+

Many of the readers are not restricted to just reading files. They can +also use gzip-compressed or bzip2-compressed files (through the +internal use of openany()). It is also possible to provide more +general streams as inputs, such as a io.StringIO +instances (essentially, a memory buffer) by wrapping these instances +into a NamedStream. This NamedStream can then be +used in place of an ordinary file name (typically, with a +class:~MDAnalysis.core.universe.Universe but it is also possible to +write to such a stream using MDAnalysis.Writer()).

+

In the following example, we use a PDB stored as a string pdb_s:

+
import MDAnalysis
+from MDAnalysis.lib.util import NamedStream
+from io import StringIO
+
+pdb_s = "TITLE     Lonely Ion\\nATOM      1  NA  NA+     1      81.260  64.982  10.926  1.00  0.00\\n"
+u = MDAnalysis.Universe(NamedStream(StringIO(pdb_s), "ion.pdb"))
+print(u)
+#  <Universe with 1 atoms>
+print(u.atoms.positions)
+# [[ 81.26000214  64.98200226  10.92599964]]
+
+
+

It is important to provide a proper pseudo file name with the correct extension +(“.pdb”) to NamedStream because the file type recognition uses the +extension of the file name to determine the file format or alternatively +provide the format="pdb" keyword argument to the +Universe.

+

The use of streams becomes more interesting when MDAnalysis is used as glue +between different analysis packages and when one can arrange things so that +intermediate frames (typically in the PDB format) are not written to disk but +remain in memory via e.g. io.StringIO buffers.

+
+

Note

+

A remote connection created by urllib2.urlopen() is not seekable +and therefore will often not work as an input. But try it…

+
+
+
+class MDAnalysis.lib.util.NamedStream(stream, filename, reset=True, close=False)[source]
+

Stream that also provides a (fake) name.

+

By wrapping a stream stream in this class, it can be passed to +code that uses inspection of the filename to make decisions. For +instance. os.path.split() will work correctly on a +NamedStream.

+

The class can be used as a context manager.

+

NamedStream is derived from io.IOBase (to indicate that +it is a stream). Many operations that normally expect a string will also +work with a NamedStream; for instance, most of the functions in +os.path will work with the exception of os.path.expandvars() +and os.path.expanduser(), which will return the NamedStream +itself instead of a string if no substitutions were made.

+

Example

+

Wrap a io.StringIO instance to write to:

+
from io import StringIO
+import os.path
+stream = StringIO()
+f = NamedStream(stream, "output.pdb")
+print(os.path.splitext(f))
+
+
+

Wrap a file instance to read from:

+
stream = open("input.pdb")
+f = NamedStream(stream, stream.name)
+
+
+

Use as a context manager (closes stream automatically when the +with block is left):

+
with NamedStream(open("input.pdb"), "input.pdb") as f:
+   # use f
+   print f.closed  # --> False
+   # ...
+print f.closed     # --> True
+
+
+
+

Note

+

This class uses its own __getitem__() method so if stream +implements stream.__getitem__() then that will be masked and +this class should not be used.

+
+
+

Warning

+

By default, NamedStream.close() will not close the +stream but instead reset() it to the +beginning. 1 Provide the force=True keyword +to NamedStream.close() to always close the stream.

+
+

Initialize the NamedStream from a stream and give it a name.

+

The constructor attempts to rewind the stream to the beginning unless +the keyword reset is set to False. If rewinding fails, a +MDAnalysis.StreamWarning is issued.

+
+
Parameters
+
    +
  • stream (stream) – an open stream (e.g. file or io.StringIO)

  • +
  • filename (str) – the filename that should be associated with the stream

  • +
  • reset (bool (optional)) – start the stream from the beginning (either reset() or seek()) +when the class instance is constructed

  • +
  • close (bool (optional)) – close the stream when a with block exits or when +close() is called; note that the default is not to close +the stream

  • +
+
+
+

Notes

+

By default, this stream will not be closed by with and +close() (see there) unless the close keyword is set to +True.

+
+

New in version 0.9.0.

+
+
+
+close(force=False)[source]
+

Reset or close the stream.

+

If NamedStream.close_stream is set to False (the default) +then this method will not close the stream and only reset() it.

+

If the force = True keyword is provided, the stream will be +closed.

+
+

Note

+

This close() method is non-standard. del NamedStream +always closes the underlying stream.

+
+
+ +
+
+property closed
+

True if stream is closed.

+
+ +
+
+fileno()[source]
+

Return the underlying file descriptor (an integer) of the stream if it exists.

+

An IOError is raised if the IO object does not use a file descriptor.

+
+ +
+
+flush()[source]
+

Flush the write buffers of the stream if applicable.

+

This does nothing for read-only and non-blocking streams. For file +objects one also needs to call os.fsync() to write contents to +disk.

+
+ +
+
+readable()[source]
+

Return True if the stream can be read from.

+

If False, read() will raise IOError.

+
+ +
+
+readline()[source]
+

Read and return a line from the stream.

+

If size is specified, at most size bytes will be read.

+

The line terminator is always b’n’ for binary files; for text +files, the newlines argument to open can be used to select the line +terminator(s) recognized.

+
+ +
+
+reset()[source]
+

Move to the beginning of the stream

+
+ +
+
+seek(offset, whence=0)[source]
+

Change the stream position to the given byte offset .

+
+
Parameters
+
    +
  • offset (int) – offset is interpreted relative to the position +indicated by whence.

  • +
  • whence ({0, 1, 2} (optional)) –

    Values for whence are:

    +
    +
      +
    • io.SEEK_SET or 0 – start of the stream (the default); offset +should be zero or positive

    • +
    • io.SEEK_CUR or 1 – current stream position; offset may be +negative

    • +
    • io.SEEK_END or 2 – end of the stream; offset is usually +negative

    • +
    +
    +

  • +
+
+
Returns
+

the new absolute position in bytes.

+
+
Return type
+

int

+
+
+
+ +
+
+seekable()[source]
+

Return True if the stream supports random access.

+

If False, seek(), tell() and truncate() will +raise IOError.

+
+ +
+
+tell()[source]
+

Return the current stream position.

+
+ +
+
+truncate(*size)[source]
+

Truncate the stream’s size to size.

+
+
Parameters
+

size (int (optional)) – The size defaults to the current position (if no size argument +is supplied). The current file position is not changed.

+
+
+
+ +
+
+writable()[source]
+

Return True if the stream can be written to.

+

If False, write() will raise IOError.

+
+ +
+ +
+
+MDAnalysis.lib.util.isstream(obj)[source]
+

Detect if obj is a stream.

+

We consider anything a stream that has the methods

+
    +
  • close()

  • +
+

and either set of the following

+
    +
  • read(), readline(), readlines()

  • +
  • write(), writeline(), writelines()

  • +
+
+
Parameters
+

obj (stream or str) –

+
+
Returns
+

True if obj is a stream, False otherwise

+
+
Return type
+

bool

+
+
+
+

See also

+

io

+
+
+

New in version 0.9.0.

+
+
+ +
+
+

13.2.10.3. Containers and lists

+
+
+MDAnalysis.lib.util.iterable(obj)[source]
+

Returns True if obj can be iterated over and is not a string +nor a NamedStream

+
+ +
+
+MDAnalysis.lib.util.asiterable(obj)[source]
+

Returns obj so that it can be iterated over.

+

A string is not detected as and iterable and is wrapped into a list +with a single element.

+
+

See also

+

iterable

+
+
+ +
+
+MDAnalysis.lib.util.hasmethod(obj, m)[source]
+

Return True if object obj contains the method m.

+
+ +
+
+class MDAnalysis.lib.util.Namespace[source]
+

Class to allow storing attributes in new namespace.

+
+ +
+
+

13.2.10.4. Arrays

+
+
+MDAnalysis.lib.util.unique_int_1d(values)
+

Find the unique elements of a 1D array of integers.

+

This function is optimal on sorted arrays.

+
+
Parameters
+

values (numpy.ndarray) – 1D array of dtype numpy.int64 in which to find the unique values.

+
+
Returns
+

A deduplicated copy of values.

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.util.unique_rows(arr, return_index=False)[source]
+

Return the unique rows of an array.

+
+
Parameters
+
    +
  • arr (numpy.ndarray) – Array of shape (n1, m).

  • +
  • return_index (bool, optional) – If True, returns indices of array that formed answer (see +numpy.unique())

  • +
+
+
Returns
+

    +
  • unique_rows (numpy.ndarray) – Array of shape (n2, m) containing only the unique rows of arr.

  • +
  • r_idx (numpy.ndarray (optional)) – Array containing the corresponding row indices (if return_index +is True).

  • +
+

+
+
+

Examples

+

Remove dupicate rows from an array:

+
>>> import numpy as np
+>>> from MDAnalysis.lib.util import unique_rows
+>>> a = np.array([[0, 1], [1, 2], [1, 2], [0, 1], [2, 3]])
+>>> b = unique_rows(a)
+>>> b
+array([[0, 1],
+       [1, 2],
+       [2, 3]])
+
+
+
+

See also

+

numpy.unique

+
+
+ +
+
+MDAnalysis.lib.util.blocks_of(a, n, m)[source]
+

Extract a view of (n, m) blocks along the diagonal of the array a.

+
+
Parameters
+
    +
  • a (numpy.ndarray) – Input array, must be C contiguous and at least 2D.

  • +
  • n (int) – Size of block in first dimension.

  • +
  • m (int) – Size of block in second dimension.

  • +
+
+
Returns
+

view – A view of the original array with shape (nblocks, n, m), where +nblocks is the number of times the miniblocks of shape (n, m) +fit in the original.

+
+
Return type
+

numpy.ndarray

+
+
Raises
+

ValueError – If the supplied n and m don’t divide a into an integer number + of blocks or if a is not C contiguous.

+
+
+

Examples

+
>>> import numpy as np
+>>> from MDAnalysis.lib.util import blocks_of
+>>> arr = np.arange(16).reshape(4, 4)
+>>> view = blocks_of(arr, 2, 2)
+>>> view[:] = 100
+>>> arr
+array([[100, 100,   2,   3],
+       [100, 100,   6,   7],
+       [  8,   9, 100, 100],
+       [ 12,  13, 100, 100]])
+
+
+

Notes

+

n, m must divide a into an identical integer number of blocks. Please +note that if the block size is larger than the input array, this number will +be zero, resulting in an empty view!

+

Uses strides and therefore requires that the array is C contiguous.

+

Returns a view, so editing this modifies the original array.

+
+

New in version 0.12.0.

+
+
+ +
+
+MDAnalysis.lib.util.group_same_or_consecutive_integers(arr)[source]
+

Split an array of integers into a list of same or consecutive +sequences.

+
+
Parameters
+

arr (numpy.ndarray) –

+
+
Returns
+

    +
  • list of numpy.ndarray

  • +
  • Examples

  • +
  • >>> import numpy as np

  • +
  • >>> arr = np.array([ 2, 3, 4, 7, 8, 9, 10, 11, 15, 16])

  • +
  • >>> group_same_or_consecutive_integers(arr)

  • +
  • [array([2, 3, 4]), array([ 7, 8, 9, 10, 11]), array([15, 16])]

  • +
+

+
+
+
+ +
+
+

13.2.10.5. File parsing

+
+
+class MDAnalysis.lib.util.FORTRANReader(fmt)[source]
+

FORTRANReader provides a method to parse FORTRAN formatted lines in a file.

+

The contents of lines in a file can be parsed according to FORTRAN format +edit descriptors (see Fortran Formats for the syntax).

+

Only simple one-character specifiers supported here: I F E A X (see +FORTRAN_format_regex).

+

Strings are stripped of leading and trailing white space.

+

Set up the reader with the FORTRAN format string.

+

The string fmt should look like ‘2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10’.

+
+
Parameters
+

fmt (str) – FORTRAN format edit descriptor for a line as described in Fortran +Formats

+
+
+

Example

+

Parsing of a standard CRD file:

+
atomformat = FORTRANReader('2I10,2X,A8,2X,A8,3F20.10,2X,A8,2X,A8,F20.10')
+for line in open('coordinates.crd'):
+    serial,TotRes,resName,name,x,y,z,chainID,resSeq,tempFactor = atomformat.read(line)
+
+
+
+
+number_of_matches(line)[source]
+

Return how many format entries could be populated with legal values.

+
+ +
+
+parse_FORTRAN_format(edit_descriptor)[source]
+

Parse the descriptor.

+
+
Parameters
+

edit_descriptor (str) – FORTRAN format edit descriptor

+
+
Returns
+

dict with totallength (in chars), repeat, length, format, decimals

+
+
Return type
+

dict

+
+
Raises
+

ValueError – The edit_descriptor is not recognized and cannot be parsed

+
+
+
+

Note

+

Specifiers: L ES EN T TL TR / r S SP SS BN BZ are not supported, +and neither are the scientific notation Ew.dEe forms.

+
+
+ +
+
+read(line)[source]
+

Parse line according to the format string and return list of values.

+

Values are converted to Python types according to the format specifier.

+
+
Parameters
+

line (str) –

+
+
Returns
+

list of entries with appropriate types

+
+
Return type
+

list

+
+
Raises
+

ValueError – Any of the conversions cannot be made (e.g. space for an int)

+
+
+ +
+ +
+ +
+
+MDAnalysis.lib.util.FORTRAN_format_regex = '(?P<repeat>\\d+?)(?P<format>[IFEAX])(?P<numfmt>(?P<length>\\d+)(\\.(?P<decimals>\\d+))?)?'
+

Regular expresssion (see re) to parse a simple FORTRAN edit descriptor. +(?P<repeat>\d?)(?P<format>[IFELAX])(?P<numfmt>(?P<length>\d+)(\.(?P<decimals>\d+))?)?

+
+ +
+
+

13.2.10.6. Data manipulation and handling

+
+
+MDAnalysis.lib.util.fixedwidth_bins(delta, xmin, xmax)[source]
+

Return bins of width delta that cover xmin, xmax (or a larger range).

+

The bin parameters are computed such that the bin size delta is +guaranteed. In order to achieve this, the range [xmin, xmax] can be +increased.

+

Bins can be calculated for 1D data (then all parameters are simple floats) +or nD data (then parameters are supplied as arrays, with each entry +correpsonding to one dimension).

+
+
Parameters
+
    +
  • delta (float or array_like) – desired spacing of the bins

  • +
  • xmin (float or array_like) – lower bound (left boundary of first bin)

  • +
  • xmax (float or array_like) – upper bound (right boundary of last bin)

  • +
+
+
Returns
+

The dict contains ‘Nbins’, ‘delta’, ‘min’, and ‘max’; these are either +floats or arrays, depending on the input.

+
+
Return type
+

dict

+
+
+

Example

+

Use with numpy.histogram():

+
B = fixedwidth_bins(delta, xmin, xmax)
+h, e = np.histogram(data, bins=B['Nbins'], range=(B['min'], B['max']))
+
+
+
+ +
+
+MDAnalysis.lib.util.get_weights(atoms, weights)[source]
+

Check that a weights argument is compatible with atoms.

+
+
Parameters
+
    +
  • atoms (AtomGroup or array_like) – The atoms that the weights should be applied to. Typically this +is a AtomGroup but because only the length is compared, +any sequence for which len(atoms) is defined is acceptable.

  • +
  • weights ({"mass", None} or array_like) – All MDAnalysis functions or classes understand “mass” and will then +use atoms.masses. None indicates equal weights for all atoms. +Using an array_like assigns a custom weight to each element of +atoms.

  • +
+
+
Returns
+

weights – If “mass” was selected, atoms.masses is returned, otherwise the +value of weights (which can be None).

+
+
Return type
+

array_like or None

+
+
Raises
+
    +
  • TypeError – If weights is not one of the allowed values or if “mass” is + selected but atoms.masses is not available.

  • +
  • ValueError – If weights is not a 1D array with the same length as + atoms, then the exception is raised. TypeError is + also raised if atoms.masses is not defined.

  • +
+
+
+
+ +
+
+MDAnalysis.lib.util.ltruncate_int(value, ndigits)[source]
+

Truncate an integer, retaining least significant digits

+
+
Parameters
+
    +
  • value (int) – value to truncate

  • +
  • ndigits (int) – number of digits to keep

  • +
+
+
Returns
+

truncated – only the ndigits least significant digits from value

+
+
Return type
+

int

+
+
+

Examples

+
>>> from MDAnalysis.lib.util import ltruncate_int
+>>> ltruncate_int(123, 2)
+23
+>>> ltruncate_int(1234, 5)
+1234
+
+
+
+ +
+
+MDAnalysis.lib.util.flatten_dict(d, parent_key=())[source]
+

Flatten a nested dict d into a shallow dict with tuples as keys.

+
+
Parameters
+

d (dict) –

+
+
Return type
+

dict

+
+
+
+

Note

+

Based on https://stackoverflow.com/a/6027615/ +by user https://stackoverflow.com/users/1897/imran

+
+

New in version 0.18.0.

+
+
+
+ +
+
+

13.2.10.7. Strings

+
+
+MDAnalysis.lib.util.convert_aa_code(x)[source]
+

Converts between 3-letter and 1-letter amino acid codes.

+
+
Parameters
+

x (str) – 1-letter or 3-letter amino acid code

+
+
Returns
+

3-letter or 1-letter amino acid code

+
+
Return type
+

str

+
+
Raises
+

ValueError – No conversion can be made; the amino acid code is not defined.

+
+
+
+

Note

+

Data are defined in amino_acid_codes and inverse_aa_codes.

+
+
+ +
+
+MDAnalysis.lib.util.parse_residue(residue)[source]
+

Process residue string.

+
+
Parameters
+

residue (str) – The residue must contain a 1-letter or 3-letter or +4-letter residue string, a number (the resid) and +optionally an atom identifier, which must be separate +from the residue with a colon (“:”). White space is +allowed in between.

+
+
Returns
+

(3-letter aa string, resid, atomname); known 1-letter +aa codes are converted to 3-letter codes

+
+
Return type
+

tuple

+
+
+

Examples

+
    +
  • “LYS300:HZ1” –> (“LYS”, 300, “HZ1”)

  • +
  • “K300:HZ1” –> (“LYS”, 300, “HZ1”)

  • +
  • “K300” –> (“LYS”, 300, None)

  • +
  • “4GB300:H6O” –> (“4GB”, 300, “H6O”)

  • +
  • “4GB300” –> (“4GB”, 300, None)

  • +
+
+ +
+
+MDAnalysis.lib.util.conv_float(s)[source]
+

Convert an object s to float if possible.

+

Function to be passed into map() or a list comprehension. If +the argument can be interpreted as a float it is converted, +otherwise the original object is passed back.

+
+ +
+
+

13.2.10.8. Class decorators

+
+
+MDAnalysis.lib.util.cached(key, universe_validation=False)[source]
+

Cache a property within a class.

+

Requires the Class to have a cache dict _cache and, with +universe_validation, a universe with a cache dict _cache.

+

Example

+

How to add a cache for a variable to a class by using the @cached +decorator:

+
class A(object):
+    def__init__(self):
+        self._cache = dict()
+
+    @property
+    @cached('keyname')
+    def size(self):
+        # This code gets run only if the lookup of keyname fails
+        # After this code has been run once, the result is stored in
+        # _cache with the key: 'keyname'
+        return 10.0
+
+    @property
+    @cached('keyname', universe_validation=True)
+    def othersize(self):
+        # This code gets run only if the lookup
+        # id(self) is not in the validation set under
+        # self.universe._cache['_valid']['keyname']
+        # After this code has been run once, id(self) is added to that
+        # set. The validation set can be centrally invalidated at the
+        # universe level (say, if a topology change invalidates specific
+        # caches).
+        return 20.0
+
+
+
+

New in version 0.9.0.

+
+
+ +
+
+MDAnalysis.lib.util.store_init_arguments(func)[source]
+

Decorator to store arguments passed to the init method of a class.

+

Arguments are stored as a dictionary in cls._kwargs.

+

Notes

+
    +
  • Only does a shallow copy, if the arguments are changed +by the class after passing through the decorator this will be +reflected in the stored arguments.

  • +
  • If not empty, args is not unpacked and stored as-is in the +dictionary. If no args are passed, then no arg entry will be +stored in the dictionary.

  • +
+
+

New in version 2.2.0.

+
+
+ +
+
+

13.2.10.9. Function decorators

+
+
+MDAnalysis.lib.util.static_variables(**kwargs)[source]
+

Decorator equipping functions or methods with static variables.

+

Static variables are declared and initialized by supplying keyword arguments +and initial values to the decorator.

+

Example

+
>>> from MDAnalysis.lib.util import static_variables
+>>> @static_variables(msg='foo calls', calls=0)
+... def foo():
+...     foo.calls += 1
+...     print("{}: {}".format(foo.msg, foo.calls))
+...
+>>> foo()
+foo calls: 1
+>>> foo()
+foo calls: 2
+
+
+ +
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.util.warn_if_not_unique(groupmethod)[source]
+

Decorator triggering a DuplicateWarning +if the underlying group is not unique.

+

Assures that during execution of the decorated method only the first of +potentially multiple warnings concerning the uniqueness of groups is shown.

+
+
Raises
+

DuplicateWarning – If the AtomGroup, + ResidueGroup, or + SegmentGroup of which the decorated + method is a member contains duplicates.

+
+
+
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.util.check_coords(*coord_names, **options)[source]
+

Decorator for automated coordinate array checking.

+

This decorator is intended for use especially in +MDAnalysis.lib.distances. +It takes an arbitrary number of positional arguments which must correspond +to names of positional arguments of the decorated function. +It then checks if the corresponding values are valid coordinate arrays or +an AtomGroup. +If the input is an array and all these arrays are single coordinates +(i.e., their shape is (3,)), the decorated function can optionally +return a single coordinate (or angle) instead of an array of coordinates +(or angles). This can be used to enable computations of single observables +using functions originally designed to accept only 2-d coordinate arrays.

+

If the input is an AtomGroup it is +converted into its corresponding position array via a call to +AtomGroup.positions.

+

The checks performed on each individual coordinate array are:

+
    +
  • Check that coordinate arrays are of type numpy.ndarray.

  • +
  • Check that coordinate arrays have a shape of (n, 3) (or (3,) if +single coordinates are allowed; see keyword argument allow_single).

  • +
  • Automatic dtype conversion to numpy.float32.

  • +
  • Optional replacement by a copy; see keyword argument enforce_copy .

  • +
  • If coordinate arrays aren’t C-contiguous, they will be automatically +replaced by a C-contiguous copy.

  • +
  • Optional check for equal length of all coordinate arrays; see optional +keyword argument check_lengths_match.

  • +
+
+
Parameters
+
    +
  • *coord_names (tuple) – Arbitrary number of strings corresponding to names of positional +arguments of the decorated function.

  • +
  • **options (dict, optional) –

      +
    • enforce_copy (bool, optional) – Enforce working on a +copy of the coordinate arrays. This is useful to ensure that the input +arrays are left unchanged. Default: True

    • +
    • enforce_dtype (bool, optional) – Enforce a conversion +to float32. Default: True

    • +
    • allow_single (bool, optional) – Allow the input +coordinate array to be a single coordinate with shape (3,).

    • +
    • convert_single (bool, optional) – If True, single +coordinate arrays will be converted to have a shape of (1, 3). +Only has an effect if allow_single is True. Default: True

    • +
    • reduce_result_if_single (bool, optional) – If True +and all input coordinates are single, a decorated function func +will return func()[0] instead of func(). Only has an effect if +allow_single is True. Default: True

    • +
    • check_lengths_match (bool, optional) – If True, a +ValueError is raised if not all coordinate arrays contain the +same number of coordinates. Default: True

    • +
    • allow_atomgroup (bool, optional) – If False, a +TypeError is raised if an AtomGroup is supplied +Default: False

    • +
    +

  • +
+
+
Raises
+
    +
  • ValueError – If the decorator is used without positional arguments (for development + purposes only). + + If any of the positional arguments supplied to the decorator doesn’t + correspond to a name of any of the decorated function’s positional + arguments. + + If any of the coordinate arrays has a wrong shape.

  • +
  • TypeError – If any of the coordinate arrays is not a numpy.ndarray or an + AtomGroup. + + If the dtype of any of the coordinate arrays is not convertible to + numpy.float32.

  • +
+
+
+

Example

+
>>> import numpy as np
+>>> import MDAnalysis as mda
+>>> from MDAnalysis.tests.datafiles import PSF, DCD
+>>> from MDAnalysis.lib.util import check_coords
+>>> @check_coords('coords1', 'coords2', allow_atomgroup=True)
+... def coordsum(coords1, coords2):
+...     assert coords1.dtype == np.float32
+...     assert coords2.flags['C_CONTIGUOUS']
+...     return coords1 + coords2
+...
+>>> # automatic dtype conversion:
+>>> coordsum(np.zeros(3, dtype=np.int64), np.ones(3))
+array([1., 1., 1.], dtype=float32)
+>>>
+>>> # automatic handling of non-contiguous arrays:
+>>> coordsum(np.zeros(3), np.ones(6)[::2])
+array([1., 1., 1.], dtype=float32)
+>>>
+>>> # automatic handling of AtomGroups
+>>> u = mda.Universe(PSF, DCD)
+>>> try:
+...     coordsum(u.atoms, u.select_atoms("index 1 to 10"))
+... except ValueError as err:
+...     err
+ValueError('coordsum(): coords1, coords2 must contain the same number of coordinates, got [3341, 10].')
+>>>
+>>> # automatic shape checking:
+>>> try:
+...     coordsum(np.zeros(3), np.ones(6))
+... except ValueError as err:
+...     err
+ValueError('coordsum(): coords2.shape must be (3,) or (n, 3), got (6,)')
+
+
+
+

New in version 0.19.0.

+
+
+

Changed in version 2.3.0: Can now accept an AtomGroup as input, and added option +allow_atomgroup with default False to retain old behaviour

+
+
+ +
+
+MDAnalysis.lib.util.check_atomgroup_not_empty(groupmethod)[source]
+

Decorator triggering a ValueError if the underlying group is empty.

+

Avoids downstream errors in computing properties of empty atomgroups.

+
+
Raises
+

ValueError – If the input AtomGroup, + of a decorated method is empty.

+
+
+
+

New in version 2.4.0.

+
+
+ +
+
+

13.2.10.10. Code management

+
+
+MDAnalysis.lib.util.deprecate(*args, **kwargs)[source]
+

Issues a DeprecationWarning, adds warning to old_name’s +docstring, rebinds old_name.__name__ and returns the new +function object.

+

This function may also be used as a decorator.

+

It adds a restructured text .. deprecated:: release block with +the sphinx deprecated role to the end of the docs. The message +is added under the deprecation block and contains the release in +which the function was deprecated.

+
+
Parameters
+
    +
  • func (function) – The function to be deprecated.

  • +
  • old_name (str, optional) – The name of the function to be deprecated. Default is None, in +which case the name of func is used.

  • +
  • new_name (str, optional) – The new name for the function. Default is None, in which case the +deprecation message is that old_name is deprecated. If given, the +deprecation message is that old_name is deprecated and new_name +should be used instead.

  • +
  • release (str) – Release in which the function was deprecated. This is given as +a keyword argument for technical reasons but is required; a +ValueError is raised if it is missing.

  • +
  • remove (str, optional) – Release for which removal of the feature is planned.

  • +
  • message (str, optional) – Additional explanation of the deprecation. Displayed in the +docstring after the warning.

  • +
+
+
Returns
+

old_func – The deprecated function.

+
+
Return type
+

function

+
+
+

Examples

+

When deprecate() is used as a function as in the following +example,

+
oldfunc = deprecate(func, release="0.19.0", remove="1.0",
+                    message="Do it yourself instead.")
+
+
+

then oldfunc will return a value after printing +DeprecationWarning; func is still available as it was +before.

+

When used as a decorator, func will be changed and issue the +warning and contain the deprecation note in the do string.

+
@deprecate(release="0.19.0", remove="1.0",
+           message="Do it yourself instead.")
+def func():
+    \"\"\"Just pass\"\"\"
+    pass
+
+
+

The resulting doc string (help(func)) will look like:

+
`func` is deprecated!
+
+Just pass.
+
+.. deprecated:: 0.19.0
+   Do it yourself instead.
+   `func` will be removed in 1.0.
+
+
+

(It is possible but confusing to change the name of func with +the decorator so it is not recommended to use the new_func +keyword argument with the decorator.)

+
+

New in version 0.19.0.

+
+
+ +
+
+class MDAnalysis.lib.util._Deprecate(old_name=None, new_name=None, release=None, remove=None, message=None)[source]
+

Decorator class to deprecate old functions.

+

Refer to deprecate for details.

+
+

See also

+

deprecate

+
+
+

New in version 0.19.0.

+
+
+ +
+
+MDAnalysis.lib.util.dedent_docstring(text)[source]
+

Dedent typical python doc string.

+
+
Parameters
+

text (str) – string, typically something like func.__doc__.

+
+
Returns
+

string with the leading common whitespace removed from each +line

+
+
Return type
+

str

+
+
+
+

See also

+

textwrap.dedent

+
+
+

New in version 0.19.0.

+
+
+ +
+
+

13.2.10.11. Data format checks

+
+
+MDAnalysis.lib.util.check_box(box)[source]
+

Take a box input and deduce what type of system it represents based on +the shape of the array and whether all angles are 90 degrees.

+
+
Parameters
+

box (array_like) – The unitcell dimensions of the system, which can be orthogonal or +triclinic and must be provided in the same format as returned by +MDAnalysis.coordinates.timestep.Timestep.dimensions: +[lx, ly, lz, alpha, beta, gamma].

+
+
Returns
+

    +
  • boxtype ({'ortho', 'tri_vecs'}) – String indicating the box type (orthogonal or triclinic).

  • +
  • checked_box (numpy.ndarray) –

    +
    +
    Array of dtype numpy.float32 containing box information:
      +
    • If boxtype is 'ortho', cecked_box will have the shape (3,) +containing the x-, y-, and z-dimensions of the orthogonal box.

    • +
    • If boxtype is 'tri_vecs', cecked_box will have the shape +(3, 3) containing the triclinic box vectors in a lower triangular +matrix as returned by +triclinic_vectors().

    • +
    +
    +
    +
  • +
+

+
+
Raises
+

ValueError – If box is not of the form [lx, ly, lz, alpha, beta, gamma] + or contains data that is not convertible to numpy.float32.

+
+
+ +
+ +

Footnotes

+
+
1
+

The reason why NamedStream.close() does +not close a stream by default (but just rewinds it to the +beginning) is so that one can use the class NamedStream as +a drop-in replacement for file names, which are often re-opened +(e.g. when the same file is used as a topology and coordinate file +or when repeatedly iterating through a trajectory in some +implementations). The close=True keyword can be supplied in +order to make NamedStream.close() actually close the +underlying stream and NamedStream.close(force=True) will also +close it.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/lib_modules.html b/2.7.0-dev0/documentation_pages/lib_modules.html new file mode 100644 index 0000000000..f25b7ead6f --- /dev/null +++ b/2.7.0-dev0/documentation_pages/lib_modules.html @@ -0,0 +1,272 @@ + + + + + + + 13. Library functions — MDAnalysis.lib — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

13. Library functions — MDAnalysis.lib

+

MDAnalysis.lib contains code that is independent of the +specific MDAnalysis framework, such as fast calculators for distances +or simple logging support. Modules do not depend on other code inside +MDAnalysis except in MDAnalysis.lib itself (and possibly in +MDAnalysis.exceptions) and thus can be easily imported +elsewhere.

+
+

13.1. Overview

+

MDAnalysis.lib.distances contains many high performance maths +functions. Most of them have the keyword backend that allows one to +either select serial (single threaded) code (backend="serial) or +to use parallelized versions (e.g. backend="OpenMP" for OpenMP +parallelism).

+

MDAnalysis.lib.transformations contains a multitude of +matrix operations for manipulating coordinate data.

+

MDAnalysis.lib.qcprot contains a fast implementation of +superposition by minimizing the RMSD.

+

MDAnalysis.lib.util contains various file and string utility +functions whereas mathematical functions are to be found in +MDAnalysis.lib.mdamath.

+

A number of modules are concerned with finding +neighbors. MDAnalysis.lib.NeighborSearch contains high-level +classes to do neighbor searches with MDAnalysis +objects. MDAnalysis.lib.nsgrid contains a fast implementation +of grid neighbor search whereas MDAnalysis.lib.pkdtree uses +KDTrees (with periodic images) for neighbor searching. Some of the +functions in MDAnalysis.lib.distances user either of these +algorithms to speed up distance calculations.

+
+
+

13.2. List of modules

+ +
+
+

13.3. Low level file formats

+

The modules in MDAnalysis.lib.formats contain code to access various file +formats in a way that is independent from other MDAnalysis functionality +(i.e., they do not use any classes from MDAnalysis.core or +MDAnalysis.topology). This low-level code is used in the +MDAnalysis.coordinates module but can also be re-used by other +Python-based projects.

+ +
+
+

13.4. Libmdanalysis

+

The __init__.pxd file in MDAnalysis.lib.libmdanalysis provides a +single place to cimport MDAnalysis’ public Cython headers. This is recommended +for advanced developers only.

+

For example, imagine we are writing a Cython extension module in +MDAnalysis.lib and we would like to make a function that creates a +MDAnalysis.coordinates.timestep.Timestep

+
from MDAnalysis.lib.libmdanalysis cimport timestep
+# or we could use the relative cimport
+# from .libmdanalysis cimport timestep
+
+cdef timestep.Timestep make_timestep(int natoms):
+   cdef timestep.Timestep ts = timestep.Timestep(natoms)
+   return ts
+
+
+

Currently modules that are exposed as public Cython headers are:

+ +

For more details consult the source MDAnalysis.lib.libmdanalysis.__init__.pxd

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/overview.html b/2.7.0-dev0/documentation_pages/overview.html new file mode 100644 index 0000000000..d28499cd3e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/overview.html @@ -0,0 +1,323 @@ + + + + + + + 1. Overview over MDAnalysis — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

1. Overview over MDAnalysis

+

MDAnalysis is a Python package that provides classes to access +data in molecular dynamics trajectories. It is object oriented so it +treats atoms, groups of atoms, trajectories, etc as different +objects. Each object has a number of operations defined on itself +(also known as “methods”) and also contains values describing the +object (“attributes”). For example, a +AtomGroup object has a +center_of_mass() method that +returns the center of mass of the group of atoms. It also contains an +attribute called residues +that lists all the residues that belong to the group. Using methods +such as select_atoms() +(which uses CHARMM-style atom Selection commands) one +can create new objects (in this case, another +AtomGroup).

+

A typical usage pattern is to iterate through a trajectory and analyze +coordinates for every frame. In the following example the end-to-end distance +of a protein and the radius of gyration of the backbone atoms are calculated:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PSF,DCD  # test trajectory
+import numpy.linalg
+u = mda.Universe(PSF,DCD)  # always start with a Universe
+nterm = u.select_atoms('segid 4AKE and name N')[0]  # can access structure via segid (s4AKE) and atom name
+cterm = u.select_atoms('segid 4AKE and name C')[-1]  # ... takes the last atom named 'C'
+bb = u.select_atoms('protein and backbone')  # a selection (a AtomGroup)
+for ts in u.trajectory:  # iterate through all frames
+    r = cterm.position - nterm.position  # end-to-end vector from atom positions
+    d = numpy.linalg.norm(r)   # end-to-end distance
+    rgyr = bb.radius_of_gyration()  # method of a AtomGroup; updates with each frame
+    print(f"frame = {ts.frame}: d = {d} Angstroem, Rgyr = {rgyr} Angstroem")
+
+
+
+

1.1. Using MDAnalysis in python

+

If you’ve installed MDAnalysis in the standard python modules location, load +from within the interpreter:

+
from MDAnalysis import *
+
+
+

or

+
import MDAnalysis as mda
+
+
+

The idea behind MDAnalysis is to get trajectory data into NumPy +numpy.ndarray arrays, where it can then be easily manipulated using +all the power in NumPy and SciPy.

+

MDAnalysis works well both in scripts and in interactive use. The developers +very much recommend using MDAnalysis from within the IPython Python shell. It +allows one to interactively explore the objects (using TAB-completion and +online help), do analysis and immediately plot results. The examples in this manual +are typically run from an interactive ipython session.

+

Invariably, a MDAnalysis session starts with loading data into the +Universe class (which can be accessed +as MDAnalysis.Universe):

+
import MDAnalysis as mda
+universe = mda.Universe(topology, trajectory)
+
+
+
    +
  • The topology file lists the atoms and residues (and also their +connectivity). It can be a CHARMM/XPLOR/NAMD PSF file or a coordinate file +such as a Protein Databank Brookhaven PDB file, a CHARMM card coordinate file +(CRD), or a GROMOS/Gromacs GRO file.

  • +
  • The trajectory contains a list of coordinates in the order defined in the +topology. It can either be a single frame (PDB, CRD, and GRO are all read) +or a time series of coordinate frames such as a CHARMM/NAMD/LAMMPS DCD +binary file, a Gromacs XTC/TRR trajectory, or a XYZ trajectory (possibly +compressed with gzip or bzip2).

  • +
+

For the remainder of this introduction we are using a short example trajectory +that is provided with MDAnalysis (as part of the MDAnalysis test suite). The +trajectory is loaded with

+
>>> from MDAnalysis import Universe
+>>> from MDAnalysis.tests.datafiles import PSF,DCD
+>>> u = Universe(PSF, DCD)
+
+
+

(The >>> signs are the Python input prompt and are not to be typed; they +just make clear in the examples what is input and what is output.)

+

The Universe contains a number of important attributes, +the most important ones of which is +atoms:

+
>>> print(u.atoms)
+<AtomGroup with 3341 atoms>
+
+
+

Universe.atoms is a +AtomGroup and can be thought of as +list consisting of Atom +objects. The Atom is the +elementary and fundamental object in MDAnalysis.

+

The MDAnalysis.Universe.trajectory attribute gives access to the coordinates +over time:

+
>>> print(u.trajectory)
+< DCDReader '/..../MDAnalysis/tests/data/adk_dims.dcd' with 98 frames of 3341 atoms (0 fixed) >
+
+
+

Finally, the MDAnalysis.Universe.select_atoms() method generates a new +AtomGroup according to a selection criterion

+
>>> calphas = u.select_atoms("name CA")
+>>> print(calphas)
+<AtomGroup with 214 atoms>
+
+
+

as described in Selection commands.

+
+
+

1.2. Examples

+

The easiest way to get started with MDAnalysis is to read this introduction and the chapters on The topology system and Selection commands, then explore the package interactively in IPython or another interactive Python interpreter.

+
+

1.2.1. Included trajectories

+

MDAnalysis comes with a number of real trajectories for testing. You +can also use them to explore the functionality and ensure that +everything is working properly:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import PSF,DCD, PDB,XTC
+u_dims_adk = mda.Universe(PSF,DCD)
+u_eq_adk = mda.Universe(PDB, XTC)
+
+
+

The PSF and DCD file are a closed-form-to-open-form transition of +Adenylate Kinase (from [Beckstein2009]) and the PDB+XTC file are ten +frames from a Gromacs simulation of AdK solvated in TIP4P water with +the OPLS/AA force field.

+
+
Beckstein2009
+

O. Beckstein, E.J. Denning, J.R. Perilla, and +T.B. Woolf. Zipping and Unzipping of Adenylate +Kinase: Atomistic Insights into the Ensemble of +Open <–> Closed Transitions. J Mol Biol 394 +(2009), 160–176, doi:10.1016/j.jmb.2009.09.009

+
+
+
+
+

1.2.2. Code snippets

+

The source code distribution comes with a directory examples that +contains a number of code snippets that show how to use certain +aspects of MDAnalysis.

+

For instance, there is code that shows how to

+ +

and more.

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/references.html b/2.7.0-dev0/documentation_pages/references.html new file mode 100644 index 0000000000..98ca78c3b9 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/references.html @@ -0,0 +1,405 @@ + + + + + + + 17. References — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

17. References

+

MDAnalysis and the included algorithms are scientific software that +are described in academic publications. Please cite these papers when you use +MDAnalysis in published work.

+

It is possible to automatically generate a list of references for any program that uses +MDAnalysis. This list (in common reference manager formats) contains +the citations associated with the specific algorithms and libraries +that were used in the program.

+
+

17.1. Citations for the whole MDAnalysis library

+

When using MDAnalysis in published work, please cite +[Michaud-Agrawal2011] and [Gowers2016].

+

(We are currently asking you to cite both papers if at all possible +because the 2016 paper describes many updates to the original 2011 +paper and neither paper on its own provides a comprehensive +description of the library. We will publish a complete self-contained +paper with the upcoming 1.0 release of MDAnalysis, which will then +supersede these two citations.)

+
+
Michaud-Agrawal2011
+

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

+
+
Gowers2016
+

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 98-105, +Austin, TX, 2016. SciPy. doi:10.25080/Majora-629e541a-00e

+
+
+
+
+

17.2. Citations for included algorithms and modules

+

If you use the RMSD calculation (MDAnalysis.analysis.rms) or alignment +code (MDAnalysis.analysis.align) that uses the +qcprot module please also cite [Theobald2005b] and +[Liu2010b].

+
+
Theobald2005b
+

Douglas L. Theobald. Rapid calculation of RMSD using a +quaternion-based characteristic polynomial. Acta Crystallographica A +61 (2005), 478-480.

+
+
Liu2010b
+

Pu Liu, Dmitris K. Agrafiotis, and Douglas L. Theobald. Fast +determination of the optimal rotational matrix for macromolecular +superpositions. J. Comput. Chem. 31 (2010), 1561–1563.

+
+
+

If you use the helix analysis algorithm HELANAL in +MDAnalysis.analysis.helanal please cite [Bansal2000b].

+
+
Bansal2000b
+

Bansal M, Kumar S, Velavan R. HELANAL — A program to +characterise helix geometry in proteins. J. Biomol. Struct. Dyn. 17 +(2000), 811–819

+
+
+

If you use the GNM trajectory analysis code in +MDAnalysis.analysis.gnm please cite [Hall2007b].

+
+
Hall2007b
+

Benjamin A. Hall, Samantha L. Kaye, Andy Pang, Rafael Perera, and +Philip C. Biggin. Characterization of Protein Conformational States by +Normal-Mode Frequencies. JACS 129 (2007), 11394–11401.

+
+
+

If you use the water analysis code in +MDAnalysis.analysis.waterdynamics please cite [Araya-Secchi2014b].

+
+
Araya-Secchi2014b
+

R. Araya-Secchi., Tomas Perez-Acle, Seung-gu Kang, Tien +Huynh, Alejandro Bernardin, Yerko Escalona, Jose-Antonio Garate, +Agustin D. Martinez, Isaac E. Garcia, Juan C. Saez, Ruhong +Zhou. Characterization of a novel water pocket inside the human Cx26 +hemichannel structure. Biophysical Journal, 107 (2014), 599-612.

+
+
+

If you use the Path Similarity Analysis (PSA) code in +MDAnalysis.analysis.psa please cite [Seyler2015b].

+
+
Seyler2015b
+

Seyler SL, Kumar A, Thorpe MF, Beckstein O. Path Similarity +Analysis: A Method for Quantifying Macromolecular Pathways. PLoS +Comput Biol 11 (2015), e1004568. doi: 10.1371/journal.pcbi.1004568

+
+
+

If you use the implementation of the ENCORE ensemble analysis in +MDAnalysis.analysis.encore please cite [Tiberti2015b].

+
+
Tiberti2015b
+

M. Tiberti, E. Papaleo, T. Bengtsen, W. Boomsma, +and K. Lindorff-Larsen. ENCORE: Software for quantitative ensemble +comparison. PLoS Comput Biol, 11 (2015), e1004415. doi: +10.1371/journal.pcbi.1004415

+
+
+

If you use the streamline visualization in +MDAnalysis.visualization.streamlines and +MDAnalysis.visualization.streamlines_3D please cite [Chavent2014b].

+
+
Chavent2014b
+

Chavent, M., Reddy, T., Dahl, C.E., Goose, J., Jobard, B., +and Sansom, M.S.P. Methodologies for the analysis of instantaneous lipid +diffusion in MD simulations of large membrane systems. Faraday +Discussions 169 (2014), 455–475. doi: 10.1039/c3fd00145h

+
+
+

If you use the hydrogen bond analysis code in +MDAnalysis.analysis.hydrogenbonds.hbond_analysis please cite [Smith2019].

+
+
Smith2019
+

P. Smith, R. M. Ziolek, E. Gazzarrini, D. M. Owen, and C. D. Lorenz. +On the interaction of hyaluronic acid with synovial fluid lipid membranes. PCCP +21 (2019), 9845-9857. doi: 10.1039/C9CP01532A

+
+
+

If you use rmsip() or +rmsip() please cite [Amadei1999] and +[Leo-Macias2004] .

+
+
Amadei1999
+

Amadei, A., Ceruso, M. A. & Nola, A. D. +On the convergence of the conformational coordinates basis set obtained by the essential dynamics analysis of proteins’ molecular dynamics simulations. +Proteins: Structure, Function, and Bioinformatics 36, 419–424 (1999). +doi: 10.1002/(SICI)1097-0134(19990901)36:4<419::AID-PROT5>3.0.CO;2-U

+
+
+
+
Leo-Macias2004
+

Leo-Macias, A., Lopez-Romero, P., Lupyan, D., Zerbino, D. & Ortiz, A. R. +An Analysis of Core Deformations in Protein Superfamilies. +Biophys J 88, 1291–1299 (2005). doi: 10.1529/biophysj.104.052449

+
+
+

If you use cumulative_overlap() or +cumulative_overlap() please cite [Yang2008] .

+
+
Yang2008
+

Yang, L., Song, G., Carriquiry, A. & Jernigan, R. L. +Close Correspondence between the Motions from Principal Component Analysis of Multiple HIV-1 Protease Structures and Elastic Network Modes. +Structure 16, 321–330 (2008). doi: 10.1016/j.str.2007.12.011

+
+
+

If you use the Mean Squared Displacement analysis code in +MDAnalysis.analysis.msd please cite [Calandri2011] and [Buyl2018].

+
+
Calandri2011
+

Calandrini, V., Pellegrini, E., Calligari, P., Hinsen, K., Kneller, G. R. +NMoldyn-Interfacing Spectroscopic Experiments, Molecular Dynamics Simulations and Models for Time Correlation Functions. +Collect. SFN, 12, 201–232 (2011). doi: 10.1051/sfn/201112010

+
+
+
+
Buyl2018
+

Buyl, P. tidynamics: A tiny package to compute the dynamics of stochastic and molecular simulations. Journal of Open Source Software, +3(28), 877 (2018). doi: 10.21105/joss.00877

+
+
+

If you calculate shape parameters using +shape_parameter(), +shape_parameter(), +shape_parameter() +please cite [Dima2004a].

+
+
Dima2004a
+

Dima, R. I., & Thirumalai, D. (2004). Asymmetry +in the shapes of folded and denatured states of +proteins. J Phys Chem B, 108(21), +6564-6570. doi:10.1021/jp037128y

+
+
+

If you calculate asphericities using +asphericity(), +asphericity(), +asphericity() +please cite [Dima2004b].

+
+
Dima2004b
+

Dima, R. I., & Thirumalai, D. (2004). Asymmetry +in the shapes of folded and denatured states of +proteins. J Phys Chem B, 108(21), +6564-6570. doi:10.1021/jp037128y

+
+
+

If you use use the dielectric analysis code in +DielectricConstant please cite [Neumann1983].

+
+
Neumann1983
+

Neumann, M. (1983). Dipole +Moment Fluctuation Formulas in Computer Simulations of Polar Systems. +Molecular Physics 50, no. 4, 841–858. doi: 10.1080/00268978300102721

+
+
+

If you use H5MD files using +MDAnalysis.coordinates.H5MD.py, please cite [Buyl2013] and +[Jakupovic2021].

+
+
Buyl2013
+

Buyl P., Colberg P., and Höfling F.(2013). +H5MD: A structured, efficient, and portable file format for molecular data. +Computer Physics Communications, 185. doi:10.1016/j.cpc.2014.01.018.

+
+
Jakupovic2021
+

Jakupovic E. and Beckstein O., MPI-parallel Molecular +Dynamics Trajectory Analysis with the H5MD Format in the MDAnalysis +Python Package, in Proceedings of the 20th Python in Science Conference, +(Meghann Agarwal, Chris Calloway, Dillon Niederhut, and David Shupe, eds.), +pp. 18 – 26, 2021. doi:10.25080/majora-1b6fd038-005.

+
+
+
+
+

17.3. Citations using Duecredit

+

Citations can be automatically generated using duecredit, depending on the +packages used. Duecredit is easy to install via pip. Simply type:

+
pip install duecredit
+
+
+

duecredit will remain an optional dependency, i.e. any code using +MDAnalysis will work correctly even without duecredit installed.

+

A list of citations for yourscript.py can be obtained using simple +commands.

+
cd /path/to/yourmodule
+python -m duecredit yourscript.py
+
+
+

or set the environment variable DUECREDIT_ENABLE

+
DUECREDIT_ENABLE=yes python yourscript.py
+
+
+

Once the citations have been extracted (to a hidden file in the +current directory), you can use the duecredit program to +export them to different formats. For example, one can display them in +BibTeX format, using:

+
duecredit summary --format=bibtex
+
+
+

Please cite your use of MDAnalysis and the packages and algorithms +that it uses. Thanks!

+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections.html b/2.7.0-dev0/documentation_pages/selections.html new file mode 100644 index 0000000000..77d8eb31ef --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections.html @@ -0,0 +1,597 @@ + + + + + + + 3. Selection commands — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

3. Selection commands

+

Once you have the Universe() object, you can +select atoms (using a syntax very similar to CHARMM’s atom selection +syntax):

+
>>> kalp = universe.select_atoms("segid KALP")
+
+
+

The select_atoms() method of a +AtomGroup or a +Universe returns a +AtomGroup, so you can use all the methods +defined for AtomGroups on them. Selections always return an +AtomGroup with atoms sorted according to their +index in the topology (this is to ensure that there are not any duplicates, +which can happen with complicated selections).

+

One can group subselections using parentheses:

+
>>> universe.select_atoms("segid DMPC and not (name H* or type OW)")
+<AtomGroup with 3420 atoms>
+
+
+

Almost all the basic CHARMM selections work.

+

It is also possible to export selections for external software +packages with the help of Selection exporters.

+
+

Note

+

By default, atoms are sorted by index in the output AtomGroup. +For example, the below code will return the first, second, and +sixth atom in ag:

+
>>> ag = u.select_atoms("name N")
+>>> ag2 = ag[[5, 1, 0]]
+>>> ag3 = ag2.select_atoms("name N")
+>>> np.all(ag3.ix == ag2.ix)
+False
+
+
+

You can turn off sorting behavior with the sorted keyword:

+
>>> ag = u.select_atoms("name N")
+>>> ag2 = ag[[5, 1, 0]]
+>>> ag3 = ag2.select_atoms("name N", sorted=False)
+>>> np.all(ag3.ix == ag2.ix)
+True
+
+
+

For further details on ordered selections, see Ordered selections.

+
+
+

3.1. Selection Keywords

+

The following describes all selection keywords currently understood by the +selection parser. The following applies to all selections:

+
    +
  • Keywords are case sensitive.

  • +
  • Atoms are automatically sequentially ordered in a resulting selection (see +notes below on Ordered selections for how to circumvent this if +necessary).

  • +
  • Selections are parsed left to right and parentheses can be used for +grouping.

  • +
  • You can use the singular name of any topology attribute as a selection +keyword. Defined topology attributes are listed in the User Guide. +Alternatively, you can define a +TopologyAttr yourself, +providing that the attribute dtype is one of int, float, +str (or object), or bool. +However, the topology must contain this attribute information for +the selection to work.

    +
    +
      +
    • Selections of attributes that are integers or floats can use the +syntax “myTopologyAttr 0 - 2”, “myTopologyAttr 0:2”, or +“myTopologyAttr 0 to 2”, to select a range with +both ends inclusive. Whitespace and negative numbers are allowed.

    • +
    • “myTopologyAttr 0” can be used to select all atoms +matching the value; however, this can be tricky with floats because of +precision differences and we recommend using a range like above when +possible.

    • +
    • Boolean selections default to True, so “myTopologyAttr” and +“myTopologyAttr True” both give all atoms with +myTopologyAttr == True.

    • +
    +
    +
  • +
+
+

See also

+

Regular expression patterns +FLOAT_PATTERN for matching floats; +INT_PATTERN for matching integers; +and RANGE_PATTERN for matching +selection ranges.

+
+
+

3.1.1. Simple selections

+

This is a non-exhaustive list of the available selection keywords. As noted +in the dot point above, keywords will be automatically generated for any +suitable TopologyAttr. A list of +Defined topology attributes is available in the User Guide.

+
+
protein, backbone, nucleic, nucleicbackbone

selects all atoms that belong to a standard set of residues; a protein +is identfied by a hard-coded set of residue names so it may not +work for esoteric residues.

+
+
segid seg-name

select by segid (as given in the topology), e.g. segid 4AKE or +segid DMPC

+
+
resid residue-number-range

resid can take a single residue number or a range of numbers. A range +consists of two numbers separated by a colon (inclusive) such +as resid 1:5. A residue number (“resid”) is taken directly from the +topology.

+
+
resnum resnum-number-range

resnum is the canonical residue number; typically it is set to the +residue id in the original PDB structure.

+
+
resname residue-name

select by residue name, e.g. resname LYS

+
+
name atom-name

select by atom name (as given in the topology). Often, this is force +field dependent. Example: name CA (for C&alpha; atoms) or name +OW (for SPC water oxygen)

+
+
type atom-type

select by atom type; this is either a string or a number and depends on +the force field; it is read from the topology file (e.g. the CHARMM PSF +file contains numeric atom types). It has non-sensical values when a +PDB or GRO file is used as a topology.

+
+
atom seg-name residue-number atom-name

a selector for a single atom consisting of segid resid atomname, +e.g. DMPC 1 C2 selects the C2 carbon of the first residue of the +DMPC segment

+
+
altLoc alternative-location

a selection for atoms where alternative locations are available, which is +often the case with high-resolution crystal structures +e.g. resid 4 and resname ALA and altLoc B selects only the atoms of ALA-4 +that have an altLoc B record.

+
+
chainID chain-name

a selection for atoms where chainIDs have been defined.

+
+
element element-name

a selection for atoms where elements have been defined. e.g. element H C

+
+
moltype molecule-type

select by molecule type, e.g. moltype Protein_A. At the moment, only +the TPR format defines the molecule type.

+
+
smarts SMARTS-query

select atoms using Daylight’s SMARTS queries, e.g. smarts +[#7;R] to find nitrogen atoms in rings. Requires RDKit. +All matches are combined as a single unique match. The smarts +selection accepts two sets of key word arguments from +select_atoms(): the rdkit_kwargs are passed internally to +RDKitConverter.convert() and the smarts_kwargs are passed to +RDKit’s GetSubstructMatches. +By default, the useChirality kwarg in rdkit_kwargs is set to true +and maxMatches in smarts_kwargs is max(1000, 10 * n_atoms), where +n_atoms is either len(AtomGroup) or len(Universe.atoms), +whichever is applicable. Note that the number of matches can occasionally +exceed the default value of maxMatches, causing too few atoms to be +returned. If this occurs, a warning will be issued. The problem can be +fixed by increasing the value of maxMatches. This behavior may be updated +in the future

+
+
chiral R | S

select a particular stereocenter. e.g. name C and chirality S +to select only S-chiral carbon atoms. Only R and S will be +possible options but other values will not raise an error.

+
+
formalcharge formal-charge

select atoms based on their formal charge, e.g. +name O and formalcharge -1 to select all oxygens with a +negative 1 formal charge.

+
+
+
+
+

3.1.2. Pattern matching

+

The pattern matching notation described below is used to specify +patterns for matching strings (based on fnmatch):

+
+
?

Is a pattern that will match any single character. For example, +resname T?R selects residues named “TYR” and “THR”.

+
+
*

Is a pattern that will match multiple characters. For example, +GL* selects all strings that start with “GL” such as “GLU”, +“GLY”, “GLX29”, “GLN”.

+
+
[seq]

Would match any character in seq. For example, “resname GL[NY]” +selects all residues named “GLN” or “GLY” but would not select +“GLU”.

+
+
[!seq]

Would match any character not in seq. For example, “resname GL[!NY]” +would match residues named “GLU” but would not match “GLN” or “GLY”.

+
+
+
+
+

3.1.3. Boolean

+
+
not

all atoms not in the selection, e.g. not protein selects all atoms +that aren’t part of a protein

+
+
and, or

combine two selections according to the rules of boolean algebra, +e.g. protein and not (resname ALA or resname LYS) selects all atoms +that belong to a protein, but are not in a lysine or alanine residue

+
+
+
+
+

3.1.4. Geometric

+
+
around distance selection

selects all atoms a certain cutoff away from another selection, +e.g. around 3.5 protein selects all atoms not belonging to protein +that are within 3.5 Angstroms from the protein

+
+
sphlayer innerRadius externalRadius selection

selects all atoms within a spherical layer centered in the center of +geometry (COG) of a given selection, e.g., sphlayer 2.4 6.0 ( protein +and ( resid 130 or resid 80 ) ) selects the center of geometry of +protein, resid 130, resid 80 and creates a spherical layer of inner +radius 2.4 and external radius 6.0 around the COG.

+
+
sphzone externalRadius selection

selects all atoms within a spherical zone centered in the center of +geometry (COG) of a given selection, e.g. sphzone 6.0 ( protein and ( +resid 130 or resid 80 ) ) selects the center of geometry of protein, +resid 130, resid 80 and creates a sphere of radius 6.0 around the COG.

+
+
isolayer inner radius outer radius selection

Similar to sphlayer, but will find layer around all referenced atoms. +For example, if the atom types for a polymer backbone were chosen, then +an isolayer parallel to the backbone will be generated. As another +example, if a set of ions were chosen as a reference to isolate the second +hydration layer, then they will all be included in the same group. +However, in the instance that a molecule is in the second hydration layer +of one ion and the first hydration layer of another, those atoms will not +be included.

+
+
cylayer innerRadius externalRadius zMax zMin selection

selects all atoms within a cylindric layer centered in the center of +geometry (COG) of a given selection, e.g. cylayer 5 10 10 -8 +protein selects the center of geometry of protein, and creates a +cylindrical layer of inner radius 5, external radius 10 centered on the +COG. In z, the cylinder extends from 10 above the COG to 8 +below. Positive values for zMin, or negative ones for zMax, are +allowed.

+
+
cyzone externalRadius zMax zMin selection

selects all atoms within a cylindric zone centered in the center of +geometry (COG) of a given selection, e.g. cyzone 15 4 -8 protein and +resid 42 selects the center of geometry of protein and resid 42, and +creates a cylinder of external radius 15 centered on the COG. In z, the +cylinder extends from 4 above the COG to 8 below. Positive values for +zMin, or negative ones for zMax, are allowed.

+
+

Changed in version 0.10.0: keywords cyzone and cylayer now take zMax and zMin to be +relative to the COG of selection, instead of absolute z-values +in the box.

+
+
+
point x y z distance

selects all atoms within a cutoff of a point in space, make sure +coordinate is separated by spaces, e.g. point 5.0 5.0 5.0 3.5 +selects all atoms within 3.5 Angstroms of the coordinate (5.0, 5.0, +5.0)

+
+
prop [abs] property operator value

selects atoms based on position, using property x, y, or +z coordinate. Supports the abs keyword (for absolute value) and +the following operators: <, >, <=, >=, ==, !=. For example, +prop z >= 5.0 selects all atoms with z coordinate greater than 5.0; +prop abs z <= 5.0 selects all atoms within -5.0 <= z <= 5.0.

+
+
+
+

Note

+

By default periodicity is taken into account with geometric +selections, i.e. selections will find atoms that are in different +periodic images. +To control this behaviour, use the boolean "periodic" keyword +argument of select_atoms().

+
+
+
+

3.1.5. Similarity and connectivity

+
+
same subkeyword as selection

selects all atoms that have the same subkeyword value as any atom in +selection. Allowed subkeyword values are the atom properties: name, +type, resname, resid, segid, mass, charge, radius, bfactor, resnum, the +groups an atom belong to: residue, segment, fragment, and the atom +coordinates x, y, z.

+
+
byres selection

selects all atoms that are in the same segment and residue as selection, +e.g. specify the subselection after the byres keyword. byres is a +shortcut to same residue as

+
+
bonded selection

selects all atoms that are bonded to selection +eg: select name H and bonded name O selects only hydrogens bonded to +oxygens

+
+
+
+
+

3.1.6. Index

+
+
bynum index-range

selects all atoms within a range of (1-based) inclusive indices, +e.g. bynum 1 selects the first atom in the universe; bynum 5:10 +selects atoms 5 through 10 inclusive. All atoms in the +MDAnalysis.Universe are consecutively numbered, and the index +runs from 1 up to the total number of atoms.

+
+
id index-range

selects all atoms in a range of (1-based) inclusive indices, e.g. id 1 selects +all the atoms with id 1; id 5:7 selects all atoms with ids 5, all atoms with +ids 6 and all atoms with ids 7.

+
+
index index-range

selects all atoms within a range of (0-based) inclusive indices, +e.g. index 0 selects the first atom in the universe; index 5:10 +selects atoms 6 through 11 inclusive. All atoms in the +MDAnalysis.Universe are consecutively numbered, and the index +runs from 0 up to the total number of atoms - 1.

+
+
+
+

Note

+

Conventionally, id corresponds to the serial number in the PDB format. In contrast +to bynum, the id topology attribute is not necessarily continuous, ordered, or +unique, and can be arbitrarily assigned by the user.

+
+
+
+

3.1.7. Preexisting selections and modifiers

+
+
group group-name

selects the atoms in the AtomGroup passed to the function as an +argument named group-name. Only the atoms common to group-name and the +instance select_atoms() was called +from will be considered, unless group is preceded by the global +keyword. group-name will be included in the parsing just by comparison of +atom indices. This means that it is up to the user to make sure the +group-name group was defined in an appropriate Universe.

+
+
global selection

by default, when issuing +select_atoms() from an +AtomGroup, selections and subselections +are returned intersected with the atoms of that instance. Prefixing a +selection term with global causes its selection to be returned in its +entirety. As an example, the global keyword allows for +lipids.select_atoms("around 10 global protein") — where lipids is +a group that does not contain any proteins. Were global absent, the +result would be an empty selection since the protein subselection would +itself be empty. When issuing +select_atoms() from a +Universe, global is ignored.

+
+
+
+

Changed in version 1.0.0: The fullgroup selection has now been removed. Please use the equivalent +global group selection.

+
+
+
+
+

3.2. Dynamic selections

+

By default select_atoms() returns an +AtomGroup, in which the list of atoms is +constant across trajectory frame changes. If +select_atoms() is invoked with named +argument updating set to True, an +UpdatingAtomGroup instance will be returned +instead. It behaves just like an AtomGroup +object, with the difference that the selection expressions are re-evaluated +every time the trajectory frame changes (this happens lazily, only when the +UpdatingAtomGroup object is accessed so that +there is no redundant updating going on):

+
# A dynamic selection of corner atoms:
+>>> ag_updating = universe.select_atoms("prop x < 5 and prop y < 5 and prop z < 5", updating=True)
+>>> ag_updating
+<UpdatingAtomGroup with 9 atoms>
+>>> universe.trajectory.next()
+>>> ag_updating
+<UpdatingAtomGroup with 14 atoms>
+
+
+

Using the group selection keyword for +preexisting-selections, one can +make updating selections depend on +AtomGroup, or even other +UpdatingAtomGroup, instances. +Likewise, making an updating selection from an already updating group will +cause later updates to also reflect the updating of the base group:

+
>>> chained_ag_updating = ag_updating.select_atoms("resid 1:1000", updating=True)
+>>> chained_ag_updating
+<UpdatingAtomGroup with 3 atoms>
+>>> universe.trajectory.next()
+>>> chained_ag_updating
+<UpdatingAtomGroup with 7 atoms>
+
+
+

Finally, a non-updating selection or a slicing/addition operation made on an +UpdatingAtomGroup will return a static +AtomGroup, which will no longer update +across frames:

+
>>> static_ag = ag_updating.select_atoms("resid 1:1000")
+>>> static_ag
+<UpdatingAtomGroup with 3 atoms>
+>>> universe.trajectory.next()
+>>> static_ag
+<UpdatingAtomGroup with 3 atoms>
+
+
+
+
+

3.3. Ordered selections

+

select_atoms() sorts the atoms +in the AtomGroup by atom index before +returning them (this is to eliminate possible duplicates in the +selection). If the ordering of atoms is crucial (for instance when +describing angles or dihedrals) or if duplicate atoms are required +then one has to concatenate multiple AtomGroups, which does not sort +them.

+

The most straightforward way to concatentate two AtomGroups is by using the ++ operator:

+
>>> ordered = u.select_atoms("segid DMPC and resid 3 and name P") + u.select_atoms("segid DMPC and resid 2 and name P")
+>>> print(list(ordered))
+[< Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>,
+< Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>]
+
+
+

A shortcut is to provide two or more selections to +select_atoms(), which then +does the concatenation automatically:

+
>>> print(list(universe.select_atoms("segid DMPC and resid 3 and name P", "segid DMPC and resid 2 and name P")))
+[< Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>,
+< Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>]
+
+
+

Just for comparison to show that a single selection string does not +work as one might expect:

+
# WRONG!
+>>> print(list(universe.select_atoms("segid DMPC and (resid 3 or resid 2) and name P")))
+[< Atom 452: name 'P' of type '180' of resid 'DMPC', 2 and 'DMPC'>,
+< Atom 570: name 'P' of type '180' of resid 'DMPC', 3 and 'DMPC'>]
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/base.html b/2.7.0-dev0/documentation_pages/selections/base.html new file mode 100644 index 0000000000..5481de7182 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/base.html @@ -0,0 +1,297 @@ + + + + + + + 9.2.6. Base classes for the selection writers — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.6. Base classes for the selection writers

+

Specialized SelectionWriters are derived from +SelectionWriterBase. Override the _write_head(), +_translate(), and _write_tail() +methods.

+
+
+class MDAnalysis.selections.base.SelectionWriterBase(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Export a selection in MDAnalysis to a format usable in an external package.

+

The SelectionWriterBase writes a selection string to a file +that can be used in another package such as VMD, PyMOL, +Gromacs or CHARMM. In this way, analysis and visualization +can be done with the best or most convenient tools at hand.

+

SelectionWriterBase is a base class and child classes are +derived with the appropriate customizations for the package file +format.

+
+

Changed in version 0.11.0: Can now also write to a NamedStream instead +of a normal file (using openany).

+
+
+

Changed in version 0.16.0: Remove the wa mode. The file is now open when the instance is created +and closed with the close() method or when exiting the with +statement.

+
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+__init__(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+ +
+
+_translate(atoms, **kwargs)[source]
+

Translate atoms into a list of native selection terms.

+
    +
  • build list of ALL selection terms as if this was a single line, e.g. +['index 12 |', 'index 22 |', 'index 33']

  • +
  • only one term per atom!!

  • +
  • terms must be strings

  • +
  • +
    something like::

    ” “.join(terms)

    +
    +
    +

    must work

    +
  • +
+
+ +
+
+_write_head(out, **kwargs)[source]
+

Initial output to open file object out.

+
+ +
+
+_write_tail(out, **kwargs)[source]
+

Last output to open file object out.

+
+ +
+
+comment(s)[source]
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)[source]
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+ +
+
+MDAnalysis.selections.base.join(seq, string='', func=None)[source]
+

Create a list from sequence.

+

string is appended to each element but the last.

+

func is applied to every element before appending string.

+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/charmm.html b/2.7.0-dev0/documentation_pages/selections/charmm.html new file mode 100644 index 0000000000..e9d05eeef6 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/charmm.html @@ -0,0 +1,264 @@ + + + + + + + 9.2.4. CHARMM selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.4. CHARMM selections

+

Write MDAnalysis.core.groups.AtomGroup selection to a str file +that defines a CHARMM selection. To be used in CHARMM like this:

+
stream macro.str
+
+
+

The selection is named mdanalysis001.

+
+
+class MDAnalysis.selections.charmm.SelectionWriter(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+close()
+

Close the file

+
+

New in version 0.16.0.

+
+
+ +
+
+comment(s)
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+commentfmt = '! %s'
+

Comment format string; should contain ‘%s’ or None for no comments.

+
+ +
+
+continuation = '-'
+

Special character to continue a line across a newline.

+
+ +
+
+ext = 'str'
+

Extension of output files.

+
+ +
+
+format = ['CHARMM', 'str']
+

Name of the format.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+
+write_preamble()
+

Write a header, depending on the file format.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/gromacs.html b/2.7.0-dev0/documentation_pages/selections/gromacs.html new file mode 100644 index 0000000000..7d44679fec --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/gromacs.html @@ -0,0 +1,264 @@ + + + + + + + 9.2.3. Gromacs selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.3. Gromacs selections

+

Write MDAnalysis.core.groups.AtomGroup selection to a ndx file +that defines a Gromacs index group. To be used in Gromacs like this:

+
<GROMACS_COMMAND> -n macro.ndx
+
+
+

The index groups are named mdanalysis001, mdanalysis002, etc.

+
+
+class MDAnalysis.selections.gromacs.SelectionWriter(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+close()
+

Close the file

+
+

New in version 0.16.0.

+
+
+ +
+
+comment(s)
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+commentfmt = None
+

Comment format string; should contain ‘%s’ or None for no comments.

+
+ +
+
+continuation = ''
+

Special character to continue a line across a newline.

+
+ +
+
+ext = 'ndx'
+

Extension of output files.

+
+ +
+
+format = ['Gromacs', 'ndx']
+

Name of the format.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+
+write_preamble()
+

Write a header, depending on the file format.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/jmol.html b/2.7.0-dev0/documentation_pages/selections/jmol.html new file mode 100644 index 0000000000..9be5f7e409 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/jmol.html @@ -0,0 +1,270 @@ + + + + + + + 9.2.5. Jmol selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.5. Jmol selections

+

Write MDAnalysis.core.groups.AtomGroup selection to a str file +that defines a Jmol selection. To be used in Jmol like this:

+
script macro.spt
+select ~selection
+
+
+

The selection is named mdanalysis001.TODO

+
+
+class MDAnalysis.selections.jmol.SelectionWriter(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+close()
+

Close the file

+
+

New in version 0.16.0.

+
+
+ +
+
+comment(s)
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+commentfmt = '#'
+

Comment format string; should contain ‘%s’ or None for no comments.

+
+ +
+
+continuation = ''
+

Special character to continue a line across a newline.

+
+ +
+
+default_numterms = None
+
+ +
+
+ext = 'spt'
+

Extension of output files.

+
+ +
+
+format = ['Jmol', 'spt']
+

Name of the format.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+
+write_preamble()
+

Write a header, depending on the file format.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/pymol.html b/2.7.0-dev0/documentation_pages/selections/pymol.html new file mode 100644 index 0000000000..a4f4572f15 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/pymol.html @@ -0,0 +1,265 @@ + + + + + + + 9.2.2. PyMOL selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.2. PyMOL selections

+

Write MDAnalysis.core.groups.AtomGroup selection to a +script pml file that defines PyMOL atomselect macros. To be used +in PyMOL like this:

+
@macros.pml
+
+
+

The selections should appear in the user interface.

+
+
+class MDAnalysis.selections.pymol.SelectionWriter(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+close()
+

Close the file

+
+

New in version 0.16.0.

+
+
+ +
+
+comment(s)
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+commentfmt = '# %s'
+

Comment format string; should contain ‘%s’ or None for no comments.

+
+ +
+
+continuation = '\\'
+

Special character to continue a line across a newline.

+
+ +
+
+ext = 'pml'
+

Extension of output files.

+
+ +
+
+format = ['PyMol', 'pml']
+

Name of the format.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+
+write_preamble()
+

Write a header, depending on the file format.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections/vmd.html b/2.7.0-dev0/documentation_pages/selections/vmd.html new file mode 100644 index 0000000000..cabbefabe7 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections/vmd.html @@ -0,0 +1,268 @@ + + + + + + + 9.2.1. VMD selections — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9.2.1. VMD selections

+

Write MDAnalysis.core.groups.AtomGroup selection to a VMD tcl file +(for example, “macros.vmd”) that defines atomselect macros. To be used in +VMD like this (assuming the default macro name “mdanalysis001”):

+
source macros.vmd
+set sel [atomselect top mdanalysis001]
+
+
+

In the VMD GUI the macro “mdanalysis001” appears in the +Graphics ‣ Representations window under +Selections: Singlewords.

+
+
+class MDAnalysis.selections.vmd.SelectionWriter(filename, mode='w', numterms=None, preamble=None, **kwargs)[source]
+

Set up for writing to filename.

+
+
Parameters
+
    +
  • filename – output file

  • +
  • mode – create a new file (“w”), or append (“a”) to existing file [“w”]

  • +
  • numterms – number of individual index numbers per line for output +formats that write multiple entries in one line. If set +to 0 or False then no special formatting is done [8]

  • +
  • preamble – string that is written as a comment at the top of the file []

  • +
  • kwargs – use as defaults for write()

  • +
+
+
+
+
+close()
+

Close the file

+
+

New in version 0.16.0.

+
+
+ +
+
+comment(s)
+

Return string s interpolated into the comment format string.

+

If no SelectionWriterBase.commentfmt is defined (None) then the +empty string is returned because presumably there is no way to enter +comments into the file.

+

A newline is appended to non-empty strings.

+
+ +
+
+commentfmt = '# %s'
+

Comment format string; should contain ‘%s’ or None for no comments.

+
+ +
+
+continuation = '\\'
+

Special character to continue a line across a newline.

+
+ +
+
+ext = 'vmd'
+

Extension of output files.

+
+ +
+
+format = 'VMD'
+

Name of the format.

+
+ +
+
+write(selection, number=None, name=None, frame=None, mode=None)
+

Write selection to the output file.

+
+
Parameters
+
    +
  • selection – a MDAnalysis.core.groups.AtomGroup

  • +
  • number – selection will be named “mdanalysis<number>” +(None auto increments between writes; useful +when appending) [None]

  • +
  • name – selection will be named name (instead of numbered) [None]

  • +
  • frame – write selection of this frame (or the current one if +None [None]

  • +
+
+
+
+ +
+
+write_preamble()
+

Write a header, depending on the file format.

+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/selections_modules.html b/2.7.0-dev0/documentation_pages/selections_modules.html new file mode 100644 index 0000000000..716e380014 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/selections_modules.html @@ -0,0 +1,317 @@ + + + + + + + 9. Selection exporters — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

9. Selection exporters

+

The classes in this module allow writing a selection to a file that can be read by +another program to select the atoms in a MDAnalysis +MDAnalysis.core.groups.AtomGroup. Such cross-package interoperability +allows a user to combine their favourite tools with MDAnalysis for further +visualization or simulation.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table of supported exporters and recognized file name extensions.

Name

extension

IO

remarks

vmd

tcl

w

VMD macros, available in Representations; +module MDAnalysis.selections.vmd

pymol

pml

w

simple PyMOL selection string; +module MDAnalysis.selections.pymol

gromacs

ndx

w

Gromacs index file; +module MDAnalysis.selections.gromacs

charmm

str

w

CHARMM selection of individual atoms; +module MDAnalysis.selections.charmm

jmol

spt

w

Jmol selection commands; +module MDAnalysis.selections.jmol

+
+

9.1. How to write selections

+
+

9.1.1. Single AtomGroup

+

The typical situation is that one has an +AtomGroup and wants to work with the +same selection of atoms in a different package, for example, to +visualize the atoms in VMD. First create an AtomGroup (named +g in the example below) and then use its +write method with the +appropriate file extension (see Table of supported exporters and recognized file name extensions. for the recognized extension):

+
g = u.select_atoms('protein")
+g.write("selections.vmd", name="mda_protein")
+
+
+

In VMD, sourcing the file selections.vmd (written in Tcl) defines +the “macro” mda_protein that contains the atom indices to select

+
source selection.vmd
+set sel [atomselect top mda_mdanalysis]
+
+
+

and in the GUI the macro appears in the Graphics ‣ +Representations window in the list Selections: Singlewords as +“mda_protein”.

+
+
+

9.1.2. Multiple selections

+

The write method can take +additional keyword arguments, including mode. The default is +mode="w", which will overwrite the provided file. If mode="a" +then the selection is appended to the file.

+

Alternatively, one may use the +SelectionWriter itself as a +context manager and write each AtomGroup inside the +context. For example, to write multiple groups that were selected to +mark different parts of a lipid bilayer to Gromacs index file named +“leaflets.ndx”:

+
with mda.selections.gromacs.SelectionWriter('leaflets.ndx', mode='w') as ndx:
+    ndx.write(upper_saturated, name='upper_sat')
+    ndx.write(lower_saturated, name='lower_sat')
+    ndx.write(upper_unsaturated, name='upper_unsat')
+    ndx.write(lower_unsaturated, name='lower_unsat')
+
+
+

There is a separate SelectionWriter for each format, as +described next.

+
+
+
+

9.2. Selection writers

+

There exist different SelectionWriterBase +classes for different packages. The +get_writer() function can automatically pick +the appropriate one, based on the file name extension in the Table of supported exporters and recognized file name extensions..

+
+
+MDAnalysis.selections.get_writer(filename: str, defaultformat: str) SelectionWriterBase[source]
+

Return a SelectionWriter for filename or a defaultformat.

+
+
Parameters
+
    +
  • filename (str) – name of the output file; the extension is used to guess the file format

  • +
  • defaultformat (str) – if filename does not have an extension, use defaultformat instead

  • +
+
+
Returns
+

SelectionWriterBase – the writer class for the detected format

+
+
Return type
+

type

+
+
Raises
+

NotImplementedError – for any format that is not defined

+
+
+
+ +

Formats

+

Each module implements a SelectionWriter for a specific format.

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology.html b/2.7.0-dev0/documentation_pages/topology.html new file mode 100644 index 0000000000..c124dcfc22 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology.html @@ -0,0 +1,166 @@ + + + + + + + 2. The topology system — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

2. The topology system

+

As shown briefly in Overview over MDAnalysis, the Universe class is the primary object and core interface to molecular dynamics data in MDAnalysis. +When loading topology information from a file, as with

+
>>> from MDAnalysis import Universe
+>>> from MDAnalysis.tests.datafiles import PSF
+>>> u = Universe(PSF)
+
+
+

the file is read, the contents parsed, and a Topology object is constructed from these contents.

+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/CRDParser.html b/2.7.0-dev0/documentation_pages/topology/CRDParser.html new file mode 100644 index 0000000000..ec8dd40f83 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/CRDParser.html @@ -0,0 +1,448 @@ + + + + + + + 5.2. CRD topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.2. CRD topology parser

+

Read a list of atoms from a CHARMM CARD coordinate file (CRD) +to build a basic topology. Reads atom ids (ATOMNO), atom names (TYPES), +resids (RESID), residue numbers (RESNO), residue names (RESNames), segment ids +(SEGID) and tempfactor (Weighting). Atom element and mass are guessed based on +the name of the atom.

+

Residues are detected through a change is either resid or resname +while segments are detected according to changes in segid.

+
+

5.2.1. Classes

+
+
+class MDAnalysis.topology.CRDParser.CRDParser(filename)[source]
+

Parse a CHARMM CARD coordinate file for topology information.

+
+
Reads the following Attributes:
    +
  • Atomids

  • +
  • Atomnames

  • +
  • Tempfactors

  • +
  • Resids

  • +
  • Resnames

  • +
  • Resnums

  • +
  • Segids

  • +
+
+
Guesses the following attributes:
    +
  • Atomtypes

  • +
  • Masses

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Create the Topology object

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/DLPolyParser.html b/2.7.0-dev0/documentation_pages/topology/DLPolyParser.html new file mode 100644 index 0000000000..629243a0a7 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/DLPolyParser.html @@ -0,0 +1,202 @@ + + + + + + + 5.3. DL Poly format Topology Readers — MDAnalysis.topology.DLPolyParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.3. DL Poly format Topology Readers — MDAnalysis.topology.DLPolyParser

+

Read DL Poly format topology files

+
+
DLPoly files have the following Attributes:
    +
  • Atomnames

  • +
  • Atomids

  • +
+
+
Guesses the following attributes:
    +
  • Atomtypes

  • +
  • Masses

  • +
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/DMSParser.html b/2.7.0-dev0/documentation_pages/topology/DMSParser.html new file mode 100644 index 0000000000..5a596374ea --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/DMSParser.html @@ -0,0 +1,449 @@ + + + + + + + 5.4. DESRES Molecular Structure file format topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.4. DESRES Molecular Structure file format topology parser

+

Classes to read a topology from a DESRES Molecular Structure file +format (DMS) coordinate files (as used by the Desmond MD package).

+
+

5.4.1. Classes

+
+
+class MDAnalysis.topology.DMSParser.DMSParser(filename)[source]
+

Read a topology from a DESRES Molecular Structure file.

+

Format (DMS) coordinate files (as used by the Desmond MD package).

+
+
Reads the following attributes:
+
Atom:
    +
  • Atomids

  • +
  • Atomnums

  • +
  • Atomnames

  • +
  • Masses

  • +
  • Charges

  • +
  • Chainids

  • +
+
+
Residue:
    +
  • Resnames

  • +
  • Resids

  • +
+
+
Segment:
    +
  • Segids

  • +
+
+
+
+
Guesses the following attributes
    +
  • Atomtypes

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse DMS file filename and return the Topology object

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/ExtendedPDBParser.html b/2.7.0-dev0/documentation_pages/topology/ExtendedPDBParser.html new file mode 100644 index 0000000000..6e13f83fab --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/ExtendedPDBParser.html @@ -0,0 +1,472 @@ + + + + + + + 5.16. Extended PDB topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.16. Extended PDB topology parser

+
+

New in version 0.8.

+
+

This topology parser uses a PDB file to build a minimum internal structure +representation (list of atoms). The only difference from +PDBParser is that this parser reads a +non-standard PDB-like format in which residue numbers can be five digits +instead of four.

+

The topology reader reads a PDB file line by line and ignores atom numbers but +reads residue numbers up to 99,999 correctly. If you have systems containing at +least 100,000 residues then you need to use a different file format that can +handle such residue numbers.

+ +
+

5.16.1. Classes

+
+
+class MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser(filename)[source]
+

Parser that handles non-standard “extended” PDB file.

+

Extended PDB files (MDAnalysis format specifier XPDB) may contain residue +sequence numbers up to 99,999 by utilizing the insertion character field of +the PDB standard.

+
+
Creates a Topology with the following Attributes (if present):
    +
  • serials

  • +
  • names

  • +
  • altLocs

  • +
  • chainids

  • +
  • tempfactors

  • +
  • occupancies

  • +
  • resids

  • +
  • resnames

  • +
  • segids

  • +
  • elements

  • +
  • bonds

  • +
  • formalcharges

  • +
+
+
Guesses the following Attributes:
    +
  • masses

  • +
+
+
+ +
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)
+

Parse atom information from PDB file

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/FHIAIMSParser.html b/2.7.0-dev0/documentation_pages/topology/FHIAIMSParser.html new file mode 100644 index 0000000000..8babda4cbf --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/FHIAIMSParser.html @@ -0,0 +1,442 @@ + + + + + + + 5.5. FHI-AIMS Topology Parser — MDAnalysis.topolgy.FHIAIMSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.5. FHI-AIMS Topology Parser — MDAnalysis.topolgy.FHIAIMSParser

+

Reads an FHI-AIMS .in file and pulls the atom information from it. +Because an FHI-AIMS input file only has atom name information, any +information about residues and segments will not be populated.

+ +
+

5.5.1. Classes

+
+
+class MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser(filename)[source]
+

Parse a list of atoms from an FHI-AIMS file

+
+
Creates the following attributes:
    +
  • Atomnames

  • +
+
+
Guesses the following attributes:
    +
  • Atomtypes

  • +
  • Masses

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Read the file and return the structure.

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/GMSParser.html b/2.7.0-dev0/documentation_pages/topology/GMSParser.html new file mode 100644 index 0000000000..87621ec4db --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/GMSParser.html @@ -0,0 +1,441 @@ + + + + + + + 5.6. GAMESS Topology Parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.6. GAMESS Topology Parser

+
+

New in version 0.9.1.

+
+

Reads a GAMESS output file (also Firefly and GAMESS-UK) and pulls +element information from it. Symmetrical assembly is read (not +symmetry element!). Atom names are read from the GAMESS section. Any +information about residues or segments will not be populated.

+
+

5.6.1. Classes

+
+
+class MDAnalysis.topology.GMSParser.GMSParser(filename)[source]
+

GAMESS topology parser.

+
+
Creates the following Attributes:
    +
  • names

  • +
  • atomic charges

  • +
+
+
Guesses:
    +
  • types

  • +
  • masses

  • +
+
+
+
+

New in version 0.9.1.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Read list of atoms from a GAMESS file.

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/GROParser.html b/2.7.0-dev0/documentation_pages/topology/GROParser.html new file mode 100644 index 0000000000..6052981b37 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/GROParser.html @@ -0,0 +1,440 @@ + + + + + + + 5.7. GRO topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.7. GRO topology parser

+

Read a list of atoms from a GROMOS/Gromacs GRO coordinate file to +build a basic topology.

+

Atom types and masses are guessed.

+ +
+

5.7.1. Classes

+
+
+class MDAnalysis.topology.GROParser.GROParser(filename)[source]
+

Reads a Gromacs GRO file

+
+
Reads the following attributes:
    +
  • resids

  • +
  • resnames

  • +
  • atomids

  • +
  • atomnames

  • +
+
+
Guesses the following attributes
    +
  • atomtypes

  • +
  • masses

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Return the Topology object for this file

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/GSDParser.html b/2.7.0-dev0/documentation_pages/topology/GSDParser.html new file mode 100644 index 0000000000..19d1a1112e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/GSDParser.html @@ -0,0 +1,456 @@ + + + + + + + 5.8. GSD topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.8. GSD topology parser

+
+

New in version 0.17.0.

+
+

The GSDParser generates a topology from HOOMD GSD topology/trajectory +files. The GSD file stores information on both the topology and the trajectory +in the same file, and allows for varying atom numbers/identities and topologies +during the course of the simulation. At the moment MDAnalysis can deal only +with the case in which there is no variation. The trajectory data are read with +the GSDReader class.

+

To load a GSD HOOMD file:

+
import MDAnalysis as mda
+u = mda.Universe("example.gsd")
+
+
+
+

5.8.1. Classes

+
+
+class MDAnalysis.topology.GSDParser.GSDParser(filename)[source]
+

Parses a Hoomd GSD file to create a Topology

+
+
Reads the following Attributes:
    +
  • Atomtypes

  • +
  • Bonds

  • +
  • Angles

  • +
  • Dihedrals

  • +
  • Impropers

  • +
  • Radii

  • +
  • Masses

  • +
+
+
+

The GSD file also stores a body property in the particles, and the parser +uses this information to set the residue names and indices.

+

NOTE: if the body index of any particle is negative, the parser will add +an integer number (the absolute value of the minimum of all the body +indices) to all the body indices. This is because MDAnalysis cannot handle +negative residue indices. This means that in that case the residue index in +the MDAnalysis.Universe will not correspond to the body index stored in the +GSD file.

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse Hoomd GSD file

+
+

New in version 0.17.0.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/HoomdXMLParser.html b/2.7.0-dev0/documentation_pages/topology/HoomdXMLParser.html new file mode 100644 index 0000000000..f3e92b64ce --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/HoomdXMLParser.html @@ -0,0 +1,451 @@ + + + + + + + 5.9. HOOMD XML topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.9. HOOMD XML topology parser

+
+

New in version 0.11.0.

+
+

The HoomdXMLParser generates a topology from files for the HOOMD code.

+

Read a list of atoms from a HOOMD XML file to build a basic topology. +Masses and charges are set to zero if not present in the XML file. +Hoomd XML does not identify molecules or residues, so placeholder values +are used for residue numbers. +Bonds and angles are read if present.

+
+

5.9.1. Classes

+
+
+class MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser(filename)[source]
+

Parses a Hoomd XML file to create a Topology

+
+
Reads the following Attributes:
    +
  • Atomtypes

  • +
  • Bonds

  • +
  • Angles

  • +
  • Dihedrals

  • +
  • Impropers

  • +
  • Radii

  • +
  • Masses

  • +
+
+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse Hoomd XML file

+

Hoomd XML format does not contain a node for names. The parser will +look for a name node anyway, and if it doesn’t find one, it will use +the atom types as names. If the Hoomd XML file doesn’t contain a type +node (it should), then all atom types will be ‘none’. Similar to the +names, the parser will try to read atom type, mass, and charge from the XML +file, but it will use placeholder values if they are not present.

+

Because Hoomd uses unitless mass, charge, etc., if they are not present +they will not be guessed - they will be set to zero.

+
+

New in version 0.11.0.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/ITPParser.html b/2.7.0-dev0/documentation_pages/topology/ITPParser.html new file mode 100644 index 0000000000..99a59fbd97 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/ITPParser.html @@ -0,0 +1,532 @@ + + + + + + + 5.10. ITP topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.10. ITP topology parser

+

Reads a GROMACS ITP or TOP file to build the system. The topology will +contain atom IDs, segids, residue IDs, residue names, atom names, atom types, +charges, chargegroups, masses (guessed if not found), moltypes, and molnums. +Bonds, angles, dihedrals and impropers are also read from the file.

+

If an ITP file is passed without a [ molecules ] directive, passing +infer_system=True (the default option) will create a Universe with +1 molecule of each defined moleculetype. +If a [ molecules ] section is present, infer_system is ignored.

+

If files are included with the #include directive, they will also be read. +If they are not in the working directory, ITPParser will look for them in the +include_dir directory. By default, this is set to +include_dir="/usr/local/gromacs/share/gromacs/top/". +Variables can be defined with the #define directive in files, or by passing +in keyword arguments.

+

Examples

+
+
::

import MDAnalysis as mda +from MDAnalysis.tests.datafiles import ITP_tip5p

+

# override charge of HW2 atom (defined in file as HW2_CHARGE) +u = mda.Universe(ITP_tip5p, HW2_CHARGE=2, infer_system=True)

+
+
+
+

Note

+

AMBER also uses topology files with the .top extension. To use ITPParser +to read GROMACS top files, pass topology_format='ITP'.

+
import MDAnalysis as mda
+u = mda.Universe('topol.top', topology_format='ITP')
+
+
+
+
+

5.10.1. Preprocessor variables

+

ITP files are often defined with lines that depend on +whether a keyword flag is given. For example, this modified TIP5P water file:

+
+
[ moleculetype ]
+; molname       nrexcl
+SOL             2
+
+#ifndef HW1_CHARGE
+    #define HW1_CHARGE 0.241
+#endif
+
+#define HW2_CHARGE 0.241
+
+[ atoms ]
+; id    at type res nr  residu name     at name         cg nr   charge
+1       opls_118     1       SOL              OW             1       0
+2       opls_119     1       SOL             HW1             1       HW1_CHARGE
+3       opls_119     1       SOL             HW2             1       HW2_CHARGE
+4       opls_120     1       SOL             LP1             1      -0.241
+5       opls_120     1       SOL             LP2             1      -0.241
+#ifdef EXTRA_ATOMS  ; added for keyword tests
+6       opls_120     1       SOL             LP3             1      -0.241
+7       opls_120     1       SOL             LP4             1       0.241
+#endif
+
+
+
+

Define these preprocessor variables by passing keyword arguments. Any arguments that you +pass in override any variables defined in the file. For example, the universe below +will have charges of 3 for the HW1 and HW2 atoms:

+
import MDAnalysis as mda
+from MDAnalysis.tests.datafiles import ITP_tip5p
+
+u = mda.Universe(ITP_tip5p, EXTRA_ATOMS=True, HW1_CHARGE=3, HW2_CHARGE=3)
+
+
+

These keyword variables are case-sensitive. Note that if you set keywords to +False or None, they will be treated as if they are not defined in #ifdef conditions.

+

For example, the universe below will only have 5 atoms.

+
u = mda.Universe(ITP_tip5p, EXTRA_ATOMS=False)
+
+
+
+
+

5.10.2. Classes

+
+
+class MDAnalysis.topology.ITPParser.ITPParser(filename)[source]
+

Read topology information from a GROMACS ITP or TOP file.

+

Creates a Topology with the following Attributes: +- ids +- names +- types +- masses +- charges +- chargegroups +- resids +- resnames +- segids +- moltypes +- molnums +- bonds +- angles +- dihedrals +- impropers

+
+

Changed in version 2.2.0: no longer adds angles for water molecules with SETTLE constraint

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(include_dir='/usr/local/gromacs/share/gromacs/top/', infer_system=True, **kwargs)[source]
+

Parse ITP file into Topology

+
+
Parameters
+
    +
  • include_dir (str, optional) – A directory in which to look for other files included +from the original file, if the files are not first found +in the current directory. +Default: “/usr/local/gromacs/share/gromacs/top/”

  • +
  • infer_system (bool, optional (default True)) – If a [ molecules ] directive is not found within the the +topology file, create a Topology with one of every +[ moleculetype ] defined. If a [ molecules ] directive is +found, this keyword is ignored.

  • +
+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/LAMMPSParser.html b/2.7.0-dev0/documentation_pages/topology/LAMMPSParser.html new file mode 100644 index 0000000000..900d4fa114 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/LAMMPSParser.html @@ -0,0 +1,506 @@ + + + + + + + 5.11. LAMMPSParser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.11. LAMMPSParser

+

Parses data or dump files produced by LAMMPS.

+
+

Changed in version 1.0.0: Deprecated LAMMPSDataConverter has now been removed.

+
+
+

5.11.1. Atom styles

+

By default parsers and readers for Lammps data files expect either an +atomic or full atom_style. This can be customised by passing +the atom_style keyword argument. This should be a space separated +string indicating the position of the id, type, resid, charge, +x, y and z fields. The resid and charge fields are optional +and any other specified field will be ignored.

+

For example to read a file with the following format, where there is no resid:

+
Atoms # atomic
+
+1 1 3.7151744275286681e+01 1.8684434743140471e+01 1.9285127961842125e+01 0 0 0
+
+
+

The following code could be used:

+
>>> import MDAnalysis as mda
+>>>
+>>> u = mda.Universe('myfile.data', atom_style='id type x y z')
+
+
+
+
+

5.11.2. Classes

+
+
+class MDAnalysis.topology.LAMMPSParser.DATAParser(filename)[source]
+

Parse a LAMMPS DATA file for topology and coordinates.

+

Note that LAMMPS DATA files can be used standalone.

+

Both topology and coordinate parsing functionality is kept in this +class as the topology and coordinate reader share many common +functions

+

By default the parser expects either atomic or full atom_style +however this can be by passing an atom_style keyword argument, +see Atom styles.

+
+

New in version 0.9.0.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+grab_datafile()[source]
+

Split a data file into dict of header and sections

+
+
Returns
+

    +
  • header - dict of header section (value)

  • +
  • sections - dict of section name (content)

  • +
+

+
+
+
+ +
+
+parse(**kwargs)[source]
+

Parses a LAMMPS DATA file.

+
+
Return type
+

MDAnalysis Topology object.

+
+
+
+ +
+
+read_DATA_timestep(n_atoms, TS_class, TS_kwargs, atom_style=None)[source]
+

Read a DATA file and try and extract x, v, box.

+
    +
  • positions

  • +
  • velocities (optional)

  • +
  • box information

  • +
+

Fills this into the Timestep object and returns it

+
+

New in version 0.9.0.

+
+
+

Changed in version 0.18.0: Added atom_style kwarg

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+class MDAnalysis.topology.LAMMPSParser.LammpsDumpParser(filename)[source]
+

Parses Lammps ascii dump files in ‘atom’ format.

+

Sets all masses to 1.0.

+
+

Changed in version 2.0.0.

+
+
+

New in version 0.19.0.

+
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/MMTFParser.html b/2.7.0-dev0/documentation_pages/topology/MMTFParser.html new file mode 100644 index 0000000000..a936a63bf6 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/MMTFParser.html @@ -0,0 +1,241 @@ + + + + + + + 5.13. MMTF Topology Parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.13. MMTF Topology Parser

+

Reads topology data from the Macromolecular Transmission Format +(MMTF) format. This should generally be a quicker alternative to PDB.

+

Makes individual models within the MMTF file available via the models +attribute on Universe.

+
+

New in version 0.16.0.

+
+
+

Changed in version 0.20.0: Can now read files with optional fields missing/empty

+
+
+

Changed in version 2.0.0: Aliased bfactors topologyattribute to tempfactors. +tempfactors is deprecated and will be removed in 3.0 (Issue #1901)

+
+

Reads the following topology attributes:

+
+
Atoms:
    +
  • altLoc

  • +
  • atom ID

  • +
  • tempfactor

  • +
  • bonds

  • +
  • charge

  • +
  • masses (guessed)

  • +
  • name

  • +
  • occupancy

  • +
  • type

  • +
+
+
Residues:
    +
  • icode

  • +
  • resname

  • +
  • resid

  • +
  • resnum

  • +
+
+
Segments:
    +
  • segid

  • +
  • model

  • +
+
+
+
+

5.13.1. Classes

+
+
+class MDAnalysis.topology.MMTFParser.MMTFParser(filename)[source]
+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/MOL2Parser.html b/2.7.0-dev0/documentation_pages/topology/MOL2Parser.html new file mode 100644 index 0000000000..0e0f428550 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/MOL2Parser.html @@ -0,0 +1,490 @@ + + + + + + + 5.14. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.14. MOL2 file format — MDAnalysis.coordinates.MOL2

+

Classes to read Tripos molecule structure format (MOL2) coordinate +and topology files. Used by the DOCK docking code.

+
+

5.14.1. Classes

+
+
+class MDAnalysis.topology.MOL2Parser.MOL2Parser(filename)[source]
+

Reads topology from a Tripos MOL2 file.

+
+
Creates the following Attributes:
    +
  • Atomids

  • +
  • Atomnames

  • +
  • Atomtypes

  • +
  • Charges

  • +
  • Resids

  • +
  • Resnames

  • +
  • Bonds

  • +
  • Elements

  • +
+
+
Guesses the following:
    +
  • masses

  • +
+
+
+

Notes

+

Elements are obtained directly from the SYBYL atom types. If some atoms have +unknown atom types, they will be assigned an empty element record. If all +atoms have unknown atom types, the elements attribute will not be set.

+

Dealing with optional fields:

+
+
    +
  1. resid will set to 1 when not provided.

  2. +
  3. If no atoms have resname field, resnames attribute will not be set; +If some atoms have resname while some do not, +ValueError will occur.

  4. +
  5. If “NO_CHARGES” shows up in “@<TRIPOS>MOLECULE” section +and no atoms have the charge field, charges attribute will not be set; +If “NO_CHARGES” shows up while charge field appears, +ValueError will occur; +If a charge model is specified while some atoms don’t have charge, +ValueError will occur as well.

  6. +
+
+
+
Raises
+
    +
  • ValueError – If some atoms have the optional field resname (aka subst_name) + while some do not.

  • +
  • ValueError – If “NO_CHARGES” shows up in “@<TRIPOS>MOLECULE” section while + some atoms have the optional field charge.

  • +
  • ValueError – If a charge model is specified in “@<TRIPOS>MOLECULE” section while + some atoms do not have the optional field charge.

  • +
+
+
+
+

Changed in version 0.9: Now subclasses TopologyReaderBase

+
+
+

Changed in version 0.20.0: Allows for comments at the top of the file +Ignores status bit strings

+
+
+

Changed in version 2.0.0: Bonds attribute is not added if no bonds are present in MOL2 file

+
+
+

Changed in version 2.0.0: Parse elements from atom types.

+
+
+

Changed in version 2.2.0: Read MOL2 files with optional columns omitted.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse MOL2 file filename and return the dict structure.

+
+
Return type
+

A MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/MinimalParser.html b/2.7.0-dev0/documentation_pages/topology/MinimalParser.html new file mode 100644 index 0000000000..d42acf8ff6 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/MinimalParser.html @@ -0,0 +1,432 @@ + + + + + + + 5.12. Minimal topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.12. Minimal topology parser

+

Parses only the number of atoms from a coordinate/trajectory file. +This minimal topology can be used to access coordinate data without the need +for a full-fledged topology file.

+
+

5.12.1. Classes

+
+
+class MDAnalysis.topology.MinimalParser.MinimalParser(filename)[source]
+

Produces a minimal topology from only the number of atoms.

+
+
This requires that the number of atoms be given in one of two ways:
    +
  • The number of atoms can be given as the ‘n_atoms’ keyword argument.

  • +
  • If this is not given, then a Reader object for the filename will be +created and the parse_n_atoms method on this Reader will be called, +(requiring that the Reader has this capability).

  • +
+
+
+

This requires that the coordinate format has

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Return the minimal Topology object

+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/PDBParser.html b/2.7.0-dev0/documentation_pages/topology/PDBParser.html new file mode 100644 index 0000000000..48c9284ab1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/PDBParser.html @@ -0,0 +1,497 @@ + + + + + + + 5.15. PDB Topology Parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.15. PDB Topology Parser

+

This topology parser uses a standard PDB file to build a minimum +internal structure representation (list of atoms).

+

The topology reader reads a PDB file line by line and ignores atom +numbers but only reads residue numbers up to 9,999 correctly. If you +have systems containing at least 10,000 residues then you need to use +a different file format (e.g. the “extended” PDB, XPDB format, see +ExtendedPDBParser) that can handle residue +numbers up to 99,999.

+
+

Note

+

The parser processes atoms and their names. Masses are guessed and set to 0 +if unknown. Partial charges are not set. Elements are parsed if they are +valid. If partially missing or incorrect, empty records are assigned.

+
+ +
+

5.15.1. Classes

+
+
+class MDAnalysis.topology.PDBParser.PDBParser(filename)[source]
+

Parser that obtains a list of atoms from a standard PDB file.

+
+
Creates the following Attributes (if present):
    +
  • names

  • +
  • chainids

  • +
  • tempfactors

  • +
  • occupancies

  • +
  • record_types (ATOM/HETATM)

  • +
  • resids

  • +
  • resnames

  • +
  • segids

  • +
  • elements

  • +
  • bonds

  • +
  • formalcharges

  • +
+
+
Guesses the following Attributes:
    +
  • masses

  • +
+
+
+ +
+

New in version 0.8.

+
+
+

Changed in version 0.18.0: Added parsing of Record types

+
+
+

Changed in version 1.0.0: Added parsing of valid Elements

+
+
+

Changed in version 2.0.0: Bonds attribute is not added if no bonds are present in PDB file. +If elements are invalid or partially missing, empty elements records +are now assigned (Issue #2422). +Aliased bfactors topologyattribute to tempfactors. +bfactors is deprecated and will be removed in 3.0 (Issue #1901)

+
+
+

Changed in version 2.3.0: Formal charges are now read from PDB files if present. No formalcharge +attribute is created if no formal charges are present in the PDB file. +Any formal charges not set are assumed to have a value of 0. +Raise UserWarning instead RuntimeError +when CONECT records are corrupt.

+
+
+

Changed in version 2.5.0: Formal charges will not be populated if an unknown entry is encountered, +instead a UserWarning is emitted.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse atom information from PDB file

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/PDBQTParser.html b/2.7.0-dev0/documentation_pages/topology/PDBQTParser.html new file mode 100644 index 0000000000..269526300a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/PDBQTParser.html @@ -0,0 +1,463 @@ + + + + + + + 5.17. PDBQT topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.17. PDBQT topology parser

+

Use a PDBQT file to build a minimum internal structure representation (list of +atoms), including AutoDock atom types (stored as Atom.type) and +partial charges (Atom.charge).

+
    +
  • Reads a PDBQT file line by line and does not require sequential atom numbering.

  • +
  • Multi-model PDBQT files are not supported.

  • +
+

Notes

+

Only reads atoms and their names; connectivity is not +deduced. Masses are guessed and set to 0 if unknown.

+
+

See also

+

None

+
+
+

5.17.1. Classes

+
+
+class MDAnalysis.topology.PDBQTParser.PDBQTParser(filename)[source]
+

Read topology from a PDBQT file.

+
+
Creates the following Attributes:
    +
  • atom ids (serial)

  • +
  • atom types

  • +
  • atom names

  • +
  • altLocs

  • +
  • resnames

  • +
  • chainIDs (becomes segid)

  • +
  • resids

  • +
  • record_types (ATOM/HETATM)

  • +
  • icodes

  • +
  • occupancies

  • +
  • tempfactors

  • +
  • charges

  • +
+
+
Guesses the following:
    +
  • elements

  • +
  • masses

  • +
+
+
+
+

Changed in version 0.18.0: Added parsing of Record types

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse atom information from PDBQT file filename.

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/PQRParser.html b/2.7.0-dev0/documentation_pages/topology/PQRParser.html new file mode 100644 index 0000000000..4e5024d0c1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/PQRParser.html @@ -0,0 +1,478 @@ + + + + + + + 5.18. PQR topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.18. PQR topology parser

+

Read atoms with charges from a PQR file (as written by PDB2PQR). No +connectivity is deduced.

+
+

Note

+

The file format is described in MDAnalysis.coordinates.PQR.

+
+
+

5.18.1. Classes

+
+
+class MDAnalysis.topology.PQRParser.PQRParser(filename)[source]
+

Parse atom information from PQR file filename.

+
+
Creates a MDAnalysis Topology with the following attributes
    +
  • Atomids

  • +
  • Atomnames

  • +
  • Charges

  • +
  • Radii

  • +
  • RecordTypes (ATOM/HETATM)

  • +
  • Resids

  • +
  • Resnames

  • +
  • Segids

  • +
+
+
Guesses the following:
    +
  • atomtypes (if not present, Gromacs generated PQR files have these)

  • +
  • masses

  • +
+
+
+
+

Changed in version 0.9.0: Read chainID from a PQR file and use it as segid (before we always used +‘SYSTEM’ as the new segid).

+
+
+

Changed in version 0.16.1: Now reads insertion codes and splits into new residues around these

+
+
+

Changed in version 0.18.0: Added parsing of Record types +Can now read PQR files from Gromacs, these provide atom type as last column +but don’t have segids

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+static guess_flavour(line)[source]
+

Guess which variant of PQR format this line is

+
+
Parameters
+

line (str) – entire line of PQR file starting with ATOM/HETATM

+
+
Returns
+

    +
  • flavour (str) – ORIGINAL / GROMACS / NO_CHAINID

  • +
  • .. versionadded:: 0.18.0

  • +
+

+
+
+
+ +
+
+parse(**kwargs)[source]
+

Parse atom information from PQR file filename.

+
+
Return type
+

A MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/PSFParser.html b/2.7.0-dev0/documentation_pages/topology/PSFParser.html new file mode 100644 index 0000000000..9b908bbdfc --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/PSFParser.html @@ -0,0 +1,443 @@ + + + + + + + 5.19. PSF topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.19. PSF topology parser

+

Reads a CHARMM/NAMD/XPLOR PSF file to build the system. The topology will +contain atom IDs, segids, residue IDs, residue names, atom names, atom types, +charges and masses. Bonds, angles, dihedrals and impropers are also read from +the file.

+

It reads both standard and extended (“EXT”) PSF formats and can also parse NAMD +space-separated “PSF” file variants.

+
+

5.19.1. Classes

+
+
+class MDAnalysis.topology.PSFParser.PSFParser(filename)[source]
+

Read topology information from a CHARMM/NAMD/XPLOR PSF file.

+

Creates a Topology with the following Attributes: +- ids +- names +- types +- masses +- charges +- resids +- resnames +- segids +- bonds +- angles +- dihedrals +- impropers

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse PSF file into Topology

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/TOPParser.html b/2.7.0-dev0/documentation_pages/topology/TOPParser.html new file mode 100644 index 0000000000..b178e8df25 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/TOPParser.html @@ -0,0 +1,818 @@ + + + + + + + 5.20. AMBER PRMTOP topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.20. AMBER PRMTOP topology parser

+

Reads an AMBER top file to build the system.

+

Amber keywords are turned into the following attributes:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AMBER flag

MDAnalysis attribute

ATOM_NAME

names

CHARGE

charges

ATOMIC_NUMBER

elements

MASS

masses

BONDS_INC_HYDROGEN +BONDS_WITHOUT_HYDROGEN

bonds

ANGLES_INC_HYDROGEN +ANGLES_WITHOUT_HYDROGEN

angles

DIHEDRALS_INC_HYDROGEN +DIHEDRALS_WITHOUT_HYDROGEN

dihedrals / improper

ATOM_TYPE_INDEX

type_indices

AMBER_ATOM_TYPE

types

RESIDUE_LABEL

resnames

RESIDUE_POINTER

residues

+
+

Note

+

The Amber charge is converted to electron charges as used in +MDAnalysis and other packages. To get back Amber charges, multiply +by 18.2223.

+

Chamber-style Amber topologies (i.e. topologies generated via parmed +conversion of a CHARMM topology to an AMBER one) are not currently +supported. Support will likely be added in future MDAnalysis releases.

+

As of version 2.0.0, elements are no longer guessed if ATOMIC_NUMBER records +are missing. In those scenarios, if elements are necessary, users will have +to invoke the element guessers after parsing the topology file. Please see +MDAnalysis.topology.guessers for more details.

+
+
+

5.20.1. Classes

+
+
+class MDAnalysis.topology.TOPParser.TOPParser(filename)[source]
+

Reads topology information from an AMBER top file.

+

Reads the following Attributes if in topology: +- Atomnames +- Charges +- Masses +- Elements +- Atomtypes +- Resnames +- Type_indices +- Bonds +- Angles +- Dihedrals (inc. impropers)

+

The format is defined in PARM parameter/topology file +specification. The reader tries to detect if it is a newer +(AMBER 12?) file format by looking for the flag “ATOMIC_NUMBER”.

+

Notes

+

Elements are obtained from the atomic numbers (if present). If a given +input atomic number does not belong to an element (usually either -1 or 0), +the element will be assigned an empty record.

+
+

Changed in version 0.7.6: parses both amber10 and amber12 formats

+
+
+

Changed in version 0.19.0: parses bonds, angles, dihedrals, and impropers

+
+
+

Changed in version 1.0.0: warns users that chamber-style topologies are not currently supported

+
+
+

Changed in version 2.0.0: no longer guesses elements if missing

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Parse Amber PRMTOP topology file filename.

+
+
Return type
+

A MDAnalysis Topology object

+
+
+
+ +
+
+parse_bonded(num_per_record, numlines)[source]
+

Extracts bond information from PARM7 format files

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section

  • +
  • numlines (int) – The number of lines to be parsed for this section

  • +
+
+
+
+

Note

+

For the bond/angle sections of parm7 files, the atom numbers are set to +coordinate array index values. As detailed in +http://ambermd.org/formats.html to recover the actual atom number, one +should divide the values by 3 and add 1. Here, since we want to satisfy +zero-indexing, we only divide by 3.

+
+
+ +
+
+parse_charges(num_per_record, numlines)[source]
+

Extracts the partial charges for each atom

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

attr – A Charges instance containing the partial charges of each +atom as defined in the parm7 file

+
+
Return type
+

Charges

+
+
+
+ +
+
+parse_chunks(data, chunksize)[source]
+

Helper function to parse AMBER PRMTOP bonds/angles.

+
+
Parameters
+
    +
  • data (list of int) – Input list of the parm7 bond/angle section, zero-indexed

  • +
  • num_per_record (int) – The number of entries for each record in the input list

  • +
+
+
Returns
+

vals – A list of tuples containing the atoms involved in a given bonded +interaction

+
+
Return type
+

list of int tuples

+
+
+
+

Note

+

In the parm7 format this information is structured in the following +format: [ atoms 1:n, internal index ] +Where 1:n represent the ids of the n atoms involved in the bond/angle +and the internal index links to a given set of FF parameters. +Therefore, to extract the required information, we split out the list +into chunks of size num_per_record, and only extract the atom ids.

+
+
+ +
+
+parse_dihedrals(diha, dihh)[source]
+

Combines hydrogen and non-hydrogen containing AMBER dihedral lists +and extracts sublists for conventional dihedrals and improper angles

+
+
Parameters
+
    +
  • diha (list of tuples) – The atom ids of dihedrals not involving hydrogens

  • +
  • dihh (list of tuples) – The atom ids of dihedrals involving hydrogens

  • +
+
+
Returns
+

    +
  • dihedrals (Dihedrals) – A Dihedrals instance containing a list of all unique +dihedrals as defined by the parm7 file

  • +
  • impropers (Impropers) – A Impropers instance containing a list of all unique +improper dihedrals as defined by the parm7 file

  • +
+

+
+
+
+

Note

+

As detailed in http://ambermd.org/formats.html, the dihedral sections +of parm7 files contain information about both conventional dihedrals +and impropers. The following must be accounted for: +1) If the fourth atom in a dihedral entry is given a negative value, +this indicates that it is an improper. +2) If the third atom in a dihedral entry is given a negative value, +this indicates that it 1-4 NB interactions are ignored for this +dihedrals. This could be due to the dihedral within a ring, or if it is +part of a multi-term dihedral definition or if it is an improper.

+
+
+ +
+
+parse_elements(num_per_record, numlines)[source]
+

Extracts the atomic numbers of each atom and converts to element type

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section(unused input)

  • +
  • numlines (int) – The number of lines to be pasred in current section

  • +
+
+
Returns
+

attr – A Elements instance containing the element of each atom +as defined in the parm7 file

+
+
Return type
+

Elements

+
+
+
+

Note

+

If the record contains unknown atomic numbers (e.g. <= 0), these will +be treated as unknown elements and assigned an empty string value. See +issues #2306 and #2651 for more details.

+
+

Changed in version 2.0.0: Unrecognised elements will now return a empty string. The parser +will no longer attempt to guess the element by default.

+
+
+
+ +
+
+parse_masses(num_per_record, numlines)[source]
+

Extracts the mass of each atom

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

attr – A Masses instance containing the mass of each atom as +defined in the parm7 file

+
+
Return type
+

Masses

+
+
+
+ +
+
+parse_names(num_per_record, numlines)[source]
+

Extracts atoms names from parm7 file

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in the section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

attr – A Atomnames instance containing the names of each atom as +defined in the parm7 file

+
+
Return type
+

Atomnames

+
+
+
+ +
+
+parse_residx(num_per_record, numlines)[source]
+

Extracts the residue pointers for each atom

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

vals – A list of zero-formatted residue pointers for each atom

+
+
Return type
+

list of int

+
+
+
+ +
+
+parse_resnames(num_per_record, numlines)[source]
+

Extracts the names of each residue

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each recrod in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

attr – A Resnames instance containing the names of each residue +as defined in the parm7 file

+
+
Return type
+

Resnames

+
+
+
+ +
+
+parse_type_indices(num_per_record, numlines)[source]
+

Extracts the index of atom types of the each atom involved in Lennard +Jones (6-12) interactions.

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

A TypeIndices instance containing the LJ 6-12 atom type +index for each atom

+
+
Return type
+

attr TypeIndices

+
+
+
+ +
+
+parse_types(num_per_record, numlines)[source]
+

Extracts the force field atom types of each atom

+
+
Parameters
+
    +
  • num_per_record (int) – The number of entries for each record in section (unused input)

  • +
  • numlines (int) – The number of lines to be parsed in current section

  • +
+
+
Returns
+

attr – A Atomtypes instance containing the atom types for each +atom as defined in the parm7 file

+
+
Return type
+

Atomtypes

+
+
+
+ +
+
+parsesection_mapper(numlines, mapper)[source]
+

Parses FORTRAN formatted section, and returns a list of all entries +in each line

+
+
Parameters
+
    +
  • numlines (int) – The number of lines to be parsed in this section

  • +
  • mapper (lambda operator) – Operator to format entries in current section

  • +
+
+
Returns
+

section – A list of all entries in a given parm7 section

+
+
Return type
+

list

+
+
+
+ +
+
+skipper()[source]
+

TOPParser :class: helper function, skips lines of input parm7 file +until we find the next %FLAG entry and return that

+
+
Returns
+

line – String containing the current line of the parm7 file

+
+
Return type
+

string

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/TPRParser.html b/2.7.0-dev0/documentation_pages/topology/TPRParser.html new file mode 100644 index 0000000000..ec323a8c8a --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/TPRParser.html @@ -0,0 +1,599 @@ + + + + + + + 5.21. Gromacs portable run input TPR format parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.21. Gromacs portable run input TPR format parser

+

The TPRParser module allows reading of a +Gromacs portable run input file (a TPR file). Because +the file format of the TPR file is changing rapidly, not all versions +are currently supported. The known working versions and the +approximate Gromacs release numbers are listed in the table +TPR format versions.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TPR format versions and generations read by MDAnalysis.topology.TPRParser.parse().

TPX format

TPX generation

Gromacs release

read

??

??

3.3, 3.3.1

no

58

17

4.0, 4.0.2, 4.0.3, +4.0.4, 4.0.5, 4.0.6, +4.0.7

yes

73

23

4.5.0, 4.5.1, 4.5.2, +4.5.3, 4.5.4, 4.5.5

yes

83

24

4.6, 4.6.1

yes

100

26

5.0, 5.0.1, 5.0.2, +5.0.3,5.0.4, 5.0.5

yes

103

26

5.1

yes

110

26

2016

yes

112

26

2018

yes

116

26

2019

yes

119

27

2020[*]_

yes

122

28

2021

yes

127

28

2022

yes

129

28

2023

yes

+
+
*
+

Files generated by the beta versions of Gromacs 2020 are NOT supported. +See Issue 2428 for more details.

+
+
+

For further discussion and notes see Issue 2. Please open a new issue in +the Issue Tracker when a new or different TPR file format version should be +supported.

+

Bonded interactions available in Gromacs are described in table 5.5 of the +Gromacs manual. The following ones are used to build the topology (see +Issue 463):

+
    +
  • bonds: regular bonds (type 1), G96 bonds (type 2), Morse (type 3), +cubic bonds (type 4), connections (type 5), harmonic potentials (type 6), +FENE bonds (type 7), restraint potentials (type 10), +tabulated potential with exclusion/connection (type 8), +tabulated potential without exclusion/connection (type 9), constraints with +exclusion/connection (type 1), constraints without exclusion/connection (type +2), SETTLE constraints

  • +
  • angles: regular angles (type 1), G96 angles (type 2), cross bond-bond +(type3), cross-bond-angle (type 4), Urey-Bradley (type 5), quartic angles +(type 6), restricted bending potential (type 10), tabulated angles (type 8)

  • +
  • dihedrals: proper dihedrals (type 1 and type 9), Ryckaert-Bellemans dihedrals +(type 3), Fourier dihedrals (type 5), restricted dihedrals (type 10), +combined bending-torsion potentials (type 11), tabulated dihedral (type 8)

  • +
  • impropers: improper dihedrals (type 2), periodic improper dihedrals (type 4)

  • +
+
+

5.21.1. Classes

+
+
+class MDAnalysis.topology.TPRParser.TPRParser(filename)[source]
+

Read topology information from a Gromacs TPR file.

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(tpr_resid_from_one=True, **kwargs)[source]
+

Parse a Gromacs TPR file into a MDAnalysis internal topology structure.

+
+
Parameters
+

tpr_resid_from_one (bool (optional)) – Toggle whether to index resids from 1 or 0 from TPR files. +TPR files index resids from 0 by default, even though GRO and ITP +files index from 1.

+
+
Returns
+

structure

+
+
Return type
+

dict

+
+
+
+

Changed in version 1.1.0: Added the tpr_resid_from_one keyword to control if +resids are indexed from 0 or 1. Default False.

+
+
+

Changed in version 2.0.0: Changed to tpr_resid_from_one=True by default.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ + +
+
+

5.21.2. Development notes

+

The TPR reader is a pure-python implementation of a basic TPR +parser. Currently the following sections of the topology are parsed:

+
    +
  • Atoms: number, name, type, resname, resid, segid, mass, charge, element +[residue, segment, radius, bfactor, resnum, moltype]

  • +
  • Bonds

  • +
  • Angles

  • +
  • Dihedrals

  • +
  • Impropers

  • +
+

This tpr parser is written according to the following files

+
    +
  • gromacs_dir/src/kernel/gmxdump.c

  • +
  • gromacs_dir/src/gmxlib/tpxio.c (the most important one)

  • +
  • gromacs_dir/src/gmxlib/gmxfio_rw.c

  • +
  • gromacs_dir/src/gmxlib/gmxfio_xdr.c

  • +
  • gromacs_dir/include/gmxfiofio.h

  • +
+

or their equivalent in more recent versions of Gromacs.

+

The function read_tpxheader() is based on the +TPRReaderDevelopment notes. Functions with names starting with +read_ or do_ are trying to be similar to those in +gmxdump.c or tpxio.c, those with extract_ are new.

+

Versions prior to Gromacs 4.0.x are not supported.

+
+

Changed in version 2.0.0: The elements topology attribute is now exposed if at least one atom has +a valid element symbol. In that case, atoms for which the element is not +recognized have their element attribute set to an empty string. If none of +the elements are recognized, then the elements attribute is not set in the +topology.

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/TXYZParser.html b/2.7.0-dev0/documentation_pages/topology/TXYZParser.html new file mode 100644 index 0000000000..ed54381e25 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/TXYZParser.html @@ -0,0 +1,446 @@ + + + + + + + 5.22. TXYZ topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.22. TXYZ topology parser

+

Tinker topology parser: reads information from .txyz and .arc files. +Atom types are read from column 6, while bond connectivity is read from column 7 +onwards.

+
+

See also

+
+
MDAnalysis.coordinates.TXYZ

further documentation on the Tinker format

+
+
+
+
+

5.22.1. Classes

+
+
+class MDAnalysis.topology.TXYZParser.TXYZParser(filename)[source]
+

Parse a list of atoms from a Tinker XYZ file.

+

Creates the following attributes:

+
    +
  • Atomnames

  • +
  • Atomtypes

  • +
  • Elements (if all atom names are element symbols)

  • +
+
+

New in version 0.17.0.

+
+
+

Changed in version 2.4.0: Adding the Element attribute if all names are valid element symbols.

+
+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+parse(**kwargs)[source]
+

Read the file and return the structure.

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/XYZParser.html b/2.7.0-dev0/documentation_pages/topology/XYZParser.html new file mode 100644 index 0000000000..e4831296a1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/XYZParser.html @@ -0,0 +1,232 @@ + + + + + + + 5.23. XYZ Topology Parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.23. XYZ Topology Parser

+
+

New in version 0.9.1.

+
+

Reads an xyz file and pulls the atom information from it. Because +xyz only has atom name information, all information about residues +and segments won’t be populated.

+
+

5.23.1. Classes

+
+
+class MDAnalysis.topology.XYZParser.XYZParser(filename)[source]
+

Parse a list of atoms from an XYZ file.

+
+
Creates the following attributes:
    +
  • Atomnames

  • +
+
+
Guesses the following attributes:
    +
  • Atomtypes

  • +
  • Masses

  • +
+
+
+
+

New in version 0.9.1.

+
+
+
+parse(**kwargs)[source]
+

Read the file and return the structure.

+
+
Return type
+

MDAnalysis Topology object

+
+
+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/base.html b/2.7.0-dev0/documentation_pages/topology/base.html new file mode 100644 index 0000000000..3c0db7b012 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/base.html @@ -0,0 +1,431 @@ + + + + + + + 5.24. Base topology reader classes — MDAnalysis.topology.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.24. Base topology reader classes — MDAnalysis.topology.base

+

Derive topology reader classes from the base class in this module. All +topology readers raise IOError upon failing to read a topology +file and ValueError upon failing to make sense of the read data.

+
+

5.24.1. Classes

+
+
+class MDAnalysis.topology.base.TopologyReaderBase(filename)[source]
+

Base class for topology readers

+
+
Parameters
+
    +
  • filename (str) – name of the topology file

  • +
  • universe (Universe, optional) – Supply a Universe to the Parser. This then passes it to the +atom instances that are created within parsers.

  • +
  • which (All topology readers must define a parse method) –

  • +
  • object (returns a Topology) –

  • +
+
+
+

:raises * IOError upon failing to read a topology file: +:raises * ValueError upon failing to make sense of the read data: +:raises .. versionadded:: 0.9.0: +:raises .. versionchanged:: 0.9.2: Added keyword ‘universe’ to pass to Atom creation.

+
+
+close()
+

Close the trajectory file.

+
+ +
+
+convert_forces_from_native(force, inplace=True)
+

Conversion of forces array force from native to base units

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+

New in version 0.7.7.

+
+
+
+ +
+
+convert_forces_to_native(force, inplace=True)
+

Conversion of force array force from base to native units.

+
+
Parameters
+
    +
  • force (array_like) – Forces to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input force is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.7.

+
+
+ +
+
+convert_pos_from_native(x, inplace=True)
+

Conversion of coordinate array x from native units to base units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_pos_to_native(x, inplace=True)
+

Conversion of coordinate array x from base units to native units.

+
+
Parameters
+
    +
  • x (array_like) – Positions to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input x is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_from_native(t, inplace=True)
+

Convert time t from native units to base units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also returned +(although note that scalar values t are passed by value in Python and +hence an in-place modification has no effect on the caller.) In-place +operations improve performance because allocating new arrays is +avoided.

+
+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+ +
+
+convert_time_to_native(t, inplace=True)
+

Convert time t from base units to native units.

+
+
Parameters
+
    +
  • t (array_like) – Time values to transform

  • +
  • inplace (bool, optional) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input t is modified in place and also +returned. (Also note that scalar values t are passed by +value in Python and hence an in-place modification has no +effect on the caller.)

+
+

Changed in version 0.7.5: Keyword inplace can be set to False so that a +modified copy is returned unless no conversion takes +place, in which case the reference to the unmodified x is +returned.

+
+
+
+ +
+
+convert_velocities_from_native(v, inplace=True)
+

Conversion of velocities array v from native to base units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+convert_velocities_to_native(v, inplace=True)
+

Conversion of coordinate array v from base to native units

+
+
Parameters
+
    +
  • v (array_like) – Velocities to transform

  • +
  • inplace (bool (optional)) – Whether to modify the array inplace, overwriting previous data

  • +
+
+
+
+

Note

+

By default, the input v is modified in place and also returned. +In-place operations improve performance because allocating new arrays +is avoided.

+
+
+

New in version 0.7.5.

+
+
+ +
+
+units = {'length': None, 'time': None, 'velocity': None}
+

dict with units of of time and length (and velocity, force, +… for formats that support it)

+
+ +
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/core.html b/2.7.0-dev0/documentation_pages/topology/core.html new file mode 100644 index 0000000000..c9f3d8bd70 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/core.html @@ -0,0 +1,198 @@ + + + + + + + 5.25. Common functions for topology building — MDAnalysis.topology.core — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.25. Common functions for topology building — MDAnalysis.topology.core

+

The various topology parsers make use of functions and classes in this +module. They are mostly of use to developers.

+
+

See also

+
+
MDAnalysis.topology.tables

for some hard-coded atom information that is used by functions such as guess_atom_type() and guess_atom_mass().

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/guessers.html b/2.7.0-dev0/documentation_pages/topology/guessers.html new file mode 100644 index 0000000000..64fded8f15 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/guessers.html @@ -0,0 +1,530 @@ + + + + + + + 5.26. Guessing unknown Topology information — MDAnalysis.topology.guessers — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.26. Guessing unknown Topology information — MDAnalysis.topology.guessers

+

In general guess_atom_X returns the guessed value for a single value, +while guess_Xs will work on an array of many atoms.

+
+

5.26.1. Example uses of guessers

+
+

5.26.1.1. Guessing elements from atom names

+

Currently, it is possible to guess elements from atom names using +guess_atom_element() (or the synonymous guess_atom_type()). This can +be done in the following manner:

+
import MDAnalysis as mda
+from MDAnalysis.topology.guessers import guess_atom_element
+from MDAnalysisTests.datafiles import PRM7
+
+u = mda.Universe(PRM7)
+
+print(u.atoms.names[1])  # returns the atom name H1
+
+element = guess_atom_element(u.atoms.names[1])
+
+print(element)  # returns element H
+
+
+

In the above example, we take an atom named H1 and use +guess_atom_element() to guess the element hydrogen (i.e. H). It is +important to note that element guessing is not always accurate. Indeed in cases +where the atom type is not recognised, we may end up with the wrong element. +For example:

+
import MDAnalysis as mda
+from MDAnalysis.topology.guessers import guess_atom_element
+from MDAnalysisTests.datafiles import PRM19SBOPC
+
+u = mda.Universe(PRM19SBOPC)
+
+print(u.atoms.names[-1])  # returns the atom name EPW
+
+element = guess_atom_element(u.atoms.names[-1])
+
+print(element)  # returns element P
+
+
+

Here we find that virtual site atom ‘EPW’ was given the element P, which +would not be an expected result. We therefore always recommend that users +carefully check the outcomes of any guessers.

+

In some cases, one may want to guess elements for an entire universe and add +this guess as a topology attribute. This can be done using guess_types() +in the following manner:

+
import MDAnalysis as mda
+from MDAnalysis.topology.guessers import guess_types
+from MDAnalysisTests.datafiles import PRM7
+
+u = mda.Universe(PRM7)
+
+guessed_elements = guess_types(u.atoms.names)
+
+u.add_TopologyAttr('elements', guessed_elements)
+
+print(u.atoms.elements)  # returns an array of guessed elements
+
+
+

More information on adding topology attributes can found in the user guide.

+
+
+
+
+
+MDAnalysis.topology.guessers.get_atom_mass(element)[source]
+

Return the atomic mass in u for element.

+

Masses are looked up in MDAnalysis.topology.tables.masses.

+
+

Warning

+

Unknown masses are set to 0.0

+
+
+

Changed in version 0.20.0: Try uppercase atom type name as well

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_angles(bonds)[source]
+

Given a list of Bonds, find all angles that exist between atoms.

+

Works by assuming that if atoms 1 & 2 are bonded, and 2 & 3 are bonded, +then (1,2,3) must be an angle.

+
+
Returns
+

List of tuples defining the angles. +Suitable for use in u._topology

+
+
Return type
+

list of tuples

+
+
+
+

See also

+

guess_bonds()

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_aromaticities(atomgroup)[source]
+

Guess aromaticity of atoms using RDKit

+
+
Parameters
+

atomgroup (mda.core.groups.AtomGroup) – Atoms for which the aromaticity will be guessed

+
+
Returns
+

aromaticities – Array of boolean values for the aromaticity of each atom

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_atom_charge(atomname)[source]
+

Guess atom charge from the name.

+
+

Warning

+

Not implemented; simply returns 0.

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_atom_element(atomname)[source]
+

Guess the element of the atom from the name.

+

Looks in dict to see if element is found, otherwise it uses the first +character in the atomname. The table comes from CHARMM and AMBER atom +types, where the first character is not sufficient to determine the atom +type. Some GROMOS ions have also been added.

+ +
+ +
+
+MDAnalysis.topology.guessers.guess_atom_mass(atomname)[source]
+

Guess a mass based on the atom name.

+

guess_atom_element() is used to determine the kind of atom.

+
+

Warning

+

Anything not recognized is simply set to 0; if you rely on the +masses you might want to double check.

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_atom_type(atomname)[source]
+

Guess atom type from the name.

+

At the moment, this function simply returns the element, as +guessed by guess_atom_element().

+ +
+ +
+
+MDAnalysis.topology.guessers.guess_bonds(atoms, coords, box=None, **kwargs)[source]
+

Guess if bonds exist between two atoms based on their distance.

+

Bond between two atoms is created, if the two atoms are within

+
+\[d < f \cdot (R_1 + R_2)\]
+

of each other, where \(R_1\) and \(R_2\) are the VdW radii +of the atoms and \(f\) is an ad-hoc fudge_factor. This is +the same algorithm that VMD uses.

+
+
Parameters
+
    +
  • atoms (AtomGroup) – atoms for which bonds should be guessed

  • +
  • coords (array) – coordinates of the atoms (i.e., AtomGroup.positions))

  • +
  • fudge_factor (float, optional) – The factor by which atoms must overlap eachother to be considered a +bond. Larger values will increase the number of bonds found. [0.55]

  • +
  • vdwradii (dict, optional) – To supply custom vdwradii for atoms in the algorithm. Must be a dict +of format {type:radii}. The default table of van der Waals radii is +hard-coded as MDAnalysis.topology.tables.vdwradii. Any user +defined vdwradii passed as an argument will supercede the table +values. [None]

  • +
  • lower_bound (float, optional) – The minimum bond length. All bonds found shorter than this length will +be ignored. This is useful for parsing PDB with altloc records where +atoms with altloc A and B maybe very close together and there should be +no chemical bond between them. [0.1]

  • +
  • box (array_like, optional) – Bonds are found using a distance search, if unit cell information is +given, periodic boundary conditions will be considered in the distance +search. [None]

  • +
+
+
Returns
+

List of tuples suitable for use in Universe topology building.

+
+
Return type
+

list

+
+
+
+

Warning

+

No check is done after the bonds are guessed to see if Lewis +structure is correct. This is wrong and will burn somebody.

+
+
+
Raises
+

ValueError

+
+
+
+

New in version 0.7.7.

+
+
+

Changed in version 0.9.0: Updated method internally to use more numpy, should work +faster. Should also use less memory, previously scaled as +\(O(n^2)\). vdwradii argument now augments table list +rather than replacing entirely.

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_dihedrals(angles)[source]
+

Given a list of Angles, find all dihedrals that exist between atoms.

+

Works by assuming that if (1,2,3) is an angle, and 3 & 4 are bonded, +then (1,2,3,4) must be a dihedral.

+
+
Returns
+

    +
  • list of tuples – List of tuples defining the dihedrals. +Suitable for use in u._topology

  • +
  • .. versionadded 0.9.0

  • +
+

+
+
+
+ +
+
+MDAnalysis.topology.guessers.guess_gasteiger_charges(atomgroup)[source]
+

Guess Gasteiger partial charges using RDKit

+
+
Parameters
+

atomgroup (mda.core.groups.AtomGroup) – Atoms for which the charges will be guessed

+
+
Returns
+

charges – Array of float values representing the charge of each atom

+
+
Return type
+

numpy.ndarray

+
+
+
+

New in version 2.0.0.

+
+
+ +
+
+MDAnalysis.topology.guessers.guess_improper_dihedrals(angles)[source]
+

Given a list of Angles, find all improper dihedrals that exist between +atoms.

+

Works by assuming that if (1,2,3) is an angle, and 2 & 4 are bonded, +then (2, 1, 3, 4) must be an improper dihedral. +ie the improper dihedral is the angle between the planes formed by +(1, 2, 3) and (1, 3, 4)

+
+
Returns
+

    +
  • List of tuples defining the improper dihedrals.

  • +
  • Suitable for use in u._topology

  • +
+

+
+
+
+ +
+
+MDAnalysis.topology.guessers.guess_masses(atom_types)[source]
+

Guess the mass of many atoms based upon their type

+
+
Parameters
+

atom_types – Type of each atom

+
+
Returns
+

atom_masses

+
+
Return type
+

np.ndarray dtype float64

+
+
+
+ +
+
+MDAnalysis.topology.guessers.guess_types(atom_names)[source]
+

Guess the atom type of many atoms based on atom name

+
+
Parameters
+

atom_names – Name of each atom

+
+
Returns
+

atom_types

+
+
Return type
+

np.ndarray dtype object

+
+
+
+ +
+
+MDAnalysis.topology.guessers.validate_atom_types(atom_types)[source]
+

Vaildates the atom types based on whether they are available in our tables

+
+
Parameters
+

atom_types – Type of each atom

+
+
Returns
+

    +
  • None

  • +
  • .. versionchanged:: 0.20.0 – Try uppercase atom type name as well

  • +
+

+
+
+
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/init.html b/2.7.0-dev0/documentation_pages/topology/init.html new file mode 100644 index 0000000000..bb15559d7d --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/init.html @@ -0,0 +1,557 @@ + + + + + + + 5.1. Topology readers — MDAnalysis.topology — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.1. Topology readers — MDAnalysis.topology

+

This submodule contains the topology readers. A topology file supplies the list +of atoms in the system, their connectivity and possibly additional information +such as B-factors, partial charges, etc. The details depend on the file format +and not every topology file provides all (or even any) additional data. This +data is made accessible through AtomGroup properties.

+

As a minimum, all topology parsers will provide atom ids, atom types, masses, +resids, resnums and segids as well as assigning all atoms to residues and all +residues to segments. For systems without residues and segments, this results +in there being a single residue and segment to which all atoms belong. Often +when data is not provided by a file, it will be guessed based on other data in +the file. In the event that this happens, a UserWarning will always be issued.

+

The following table lists the currently supported topology formats along with +the attributes they provide.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table of Supported Topology Formats

Name

extension

attributes

remarks

CHARMM/XPLOR PSF

psf

resnames, +names, types, +charges, +bonds, angles, +dihedrals, +impropers

CHARMM/XPLOR/NAMD topology format; +MDAnalysis.topology.PSFParser

CHARMM CARD 1

crd

names, +tempfactors, +resnames,

“CARD” coordinate output from CHARMM; deals with +either standard or EXTended format; +MDAnalysis.topology.CRDParser

Brookhaven 1

pdb/ent

names, bonds, +resids, resnums, +types, +chainids, +occupancies, +tempfactors, +resids, icodes, +resnames, +segids,

a simplified PDB format (as used in MD simulations) +is read by default

XPDB 1

pdb

As PDB except +icodes

Extended PDB format as used by e.g., NAMD +(can use 5-digit residue numbers). To use, specify +the format “XPBD” explicitly: +Universe(..., topology_format="XPDB"). +Module MDAnalysis.coordinates.PDB

PQR 1

pqr

names, charges, +types, +radii, resids, +resnames, icodes, +segids

PDB-like but whitespace-separated files with charge +and radius information as used by, e.g., APBS. +MDAnalysis.topology.PQRParser

PDBQT 1

pdbqt

names, types, +altLocs, charges, +resnames, +resids, +icodes, +occupancies, +tempfactors, +segids,

file format used by AutoDock with atom types and +partial charges. Module: +MDAnalysis.topology.PDBQTParser

GROMOS96 1

gro

names, resids, +resnames,

GROMOS96 coordinate file (used e.g., by Gromacs) +MDAnalysis.topology.GROParser

Amber

top, +prmtop, +parm7

names, charges +type_indices, +types, +resnames,

simple Amber format reader (only supports a subset +of flags); +MDAnalysis.topology.TOPParser

DESRES 1

dms

names, numbers, +masses, charges, +chainids, resids, +resnames, segids, +radii,

DESRES molecular structure reader (only supports +the atom and bond records) as used by Desmond and Anton; +MDAnalysis.topology.DMSParser

TPR 2

tpr

names, types, +resids, resnames, +charges, bonds, +masses, moltypes, +molnums

Gromacs portable run input reader (limited +experimental support for some of the more recent +versions of the file format); +MDAnalysis.topology.TPRParser

ITP

itp

names, types, +resids, resnames, +charges, bonds, +masses, segids, +moltypes, +chargegroups

Gromacs include topology file; +MDAnalysis.topology.ITPParser

MOL2 1

mol2

ids, names, +types, resids, +charges, bonds, +resnames,

Tripos MOL2 molecular structure format; +MDAnalysis.topology.MOL2Parser

LAMMPS 1

data

ids, types, +masses, charges, +resids, bonds, +angles, dihedrals

LAMMPS Data file parser +MDAnalysis.topology.LAMMPSParser

LAMMPS 1

lammpsdump

id, masses

LAMMPS ascii dump file reader +MDAnalysis.topology.LAMMPSParser

XYZ 1

xyz

names

XYZ File Parser. Reads only the labels from atoms +and constructs minimal topology data. +MDAnalysis.topology.XYZParser

TXYZ 1

txyz, +arc

names, atomids, +masses, types, +bonds

Tinker XYZ File Parser. Reads atom labels, numbers +and connectivity; masses are guessed from atoms names. +MDAnalysis.topology.TXYZParser

GAMESS 1

gms, +log

names, +atomic charges,

GAMESS output parser. Read only atoms of assembly +section (atom, elems and coords) and construct +topology. +MDAnalysis.topology.GMSParser

DL_POLY 1

config, +history

ids, names

DL_POLY CONFIG or HISTORY file. Reads only the +atom names. If atoms are written out of order, will +correct the order. +MDAnalysis.topology.DLPolyParser

Hoomd XML

xml

types, charges, +radii, masses +bonds, angles, +dihedrals

HOOMD XML topology file. Reads atom types, +masses, and charges if possible. Also reads bonds, +angles, and dihedrals. +MDAnalysis.topology.HoomdXMLParser

GSD 1

gsd

types, charges, +radii, masses +bonds, angles, +dihedrals

HOOMD GSD topology file. Reads atom types, +masses, and charges if possible. Also reads bonds, +angles, and dihedrals. +MDAnalysis.topology.GSDParser

MMTF 1

mmtf

altLocs, +tempfactors, +charges, masses, +names, bonds, +occupancies, +types, icodes, +resnames, resids, +segids, models

Macromolecular Transmission Format (MMTF). An +efficient compact format for biomolecular +structures.

FHIAIMS 1

in

names

FHI-AIMS File Parser. Reads only the labels from +atoms and constructs minimal topology data. +MDAnalysis.topology.FHIAIMSParser

+
+
1(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
+

This format can also be used to provide coordinates so that +it is possible to create a full +Universe by simply providing +a file of this format as the sole argument to +Universe: u = +Universe(filename)

+
+
2
+

The Gromacs TPR format contains coordinate information but +parsing coordinates from a TPR file is currently not implemented +in TPRParser.

+
+
+ +
+

5.1.1. Developer Notes

+
+

New in version 0.8.

+
+
+

Changed in version 0.16.0: The new array-based topology system completely replaced the old +system that was based on a list of Atom instances.

+
+
+

Changed in version 2.0.0: The ParmEdParser was moved to the converters module

+
+

Topology information consists of data that do not change over time, +i.e. information that is the same for all time steps of a +trajectory. This includes

+
    +
  • identity of atoms (name, type, number, partial charge, …) and to +which residue and segment they belong; atoms are identified in +MDAnalysis by their index, +an integer number starting at 0 and incremented in the order of +atoms found in the topology.

  • +
  • bonds (pairs of atoms)

  • +
  • angles (triplets of atoms)

  • +
  • dihedral angles (quadruplets of atoms) — proper and improper +dihedrals should be treated separately

  • +
+

Topology readers are generally called “parsers” in MDAnalysis (for +historical reasons and in order to distinguish them from coordinate +“readers”). All parsers are derived from +MDAnalysis.topology.base.TopologyReaderBase and have a +parse() method that +returns a MDAnalysis.core.topology.Topology instance.

+
+

5.1.1.1. atoms

+

The atoms appear to the user as an array of +Atom instances. However, under the +hood this is essentially only an array of atom indices that are used +to index the various components of the topology database +Topology. The parser needs to +initialize the Topology with the +data read from the topology file.

+
+

See also

+

Topology system

+
+
+
+

5.1.1.2. bonds

+

Bonds are represented as a tuple of tuple. Each tuple +contains two atom numbers, which indicate the atoms between which the +bond is formed. Only one of the two permutations is stored, typically +the one with the lower atom number first.

+
+
+

5.1.1.3. bondorder

+

Some bonds have additional information called order. When available +this is stored in a dictionary of format {bondtuple:order}. This extra +information is then passed to Bond initialisation in u._init_bonds()

+
+
+

5.1.1.4. angles

+

Angles are represented by a list of tuple. Each +tuple contains three atom numbers. The second of these numbers +represents the apex of the angle.

+
+
+

5.1.1.5. dihedrals

+

Proper dihedral angles are represented by a list of tuple. Each +tuple contains four atom numbers. The angle of the torsion +is defined by the angle between the planes formed by atoms 1, 2, and 3, +and 2, 3, and 4.

+
+
+

5.1.1.6. impropers

+

Improper dihedral angles are represented by a list of tuple. Each +tuple contains four atom numbers. The angle of the improper torsion +is again defined by the angle between the planes formed by atoms 1, 2, and 3, +and 2, 3, and 4. Improper dihedrals differ from regular dihedrals as the +four atoms need not be sequentially bonded, and are instead often all bonded +to the second atom.

+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/tables.html b/2.7.0-dev0/documentation_pages/topology/tables.html new file mode 100644 index 0000000000..83bfa1e7c7 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/tables.html @@ -0,0 +1,255 @@ + + + + + + + 5.27. MDAnalysis topology tables — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.27. MDAnalysis topology tables

+

The module contains static lookup tables for atom typing etc. The +tables are dictionaries that are indexed by the element.

+
+
+MDAnalysis.topology.tables.atomelements = {'AC': 'C', 'BC': 'C', 'BR': 'BR', 'C0': 'CA', 'CA2+': 'CA', 'CAL': 'CA', 'CES': 'CS', 'CL': 'CL', 'CL-': 'CL', 'CLA': 'CL', 'CLAL': 'CL', 'CS': 'CS', 'CS+': 'CS', 'CU': 'CU', 'FE': 'FE', 'FE2': 'FE', 'IOD': 'I', 'K': 'K', 'K+': 'K', 'LI': 'LI', 'LI+': 'LI', 'LIT': 'LI', 'MG': 'MG', 'MG2+': 'MG', 'MW': 'DUMMY', 'NA': 'NA', 'NA+': 'NA', 'POT': 'K', 'QC': 'CE', 'QK': 'K', 'QL': 'LI', 'QN': 'NA', 'QR': 'RB', 'RB': 'RB', 'SOD': 'NA', 'ZN': 'ZN'}
+

Dictionary with hard-coded special atom names, used for guessing atom types +with MDAnalysis.topology.core.guess_atom_type().

+
+ +
+
+MDAnalysis.topology.tables.masses = {'Ac': 227.028, 'Ag': 107.8682, 'Al': 26.981539, 'Am': 243.0, 'Ar': 39.948, 'As': 74.92159, 'At': 210.0, 'Au': 196.96654, 'B': 10.811, 'BR': 79.904, 'Ba': 137.327, 'Be': 9.012182, 'Bh': 262.0, 'Bi': 208.98037, 'Bk': 247.0, 'C': 12.011, 'CA': 40.08, 'CL': 35.45, 'CS': 132.9, 'CU': 63.546, 'Cd': 112.411, 'Ce': 140.116, 'Cf': 251.0, 'Cm': 247.0, 'Co': 58.9332, 'Cr': 51.9961, 'DUMMY': 0.0, 'Db': 262.0, 'Dy': 162.5, 'Er': 167.26, 'Es': 252.0, 'Eu': 151.965, 'F': 18.998, 'FE': 55.847, 'Fm': 257.0, 'Fr': 223.0, 'Ga': 69.723, 'Gd': 157.25, 'Ge': 72.61, 'H': 1.008, 'HE': 4.0026, 'Hf': 178.49, 'Hg': 200.59, 'Ho': 164.93032, 'Hs': 265.0, 'I': 126.9045, 'In': 114.82, 'Ir': 192.22, 'K': 39.102, 'Kr': 83.8, 'La': 138.9055, 'Li': 6.941, 'Lr': 262.0, 'Lu': 174.967, 'MG': 24.305, 'Md': 258.0, 'Mn': 54.93805, 'Mo': 95.94, 'Mt': 266.0, 'N': 14.007, 'NA': 22.98977, 'NE': 20.1797, 'Na': 22.989768, 'Nb': 92.90638, 'Nd': 144.24, 'Ni': 58.6934, 'No': 259.0, 'Np': 237.048, 'O': 15.999, 'Os': 190.2, 'P': 30.974, 'Pa': 231.0359, 'Pb': 207.2, 'Pd': 106.42, 'Pm': 145.0, 'Po': 209.0, 'Pr': 140.90765, 'Pt': 195.08, 'Pu': 244.0, 'RB': 85.4678, 'Ra': 226.025, 'Re': 186.207, 'Rf': 261.0, 'Rh': 102.9055, 'Rn': 222.0, 'Ru': 101.07, 'S': 32.06, 'Sb': 121.757, 'Sc': 44.95591, 'Se': 78.96, 'Sg': 263.0, 'Si': 28.0855, 'Sm': 150.36, 'Sn': 118.71, 'Sr': 87.62, 'Ta': 180.9479, 'Tb': 158.92534, 'Tc': 98.0, 'Te': 127.6, 'Th': 232.0381, 'Ti': 47.88, 'Tl': 204.3833, 'Tm': 168.93421, 'U': 238.0289, 'V': 50.9415, 'W': 183.85, 'Xe': 131.29, 'Y': 88.90585, 'Yb': 173.04, 'ZN': 65.37, 'Zr': 91.224}
+

Dictionary table with atomic masses in u, indexed by the element from +atomelements.

+
+ +
+
+MDAnalysis.topology.tables.vdwradii = {'AA': 1.85, 'AG': 1.72, 'AL': 1.84, 'AR': 1.88, 'AT': 2.02, 'AU': 1.66, 'B': 1.92, 'BA': 2.68, 'BE': 1.53, 'BI': 2.07, 'BR': 1.85, 'C': 1.7, 'CA': 2.31, 'CD': 1.58, 'CL': 1.75, 'CS': 3.43, 'CU': 1.4, 'F': 1.47, 'FR': 3.48, 'GA': 1.87, 'GE': 2.11, 'H': 1.1, 'HE': 1.4, 'HH': 1.55, 'I': 1.98, 'IN': 1.93, 'K': 2.75, 'KR': 2.02, 'LI': 1.82, 'MG': 1.73, 'N': 1.55, 'NA': 2.27, 'NE': 1.54, 'NI': 1.63, 'O': 1.52, 'P': 1.8, 'PB': 2.02, 'PD': 1.63, 'PO': 1.97, 'PT': 1.75, 'RA': 2.83, 'RN': 2.2, 'RR': 3.03, 'S': 1.8, 'SB': 2.06, 'SE': 1.9, 'SI': 2.1, 'SN': 2.17, 'SR': 2.49, 'TE': 2.06, 'TL': 1.96, 'U': 1.86, 'XE': 2.16, 'ZN': 1.39}
+

Dictionary table with vdw radii, indexed by the element from +atomelements. +.. SeeAlso:: MDAnalysis.topology.core.guess_bonds()

+
+ +

The original raw data are stored as multi-line strings that are +translated into dictionaries with kv2dict(). In the future, +these tables might be moved into external data files; see +kv2dict() for explanation of the file format.

+
+
+MDAnalysis.topology.tables.kv2dict(s, convertor=<class 'str'>)[source]
+

Primitive ad-hoc parser of a key-value record list.

+
    +
  • The string s should contain each key-value pair on a separate +line (separated by newline). The first white space after the key +separates key and value.

  • +
  • Empty lines are allowed.

  • +
  • Comment lines (starting with #) are allowed.

  • +
  • Leading whitespace is ignored.

  • +
+

The convertor is a function that converts its single argument to +a valid Python type. The default is str() but other +possibilities are int() (for integers) or float() for +floating point numbers.

+
+ +

The raw tables are stored in the strings

+
+
+MDAnalysis.topology.tables.TABLE_ATOMELEMENTS = '\n# translation of atomnames to types/element\n# based on CHARMM and AMBER usage with a little bit of GROMOS (and PROPKA)\n# NOTE: CL might be ambiguous and is interpreted as chloride!\n\n# --------- ------------------\n# atomname   element\n# --------- ------------------\n\n# Bromide\nBR           BR\n\n# Calcium\nCAL          CA\nC0           CA\nCA2+         CA\n\n# Cesium\nCES          CS\n\n# Chloride\nCLA          CL\nCLAL         CL\nCL           CL\nCL-          CL\n\n# Iodide\nIOD          I\n\n# Iron\nFE           FE\nFE2          FE\n\n# Lithium\nLIT          LI\nLI           LI\nLI+          LI\nQL           LI\n\n# Magnesium\nMG           MG\nMG2+         MG\n\n# Noble gases\n## XXX collides with NE, HE in Arg  XXX\n## XXX so we remove the noble gases XXX\n##HE           HE\n##NE           NE\n\n# Potassium\nK            K\nPOT          K\nK+           K\nQK           K\n\n# Sodium\nSOD          NA\nNA           NA\nNA+          NA\nQN           NA\n\n# Zink\nZN           ZN\n\n# Copper\nCU           CU\n\n# Cesium\nCS           CS\nCS+          CS\nCES          CS\n\n# Cerium??\nQC           CE\n\n# Rubidium\nRB           RB\nQR           RB\n\n# special carbons (Amber?)\nBC           C\nAC           C\n\n# dummy atom types\nMW           DUMMY\n\n# other types are guessed from the name; see\n# topology.core.guess_atom_elements()\n'
+

Table with hard-coded special atom names, used for guessing atom types +with MDAnalysis.topology.core.guess_atom_element().

+
+ +
+
+MDAnalysis.topology.tables.TABLE_MASSES = '\n# masses for elements in atomic units (u)\n# (taken from CHARMM and Gromacs atommass.dat)\n\n#------------ -----------\n# atomtype    mass\n#------------ -----------\nAc    227.028\nAl    26.981539\nAm    243\nSb    121.757\nAr    39.948\nAs    74.92159\nAt    210\nBa    137.327\nBk    247\nBe    9.012182\nBi    208.98037\nBh    262\nB     10.811\nBR    79.90400\nCd    112.411\nCA    40.08000\nCf    251\nC     12.01100\nCe    140.11600\nCS    132.90000\nCL    35.45000\nCr    51.9961\nCo    58.9332\nCU    63.54600\nCm    247\nDb    262\nDy    162.5\nEs    252\nEr    167.26\nEu    151.965\nFm    257\nF     18.99800\nFr    223\nGd    157.25\nGa    69.723\nGe    72.61\nAu    196.96654\nHf    178.49\nHs    265\nHE    4.00260\nHo    164.93032\nH     1.00800\nIn    114.82\nI     126.90450\nIr    192.22\nFE    55.84700\nKr    83.8\nLa    138.9055\nLr    262\nPb    207.2\nLi    6.941\nLu    174.967\nMG    24.30500\nMn    54.93805\nMt    266\nMd    258\nHg    200.59\nMo    95.94\nN     14.00700\nNA    22.98977\nNd    144.24\nNE    20.17970\nNp    237.048\nNi    58.6934\nNb    92.90638\nNo    259\nOs    190.2\nO     15.99900\nPd    106.42\nP     30.97400\nPt    195.08\nPu    244\nPo    209\nK     39.10200\nPr    140.90765\nPm    145\nPa    231.0359\nRa    226.025\nRn    222\nRe    186.207\nRh    102.9055\nRB    85.46780\nRu    101.07\nRf    261\nSm    150.36\nSc    44.95591\nSg    263\nSe    78.96\nSi    28.0855\nAg    107.8682\nNa    22.989768\nSr    87.62\nS     32.06000\nTa    180.9479\nTc    98\nTe    127.6\nTb    158.92534\nTl    204.3833\nTh    232.0381\nTm    168.93421\nSn    118.71\nTi    47.88\nW     183.85\nU     238.0289\nV     50.9415\nXe    131.29\nYb    173.04\nY     88.90585\nZN    65.37000\nZr    91.224\nDUMMY 0.0\n'
+

Plain-text table with atomic masses in u.

+
+ +
+
+MDAnalysis.topology.tables.TABLE_VDWRADII = '\n# Van der Waals radii taken from\n# [1] Bondi, A. (1964). "Van der Waals Volumes and Radii".\n#     J. Phys. Chem. 68 (3): 441-451. doi:10.1021/j100785a001.\n# [2] Rowland and Taylor (1996). "Intermolecular Nonbonded Contact Distances in Organic Crystal Structures:\n#                                 Comparison with Distances Expected from van der Waals Radii".\n#     J. Phys. Chem., 1996, 100 (18), 7384.7391. doi:10.1021/jp953141+.\n# [3] Mantina, et al. (2009). "Consistent van der Waals Radii for the Whole Main Group".\n#     J. Phys. Chem. A, 2009, 113 (19), 5806-5812. doi:10.1021/jp8111556.\n#------------ -----------\n# atomtype    r_vdw\n#------------ -----------\nH    1.10\nHE   1.40\nLI   1.82\nBE   1.53\nB    1.92\nC    1.70\nN    1.55\nO    1.52\nF    1.47\nNE   1.54\nNA   2.27\nMG   1.73\nAL   1.84\nSI   2.10\nP    1.80\nS    1.80\nCL   1.75\nAR   1.88\nK    2.75\nCA   2.31\nNI   1.63\nCU   1.40\nZN   1.39\nGA   1.87\nGE   2.11\nAA   1.85\nSE   1.90\nBR   1.85\nKR   2.02\nRR   3.03\nSR   2.49\nPD   1.63\nAG   1.72\nCD   1.58\nIN   1.93\nSN   2.17\nSB   2.06\nTE   2.06\nI    1.98\nXE   2.16\nCS   3.43\nBA   2.68\nPT   1.75\nAU   1.66\nHH   1.55\nTL   1.96\nPB   2.02\nBI   2.07\nPO   1.97\nAT   2.02\nRN   2.20\nFR   3.48\nRA   2.83\nU    1.86\n'
+

Plain-text table with vdw radii.

+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology/tpr_util.html b/2.7.0-dev0/documentation_pages/topology/tpr_util.html new file mode 100644 index 0000000000..ba79c3c5c0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology/tpr_util.html @@ -0,0 +1,1438 @@ + + + + + + + 5.28. Utility functions for the TPR topology parser — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5.28. Utility functions for the TPR topology parser

+

The MDAnalysis.topology.tpr module contains classes and +functions on which the Gromacs TPR topology reader +TPRParser is built.

+
+

5.28.1. TPR support

+

The MDAnalysis.topology.tpr module is required for the +MDAnalysis.topology.TPRParser module.

+
+
+MDAnalysis.topology.tpr.SUPPORTED_VERSIONS = (58, 73, 83, 100, 103, 110, 112, 116, 119, 122, 127, 129)
+

Built-in immutable sequence.

+

If no argument is given, the constructor returns an empty tuple. +If iterable is specified the tuple is initialized from iterable’s items.

+

If the argument is a tuple, the return value is the same object.

+
+ +

Sub-modules

+ +
+
+

5.28.2. TPRParser settings

+

Definition of constants.

+

The currently read file format versions are defined in +SUPPORTED_VERSIONS.

+
+
+
+MDAnalysis.topology.tpr.setting.F_ANGLES = 10
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ANGRES = 58
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ANGRESZ = 59
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ANHARM_POL = 51
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_BHAM = 38
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_BHAM_LR = 40
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_BONDS = 0
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CBTDIHS = 22
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CMAP = 27
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_COM_PULL = 75
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CONNBONDS = 4
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CONSTR = 62
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CONSTRNC = 63
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_COUL14 = 34
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_COUL_LR = 43
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_COUL_RECIP = 45
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_COUL_SR = 42
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CROSS_BOND_ANGLES = 15
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CROSS_BOND_BONDS = 14
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_CUBICBONDS = 3
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DENSITYFITTING = 76
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DHDL_CON = 86
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DIHRES = 60
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DIHRESVIOL = 61
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DISPCORR = 41
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DISRES = 54
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DISRESVIOL = 55
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DKDL = 88
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DPD = 47
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL = 87
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL_BONDED = 91
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL_COUL = 89
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL_RESTRAINT = 92
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL_TEMPERATURE = 93
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_DVDL_VDW = 90
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ECONSERVED = 81
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_EKIN = 79
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_EPOT = 78
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_EQM = 77
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ETOT = 80
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_FBPOSRES = 53
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_FENEBONDS = 6
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_FOURDIHS = 23
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_G96ANGLES = 11
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_G96BONDS = 1
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_GB12 = 28
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_GB13 = 29
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_GB14 = 30
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_GBPOL = 31
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_HARMONIC = 5
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_IDIHS = 24
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LINEAR_ANGLES = 13
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJ = 37
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJ14 = 33
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJC14_Q = 35
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJC_PAIRS_NB = 36
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJ_LR = 39
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_LJ_RECIP = 46
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_MORSE = 2
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_NPSOLVATION = 32
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_NRE = 94
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ORIRES = 56
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_ORIRESDEV = 57
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_PDIHS = 19
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_PDISPCORR = 84
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_PIDIHS = 25
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_POLARIZATION = 48
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_POSRES = 52
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_PRES = 85
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_QUARTIC_ANGLES = 17
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_RBDIHS = 20
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_RESTRANGLES = 12
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_RESTRBONDS = 9
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_RESTRDIHS = 21
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_RF_EXCL = 44
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_SETTLE = 64
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_TABANGLES = 18
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_TABBONDS = 7
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_TABBONDSNC = 8
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_TABDIHS = 26
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_TEMP = 82
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_THOLE_POL = 50
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_UREY_BRADLEY = 16
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE1 = 65
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE2 = 66
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE2FD = 67
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE3 = 68
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE3FAD = 70
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE3FD = 69
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE3OUT = 71
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE4FD = 72
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITE4FDN = 73
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VSITEN = 74
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_VTEMP_NOLONGERUSED = 83
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.F_WATER_POL = 49
+

Function types from <gromacs_dir>/include/types/idef.h

+
+ +
+
+MDAnalysis.topology.tpr.setting.SUPPORTED_VERSIONS = (58, 73, 83, 100, 103, 110, 112, 116, 119, 122, 127, 129)
+

Gromacs TPR file format versions that can be read by the TPRParser.

+
+ +
+
+MDAnalysis.topology.tpr.setting.ftupd = [(20, 3), (20, 4), (20, 5), (34, 6), (43, 7), (43, 8), (70, 9), (98, 12), (76, 13), (30, 14), (30, 15), (30, 16), (34, 17), (43, 18), (98, 21), (98, 22), (26, 23), (26, 25), (43, 26), (65, 27), (60, 28), (61, 29), (61, 30), (72, 31), (72, 32), (41, 35), (41, 36), (32, 40), (32, 44), (32, 45), (93, 46), (46, 47), (30, 48), (36, 50), (90, 53), (22, 55), (22, 56), (22, 57), (26, 60), (26, 61), (49, 73), (50, 74), (46, 75), (20, 77), (46, 81), (69, 83), (66, 84), (54, 86), (76, 51), (79, 89), (79, 90), (79, 91), (79, 92), (79, 93), (117, 76), (121, 65), (118, 67)]
+

Function types from <gromacs_dir>/src/gmxlib/tpxio.c

+
+ +
+
+MDAnalysis.topology.tpr.setting.interaction_types = [('BONDS', 'Bond', 2), ('G96BONDS', 'G96Bond', 2), ('MORSE', 'Morse', 2), ('CUBICBONDS', 'Cubic Bonds', 2), ('CONNBONDS', 'Connect Bonds', 2), ('HARMONIC', 'Harmonic Pot.', 2), ('FENEBONDS', 'FENE Bonds', 2), ('TABBONDS', 'Tab. Bonds', 2), ('TABBONDSNC', 'Tab. Bonds NC', 2), ('RESTRAINTPOT', 'Restraint Pot.', 2), ('ANGLES', 'Angle', 3), ('G96ANGLES', 'G96Angle', 3), ('RESTRANGLES', 'Restricted Angles', 3), ('LINEAR_ANGLES', 'Lin. Angle', 3), ('CROSS_BOND_BOND', 'Bond-Cross', 3), ('CROSS_BOND_ANGLE', 'BA-Cross', 3), ('UREY_BRADLEY', 'U-B', 3), ('QANGLES', 'Quartic Angles', 3), ('TABANGLES', 'Tab. Angles', 3), ('PDIHS', 'Proper Dih.', 4), ('RBDIHS', 'Ryckaert-Bell.', 4), ('RESTRDIHS', 'Restricted Dih.', 4), ('CBTDIHS', 'CBT Dih.', 4), ('FOURDIHS', 'Fourier Dih.', 4), ('IDIHS', 'Improper Dih.', 4), ('PIDIHS', 'Improper Dih.', 4), ('TABDIHS', 'Tab. Dih.', 4), ('CMAP', 'CMAP Dih.', 5), ('GB12', 'GB 1-2 Pol.', 2), ('GB13', 'GB 1-3 Pol.', 2), ('GB14', 'GB 1-4 Pol.', 2), ('GBPOL', 'GB Polarization', None), ('NPSOLVATION', 'Nonpolar Sol.', None), ('LJ14', 'LJ-14', 2), ('COUL14', 'Coulomb-14', None), ('LJC14_Q', 'LJC-14 q', 2), ('LJC_NB', 'LJC Pairs NB', 2), ('LJ_SR', 'LJ (SR)', 2), ('BHAM', 'Buck.ham (SR)', 2), ('LJ_LR', 'LJ (LR)', None), ('BHAM_LR', 'Buck.ham (LR)', None), ('DISPCORR', 'Disper. corr.', None), ('COUL_SR', 'Coulomb (SR)', None), ('COUL_LR', 'Coulomb (LR)', None), ('RF_EXCL', 'RF excl.', None), ('COUL_RECIP', 'Coul. recip.', None), ('LJ_RECIP', 'LJ recip.', None), ('DPD', 'DPD', None), ('POLARIZATION', 'Polarization', 2), ('WATERPOL', 'Water Pol.', 5), ('THOLE', 'Thole Pol.', 4), ('ANHARM_POL', 'Anharm. Pol.', 2), ('POSRES', 'Position Rest.', 1), ('FBPOSRES', 'Flat-bottom posres', 1), ('DISRES', 'Dis. Rest.', 2), ('DISRESVIOL', 'D.R.Viol. (nm)', None), ('ORIRES', 'Orient. Rest.', 2), ('ORDEV', 'Ori. R. RMSD', None), ('ANGRES', 'Angle Rest.', 4), ('ANGRESZ', 'Angle Rest. Z', 2), ('DIHRES', 'Dih. Rest.', 4), ('DIHRESVIOL', 'Dih. Rest. Viol.', None), ('CONSTR', 'Constraint', 2), ('CONSTRNC', 'Constr. No Conn.', 2), ('SETTLE', 'Settle', 3), ('VSITE1', 'Virtual site 1', 2), ('VSITE2', 'Virtual site 2', 3), ('VSITE2FD', 'Virtual site 2fd', 3), ('VSITE3', 'Virtual site 3', 4), ('VSITE3FD', 'Virtual site 3fd', 4), ('VSITE3FAD', 'Virtual site 3fad', 4), ('VSITE3OUT', 'Virtual site 3out', 4), ('VSITE4FD', 'Virtual site 4fd', 5), ('VSITE4FDN', 'Virtual site 4fdn', 5), ('VSITEN', 'Virtual site N', 2), ('COM_PULL', 'COM Pull En.', None), ('DENSITYFIT', 'Density fitting', None), ('EQM', 'Quantum En.', None), ('EPOT', 'Potential', None), ('EKIN', 'Kinetic En.', None), ('ETOT', 'Total Energy', None), ('ECONS', 'Conserved En.', None), ('TEMP', 'Temperature', None), ('VTEMP', 'Vir. Temp. (not used)', None), ('PDISPCORR', 'Pres. DC', None), ('PRES', 'Pressure', None), ('DH/DL_CON', 'dH/dl constr.', None), ('DV/DL', 'dVremain/dl', None), ('DK/DL', 'dEkin/dl', None), ('DVC/DL', 'dVcoul/dl', None), ('DVV/DL', 'dVvdw/dl', None), ('DVB/DL', 'dVbonded/dl', None), ('DVR/DL', 'dVrestraint/dl', None), ('DVT/DL', 'dVtemperature/dl', None)]
+

Interaction types from <gromacs_dir>/gmxlib/ifunc.c

+
+ +
+

5.28.3. Class definitions for the TPRParser

+
+
+
+class MDAnalysis.topology.tpr.obj.Atom(m, q, mB, qB, tp, typeB, ptype, resind, atomnumber)
+

Create new instance of Atom(m, q, mB, qB, tp, typeB, ptype, resind, atomnumber)

+
+
+atomnumber
+

Alias for field number 8

+
+ +
+
+m
+

Alias for field number 0

+
+ +
+
+mB
+

Alias for field number 2

+
+ +
+
+ptype
+

Alias for field number 6

+
+ +
+
+q
+

Alias for field number 1

+
+ +
+
+qB
+

Alias for field number 3

+
+ +
+
+resind
+

Alias for field number 7

+
+ +
+
+tp
+

Alias for field number 4

+
+ +
+
+typeB
+

Alias for field number 5

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.AtomKind(id, name, type, resid, resname, mass, charge, atomic_number)[source]
+
+
+property element_symbol
+

The symbol of the atom element.

+

The symbol corresponding to the atomic number. If the atomic number +is not recognized, which happens if a particle is not really an +atom (e.g a coarse-grained particle), an empty string is returned.

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Atoms(atoms, nr, nres, type, typeB, atomnames, resnames)
+

Create new instance of Atoms(atoms, nr, nres, type, typeB, atomnames, resnames)

+
+
+atomnames
+

Alias for field number 5

+
+ +
+
+atoms
+

Alias for field number 0

+
+ +
+
+nr
+

Alias for field number 1

+
+ +
+
+nres
+

Alias for field number 2

+
+ +
+
+resnames
+

Alias for field number 6

+
+ +
+
+type
+

Alias for field number 3

+
+ +
+
+typeB
+

Alias for field number 4

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Box(size, rel, v)
+

Create new instance of Box(size, rel, v)

+
+
+rel
+

Alias for field number 1

+
+ +
+
+size
+

Alias for field number 0

+
+ +
+
+v
+

Alias for field number 2

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Ilist(nr, ik, iatoms)
+

Create new instance of Ilist(nr, ik, iatoms)

+
+
+iatoms
+

Alias for field number 2

+
+ +
+
+ik
+

Alias for field number 1

+
+ +
+
+nr
+

Alias for field number 0

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.InteractionKind(name, long_name, natoms)[source]
+

natoms: number of atoms involved in this type of interaction

+
+
+process(atom_ndx)[source]
+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Molblock(molb_type, molb_nmol, molb_natoms_mol, molb_nposres_xA, molb_nposres_xB)
+

Create new instance of Molblock(molb_type, molb_nmol, molb_natoms_mol, molb_nposres_xA, molb_nposres_xB)

+
+
+molb_natoms_mol
+

Alias for field number 2

+
+ +
+
+molb_nmol
+

Alias for field number 1

+
+ +
+
+molb_nposres_xA
+

Alias for field number 3

+
+ +
+
+molb_nposres_xB
+

Alias for field number 4

+
+ +
+
+molb_type
+

Alias for field number 0

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.MoleculeKind(name, atomkinds, bonds=None, angles=None, dihe=None, impr=None, donors=None, acceptors=None)[source]
+
+
+number_of_atoms()[source]
+
+ +
+
+number_of_residues()[source]
+
+ +
+
+remap_angles(atom_start_ndx)[source]
+
+ +
+
+remap_bonds(atom_start_ndx)[source]
+
+ +
+
+remap_dihe(atom_start_ndx)[source]
+
+ +
+
+remap_impr(atom_start_ndx)[source]
+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Mtop(nmoltype, moltypes, nmolblock)
+

Create new instance of Mtop(nmoltype, moltypes, nmolblock)

+
+
+moltypes
+

Alias for field number 1

+
+ +
+
+nmolblock
+

Alias for field number 2

+
+ +
+
+nmoltype
+

Alias for field number 0

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.Params(atnr, ntypes, functype, reppow, fudgeQQ)
+

Create new instance of Params(atnr, ntypes, functype, reppow, fudgeQQ)

+
+
+atnr
+

Alias for field number 0

+
+ +
+
+fudgeQQ
+

Alias for field number 4

+
+ +
+
+functype
+

Alias for field number 2

+
+ +
+
+ntypes
+

Alias for field number 1

+
+ +
+
+reppow
+

Alias for field number 3

+
+ +
+ +
+
+class MDAnalysis.topology.tpr.obj.TpxHeader(ver_str, precision, fver, fgen, file_tag, natoms, ngtc, fep_state, lamb, bIr, bTop, bX, bV, bF, bBox, sizeOfTprBody)
+

Create new instance of TpxHeader(ver_str, precision, fver, fgen, file_tag, natoms, ngtc, fep_state, lamb, bIr, bTop, bX, bV, bF, bBox, sizeOfTprBody)

+
+
+bBox
+

Alias for field number 14

+
+ +
+
+bF
+

Alias for field number 13

+
+ +
+
+bIr
+

Alias for field number 9

+
+ +
+
+bTop
+

Alias for field number 10

+
+ +
+
+bV
+

Alias for field number 12

+
+ +
+
+bX
+

Alias for field number 11

+
+ +
+
+fep_state
+

Alias for field number 7

+
+ +
+
+fgen
+

Alias for field number 3

+
+ +
+
+file_tag
+

Alias for field number 4

+
+ +
+
+fver
+

Alias for field number 2

+
+ +
+
+lamb
+

Alias for field number 8

+
+ +
+
+natoms
+

Alias for field number 5

+
+ +
+
+ngtc
+

Alias for field number 6

+
+ +
+
+precision
+

Alias for field number 1

+
+ +
+
+sizeOfTprBody
+

Alias for field number 15

+
+ +
+
+ver_str
+

Alias for field number 0

+
+ +
+ +
+

5.28.4. Utilities for the TPRParser

+

Function calling order:

+
(TPRParser.py call do_mtop)
+do_mtop -> do_symtab
+        -> do_ffparams -> do_iparams
+        -> do_moltype  -> do_atoms  -> do_atom
+                                    -> do_resinfo
+                       -> do_ilists
+                       -> do_block
+                       -> do_blocka
+        -> do_molblock
+
+
+

Then compose the stuffs in the format MDAnalysis.Universe reads in.

+

The module also contains the do_inputrec() to read the TPR header with.

+
+
+
+class MDAnalysis.topology.tpr.utils.TPXUnpacker(data)[source]
+

Extend the standard XDR unpacker for the specificity of TPX files.

+
+
+do_string()[source]
+

Emulate gmx_fio_do_string

+

gmx_fio_do_string reads a string from a XDR file. On the contrary to the +python unpack_string, gmx_fio_do_string reads the size as an unsigned +integer before reading the actual string.

+

See <gromacs-2016-src>/src/gromacs/fileio/gmx_system_xdr.c:454

+
+ +
+
+unpack_int64()[source]
+
+ +
+
+unpack_uchar()[source]
+
+ +
+
+unpack_uint64()[source]
+
+ +
+
+unpack_ushort()[source]
+
+ +
+ +
+
+class MDAnalysis.topology.tpr.utils.TPXUnpacker2020(data)[source]
+

Unpacker for TPX files from and later than gromacs 2020.

+

A new implementation of the serializer (InMemorySerializer), introduced in +gromacs 2020, changes le meaning of some types in the file body (the header +keep using the previous implementation of the serializer).

+
+
+do_string()[source]
+

Emulate gmx_fio_do_string

+
+ +
+
+classmethod from_unpacker(unpacker)[source]
+
+ +
+
+unpack_fstring(n)[source]
+
+ +
+
+unpack_uchar()[source]
+
+ +
+
+unpack_ushort()[source]
+
+ +
+ +
+
+MDAnalysis.topology.tpr.utils.define_unpack_real(prec, data)[source]
+

Define an unpack_real method of data based on the float precision used

+
+ +
+
+MDAnalysis.topology.tpr.utils.do_atom(data, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_atoms(data, symtab, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_block(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_blocka(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_ffparams(data, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_harm(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_ilists(data, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_iparams(data, functypes, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_molblock(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_moltype(data, symtab, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_mtop(data, fver, tpr_resid_from_one=False)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_resinfo(data, symtab, fver, nres)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_rvec(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_symstr(data, symtab)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.do_symtab(data)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.extract_box_info(data, fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.fileVersion_err(fver)[source]
+
+ +
+
+MDAnalysis.topology.tpr.utils.ndo_int(data, n)[source]
+

mimic of gmx_fio_ndo_real in gromacs

+
+ +
+
+MDAnalysis.topology.tpr.utils.ndo_ivec(data, n)[source]
+

mimic of gmx_fio_ndo_rvec in gromacs

+
+ +
+
+MDAnalysis.topology.tpr.utils.ndo_real(data, n)[source]
+

mimic of gmx_fio_ndo_real in gromacs

+
+ +
+
+MDAnalysis.topology.tpr.utils.ndo_rvec(data, n)[source]
+

mimic of gmx_fio_ndo_rvec in gromacs

+
+ +
+
+MDAnalysis.topology.tpr.utils.read_tpxheader(data)[source]
+

this function is now compatible with do_tpxheader in tpxio.cpp

+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/topology_modules.html b/2.7.0-dev0/documentation_pages/topology_modules.html new file mode 100644 index 0000000000..462ca41fb0 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/topology_modules.html @@ -0,0 +1,241 @@ + + + + + + + 5. Topology modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

5. Topology modules

+

The topology module contains the functions to read topology +files. MDAnalysis uses topology files to identify atoms and bonds +between the atoms. It can use topology files from MD packages such as +CHARMM’s and NAMD’s PSF format or Amber’s PRMTOP files. In addition, +it can also glean atom information from single frame coordinate files +such the PDB, CRD, or PQR formats (see the Table of Supported Topology Formats).

+

Typically, MDAnalysis recognizes formats by the file extension and +hence most users probably do not need to concern themselves with +classes and functions described here. However, if MDAnalysis does not +properly recognize a file format then a user can explicitly set the +topology file format in the topology_format keyword argument to +Universe.

+

Topology formats

+ +

Topology core modules

+

The remaining pages are primarily of interest to developers as they +contain functions and classes that are used in the implementation of +the topology readers.

+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/trajectory_transformations.html b/2.7.0-dev0/documentation_pages/trajectory_transformations.html new file mode 100644 index 0000000000..4735fe5ef6 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/trajectory_transformations.html @@ -0,0 +1,388 @@ + + + + + + + 8. Trajectory transformations (“on-the-fly” transformations) — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

8. Trajectory transformations (“on-the-fly” transformations)

+

In MDAnalysis, a transformation is a function/function-like class +that modifies the data for the current Timestep and returns the +Timestep. For instance, coordinate transformations, such as +PBC corrections and molecule fitting are often required for some +analyses and visualization. Transformation functions +(transformation_1 and transformation_2 in the following +example) can be called by the user for any given Timestep of +the trajectory,

+
u = MDAnalysis.Universe(topology, trajectory)
+
+for ts in u.trajectory:
+   ts = transformation_2(transformation_1(ts))
+
+
+

where they change the coordinates of the timestep ts in +place. There is nothing special about these transformations except +that they have to be written in such a way that they change the +Timestep in place.

+

As described under Workflows, multiple transformations can be +grouped together and associated with a trajectory so that the +trajectory is transformed on-the-fly, i.e., the data read from the +trajectory file will be changed before it is made available in, say, +the AtomGroup.positions attribute.

+

The submodule MDAnalysis.transformations contains a +collection of transformations (see Transformations in MDAnalysis) that +can be immediately used but one can always write custom +transformations (see Creating transformations).

+
+

8.1. Workflows

+

Instead of manually applying transformations, it is much more +convenient to associate a whole workflow of transformations with a +trajectory and have the transformations be called automatically.

+

A workflow is a sequence (tuple or list) of transformation functions +that will be applied in this order. For example,

+
workflow = [transformation_1, transformation_2]
+
+
+

would effectively result in

+
ts = transformation_2(transformation_1(ts))
+
+
+

for every time step in the trajectory.

+

One can add a workflow using the +Universe.trajectory.add_transformations method +of a trajectory (where the list workflow is taken from the example +above),

+
u.trajectory.add_transformations(*workflow)
+
+
+

or upon Universe +creation using the keyword argument transformations:

+
u = MDAnalysis.Universe(topology, trajectory, transformations=workflow)
+
+
+

Note that in these two cases, the workflow cannot be changed after having +being added.

+
+
+

8.2. Creating transformations

+

A simple transformation can also be a function that takes a +Timestep as input, modifies it, and +returns it. If it takes no other arguments but a Timestep +can be defined as the following example:

+
def up_by_2(ts):
+    """
+    Translate all coordinates by 2 angstroms up along the Z dimension.
+    """
+    ts.positions = ts.positions + np.array([0, 0, 2], dtype=np.float32)
+    return ts
+
+
+

If the transformation requires other arguments besides the Timestep, +the following two methods can be used to create such transformation:

+
+

8.2.1. Creating complex transformation classes

+

It is implemented by inheriting from +MDAnalysis.transformations.base.TransformationBase, +which defines __call__() for the transformation class +and can be applied directly to a Timestep. _transform() has to +be defined and include the operations on the MDAnalysis.coordinates.base.Timestep.

+

So, a transformation class can be roughly defined as follows:

+
from MDAnalysis.transformations import TransformationBase
+
+class up_by_x_class(TransformationBase):
+    def __init__(self, distance):
+        self.distance = distance
+
+    def _transform(self, ts):
+        ts.positions = ts.positions + np.array([0, 0, self.distance], dtype=np.float32)
+        return ts
+
+
+

It is the default construction method in MDAnalysis.transformations +from release 2.0.0 onwards because it can be reliably serialized. +See MDAnalysis.transformations.translate for a simple example.

+
+
+

8.2.2. Creating complex transformation closure functions

+

Transformation can also be a wrapped function takes the Timestep object as argument. +So in this case, a transformation function (closure) can be roughly defined as follows:

+
def up_by_x_func(distance):
+    """
+    Creates a transformation that will translate all coordinates by a given amount along the Z dimension.
+    """
+    def wrapped(ts):
+        ts.positions = ts.positions + np.array([0, 0, distance], dtype=np.float32)
+        return ts
+    return wrapped
+
+
+

An alternative to using a wrapped function is using partials from functools. The +above function can be written as:

+
import functools
+
+def up_by_x(ts, distance):
+    ts.positions = ts.positions + np.array([0, 0, distance], dtype=np.float32)
+    return ts
+
+up_by_2 = functools.partial(up_by_x, distance=2)
+
+
+

Although functions (closures) work as transformations, they are not used in +in MDAnalysis from release 2.0.0 onwards because they cannot be reliably +serialized and thus a Universe with such transformations cannot be +used with common parallelization schemes (e.g., ones based on +multiprocessing). +For detailed descriptions about how to write a closure-style transformation, +please refer to MDAnalysis 1.x documentation.

+
+
+
+

8.3. Transformations in MDAnalysis

+

The module MDAnalysis.transformations contains transformations that can +be immediately used in your own workflows. In order to use +any of these transformations, the module must first be imported:

+
import MDAnalysis.transformations
+
+
+

A workflow can then be added to a trajectory as described above. Notably, +the parameter max_threads can be defined when creating a transformation +instance to limit the maximum threads. +(See MDAnalysis.transformations.base.TransformationBase for more details) +Whether a specific transformation can be used along with parallel analysis +can be assessed by checking its +parallelizable +attribute.

+

See Currently implemented transformations for more on the existing +transformations in MDAnalysis.transformations.

+
+
+

8.4. How to transformations

+

Translating the coordinates of a single frame (although one would normally add +the transformation to a workflow, as shown in the subsequent +examples):

+
u = MDAnalysis.Universe(topology, trajectory)
+new_ts = MDAnalysis.transformations.translate([1,1,1])(u.trajectory.ts)
+
+
+

Create a workflow and add it to the trajectory:

+
u = MDAnalysis.Universe(topology, trajectory)
+workflow = [MDAnalysis.transformations.translate([1,1,1]),
+            MDAnalysis.transformations.translate([1,2,3])]
+u.trajectory.add_transformations(*workflow)
+
+
+

Giving a workflow as a keyword argument when defining the universe:

+
workflow = [MDAnalysis.transformations.translate([1,1,1]),
+            MDAnalysis.transformations.translate([1,2,3])]
+u = MDAnalysis.Universe(topology, trajectory, transformations=workflow)
+
+
+
+
+

8.5. Building blocks for Transformation Classes

+

Transformations normally ultilize the power of NumPy to get better performance +on array operations. However, when it comes to parallelism, NumPy will sometimes +oversubscribe the threads, either by hyper threading (when it uses OpenBlas backend), +or by working with other parallel engines (e.g. Dask).

+

In MDAnalysis, we use threadpoolctl +inside TransformationBase to control the maximum threads for transformations.

+

It is also possible to apply a global thread limit by setting the external environmental +varibale, e.g. OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 +BLIS_NUM_THREADS=1 python script.py. Read more about parallelism and resource management +in scikit-learn documentations.

+

Users are advised to benchmark code because interaction between different +libraries can lead to sub-optimal performance with defaults.

+ +
+
+

8.6. Currently implemented transformations

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/base.html b/2.7.0-dev0/documentation_pages/transformations/base.html new file mode 100644 index 0000000000..521d4dc5f5 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/base.html @@ -0,0 +1,236 @@ + + + + + + + 8.5.1. Transformations Base Class — MDAnalysis.transformations.base — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.5.1. Transformations Base Class — MDAnalysis.transformations.base

+
+
+class MDAnalysis.transformations.base.TransformationBase(**kwargs)[source]
+

Base class for defining on-the-fly transformations

+

The class is designed as a template for creating on-the-fly +Transformation classes. This class will

+

1) set up a context manager framework on limiting the threads +per call, which may be the multi-thread OpenBlas backend of NumPy. +This backend may kill the performance when subscribing hyperthread +or oversubscribing the threads when used together with other parallel +engines e.g. Dask. +(PR #2950)

+

Define max_threads=1 when that is the case.

+

2) set up a boolean attribute parallelizable for checking if the +transformation can be applied in a split-apply-combine parallelism. +For example, the PositionAverager +is history-dependent and can not be used in parallel analysis natively. +(Issue #2996)

+

To define a new Transformation, TransformationBase +has to be subclassed. +max_threads will be set to None by default, +i.e. does not do anything and any settings in the environment such as +the environment variable OMP_NUM_THREADS +(see the OpenMP specification for OMP_NUM_THREADS) +are used. +parallelizable will be set to True by default. +You may need to double check if it can be used in parallel analysis; +if not, override the value to False. +Note this attribute is not checked anywhere in MDAnalysis yet. +Developers of the parallel analysis have to check it in their own code.

+
class NewTransformation(TransformationBase):
+    def __init__(self, ag, parameter,
+                 max_threads=1, parallelizable=True):
+        super().__init__(max_threads=max_threads,
+                          parallelizable=parallelizable)
+        self.ag = ag
+        self._param = parameter
+
+    def _transform(self, ts):
+        #  REQUIRED
+        ts.positions = some_function(ts, self.ag, self._param)
+        return ts
+
+
+

Afterwards the new transformation can be run like this.

+
new_transformation = NewTransformation(ag, param)
+u.trajectory.add_transformations(new_transformation)
+
+
+
+

New in version 2.0.0: Add the base class for all transformations to limit threads and +check if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/boxdimensions.html b/2.7.0-dev0/documentation_pages/transformations/boxdimensions.html new file mode 100644 index 0000000000..fef0f4406e --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/boxdimensions.html @@ -0,0 +1,209 @@ + + + + + + + 8.6.7. Set box dimensions — MDAnalysis.transformations.boxdimensions — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.7. Set box dimensions — MDAnalysis.transformations.boxdimensions

+

Set dimensions of the simulation box to a constant vector across all timesteps.

+
+
+class MDAnalysis.transformations.boxdimensions.set_dimensions(dimensions, max_threads=None, parallelizable=True)[source]
+

Set simulation box dimensions.

+

Timestep dimensions are modified in place.

+

Example

+

e.g. set simulation box dimensions to a vector containing unit cell +dimensions [a, b, c, alpha, beta, gamma], lengths a, +b, c are in the MDAnalysis length unit (Å), and angles are in degrees.

+
dim = [2, 2, 2, 90, 90, 90]
+transform = mda.transformations.boxdimensions.set_dimensions(dim)
+u.trajectory.add_transformations(transform)
+
+
+
+
Parameters
+
    +
  • dimensions (iterable of floats) – vector that contains unit cell lengths and angles. +Expected shapes are (6, 0) or (1, 6)

  • +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
Return type
+

Timestep object

+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/fit.html b/2.7.0-dev0/documentation_pages/transformations/fit.html new file mode 100644 index 0000000000..5ee5310f39 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/fit.html @@ -0,0 +1,304 @@ + + + + + + + 8.6.4. Fitting transformations — MDAnalysis.transformations.fit — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.4. Fitting transformations — MDAnalysis.transformations.fit

+

Translate and/or rotates the coordinates of a given trajectory to align +a given AtomGroup to a reference structure.

+
+
+class MDAnalysis.transformations.fit.fit_translation(ag, reference, plane=None, weights=None, max_threads=None, parallelizable=True)[source]
+

Translates a given AtomGroup so that its center of geometry/mass matches +the respective center of the given reference. A plane can be given by the +user using the option plane, and will result in the removal of +the translation motions of the AtomGroup over that particular plane.

+

Example

+

Removing the translations of a given AtomGroup ag on the XY plane by +fitting its center of mass to the center of mass of a reference ref:

+
ag = u.select_atoms("protein")
+ref = mda.Universe("reference.pdb")
+transform = mda.transformations.fit_translation(ag, ref, plane="xy",
+                                                weights="mass")
+u.trajectory.add_transformations(transform)
+
+
+
+
Parameters
+
    +
  • ag (Universe or AtomGroup) – structure to translate, a +AtomGroup or a whole +Universe

  • +
  • reference (Universe or AtomGroup) – reference structure, a AtomGroup or a +whole Universe

  • +
  • plane (str, optional) – used to define the plane on which the translations will be removed. +Defined as a string of the plane. +Suported planes are yz, xz and xy planes.

  • +
  • weights ({“mass”, None} or array_like, optional) – choose weights. With "mass" uses masses as weights; with None +weigh each atom equally. If a float array of the same length as +ag is provided, use each element of the array_like as a +weight for the corresponding atom in ag.

  • +
+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+
+class MDAnalysis.transformations.fit.fit_rot_trans(ag, reference, plane=None, weights=None, max_threads=1, parallelizable=True)[source]
+

Perform a spatial superposition by minimizing the RMSD.

+

Spatially align the group of atoms ag to reference by doing a RMSD +fit.

+

This fit works as a way to remove translations and rotations of a given +AtomGroup in a trajectory. A plane can be given using the flag plane +so that only translations and rotations in that particular plane are +removed. This is useful for protein-membrane systems to where the membrane +must remain in the same orientation.

+
+

Note

+

max_threads is set to 1 for this transformation +with which it performs better.

+
+

Example

+

Removing the translations and rotations of a given AtomGroup ag on the XY plane +by fitting it to a reference ref, using the masses as weights for the RMSD fit:

+
ag = u.select_atoms("protein")
+ref = mda.Universe("reference.pdb")
+transform = mda.transformations.fit_rot_trans(ag, ref, plane="xy",
+                                              weights="mass")
+u.trajectory.add_transformations(transform)
+
+
+
+
Parameters
+
    +
  • ag (Universe or AtomGroup) – structure to translate and rotate, a +AtomGroup or a whole +Universe

  • +
  • reference (Universe or AtomGroup) – reference structure, a AtomGroup or a whole +Universe

  • +
  • plane (str, optional) – used to define the plane on which the rotations and translations will be removed. +Defined as a string of the plane. Supported planes are “yz”, “xz” and “xy” planes.

  • +
  • weights ({“mass”, None} or array_like, optional) – choose weights. With "mass" uses masses as weights; with None +weigh each atom equally. If a float array of the same length as +ag is provided, use each element of the array_like as a +weight for the corresponding atom in ag.

  • +
+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/nojump.html b/2.7.0-dev0/documentation_pages/transformations/nojump.html new file mode 100644 index 0000000000..89f6962eeb --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/nojump.html @@ -0,0 +1,238 @@ + + + + + + + 8.6.6. No Jump Trajectory Unwrapping — MDAnalysis.transformations.nojump — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.6. No Jump Trajectory Unwrapping — MDAnalysis.transformations.nojump

+

Unwraps the trajectory such that atoms never move more than half a periodic box length. +The consequence of this is that particles will diffuse across periodic boundaries when +needed. This unwrapping method is suitable as a preprocessing step to calculate +molecular diffusion, or more commonly to keep multi-domain proteins whole during trajectory +analysis. +The algorithm used is based on [Kulke2022].

+
+
+class MDAnalysis.transformations.nojump.NoJump(check_continuity=True, max_threads=None, parallelizable=False)[source]
+

Returns transformed coordinates for the given timestep so that an atom +does not move more than half the periodic box size between two timesteps, and will move +across periodic boundary edges. The algorithm used is based on [Kulke2022], +equation B6 for non-orthogonal systems, so it is general to most applications where +molecule trajectories should not “jump” from one side of a periodic box to another.

+

Note that this transformation depends on a periodic box dimension being set for every +frame in the trajectory, and that this box dimension can be transformed to an orthonormal +unit cell. If not, an error is emitted. Since it is typical to transform all frames +sequentially when unwrapping trajectories, warnings are emitted if non-sequential timesteps +are transformed using NoJump.

+

Example

+

Suppose you had a molecular trajectory with a protein dimer that moved across a periodic +boundary. This will normally appear to make the dimer split apart. This transformation +uses the molecular motions between frames in a wrapped trajectory to create an unwrapped +trajectory where molecules never move more than half a periodic box dimension between subsequent +frames. Thus, the normal use case is to apply the transformation to every frame of a trajectory, +and to do so sequentially.

+
transformation = NoJump()
+u.trajectory.add_transformations(transformation)
+for ts in u.trajectory:
+    print(ts.positions)
+
+
+

In this case, ts.positions will return the NoJump unwrapped trajectory, which would keep +protein dimers together if they are together in the inital timestep. The unwrapped trajectory may +also be useful to compute diffusion coefficients via the Einstein relation. +To reverse the process, wrap the coordinates again.

+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+

References

+
+
+
Kulke2022(1,2)
+

Martin Kulke and Josh V. Vermaas. Reversible unwrapping algorithm for constant-pressure molecular dynamics simulations. Journal of Chemical Theory and Computation, 18(10):6161–6171, 2022. doi:10.1021/acs.jctc.2c00327.

+
+
+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/positionaveraging.html b/2.7.0-dev0/documentation_pages/transformations/positionaveraging.html new file mode 100644 index 0000000000..feefc2a000 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/positionaveraging.html @@ -0,0 +1,277 @@ + + + + + + + 8.6.3. Trajectory Coordinate Averaging — MDAnalysis.transformations.positionaveraging — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.3. Trajectory Coordinate Averaging — MDAnalysis.transformations.positionaveraging

+

Averages the coordinates of a given trajectory with the N previous frames. +For frames < N, the average of the frames iterated up to that point will be +returned.

+
+
+class MDAnalysis.transformations.positionaveraging.PositionAverager(avg_frames, check_reset=True, max_threads=None, parallelizable=False)[source]
+

Averages the coordinates of a given timestep so that the coordinates +of the AtomGroup correspond to the average positions of the N previous +frames. +For frames < N, the average of the frames iterated up to that point will +be returned.

+

Example

+

Average the coordinates of a given AtomGroup over the course of +the previous N frames. For N=3, the output will correspond to the +average of the coordinates over the last 3 frames. +When check_reset=True, the averager will be reset once the iteration is +complete, or if the frames iterated are not sequential.

+
N=3
+transformation = PositionAverager(N, check_reset=True)
+u.trajectory.add_transformations(transformation)
+for ts in u.trajectory:
+    print(ts.positions)
+
+
+

In this case, ts.positions will return the average coordinates of the +last N iterated frames.

+

When check_reset=False, the average of coordinates from non +sequential timesteps can also be computed. However, the averager must be +manually reset before restarting an iteration. In this case, +ts.positions will return the average coordinates of the last N +iterated frames, despite them not being sequential +(frames = [0, 7, 1, 6]).

+
N=3
+transformation = PositionAverager(N, check_reset=False)
+u.trajectory.add_transformations(transformation)
+frames = [0, 7, 1, 6]
+transformation.resetarrays()
+for ts in u.trajectory[frames]:
+    print(ts.positions)
+
+
+

If check_reset=True, the PositionAverager would have automatically +reset after detecting a non sequential iteration (i.e. when iterating from +frame 7 to frame 1 or when resetting the iterator from frame 6 back to +frame 0).

+

For frames < N, the average is calculated with the frames iterated up +to that point and thus will not follow the same behaviour as for +frames > N. This can be followed by comparing the number of frames being +used to compute the current averaged frame (current_avg) to the one +requested when calling PositionAverager (avg_frames) which in +these examples corresponds to N=3.

+
N=3
+transformation = PositionAverager(N, check_reset=True)
+u.trajectory.add_transformations(transformation)
+for ts in u.trajectory:
+    if transformation.current_avg == transformation.avg_frames:
+        print(ts.positions)
+
+
+

In the case of N=3, as the average is calculated with the frames +iterated up to the current iteration, the first frame returned will +not be averaged. During the first iteration no other frames are stored in +memory thus far and, consequently, transformation.current_avg = 1. +The second frame iterated will return the average of frame 1 and frame 2, +with transformation.current_avg = 2. Only during the third and +following iterations will ts.positions start returning the average of +the last 3 frames and thus transformation.current_avg = 3 +These initial frames are typically not desired during analysis, but one can +easily avoid them, as seen in the previous example with +if transformation.current_avg == transformation.avg_frames: or by +simply removing the first avg_frames-1 frames from the analysis.

+
+
Parameters
+
    +
  • avg_frames (int) – Determines the number of frames to be used for the position averaging.

  • +
  • check_reset (bool, optional) – If True, position averaging will be reset and a warning raised +when the trajectory iteration direction changes. If False, position +averaging will not reset, regardless of the iteration.

  • +
+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/rotate.html b/2.7.0-dev0/documentation_pages/transformations/rotate.html new file mode 100644 index 0000000000..9542d3a0b1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/rotate.html @@ -0,0 +1,263 @@ + + + + + + + 8.6.2. Trajectory rotation — MDAnalysis.transformations.rotate — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.2. Trajectory rotation — MDAnalysis.transformations.rotate

+

Rotates the coordinates by a given angle arround an axis formed by a direction +and a point.

+
+
+class MDAnalysis.transformations.rotate.rotateby(angle, direction, point=None, ag=None, weights=None, wrap=False, max_threads=1, parallelizable=True)[source]
+

Rotates the trajectory by a given angle on a given axis. The axis is defined by +the user, combining the direction vector and a point. This point can be the center +of geometry or the center of mass of a user defined AtomGroup, or an array defining +custom coordinates.

+
+

Note

+

max_threads is set to 1 for this transformation +with which it performs better.

+
+

Examples

+

e.g. rotate the coordinates by 90 degrees on a axis formed by the [0,0,1] vector and +the center of geometry of a given AtomGroup:

+
from MDAnalysis import transformations
+
+ts = u.trajectory.ts
+angle = 90
+ag = u.atoms
+d = [0,0,1]
+rotated = transformations.rotate.rotateby(angle, direction=d, ag=ag)(ts)
+
+
+

e.g. rotate the coordinates by a custom axis:

+
from MDAnalysis import transformations
+
+ts = u.trajectory.ts
+angle = 90
+p = [1,2,3]
+d = [0,0,1]
+rotated = transformations.rotate.rotateby(angle, direction=d, point=p)(ts)
+
+
+
+
Parameters
+
    +
  • angle (float) – rotation angle in degrees

  • +
  • direction (array-like) – vector that will define the direction of a custom axis of rotation from the +provided point. Expected shapes are (3, ) or (1, 3).

  • +
  • ag (AtomGroup, optional) – use the weighted center of an AtomGroup as the point from where the rotation axis +will be defined. If no AtomGroup is given, the point argument becomes mandatory

  • +
  • point (array-like, optional) – list of the coordinates of the point from where a custom axis of rotation will +be defined. Expected shapes are (3, ) or (1, 3). If no point is given, the +ag argument becomes mandatory.

  • +
  • weights ({“mass”, None} or array_like, optional) – define the weights of the atoms when calculating the center of the AtomGroup. +With "mass" uses masses as weights; with None weigh each atom equally. +If a float array of the same length as ag is provided, use each element of +the array_like as a weight for the corresponding atom in ag. Default is +None.

  • +
  • wrap (bool, optional) – If True, all the atoms from the given AtomGroup will be moved to the unit cell +before calculating the center of mass or geometry. Default is False, no changes +to the atom coordinates are done before calculating the center of the AtomGroup.

  • +
+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Warning

+

Wrapping/unwrapping the trajectory or performing PBC corrections may not be possible +after rotating the trajectory.

+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/translate.html b/2.7.0-dev0/documentation_pages/transformations/translate.html new file mode 100644 index 0000000000..3c131d01c1 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/translate.html @@ -0,0 +1,269 @@ + + + + + + + 8.6.1. Trajectory translation — MDAnalysis.transformations.translate — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.1. Trajectory translation — MDAnalysis.transformations.translate

+

Translate the coordinates of a given trajectory by a given vector. +The vector can either be user defined, using the function translate() +or defined by centering an AtomGroup in the unit cell using the function +center_in_box()

+
+
+class MDAnalysis.transformations.translate.translate(vector, max_threads=None, parallelizable=True)[source]
+

Translates the coordinates of a given Timestep +instance by a given vector.

+

Example

+
ts = MDAnalysis.transformations.translate([1,2,3])(ts)
+
+
+
+
Parameters
+

vector (array-like) – coordinates of the vector to which the coordinates will be translated

+
+
Return type
+

Timestep object

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+
+class MDAnalysis.transformations.translate.center_in_box(ag, center='geometry', point=None, wrap=False, max_threads=None, parallelizable=True)[source]
+

Translates the coordinates of a given Timestep +instance so that the center of geometry/mass of the given AtomGroup +is centered on the unit cell. The unit cell dimensions are taken from the input Timestep object. +If a point is given, the center of the atomgroup will be translated to this point instead.

+

Example

+
ag = u.residues[1].atoms
+ts = MDAnalysis.transformations.center(ag,center='mass')(ts)
+
+
+
+
Parameters
+
    +
  • ag (AtomGroup) – atom group to be centered on the unit cell.

  • +
  • center (str, optional) – used to choose the method of centering on the given atom group. Can be ‘geometry’ +or ‘mass’

  • +
  • point (array-like, optional) – overrides the unit cell center - the coordinates of the Timestep are translated so +that the center of mass/geometry of the given AtomGroup is aligned to this position +instead. Defined as an array of size 3.

  • +
  • wrap (bool, optional) – If True, all the atoms from the given AtomGroup will be moved to the unit cell +before calculating the center of mass or geometry. Default is False, no changes +to the atom coordinates are done before calculating the center of the AtomGroup.

  • +
+
+
Return type
+

Timestep object

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/transformations/wrap.html b/2.7.0-dev0/documentation_pages/transformations/wrap.html new file mode 100644 index 0000000000..2cd3cdcddd --- /dev/null +++ b/2.7.0-dev0/documentation_pages/transformations/wrap.html @@ -0,0 +1,296 @@ + + + + + + + 8.6.5. Wrap/unwrap transformations — MDAnalysis.transformations.wrap — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

8.6.5. Wrap/unwrap transformations — MDAnalysis.transformations.wrap

+

Wrap/unwrap the atoms of a given AtomGroup in the unit cell. wrap() +translates the atoms back in the unit cell. unwrap() translates the +atoms of each molecule so that bons don’t split over images.

+
+
+class MDAnalysis.transformations.wrap.wrap(ag, compound='atoms', max_threads=None, parallelizable=True)[source]
+

Shift the contents of a given AtomGroup back into the unit cell.

+
+-----------+          +-----------+
+|           |          |           |
+|         3 | 6        | 6       3 |
+|         ! | !        | !       ! |
+|       1-2-|-5-8  ->  |-5-8   1-2-|
+|         ! | !        | !       ! |
+|         4 | 7        | 7       4 |
+|           |          |           |
++-----------+          +-----------+
+
+
+

Example

+
ag = u.atoms
+transform = mda.transformations.wrap(ag)
+u.trajectory.add_transformations(transform)
+
+
+
+
Parameters
+
    +
  • ag (Atomgroup) – Atomgroup to be wrapped in the unit cell

  • +
  • compound ({'atoms', 'group', 'residues', 'segments', 'fragments'}, optional) – The group which will be kept together through the shifting process.

  • +
+
+
+

Notes

+

When specifying a compound, the translation is calculated based on +each compound. The same translation is applied to all atoms +within this compound, meaning it will not be broken by the shift. +This might however mean that not all atoms from the compound are +inside the unit cell, but rather the center of the compound is.

+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+
+class MDAnalysis.transformations.wrap.unwrap(ag, max_threads=None, parallelizable=True)[source]
+

Move all atoms in an AtomGroup so that bonds don’t split over images

+

Atom positions are modified in place.

+

This function is most useful when atoms have been packed into the primary +unit cell, causing breaks mid molecule, with the molecule then appearing +on either side of the unit cell. This is problematic for operations +such as calculating the center of mass of the molecule.

+
+-----------+     +-----------+
+|           |     |           |
+| 6       3 |     |         3 | 6
+| !       ! |     |         ! | !
+|-5-8   1-2-| ->  |       1-2-|-5-8
+| !       ! |     |         ! | !
+| 7       4 |     |         4 | 7
+|           |     |           |
++-----------+     +-----------+
+
+
+

Example

+
ag = u.atoms
+transform = mda.transformations.unwrap(ag)
+u.trajectory.add_transformations(transform)
+
+
+
+
Parameters
+

atomgroup (AtomGroup) – The MDAnalysis.core.groups.AtomGroup to work with. +The positions of this are modified in place.

+
+
Return type
+

MDAnalysis.coordinates.timestep.Timestep

+
+
+
+

Changed in version 2.0.0: The transformation was changed from a function/closure to a class +with __call__.

+
+
+

Changed in version 2.0.0: The transformation was changed to inherit from the base class for +limiting threads and checking if it can be used in parallel analysis.

+
+
+
Parameters
+
    +
  • max_threads (int, optional) – The maximum thread number can be used. +Default is None, which means the default or the external setting.

  • +
  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel +analysis approach. +Default is True.

  • +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/units.html b/2.7.0-dev0/documentation_pages/units.html new file mode 100644 index 0000000000..292e9428ea --- /dev/null +++ b/2.7.0-dev0/documentation_pages/units.html @@ -0,0 +1,452 @@ + + + + + + + 15. Constants and unit conversion — MDAnalysis.units — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

15. Constants and unit conversion — MDAnalysis.units

+

The base units of MDAnalysis trajectories are the Å (ångström) for +length and ps (pico second) for time. By default, all positions +are in Å and all times are in ps, regardless of how the MD code stored +trajectory data. By default, MDAnalysis converts automatically to the +MDAnalysis units when reading trajectories and converts back when writing. This +makes it possible to write scripts that can be agnostic of the specifics of how +a particular MD code stores trajectory data. Other base units are listed in the +table on Base units in MDAnalysis as encoded in MDANALYSIS_BASE_UNITS.

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base units in MDAnalysis as encoded in MDANALYSIS_BASE_UNITS

quantity

unit

SI units

length

Å

\(10^{-10}\) m

time

ps

\(10^{-12}\) s

energy

kJ/mol

\(1.66053892103219 \times 10^{-21}\) J

charge

\(e\)

\(1.602176565 \times 10^{-19}\) As

force

kJ/(mol·Å)

\(1.66053892103219 \times 10^{-11}\) J/m

speed

Å/ps

\(100\) m/s

+
+

15.1. Implementation notes

+

All conversions with convert() are carried out in a simple fashion: the +conversion factor \(f_{b,b'}\) from the base unit \(b\) to another unit +\(b'\) is precomputed and stored (see Data). The numerical value of +a quantity in unit \(b\) is \(X/b\) (e.g. for \(X = +1.23\,\mathrm{ps}\), the numerical value is \(X/\mathrm{ps} = +1.23\)). 1

+

The new numerical value \(X'/b'\) of the quantity (in units of \(b'\)) +is then

+
+\[X'/b' = f_{b,b'} X/b\]
+

The function get_conversion_factor() returns the appropriate factor +\(f_{b,b'}\).

+

Conversion between different units is always carried out via the base unit as +an intermediate step:

+
x is in u1: from u1 to b:  x'  = x  / factor[u1]
+            from b  to u2: x'' = x' * factor[u2]
+so f[u1,u2] = factor[u2]/factor[u1]
+
+
+
+

15.1.1. Conversions

+

Examples for how to calculate some of the conversion factors that are +hard-coded in units (see Data).

+
+
density:

Base unit is \(\mathrm{Å}^{-3}\):

+
n/x = n/A**3 * densityUnit_factor[x]
+
+
+

Example for how to calculate the conversion factor +\(f_{\mathrm{Å}^{-3},\mathrm{nm}^{-3}}\) from \(\mathrm{Å}^{-3}\) to +\(\mathrm{nm}^{-3}\):

+
+\[f_{\mathrm{Å}^{-3},\mathrm{nm}^{-3}} + = \frac{1\,\mathrm{nm}^{-3}}{1\,\mathrm{Å}^{-3}} + = \frac{(10\,\mathrm{Å})^{-3}}{1\,\mathrm{Å}^{-3}} + = 10^{-3}\]
+
+
concentration:

Example for how to convert the conversion factor to Molar (mol/l):

+
factor = 1 A**-3 / (N_Avogadro * (10**-9 dm)**-3)
+
+
+

relative to a density rho0 in \(g/cm^3\):

+
M(H2O) = 18 g/mol   Molar mass of water
+
+factor = 1/(1e-24 * N_Avogadro / M(H2O))
+
+
+

from \(\rho/\rho_0 = n/(N_A * M^{-1}) / \rho_0\)

+

where \([n] = 1/Volume\), \([\rho] = mass/Volume\)

+
+
+
+

Note

+

In the future we might move towards using the Quantities package or +scipy.constants.

+
+
+
+
+

15.2. Functions

+
+
+MDAnalysis.units.get_conversion_factor(unit_type, u1, u2)[source]
+

generate the conversion factor u1 -> u2 by using the base unit as an intermediate

+

f[u1 -> u2] = factor[u2]/factor[u1]

+

Conversion of \(X\) (in u1) to \(X'\) (in u2):

+
+

\(X'\) = conversion_factor * \(X\)

+
+
+ +
+
+MDAnalysis.units.convert(x, u1, u2)[source]
+

Convert value x in unit u1 to new value in u2.

+
+
Returns
+

Converted value.

+
+
Return type
+

float

+
+
Raises
+

ValueError – The units are not known or if one attempts to convert between + incompatible units.

+
+
+
+ +
+
+

15.3. Data

+
+
+MDAnalysis.units.MDANALYSIS_BASE_UNITS = {'charge': 'e', 'energy': 'kJ/mol', 'force': 'kJ/(mol*A)', 'length': 'A', 'speed': 'A/ps', 'time': 'ps'}
+

Lookup table for base units in MDAnalysis by unit type.

+
+ +
+
+MDAnalysis.units.constants = {'Boltzmann_constant': 0.008314462159, 'N_Avogadro': 6.02214129e+23, 'calorie': 4.184, 'electric_constant': 0.00552635, 'elementary_charge': 1.602176565e-19}
+

Values of physical constants are taken from CODATA 2010 at NIST. The +thermochemical calorie is defined in the ISO 80000-5:2007 standard +and is also listed in the NIST Guide to SI: Appendix B.8: Factors for Units.

+
+

New in version 0.9.0.

+
+
+ +
+
+MDAnalysis.units.lengthUnit_factor = {'A': 1.0, 'Angstrom': 1.0, 'angstrom': 1.0, 'femtometer': 100000.0, 'fm': 100000.0, 'nanometer': 0.1, 'nm': 0.1, 'picometer': 100.0, 'pm': 100.0, 'Å': 1.0}
+

The basic unit of length in MDAnalysis is the Angstrom. +Conversion factors between the base unit and other lengthUnits x are stored. +Conversions follow L/x = L/Angstrom * lengthUnit_factor[x]. +x can be nm/nanometer or fm.

+
+ +
+
+MDAnalysis.units.water = {'MolarMass': 18.016, 'SPC': 0.985, 'TIP3P': 1.002, 'TIP4P': 1.001, 'exp': 0.997}
+
+
water density values at T=298K, P=1atm [Jorgensen1998].
++++ + + + + + + + + + + + + + + + + + + + +

model

g cm**-3

SPC

0.985(1)

TIP3P

1.002(1)

TIP4P

1.001(1)

exp

0.997

+
+
+

and molar mass 18.016 g mol**-1.

+
+ +
+
+MDAnalysis.units.densityUnit_factor = {'A^{-3}': 1.0, 'Angstrom^{-3}': 1.0, 'Molar': 1660.5389210321898, 'SPC': 30.37184690488927, 'TIP3P': 29.85655608913766, 'TIP4P': 29.886382818497438, 'nanometer^{-3}': 1000.0, 'nm^{-3}': 1000.0, 'water': 30.00628806551247, 'Å^{-3}': 1.0}
+

The basic unit for densities is Angstrom**(-3), i.e. +the volume per molecule in A**3. Especially for water +it can be convenient to measure the density relative to bulk, and +hence a number of values are pre-stored in water.

+
+ +
+
+MDAnalysis.units.timeUnit_factor = {'AKMA': 20.45482949774598, 'femtosecond': 1000.0, 'fs': 1000.0, 'microsecond': 1e-06, 'millisecond': 1e-09, 'ms': 1e-09, 'nanosecond': 0.001, 'ns': 0.001, 'picosecond': 1.0, 'ps': 1.0, 's': 1e-12, 'sec': 1e-12, 'second': 1e-12, 'us': 1e-06, 'μs': 1e-06}
+

For time, the basic unit is ps; in particular CHARMM’s +1 AKMA time unit = 4.888821E-14 sec is supported.

+
+ +
+
+MDAnalysis.units.speedUnit_factor = {'A/AKMA': 0.04888821, 'A/fs': 1000.0, 'A/ms': 1e-09, 'A/ps': 1.0, 'A/us': 1e-06, 'Angstrom/AKMA': 0.04888821, 'Angstrom/femtosecond': 1000.0, 'Angstrom/fs': 1000.0, 'Angstrom/microsecond': 1e-06, 'Angstrom/millisecond': 1e-09, 'Angstrom/ms': 1e-09, 'Angstrom/picosecond': 1.0, 'Angstrom/ps': 1.0, 'Angstrom/us': 1e-06, 'Angstrom/μs': 1e-06, 'angstrom/femtosecond': 1000.0, 'angstrom/fs': 1000.0, 'angstrom/microsecond': 1e-06, 'angstrom/millisecond': 1e-09, 'angstrom/ms': 1e-09, 'angstrom/picosecond': 1.0, 'angstrom/us': 1e-06, 'angstrom/μs': 1e-06, 'm/s': 100.0, 'nanometer/picosecond': 0.1, 'nanometer/ps': 0.1, 'nm/ns': 100.0, 'nm/ps': 0.1, 'pm/ps': 100.0, 'Å/ps': 1.0}
+

For speed, the basic unit is Angstrom/ps.

+
+ +
+
+MDAnalysis.units.forceUnit_factor = {'J/m': 1.66053892103219e-11, 'N': 1.66053892103219e-11, 'Newton': 1.66053892103219e-11, 'kJ/(mol*A)': 1.0, 'kJ/(mol*Angstrom)': 1.0, 'kJ/(mol*nm)': 10.0, 'kJ/(mol*Å)': 1.0, 'kcal/(mol*Angstrom)': 0.2390057361376673}
+

For force the basic unit is kJ/(mol*Angstrom).

+
+ +
+
+MDAnalysis.units.chargeUnit_factor = {'Amber': 18.2223, 'As': 1.602176565e-19, 'C': 1.602176565e-19, 'e': 1.0}
+

Charge is measured in multiples of the electron charge e, with the value +elementary_charge in constants. +The conversion factor to Amber charge units is 18.2223.

+
+

Changed in version 0.9.0: Use CODATA 2010 value for elementary charge, which differs from the previously used value +e = 1.602176487 x 10**(-19) C by 7.8000000e-27 C.

+
+
+ +
+
+MDAnalysis.units.conversion_factor = {'charge': {'Amber': 18.2223, 'As': 1.602176565e-19, 'C': 1.602176565e-19, 'e': 1.0}, 'density': {'A^{-3}': 1.0, 'Angstrom^{-3}': 1.0, 'Molar': 1660.5389210321898, 'SPC': 30.37184690488927, 'TIP3P': 29.85655608913766, 'TIP4P': 29.886382818497438, 'nanometer^{-3}': 1000.0, 'nm^{-3}': 1000.0, 'water': 30.00628806551247, 'Å^{-3}': 1.0}, 'energy': {'J': 1.66053892103219e-21, 'eV': 0.01036426919046959, 'kJ/mol': 1.0, 'kcal/mol': 0.2390057361376673}, 'force': {'J/m': 1.66053892103219e-11, 'N': 1.66053892103219e-11, 'Newton': 1.66053892103219e-11, 'kJ/(mol*A)': 1.0, 'kJ/(mol*Angstrom)': 1.0, 'kJ/(mol*nm)': 10.0, 'kJ/(mol*Å)': 1.0, 'kcal/(mol*Angstrom)': 0.2390057361376673}, 'length': {'A': 1.0, 'Angstrom': 1.0, 'angstrom': 1.0, 'femtometer': 100000.0, 'fm': 100000.0, 'nanometer': 0.1, 'nm': 0.1, 'picometer': 100.0, 'pm': 100.0, 'Å': 1.0}, 'speed': {'A/AKMA': 0.04888821, 'A/fs': 1000.0, 'A/ms': 1e-09, 'A/ps': 1.0, 'A/us': 1e-06, 'Angstrom/AKMA': 0.04888821, 'Angstrom/femtosecond': 1000.0, 'Angstrom/fs': 1000.0, 'Angstrom/microsecond': 1e-06, 'Angstrom/millisecond': 1e-09, 'Angstrom/ms': 1e-09, 'Angstrom/picosecond': 1.0, 'Angstrom/ps': 1.0, 'Angstrom/us': 1e-06, 'Angstrom/μs': 1e-06, 'angstrom/femtosecond': 1000.0, 'angstrom/fs': 1000.0, 'angstrom/microsecond': 1e-06, 'angstrom/millisecond': 1e-09, 'angstrom/ms': 1e-09, 'angstrom/picosecond': 1.0, 'angstrom/us': 1e-06, 'angstrom/μs': 1e-06, 'm/s': 100.0, 'nanometer/picosecond': 0.1, 'nanometer/ps': 0.1, 'nm/ns': 100.0, 'nm/ps': 0.1, 'pm/ps': 100.0, 'Å/ps': 1.0}, 'time': {'AKMA': 20.45482949774598, 'femtosecond': 1000.0, 'fs': 1000.0, 'microsecond': 1e-06, 'millisecond': 1e-09, 'ms': 1e-09, 'nanosecond': 0.001, 'ns': 0.001, 'picosecond': 1.0, 'ps': 1.0, 's': 1e-12, 'sec': 1e-12, 'second': 1e-12, 'us': 1e-06, 'μs': 1e-06}}
+

conversion_factor is used by get_conversion_factor() +NOTE: any observable with a unit (i.e. one with an entry in +the unit attribute) needs an entry in conversion_factor

+
+ +
+
+MDAnalysis.units.unit_types = {'A': 'length', 'A/AKMA': 'speed', 'A/fs': 'speed', 'A/ms': 'speed', 'A/ps': 'speed', 'A/us': 'speed', 'AKMA': 'time', 'A^{-3}': 'density', 'Amber': 'charge', 'Angstrom': 'length', 'Angstrom/AKMA': 'speed', 'Angstrom/femtosecond': 'speed', 'Angstrom/fs': 'speed', 'Angstrom/microsecond': 'speed', 'Angstrom/millisecond': 'speed', 'Angstrom/ms': 'speed', 'Angstrom/picosecond': 'speed', 'Angstrom/ps': 'speed', 'Angstrom/us': 'speed', 'Angstrom/μs': 'speed', 'Angstrom^{-3}': 'density', 'As': 'charge', 'C': 'charge', 'J': 'energy', 'J/m': 'force', 'Molar': 'density', 'N': 'force', 'Newton': 'force', 'SPC': 'density', 'TIP3P': 'density', 'TIP4P': 'density', 'angstrom': 'length', 'angstrom/femtosecond': 'speed', 'angstrom/fs': 'speed', 'angstrom/microsecond': 'speed', 'angstrom/millisecond': 'speed', 'angstrom/ms': 'speed', 'angstrom/picosecond': 'speed', 'angstrom/us': 'speed', 'angstrom/μs': 'speed', 'e': 'charge', 'eV': 'energy', 'femtometer': 'length', 'femtosecond': 'time', 'fm': 'length', 'fs': 'time', 'kJ/(mol*A)': 'force', 'kJ/(mol*Angstrom)': 'force', 'kJ/(mol*nm)': 'force', 'kJ/(mol*Å)': 'force', 'kJ/mol': 'energy', 'kcal/(mol*Angstrom)': 'force', 'kcal/mol': 'energy', 'm/s': 'speed', 'microsecond': 'time', 'millisecond': 'time', 'ms': 'time', 'nanometer': 'length', 'nanometer/picosecond': 'speed', 'nanometer/ps': 'speed', 'nanometer^{-3}': 'density', 'nanosecond': 'time', 'nm': 'length', 'nm/ns': 'speed', 'nm/ps': 'speed', 'nm^{-3}': 'density', 'ns': 'time', 'picometer': 'length', 'picosecond': 'time', 'pm': 'length', 'pm/ps': 'speed', 'ps': 'time', 's': 'time', 'sec': 'time', 'second': 'time', 'us': 'time', 'water': 'density', 'μs': 'time', 'Å': 'length', 'Å/ps': 'speed', 'Å^{-3}': 'density'}
+

returns the type of unit for a known input unit. +Note: Any unit must be unique because this dict is used to guess the +unit type.

+
+
Type
+

Generated lookup table (dict)

+
+
+
+ +
+
+

15.4. References and footnotes

+
+
+
Jorgensen1998
+

William L. Jorgensen and Corky Jenson. Temperature dependence of tip3p, spc, and tip4p water from npt monte carlo simulations: seeking temperatures of maximum density. Journal of Computational Chemistry, 19(10):1179–1186, 1998. doi:https://doi.org/10.1002/(SICI)1096-987X(19980730)19:10<1179::AID-JCC6>3.0.CO;2-J.

+
+
+
+

Footnotes

+
+
1
+

One can also consider the conversion factor to carry +units \(b'/b\), in which case the conversion formula would +become

+
+\[X' = f_{b,b'} X\]
+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/version.html b/2.7.0-dev0/documentation_pages/version.html new file mode 100644 index 0000000000..cbe2daeb11 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/version.html @@ -0,0 +1,194 @@ + + + + + + + 14. Version information for MDAnalysis - MDAnalysis.version — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

14. Version information for MDAnalysis - MDAnalysis.version

+

The version information in MDAnalysis.version indicates the +release of MDAnalysis. MDAnalysis uses semantic versioning as +described in the wiki page on versioning of MDAnalysis.

+

In brief:

+

Given a version number MAJOR.MINOR.PATCH, we increment the

+
    +
  1. MAJOR version when we make incompatible API changes,

  2. +
  3. MINOR version when we add functionality in a +backwards-compatible manner, and

  4. +
  5. PATCH version when we make backwards-compatible bug fixes.

  6. +
+

However, as long as the MAJOR number is 0 (i.e. the API has +not stabilized), even MINOR increases may introduce incompatible +API changes. As soon as we have a 1.0.0 release, the public API can +only be changed in a backward-incompatible manner with an increase in +MAJOR version.

+

Additional labels for pre-release and build metadata are available as +extensions to the MAJOR.MINOR.PATCH format.

+
+

Note

+

Development versions and pre-releases have a suffix after +the release number, such as 0.11.0-dev. If you have +problems, try out a full release (e.g. 0.11.0) first.

+
+
+

14.1. Data

+
+
+MDAnalysis.version.__version__ = '2.7.0-dev0'
+

Release of MDAnalysis as a string, using semantic versioning.

+
+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/visualization/streamlines.html b/2.7.0-dev0/documentation_pages/visualization/streamlines.html new file mode 100644 index 0000000000..6c6abf4609 --- /dev/null +++ b/2.7.0-dev0/documentation_pages/visualization/streamlines.html @@ -0,0 +1,263 @@ + + + + + + + 12.1.1. Streamplots (2D) — MDAnalysis.visualization.streamlines — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

12.1.1. Streamplots (2D) — MDAnalysis.visualization.streamlines

+
+
Authors
+

Tyler Reddy and Matthieu Chavent

+
+
Year
+

2014

+
+
Copyright
+

GNU Public License v3

+
+
+

The generate_streamlines() function can generate a 2D flow field from a +MD trajectory, for instance, lipid molecules in a flat membrane. It can make +use of multiple cores to perform the analyis in parallel (using +multiprocessing).

+
+

See also

+
+
MDAnalysis.visualization.streamlines_3D

streamplots in 3D

+
+
+
+
+
+MDAnalysis.visualization.streamlines.generate_streamlines(topology_file_path, trajectory_file_path, grid_spacing, MDA_selection, start_frame, end_frame, xmin, xmax, ymin, ymax, maximum_delta_magnitude, num_cores='maximum')[source]
+

Produce the x and y components of a 2D streamplot data set.

+
+
Parameters
+
    +
  • topology_file_path (str) – Absolute path to the topology file

  • +
  • trajectory_file_path (str) – Absolute path to the trajectory file. It will normally be desirable +to filter the trajectory with a tool such as GROMACS +g_filter (see [ᵃChavent2014])

  • +
  • grid_spacing (float) – The spacing between grid lines (angstroms)

  • +
  • MDA_selection (str) – MDAnalysis selection string

  • +
  • start_frame (int) – First frame number to parse

  • +
  • end_frame (int) – Last frame number to parse

  • +
  • xmin (float) – Minimum coordinate boundary for x-axis (angstroms)

  • +
  • xmax (float) – Maximum coordinate boundary for x-axis (angstroms)

  • +
  • ymin (float) – Minimum coordinate boundary for y-axis (angstroms)

  • +
  • ymax (float) – Maximum coordinate boundary for y-axis (angstroms)

  • +
  • maximum_delta_magnitude (float) – Absolute value of the largest displacement tolerated for the +centroid of a group of particles ( angstroms). Values above this +displacement will not count in the streamplot (treated as +excessively large displacements crossing the periodic boundary)

  • +
  • num_cores (int or 'maximum' (optional)) – The number of cores to use. (Default ‘maximum’ uses all available +cores)

  • +
+
+
Returns
+

    +
  • dx_array (array of floats) – An array object containing the displacements in the x direction

  • +
  • dy_array (array of floats) – An array object containing the displacements in the y direction

  • +
  • average_displacement (float) – \(\frac{\sum\sqrt[]{dx^2 + dy^2}}{N}\)

  • +
  • standard_deviation_of_displacement (float) – standard deviation of \(\sqrt[]{dx^2 + dy^2}\)

  • +
+

+
+
+

Examples

+

Generate 2D streamlines and plot:

+
import matplotlib, matplotlib.pyplot, np
+import MDAnalysis, MDAnalysis.visualization.streamlines
+
+u1, v1, average_displacement, standard_deviation_of_displacement =
+    MDAnalysis.visualization.streamlines.generate_streamlines('testing.gro', 'testing_filtered.xtc',
+            grid_spacing=20, MDA_selection='name PO4', start_frame=2, end_frame=3,
+            xmin=-8.73000049591, xmax= 1225.96008301,
+            ymin= -12.5799999237, ymax=1224.34008789,
+            maximum_delta_magnitude=1.0, num_cores=16)
+x = np.linspace(0, 1200, 61)
+y = np.linspace(0, 1200, 61)
+speed = np.sqrt(u1*u1 + v1*v1)
+fig = matplotlib.pyplot.figure()
+ax = fig.add_subplot(111, aspect='equal')
+ax.set_xlabel('x ($\AA$)')
+ax.set_ylabel('y ($\AA$)')
+ax.streamplot(x, y, u1, v1, density=(10,10), color=speed, linewidth=3*speed/speed.max())
+fig.savefig('testing_streamline.png',dpi=300)
+
+
+../../_images/testing_streamline.png +

References

+
+
+
ᵃChavent2014
+

Matthieu Chavent, Tyler Reddy, Joseph Goose, Anna Caroline E. Dahl, John E. Stone, Bruno Jobard, and Mark S. P. Sansom. Methodologies for the analysis of instantaneous lipid diffusion in md simulations of large membrane systems. Faraday Discuss., 169:455–475, 2014. doi:10.1039/C3FD00145H.

+
+
+
+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/visualization/streamlines_3D.html b/2.7.0-dev0/documentation_pages/visualization/streamlines_3D.html new file mode 100644 index 0000000000..47403dfaae --- /dev/null +++ b/2.7.0-dev0/documentation_pages/visualization/streamlines_3D.html @@ -0,0 +1,283 @@ + + + + + + + 12.1.2. Streamplots (3D) — MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

12.1.2. Streamplots (3D) — MDAnalysis.visualization.streamlines_3D

+
+
Authors
+

Tyler Reddy and Matthieu Chavent

+
+
Year
+

2014

+
+
Copyright
+

GNU Public License v3

+
+
+

The generate_streamlines_3d() function can generate a 3D flow field from +a MD trajectory, for instance, lipid molecules in a virus capsid. It can make +use of multiple cores to perform the analyis in parallel (using +multiprocessing).

+
+
+
ᵇChavent2014
+

Matthieu Chavent, Tyler Reddy, Joseph Goose, Anna Caroline E. Dahl, John E. Stone, Bruno Jobard, and Mark S. P. Sansom. Methodologies for the analysis of instantaneous lipid diffusion in md simulations of large membrane systems. Faraday Discuss., 169:455–475, 2014. doi:10.1039/C3FD00145H.

+
+
+
+
+

See also

+
+
MDAnalysis.visualization.streamlines

streamplots in 2D

+
+
+
+
+
+MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d(topology_file_path, trajectory_file_path, grid_spacing, MDA_selection, start_frame, end_frame, xmin, xmax, ymin, ymax, zmin, zmax, maximum_delta_magnitude=2.0, num_cores='maximum')[source]
+

Produce the x, y and z components of a 3D streamplot data set.

+
+
Parameters
+
    +
  • topology_file_path (str) – Absolute path to the topology file

  • +
  • trajectory_file_path (str) – Absolute path to the trajectory file. It will normally be desirable +to filter the trajectory with a tool such as GROMACS +g_filter (see [ᵇChavent2014])

  • +
  • grid_spacing (float) – The spacing between grid lines (angstroms)

  • +
  • MDA_selection (str) – MDAnalysis selection string

  • +
  • start_frame (int) – First frame number to parse

  • +
  • end_frame (int) – Last frame number to parse

  • +
  • xmin (float) – Minimum coordinate boundary for x-axis (angstroms)

  • +
  • xmax (float) – Maximum coordinate boundary for x-axis (angstroms)

  • +
  • ymin (float) – Minimum coordinate boundary for y-axis (angstroms)

  • +
  • ymax (float) – Maximum coordinate boundary for y-axis (angstroms)

  • +
  • maximum_delta_magnitude (float) – Absolute value of the largest displacement tolerated for the +centroid of a group of particles ( angstroms). Values above this +displacement will not count in the streamplot (treated as +excessively large displacements crossing the periodic boundary)

  • +
  • num_cores (int or 'maximum' (optional)) – The number of cores to use. (Default ‘maximum’ uses all available +cores)

  • +
+
+
Returns
+

    +
  • dx_array (array of floats) – An array object containing the displacements in the x direction

  • +
  • dy_array (array of floats) – An array object containing the displacements in the y direction

  • +
  • dz_array (array of floats) – An array object containing the displacements in the z direction

  • +
+

+
+
+

Examples

+

Generate 3D streamlines and visualize in mayavi:

+
import numpy as np
+
+import MDAnalysis
+import MDAnalysis.visualization.streamlines_3D
+
+import mayavi, mayavi.mlab
+
+# assign coordinate system limits and grid spacing:
+x_lower,x_upper = -8.73, 1225.96
+y_lower,y_upper = -12.58, 1224.34
+z_lower,z_upper = -300, 300
+grid_spacing_value = 20
+
+x1, y1, z1 = MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d(
+                'testing.gro', 'testing_filtered.xtc',
+                 xmin=x_lower, xmax=x_upper,
+                 ymin=y_lower, ymax=y_upper,
+                 zmin=z_lower, zmax=z_upper,
+                 grid_spacing=grid_spacing_value, MDA_selection = 'name PO4',
+                 start_frame=2, end_frame=3, num_cores='maximum')
+
+x, y, z = np.mgrid[x_lower:x_upper:x1.shape[0]*1j,
+                  y_lower:y_upper:y1.shape[1]*1j,
+                  z_lower:z_upper:z1.shape[2]*1j]
+
+# plot with mayavi:
+fig = mayavi.mlab.figure(bgcolor=(1.0, 1.0, 1.0), size=(800, 800), fgcolor=(0, 0, 0))
+for z_value in np.arange(z_lower, z_upper, grid_spacing_value):
+    st = mayavi.mlab.flow(x, y, z, x1, y1, z1, line_width=1,
+                          seedtype='plane', integration_direction='both')
+    st.streamline_type = 'tube'
+    st.tube_filter.radius = 2
+    st.seed.widget.origin = np.array([ x_lower,  y_upper,   z_value])
+    st.seed.widget.point1 = np.array([ x_upper, y_upper,  z_value])
+    st.seed.widget.point2 = np.array([ x_lower, y_lower,  z_value])
+    st.seed.widget.resolution = int(x1.shape[0])
+    st.seed.widget.enabled = False
+mayavi.mlab.axes(extent = [0, 1200, 0, 1200, -300, 300])
+fig.scene.z_plus_view()
+mayavi.mlab.savefig('test_streamplot_3D.png')
+# more compelling examples can be produced for vesicles and other spherical systems
+
+
+../../_images/test_streamplot_3D.png + +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/documentation_pages/visualization_modules.html b/2.7.0-dev0/documentation_pages/visualization_modules.html new file mode 100644 index 0000000000..c7abf4196c --- /dev/null +++ b/2.7.0-dev0/documentation_pages/visualization_modules.html @@ -0,0 +1,188 @@ + + + + + + + 12. Visualization modules — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

12. Visualization modules

+

The MDAnalysis.visualization namespace contains code to carry out +analyses which return data that is specifically-tailored for visualization.

+

Please see the individual module documentation for additional references and +citation information.

+

These modules are not imported by default; in order to use them one has to +import them from MDAnalysis.visualization, for instance:

+
import MDAnalysis.visualization.streamlines
+
+
+
+

Note

+

Some of the modules require additional Python packages such as matplotlib or +scipy.

+
+
+

12.1. Visualization of Lipid Flow

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/genindex.html b/2.7.0-dev0/genindex.html new file mode 100644 index 0000000000..2bd6811ed6 --- /dev/null +++ b/2.7.0-dev0/genindex.html @@ -0,0 +1,7794 @@ + + + + + + Index — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ Symbols + | _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + +
+

Symbols

+ + +
+ +

_

+ + + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/index.html b/2.7.0-dev0/index.html new file mode 100644 index 0000000000..c908a6cafb --- /dev/null +++ b/2.7.0-dev0/index.html @@ -0,0 +1,266 @@ + + + + + + + MDAnalysis documentation — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

MDAnalysis documentation

+
+
Release
+

2.7.0-dev0

+
+
Date
+

Aug 16, 2023

+
+
+

MDAnalysis (www.mdanalysis.org) is an object-oriented python +toolkit to analyze molecular dynamics trajectories generated by +CHARMM, Gromacs, Amber, NAMD, LAMMPS, DL_POLY and other +packages; it also reads other formats (e.g., PDB files and XYZ +format trajectories; see Table of supported coordinate formats and +Table of Supported Topology Formats for the full lists). It can write +most of these formats, too, together with atom selections for use in +Gromacs, CHARMM, VMD and PyMol (see Selection exporters).

+

It allows one to read molecular dynamics trajectories and access the +atomic coordinates through NumPy arrays. This provides a flexible and +relatively fast framework for complex analysis tasks. Fairly complete +atom Selection commands are implemented. Trajectories can +also be manipulated (for instance, fit to a reference structure) and +written out in a range of formats.

+
+

Getting involved

+

Please report bugs or enhancement requests through the Issue +Tracker. Questions can also be asked on the mdnalysis-discussion mailing +list.

+

The MDAnalysis community subscribes to a Code of Conduct that all community +members agree and adhere to — please read it.

+
+
+

User Guide

+

The MDAnalysis User Guide provides comprehensive information on how to +use the library. We would recommend that new users have a look at the +Quick Start Guide. The User Guide also has a set of examples on how to +use the MDAnalysis library which may be of interest.

+
+
+

Installing MDAnalysis

+

The easiest approach to install the latest release is to use a package that +can be installed either with conda or pip.

+
+

conda

+

First installation with conda:

+
conda config --add channels conda-forge
+conda install mdanalysis
+
+
+

which will automatically install a full set of dependencies.

+

To upgrade later:

+
conda update mdanalysis
+
+
+
+
+

pip

+

Installation with pip and a minimal set of dependencies:

+
pip install --upgrade MDAnalysis
+
+
+

To install with a full set of dependencies (which includes everything needed +for MDAnalysis.analysis), add the [analysis] tag:

+
pip install --upgrade MDAnalysis[analysis]
+
+
+
+
+

Tests

+

If you want to run the tests or use example files to follow some of the +examples in the documentation or the tutorials, also install the +MDAnalysisTests package:

+
conda install mdanalysistests            # with conda
+pip install --upgrade MDAnalysisTests    # with pip
+
+
+
+
+
+

Source Code

+

Source code is available from +https://github.com/MDAnalysis/mdanalysis/ and is packaged under the +GNU Public Licence, version 3 or any later version. Individual components +of the source code are provided under GPL compatible licenses, details can be +found in the MDAnalysis license file. Obtain the sources with git.

+
git clone https://github.com/MDAnalysis/mdanalysis.git
+
+
+

The User Guide provides more information on how to +install the development version of MDAnalysis.

+
+
+

Citation

+

When using MDAnalysis in published work, please cite +[Michaud-Agrawal2011] and [Gowers2016].

+

MDAnalysis also contains specific algorithms and whole analysis +modules whose algorithms have also been published in the scientific +literature. Please make sure to also reference any +Citations for included algorithms and modules in published work.

+

Thank you!

+
+
+
+
+

Indices and tables

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/objects.inv b/2.7.0-dev0/objects.inv new file mode 100644 index 0000000000..ef25f66987 Binary files /dev/null and b/2.7.0-dev0/objects.inv differ diff --git a/2.7.0-dev0/py-modindex.html b/2.7.0-dev0/py-modindex.html new file mode 100644 index 0000000000..bbe277eace --- /dev/null +++ b/2.7.0-dev0/py-modindex.html @@ -0,0 +1,989 @@ + + + + + + Python Module Index — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ m +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ m
+ MDAnalysis +
    + MDAnalysis.analysis.align +
    + MDAnalysis.analysis.atomicdistances +
    + MDAnalysis.analysis.base +
    + MDAnalysis.analysis.bat +
    + MDAnalysis.analysis.contacts +
    + MDAnalysis.analysis.data.filenames +
    + MDAnalysis.analysis.density +
    + MDAnalysis.analysis.dielectric +
    + MDAnalysis.analysis.diffusionmap +
    + MDAnalysis.analysis.dihedrals +
    + MDAnalysis.analysis.distances +
    + MDAnalysis.analysis.encore.bootstrap +
    + MDAnalysis.analysis.encore.clustering.affinityprop +
    + MDAnalysis.analysis.encore.clustering.cluster +
    + MDAnalysis.analysis.encore.clustering.ClusterCollection +
    + MDAnalysis.analysis.encore.clustering.ClusteringMethod +
    + MDAnalysis.analysis.encore.confdistmatrix +
    + MDAnalysis.analysis.encore.covariance +
    + MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod +
    + MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality +
    + MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed +
    + MDAnalysis.analysis.encore.similarity +
    + MDAnalysis.analysis.encore.utils +
    + MDAnalysis.analysis.gnm +
    + MDAnalysis.analysis.hbonds.hbond_autocorrel +
    + MDAnalysis.analysis.helix_analysis +
    + MDAnalysis.analysis.hole2 +
    + MDAnalysis.analysis.hole2.templates +
    + MDAnalysis.analysis.hole2.utils +
    + MDAnalysis.analysis.hydrogenbonds.hbond_analysis +
    + MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel +
    + MDAnalysis.analysis.hydrogenbonds.wbridge_analysis +
    + MDAnalysis.analysis.leaflet +
    + MDAnalysis.analysis.legacy.x3dna +
    + MDAnalysis.analysis.lineardensity +
    + MDAnalysis.analysis.msd +
    + MDAnalysis.analysis.nucleicacids +
    + MDAnalysis.analysis.nuclinfo +
    + MDAnalysis.analysis.pca +
    + MDAnalysis.analysis.polymer +
    + MDAnalysis.analysis.psa +
    + MDAnalysis.analysis.rdf +
    + MDAnalysis.analysis.rms +
    + MDAnalysis.analysis.waterdynamics +
    + MDAnalysis.auxiliary.__init__ +
    + MDAnalysis.auxiliary.base +
    + MDAnalysis.auxiliary.core +
    + MDAnalysis.auxiliary.EDR +
    + MDAnalysis.auxiliary.XVG +
    + MDAnalysis.converters +
    + MDAnalysis.converters.OpenMM +
    + MDAnalysis.converters.OpenMMParser +
    + MDAnalysis.converters.ParmEd +
    + MDAnalysis.converters.ParmEdParser +
    + MDAnalysis.converters.RDKit +
    + MDAnalysis.converters.RDKitParser +
    + MDAnalysis.coordinates.__init__ +
    + MDAnalysis.coordinates.base +
    + MDAnalysis.coordinates.chain +
    + MDAnalysis.coordinates.chemfiles +
    + MDAnalysis.coordinates.core +
    + MDAnalysis.coordinates.CRD +
    + MDAnalysis.coordinates.DCD +
    + MDAnalysis.coordinates.DLPoly +
    + MDAnalysis.coordinates.DMS +
    + MDAnalysis.coordinates.FHIAIMS +
    + MDAnalysis.coordinates.GMS +
    + MDAnalysis.coordinates.GRO +
    + MDAnalysis.coordinates.GSD +
    + MDAnalysis.coordinates.H5MD +
    + MDAnalysis.coordinates.INPCRD +
    + MDAnalysis.coordinates.LAMMPS +
    + MDAnalysis.coordinates.memory +
    + MDAnalysis.coordinates.MMTF +
    + MDAnalysis.coordinates.MOL2 +
    + MDAnalysis.coordinates.NAMDBIN +
    + MDAnalysis.coordinates.null +
    + MDAnalysis.coordinates.PDB +
    + MDAnalysis.coordinates.PDBQT +
    + MDAnalysis.coordinates.PQR +
    + MDAnalysis.coordinates.timestep +
    + MDAnalysis.coordinates.TNG +
    + MDAnalysis.coordinates.TRJ +
    + MDAnalysis.coordinates.TRR +
    + MDAnalysis.coordinates.TRZ +
    + MDAnalysis.coordinates.TXYZ +
    + MDAnalysis.coordinates.XDR +
    + MDAnalysis.coordinates.XTC +
    + MDAnalysis.coordinates.XYZ +
    + MDAnalysis.core.__init__ +
    + MDAnalysis.core.accessors +
    + MDAnalysis.core.groups +
    + MDAnalysis.core.selection +
    + MDAnalysis.core.topology +
    + MDAnalysis.core.topologyattrs +
    + MDAnalysis.core.topologyobjects +
    + MDAnalysis.core.universe +
    + MDAnalysis.exceptions +
    + MDAnalysis.lib + ``lib`` collects independent code for re-use in MDAnalysis
    + MDAnalysis.lib.c_distances +
    + MDAnalysis.lib.c_distances_openmp +
    + MDAnalysis.lib.correlations +
    + MDAnalysis.lib.distances +
    + MDAnalysis.lib.formats.libdcd +
    + MDAnalysis.lib.formats.libmdaxdr +
    + MDAnalysis.lib.log +
    + MDAnalysis.lib.mdamath +
    + MDAnalysis.lib.NeighborSearch +
    + MDAnalysis.lib.nsgrid +
    + MDAnalysis.lib.picklable_file_io +
    + MDAnalysis.lib.pkdtree +
    + MDAnalysis.lib.qcprot +
    + MDAnalysis.lib.transformations +
    + MDAnalysis.lib.util +
    + MDAnalysis.selections.base +
    + MDAnalysis.selections.charmm +
    + MDAnalysis.selections.gromacs +
    + MDAnalysis.selections.jmol +
    + MDAnalysis.selections.pymol +
    + MDAnalysis.selections.vmd +
    + MDAnalysis.topology.__init__ +
    + MDAnalysis.topology.base +
    + MDAnalysis.topology.core +
    + MDAnalysis.topology.CRDParser +
    + MDAnalysis.topology.DLPolyParser +
    + MDAnalysis.topology.DMSParser +
    + MDAnalysis.topology.ExtendedPDBParser +
    + MDAnalysis.topology.FHIAIMSParser +
    + MDAnalysis.topology.GMSParser +
    + MDAnalysis.topology.GROParser +
    + MDAnalysis.topology.GSDParser +
    + MDAnalysis.topology.guessers +
    + MDAnalysis.topology.HoomdXMLParser +
    + MDAnalysis.topology.ITPParser +
    + MDAnalysis.topology.LAMMPSParser +
    + MDAnalysis.topology.MinimalParser +
    + MDAnalysis.topology.MMTFParser +
    + MDAnalysis.topology.MOL2Parser +
    + MDAnalysis.topology.PDBParser +
    + MDAnalysis.topology.PDBQTParser +
    + MDAnalysis.topology.PQRParser +
    + MDAnalysis.topology.PSFParser +
    + MDAnalysis.topology.tables +
    + MDAnalysis.topology.TOPParser +
    + MDAnalysis.topology.tpr +
    + MDAnalysis.topology.tpr.obj +
    + MDAnalysis.topology.tpr.setting +
    + MDAnalysis.topology.tpr.utils +
    + MDAnalysis.topology.TPRParser +
    + MDAnalysis.topology.TXYZParser +
    + MDAnalysis.topology.XYZParser +
    + MDAnalysis.transformations +
    + MDAnalysis.transformations.base +
    + MDAnalysis.transformations.boxdimensions +
    + MDAnalysis.transformations.fit +
    + MDAnalysis.transformations.nojump +
    + MDAnalysis.transformations.positionaveraging +
    + MDAnalysis.transformations.rotate +
    + MDAnalysis.transformations.translate +
    + MDAnalysis.transformations.wrap +
    + MDAnalysis.units +
    + MDAnalysis.version +
    + MDAnalysis.visualization.streamlines +
    + MDAnalysis.visualization.streamlines_3D +
+ + +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + \ No newline at end of file diff --git a/2.7.0-dev0/search.html b/2.7.0-dev0/search.html new file mode 100644 index 0000000000..52ed84523b --- /dev/null +++ b/2.7.0-dev0/search.html @@ -0,0 +1,169 @@ + + + + + + Search — MDAnalysis 2.7.0-dev0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2005-2023, Naveen Michaud-Agrawal, Elizabeth J. Denning, Christian Beckstein (logo), Joshua L. Adelman, Henok Ademtew, Shobhit Agarwal, Aya M. Alaa, Irfan Alibay, Kazi Shudipto Amin, Anshul Angaria, Luís Pedro Borges Araújo, Balasubramanian, Utkarsh Bansal, Patricio Barletta, Leonardo Barneschi, Jonathan Barnoud, Estefania Barreto-Ojeda, Tone Bengtsen, Alejandro Bernardin, Ninad Bhat, Mateusz Bieniek, Kavya Bisht, Wouter Boomsma, Jose Borreguero, Cédric Bouysset, Kevin Boyd, Meet Brijwani, Bart Bruininks, Sébastien Buchoux, Sören von Bülow, Yantong Cai, David Caplan, Yuanyu Chang, Pratham Chauhan, Matthieu Chavent, Haochuan Chen, Xu Hong Chen, Kathleen Clark, Jennifer A Clark, Orion Cohen, Charlie Cook, Ruggero Cortini, Nicholas Craven, Ramon Crehuet, Davide Cruz, Robert Delgado, John Detlefs, Xavier Deupi, Jan Domanski, David L. Dotson, Mark D. Driver, Ali Ehlen, Daniel J. Evans, Shujie Fan, Bjarne Feddersen, Lennard van der Feltz, Jake Fennick, Philip Fowler, Guillaume Fraux, Anirvinya G, Ahmed Salah Ghoneim, Mikhail Glagolev, William Glass, Joseph Goose, Alexander Gorfer, Richard J. Gowers, Lukas Grossar, Abhinav Gupta, Akshay Gupta, Pratik Gupta, Benjamin Hall, Ameya Harmalkar, Ivan Hristov, Eugen Hruska, Kyle J. Huston, Siddharth Jain, Edis Jakupovic, Joe Jordan, Henrik Jäger, Uma D Kadam, Aditya Kamath, Jon Kapla, Haleema Khan, Navya Khare, Utsav Khatu, Andrew William King, Henry Kobin, Abhishek A. Kognole, Kosuke Kudo, Atharva Kulkarni, Manish Kumar, Mohit Kumar, Shubham Kumar, Alia Lescoulie, Max Linke, Philip Loche, Jinju Lu, Hugo MacDermott-Opeskin, Shaivi Malik, Egor Marin, Domenico Marson, Micaela Matta, Andrew R. McCluskey, Robert McGibbon, Rocco Meli, Manuel Nuno Melo, Marcelo C. R. Melo, Dominik 'Rathann' Mierzejewski, Henry Mull, Morgan L. Nance, Fiona B. Naughton, Alex Nesterenko, Hai Nguyen, Sang Young Noh, Meghan Osato, Daniele Padula, Nabarun Pal, Mattia F. Palermo, Dimitrios Papageorgiou, Rafael R. Pappalardo, Vishal Parmar, Danny Parton, Shakul Pathak, Christian Pfaendner, Joshua L. Phillips, Marcelo D. Poleto, Hannah Pollak, Kashish Punjani, Michael Quevillon, Vedant Rathore, Tyler Reddy, Pedro Reis, Paul Rigor, Andrea Rizzi, Xiaoxu Ruan, Carlos Yanez S., Utkarsh Saxena, Moritz Schaeffler, Alexander Schlaich, Marcello Sega, Ricky Sexton, Sean L. Seyler, Faraaz Shah, Sulay Shah, Abhishek Shandilya, Shubham Sharma, Rishabh Shukla, Karthikeyan Singaravelan, Tamandeep Singh, Paul Smith, Andy Somogyi, Caio S. Souza, Shantanu Srivastava, Lukas Stelzl, Jan Stevens, Gorman Stock, Fenil Suchak, Ayush Suhane, Filip T. Szczypiński, Sukeerti T, Matthijs Tadema, Joao Miguel Correia Teixeira, Paarth Thadani, Matthew W. Thompson, Hao Tian, Matteo Tiberti, Zaheer Timol, Wiep van der Toorn, Mieczyslaw Torchala, Aditi Tripathi, Mark Verma, Josh Vermaas, Isaac Virshup, Lily Wang, Nestor Wendt, Zhiyi Wu, Tengyu Xie, Zhuyi Xue, Mingyi Xue, Alexander Yang, Juan Eiros Zamora, Johannes Zeman, Yibo Zhang, Raymond Zhao, Yuxuan Zhuang, and Oliver Beckstein.

+
+ + + + + + +
+
+
+
+
+ + +
+ + + 2.7.0-dev0 + + + +
+
+
Other Versions
+
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/2.7.0-dev0/searchindex.js b/2.7.0-dev0/searchindex.js new file mode 100644 index 0000000000..5282ded170 --- /dev/null +++ b/2.7.0-dev0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["documentation_pages/analysis/align", "documentation_pages/analysis/atomicdistances", "documentation_pages/analysis/base", "documentation_pages/analysis/bat", "documentation_pages/analysis/contacts", "documentation_pages/analysis/data", "documentation_pages/analysis/density", "documentation_pages/analysis/dielectric", "documentation_pages/analysis/diffusionmap", "documentation_pages/analysis/dihedrals", "documentation_pages/analysis/distances", "documentation_pages/analysis/encore", "documentation_pages/analysis/encore/bootstrap", "documentation_pages/analysis/encore/clustering", "documentation_pages/analysis/encore/confdistmatrix", "documentation_pages/analysis/encore/covariance", "documentation_pages/analysis/encore/dimensionality_reduction", "documentation_pages/analysis/encore/similarity", "documentation_pages/analysis/encore/utils", "documentation_pages/analysis/gnm", "documentation_pages/analysis/hbond_autocorrel", "documentation_pages/analysis/hbond_autocorrel_deprecated", "documentation_pages/analysis/helix_analysis", "documentation_pages/analysis/hole2", "documentation_pages/analysis/hydrogenbonds", "documentation_pages/analysis/leaflet", "documentation_pages/analysis/legacy/x3dna", "documentation_pages/analysis/legacy_modules", "documentation_pages/analysis/lineardensity", "documentation_pages/analysis/msd", "documentation_pages/analysis/nucleicacids", "documentation_pages/analysis/nuclinfo", "documentation_pages/analysis/pca", "documentation_pages/analysis/polymer", "documentation_pages/analysis/psa", "documentation_pages/analysis/rdf", "documentation_pages/analysis/rms", "documentation_pages/analysis/waterdynamics", "documentation_pages/analysis/wbridge_analysis", "documentation_pages/analysis_modules", "documentation_pages/auxiliary/EDR", "documentation_pages/auxiliary/XVG", "documentation_pages/auxiliary/base", "documentation_pages/auxiliary/core", "documentation_pages/auxiliary/init", "documentation_pages/auxiliary_modules", "documentation_pages/converters", "documentation_pages/converters/OpenMM", "documentation_pages/converters/ParmEd", "documentation_pages/converters/RDKit", "documentation_pages/coordinates/CRD", "documentation_pages/coordinates/DCD", "documentation_pages/coordinates/DLPoly", "documentation_pages/coordinates/DMS", "documentation_pages/coordinates/FHIAIMS", "documentation_pages/coordinates/GMS", "documentation_pages/coordinates/GRO", "documentation_pages/coordinates/GSD", "documentation_pages/coordinates/H5MD", "documentation_pages/coordinates/INPCRD", "documentation_pages/coordinates/LAMMPS", "documentation_pages/coordinates/MMTF", "documentation_pages/coordinates/MOL2", "documentation_pages/coordinates/NAMDBIN", "documentation_pages/coordinates/PDB", "documentation_pages/coordinates/PDBQT", "documentation_pages/coordinates/PQR", "documentation_pages/coordinates/TNG", "documentation_pages/coordinates/TRJ", "documentation_pages/coordinates/TRR", "documentation_pages/coordinates/TRZ", "documentation_pages/coordinates/TXYZ", "documentation_pages/coordinates/XDR", "documentation_pages/coordinates/XTC", "documentation_pages/coordinates/XYZ", "documentation_pages/coordinates/base", "documentation_pages/coordinates/chain", "documentation_pages/coordinates/chemfiles", "documentation_pages/coordinates/core", "documentation_pages/coordinates/init", "documentation_pages/coordinates/memory", "documentation_pages/coordinates/null", "documentation_pages/coordinates/pickle_readers", "documentation_pages/coordinates/timestep", "documentation_pages/coordinates_modules", "documentation_pages/core/accessors", "documentation_pages/core/groups", "documentation_pages/core/init", "documentation_pages/core/selection", "documentation_pages/core/topology", "documentation_pages/core/topologyattrs", "documentation_pages/core/topologyobjects", "documentation_pages/core/universe", "documentation_pages/core_modules", "documentation_pages/exceptions", "documentation_pages/lib/NeighborSearch", "documentation_pages/lib/c_distances", "documentation_pages/lib/c_distances_openmp", "documentation_pages/lib/correlations", "documentation_pages/lib/distances", "documentation_pages/lib/formats/libdcd", "documentation_pages/lib/formats/libmdaxdr", "documentation_pages/lib/log", "documentation_pages/lib/mdamath", "documentation_pages/lib/nsgrid", "documentation_pages/lib/picklable_file_io", "documentation_pages/lib/pkdtree", "documentation_pages/lib/qcprot", "documentation_pages/lib/transformations", "documentation_pages/lib/util", "documentation_pages/lib_modules", "documentation_pages/overview", "documentation_pages/references", "documentation_pages/selections", "documentation_pages/selections/base", "documentation_pages/selections/charmm", "documentation_pages/selections/gromacs", "documentation_pages/selections/jmol", "documentation_pages/selections/pymol", "documentation_pages/selections/vmd", "documentation_pages/selections_modules", "documentation_pages/topology", "documentation_pages/topology/CRDParser", "documentation_pages/topology/DLPolyParser", "documentation_pages/topology/DMSParser", "documentation_pages/topology/ExtendedPDBParser", "documentation_pages/topology/FHIAIMSParser", "documentation_pages/topology/GMSParser", "documentation_pages/topology/GROParser", "documentation_pages/topology/GSDParser", "documentation_pages/topology/HoomdXMLParser", "documentation_pages/topology/ITPParser", "documentation_pages/topology/LAMMPSParser", "documentation_pages/topology/MMTFParser", "documentation_pages/topology/MOL2Parser", "documentation_pages/topology/MinimalParser", "documentation_pages/topology/PDBParser", "documentation_pages/topology/PDBQTParser", "documentation_pages/topology/PQRParser", "documentation_pages/topology/PSFParser", "documentation_pages/topology/TOPParser", "documentation_pages/topology/TPRParser", "documentation_pages/topology/TXYZParser", "documentation_pages/topology/XYZParser", "documentation_pages/topology/base", "documentation_pages/topology/core", "documentation_pages/topology/guessers", "documentation_pages/topology/init", "documentation_pages/topology/tables", "documentation_pages/topology/tpr_util", "documentation_pages/topology_modules", "documentation_pages/trajectory_transformations", "documentation_pages/transformations/base", "documentation_pages/transformations/boxdimensions", "documentation_pages/transformations/fit", "documentation_pages/transformations/nojump", "documentation_pages/transformations/positionaveraging", "documentation_pages/transformations/rotate", "documentation_pages/transformations/translate", "documentation_pages/transformations/wrap", "documentation_pages/units", "documentation_pages/version", "documentation_pages/visualization/streamlines", "documentation_pages/visualization/streamlines_3D", "documentation_pages/visualization_modules", "index"], "filenames": ["documentation_pages/analysis/align.rst", "documentation_pages/analysis/atomicdistances.rst", "documentation_pages/analysis/base.rst", "documentation_pages/analysis/bat.rst", "documentation_pages/analysis/contacts.rst", "documentation_pages/analysis/data.rst", "documentation_pages/analysis/density.rst", "documentation_pages/analysis/dielectric.rst", "documentation_pages/analysis/diffusionmap.rst", "documentation_pages/analysis/dihedrals.rst", "documentation_pages/analysis/distances.rst", "documentation_pages/analysis/encore.rst", "documentation_pages/analysis/encore/bootstrap.rst", "documentation_pages/analysis/encore/clustering.rst", "documentation_pages/analysis/encore/confdistmatrix.rst", "documentation_pages/analysis/encore/covariance.rst", "documentation_pages/analysis/encore/dimensionality_reduction.rst", "documentation_pages/analysis/encore/similarity.rst", "documentation_pages/analysis/encore/utils.rst", "documentation_pages/analysis/gnm.rst", "documentation_pages/analysis/hbond_autocorrel.rst", "documentation_pages/analysis/hbond_autocorrel_deprecated.rst", "documentation_pages/analysis/helix_analysis.rst", "documentation_pages/analysis/hole2.rst", "documentation_pages/analysis/hydrogenbonds.rst", "documentation_pages/analysis/leaflet.rst", "documentation_pages/analysis/legacy/x3dna.rst", "documentation_pages/analysis/legacy_modules.rst", "documentation_pages/analysis/lineardensity.rst", "documentation_pages/analysis/msd.rst", "documentation_pages/analysis/nucleicacids.rst", "documentation_pages/analysis/nuclinfo.rst", "documentation_pages/analysis/pca.rst", "documentation_pages/analysis/polymer.rst", "documentation_pages/analysis/psa.rst", "documentation_pages/analysis/rdf.rst", "documentation_pages/analysis/rms.rst", "documentation_pages/analysis/waterdynamics.rst", "documentation_pages/analysis/wbridge_analysis.rst", "documentation_pages/analysis_modules.rst", "documentation_pages/auxiliary/EDR.rst", "documentation_pages/auxiliary/XVG.rst", "documentation_pages/auxiliary/base.rst", "documentation_pages/auxiliary/core.rst", "documentation_pages/auxiliary/init.rst", "documentation_pages/auxiliary_modules.rst", "documentation_pages/converters.rst", "documentation_pages/converters/OpenMM.rst", "documentation_pages/converters/ParmEd.rst", "documentation_pages/converters/RDKit.rst", "documentation_pages/coordinates/CRD.rst", "documentation_pages/coordinates/DCD.rst", "documentation_pages/coordinates/DLPoly.rst", "documentation_pages/coordinates/DMS.rst", "documentation_pages/coordinates/FHIAIMS.rst", "documentation_pages/coordinates/GMS.rst", "documentation_pages/coordinates/GRO.rst", "documentation_pages/coordinates/GSD.rst", "documentation_pages/coordinates/H5MD.rst", "documentation_pages/coordinates/INPCRD.rst", "documentation_pages/coordinates/LAMMPS.rst", "documentation_pages/coordinates/MMTF.rst", "documentation_pages/coordinates/MOL2.rst", "documentation_pages/coordinates/NAMDBIN.rst", "documentation_pages/coordinates/PDB.rst", "documentation_pages/coordinates/PDBQT.rst", "documentation_pages/coordinates/PQR.rst", "documentation_pages/coordinates/TNG.rst", "documentation_pages/coordinates/TRJ.rst", "documentation_pages/coordinates/TRR.rst", "documentation_pages/coordinates/TRZ.rst", "documentation_pages/coordinates/TXYZ.rst", "documentation_pages/coordinates/XDR.rst", "documentation_pages/coordinates/XTC.rst", "documentation_pages/coordinates/XYZ.rst", "documentation_pages/coordinates/base.rst", "documentation_pages/coordinates/chain.rst", "documentation_pages/coordinates/chemfiles.rst", "documentation_pages/coordinates/core.rst", "documentation_pages/coordinates/init.rst", "documentation_pages/coordinates/memory.rst", "documentation_pages/coordinates/null.rst", "documentation_pages/coordinates/pickle_readers.rst", "documentation_pages/coordinates/timestep.rst", "documentation_pages/coordinates_modules.rst", "documentation_pages/core/accessors.rst", "documentation_pages/core/groups.rst", "documentation_pages/core/init.rst", "documentation_pages/core/selection.rst", "documentation_pages/core/topology.rst", "documentation_pages/core/topologyattrs.rst", "documentation_pages/core/topologyobjects.rst", "documentation_pages/core/universe.rst", "documentation_pages/core_modules.rst", "documentation_pages/exceptions.rst", "documentation_pages/lib/NeighborSearch.rst", "documentation_pages/lib/c_distances.rst", "documentation_pages/lib/c_distances_openmp.rst", "documentation_pages/lib/correlations.rst", "documentation_pages/lib/distances.rst", "documentation_pages/lib/formats/libdcd.rst", "documentation_pages/lib/formats/libmdaxdr.rst", "documentation_pages/lib/log.rst", "documentation_pages/lib/mdamath.rst", "documentation_pages/lib/nsgrid.rst", "documentation_pages/lib/picklable_file_io.rst", "documentation_pages/lib/pkdtree.rst", "documentation_pages/lib/qcprot.rst", "documentation_pages/lib/transformations.rst", "documentation_pages/lib/util.rst", "documentation_pages/lib_modules.rst", "documentation_pages/overview.rst", "documentation_pages/references.rst", "documentation_pages/selections.rst", "documentation_pages/selections/base.rst", "documentation_pages/selections/charmm.rst", "documentation_pages/selections/gromacs.rst", "documentation_pages/selections/jmol.rst", "documentation_pages/selections/pymol.rst", "documentation_pages/selections/vmd.rst", "documentation_pages/selections_modules.rst", "documentation_pages/topology.rst", "documentation_pages/topology/CRDParser.rst", "documentation_pages/topology/DLPolyParser.rst", "documentation_pages/topology/DMSParser.rst", "documentation_pages/topology/ExtendedPDBParser.rst", "documentation_pages/topology/FHIAIMSParser.rst", "documentation_pages/topology/GMSParser.rst", "documentation_pages/topology/GROParser.rst", "documentation_pages/topology/GSDParser.rst", "documentation_pages/topology/HoomdXMLParser.rst", "documentation_pages/topology/ITPParser.rst", "documentation_pages/topology/LAMMPSParser.rst", "documentation_pages/topology/MMTFParser.rst", "documentation_pages/topology/MOL2Parser.rst", "documentation_pages/topology/MinimalParser.rst", "documentation_pages/topology/PDBParser.rst", "documentation_pages/topology/PDBQTParser.rst", "documentation_pages/topology/PQRParser.rst", "documentation_pages/topology/PSFParser.rst", "documentation_pages/topology/TOPParser.rst", "documentation_pages/topology/TPRParser.rst", "documentation_pages/topology/TXYZParser.rst", "documentation_pages/topology/XYZParser.rst", "documentation_pages/topology/base.rst", "documentation_pages/topology/core.rst", "documentation_pages/topology/guessers.rst", "documentation_pages/topology/init.rst", "documentation_pages/topology/tables.rst", "documentation_pages/topology/tpr_util.rst", "documentation_pages/topology_modules.rst", "documentation_pages/trajectory_transformations.rst", "documentation_pages/transformations/base.rst", "documentation_pages/transformations/boxdimensions.rst", "documentation_pages/transformations/fit.rst", "documentation_pages/transformations/nojump.rst", "documentation_pages/transformations/positionaveraging.rst", "documentation_pages/transformations/rotate.rst", "documentation_pages/transformations/translate.rst", "documentation_pages/transformations/wrap.rst", "documentation_pages/units.rst", "documentation_pages/version.rst", "documentation_pages/visualization/streamlines.rst", "documentation_pages/visualization/streamlines_3D.rst", "documentation_pages/visualization_modules.rst", "index.rst"], "titles": ["4.2.1. Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align", "4.2.4. Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances", "4.1.1. Analysis building blocks \u2014 MDAnalysis.analysis.base", "4.2.8. Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat", "4.2.2. Native contacts analysis \u2014 MDAnalysis.analysis.contacts", "4.11.1. Analysis data files", "4.8.1. Generating densities from trajectories \u2014 MDAnalysis.analysis.density", "4.8.4. Dielectric \u2014 MDAnalysis.analysis.dielectric", "4.9.1. Diffusion map \u2014 MDAnalysis.analysis.diffusionmap", "4.7.1.3. Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals", "4.2.3. Distance analysis \u2014 MDAnalysis.analysis.distances", "4.2.7. ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore", "4.2.7.1.6. bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap", "4.2.7.1.2. Clustering", "4.2.7.1.4. Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix", "4.2.7.1.5. Covariance calculation \u2014 encore.covariance", "4.2.7.1.3. Dimensionality reduction", "4.2.7.1.1. Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity", "4.2.7.1.7. Utility functions for ENCORE", "4.7.1.1. Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm", "4.3.2. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel", "4.3.4. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)", "4.7.1.2. HELANAL \u2014 analysis of protein helices", "4.4.1. HOLE analysis \u2014 MDAnalysis.analysis.hole2", "4.3.1. Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis", "4.4.2. Leaflet identification \u2014 MDAnalysis.analysis.leaflet", "4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna", "4.10.1. MDAnalysis.analysis.legacy \u2014 Legacy analysis code", "4.8.2. Linear Density \u2014 MDAnalysis.analysis.lineardensity", "4.7.2.2. Mean Squared Displacement \u2014 MDAnalysis.analysis.msd", "4.5.2. Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids", "4.5.1. Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo", "4.9.2. Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca", "4.6.1. Polymer analysis \u2014 MDAnalysis.analysis.polymer", "4.2.6. Calculating path similarity \u2014 MDAnalysis.analysis.psa", "4.7.2.1. Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf", "4.2.5. Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms", "4.8.3. Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics", "4.3.3. Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis", "4. Analysis modules", "10.5. EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR", "10.4. XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG", "10.2. Auxiliary Readers \u2014 MDAnalysis.auxiliary.base", "10.3. Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core", "10.1. Auxiliary Readers \u2014 MDAnalysis.auxiliary", "10. Auxiliary modules", "7. Converter modules", "7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser", "7.1. ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser", "7.3. RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser", "6.2. CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD", "6.3. DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD", "6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly", "6.5. DESRES file format \u2014 MDAnalysis.coordinates.DMS", "6.25. FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS", "6.6. GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS", "6.8. GRO file format \u2014 MDAnalysis.coordinates.GRO", "6.7. GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD", "6.9. H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD", "6.10. INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD", "6.11. LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS", "6.12. MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF", "6.13. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "6.14. NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN", "6.15. PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB", "6.16. PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT", "6.17. PQR file format \u2014 MDAnalysis.coordinates.PQR", "6.18. TNG trajectory files \u2014 MDAnalysis.coordinates.TNG", "6.19. AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ", "6.20. TRR trajectory files \u2014 MDAnalysis.coordinates.TRR", "6.21. TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ", "6.22. TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ", "6.34. XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR", "6.23. XTC trajectory files \u2014 MDAnalysis.coordinates.XTC", "6.24. XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ", "6.30. Base classes \u2014 MDAnalysis.coordinates.base", "6.33. ChainReader \u2014 MDAnalysis.coordinates.chain", "6.27. Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles", "6.31. Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core", "6.1. Trajectory Readers and Writers \u2014 MDAnalysis.coordinates", "6.26. Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory", "6.28. Null output \u2014 MDAnalysis.coordinates.null", "6.32. Serialization of Coordinate Readers", "6.29. Timestep Class \u2014 MDAnalysis.coordinates.timestep", "6. Coordinates modules", "7.7. AtomGroup accessors \u2014 MDAnalysis.core.accessors", "11.2.2. Core objects: Containers \u2014 MDAnalysis.core.groups", "11.1. Core functions of MDAnalysis", "11.4.1. Atom selection Hierarchy \u2014 MDAnalysis.core.selection", "11.3.1. Core Topology object \u2014 MDAnalysis.core.topology", "11.3.3. Topology attribute objects \u2014 MDAnalysis.core.topologyattrs", "11.3.2. Core Topology Objects \u2014 MDAnalysis.core.topologyobjects", "11.2.1. Core object: Universe \u2014 MDAnalysis.core.universe", "11. Core modules", "16. Custom exceptions and warnings \u2014 MDAnalysis.exceptions", "13.2.3. Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch", "13.2.2.1. Distance calculation library \u2014 MDAnalysis.lib.c_distances", "13.2.2.2. Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp", "13.2.11. Correlations utilities \u2014 MDAnalysis.lib.correlations", "13.2.1. Fast distance array computation \u2014 MDAnalysis.lib.distances", "13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd", "13.3.1. Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr", "13.2.6. Setting up logging \u2014 MDAnalysis.lib.log", "13.2.7. Mathematical helper functions \u2014 MDAnalysis.lib.mdamath", "13.2.4. Neighbor search library \u2014 MDAnalysis.lib.nsgrid", "13.2.14. Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io", "13.2.5. PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree", "13.2.9. Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot", "13.2.8. Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations", "13.2.10. Helper functions \u2014 MDAnalysis.lib.util", "13. Library functions \u2014 MDAnalysis.lib", "1. Overview over MDAnalysis", "17. References", "3. Selection commands", "9.2.6. Base classes for the selection writers", "9.2.4. CHARMM selections", "9.2.3. Gromacs selections", "9.2.5. Jmol selections", "9.2.2. PyMOL selections", "9.2.1. VMD selections", "9. Selection exporters", "2. The topology system", "5.2. CRD topology parser", "5.3. DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser", "5.4. DESRES Molecular Structure file format topology parser", "5.16. Extended PDB topology parser", "5.5. FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser", "5.6. GAMESS Topology Parser", "5.7. GRO topology parser", "5.8. GSD topology parser", "5.9. HOOMD XML topology parser", "5.10. ITP topology parser", "5.11. LAMMPSParser", "5.13. MMTF Topology Parser", "5.14. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "5.12. Minimal topology parser", "5.15. PDB Topology Parser", "5.17. PDBQT topology parser", "5.18. PQR topology parser", "5.19. PSF topology parser", "5.20. AMBER PRMTOP topology parser", "5.21. Gromacs portable run input TPR format parser", "5.22. TXYZ topology parser", "5.23. XYZ Topology Parser", "5.24. Base topology reader classes \u2014 MDAnalysis.topology.base", "5.25. Common functions for topology building \u2014 MDAnalysis.topology.core", "5.26. Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers", "5.1. Topology readers \u2014 MDAnalysis.topology", "5.27. MDAnalysis topology tables", "5.28. Utility functions for the TPR topology parser", "5. Topology modules", "8. Trajectory transformations (\u201con-the-fly\u201d transformations)", "8.5.1. Transformations Base Class \u2014 MDAnalysis.transformations.base", "8.6.7. Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions", "8.6.4. Fitting transformations \u2014 MDAnalysis.transformations.fit", "8.6.6. No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump", "8.6.3. Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging", "8.6.2. Trajectory rotation \u2014 MDAnalysis.transformations.rotate", "8.6.1. Trajectory translation \u2014 MDAnalysis.transformations.translate", "8.6.5. Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap", "15. Constants and unit conversion \u2014 MDAnalysis.units", "14. Version information for MDAnalysis - MDAnalysis.version", "12.1.1. Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines", "12.1.2. Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D", "12. Visualization modules", "MDAnalysis documentation"], "terms": {"author": [0, 1, 3, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 58, 80, 98, 107, 108, 162, 163], "oliv": [0, 6, 9, 23, 34, 36], "beckstein": [0, 6, 9, 23, 34, 36, 111, 112], "joshua": [0, 107], "adelman": [0, 107], "year": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 107, 162, 163], "2010": [0, 107, 108, 112, 160], "2013": [0, 4, 23, 26, 51, 112], "copyright": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163], "gnu": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 68, 80, 98, 104, 162, 163, 165], "public": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 104, 107, 110, 112, 161, 162, 163, 165], "licens": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163, 165], "v3": [0, 1, 6, 7, 11, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 37, 38, 49, 162, 163], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 120, 125, 129, 130, 131, 132, 135, 136, 138, 139, 140, 141, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "modul": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 20, 21, 22, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 88, 92, 95, 98, 102, 104, 106, 108, 111, 120, 141, 144, 145, 147, 148, 149, 151, 165], "contain": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 49, 51, 54, 55, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 84, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 125, 130, 131, 136, 139, 140, 147, 148, 149, 150, 151, 153, 162, 163, 164, 165], "target": [0, 6], "structur": [0, 2, 4, 5, 6, 8, 9, 14, 15, 19, 22, 23, 25, 30, 31, 32, 34, 35, 36, 37, 38, 46, 49, 53, 56, 62, 67, 78, 79, 83, 84, 85, 86, 91, 92, 93, 98, 100, 110, 111, 112, 113, 125, 126, 134, 136, 137, 140, 141, 142, 143, 146, 147, 148, 150, 154, 165], "refer": [0, 3, 4, 5, 6, 8, 10, 15, 19, 20, 23, 24, 26, 29, 30, 31, 32, 34, 36, 37, 38, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 83, 86, 88, 89, 90, 92, 98, 99, 103, 104, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 154, 155, 162, 164, 165], "thei": [0, 2, 4, 5, 6, 9, 12, 20, 27, 28, 29, 32, 34, 37, 38, 40, 44, 48, 49, 58, 60, 64, 67, 68, 72, 73, 75, 76, 79, 83, 84, 86, 88, 90, 91, 92, 100, 101, 109, 110, 111, 113, 130, 131, 134, 136, 145, 146, 147, 150, 151, 155], "us": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 129, 130, 131, 132, 134, 135, 136, 137, 138, 140, 141, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "fast": [0, 8, 10, 25, 29, 36, 37, 68, 72, 80, 101, 102, 110, 112, 165], "qcp": [0, 8, 36, 110, 111], "algorithm": [0, 8, 17, 22, 23, 29, 34, 36, 38, 39, 49, 58, 67, 92, 99, 103, 110, 146, 155, 165], "calcul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 87, 90, 91, 95, 98, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 155, 156, 157, 158, 159, 160], "root": [0, 2, 3, 8, 29, 32, 34, 39, 58, 62, 65, 102, 109], "mean": [0, 2, 3, 4, 6, 8, 13, 15, 17, 18, 20, 23, 24, 26, 32, 34, 35, 37, 39, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 82, 86, 89, 91, 98, 99, 100, 101, 103, 105, 112, 113, 129, 149, 152, 153, 154, 155, 156, 157, 158, 159], "squar": [0, 2, 7, 8, 12, 17, 18, 32, 34, 37, 39, 58, 107, 112], "distanc": [0, 2, 3, 4, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20, 23, 24, 25, 32, 34, 35, 36, 37, 38, 86, 88, 91, 98, 104, 106, 109, 110, 111, 113, 146, 148, 151], "rmsd": [0, 2, 8, 14, 16, 17, 34, 39, 40, 110, 111, 112, 149, 154], "between": [0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 22, 23, 24, 29, 30, 32, 34, 35, 36, 38, 40, 42, 44, 45, 49, 51, 54, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 76, 78, 79, 80, 83, 85, 86, 90, 91, 92, 94, 99, 100, 103, 104, 105, 106, 107, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 146, 147, 150, 151, 155, 160, 162, 163], "two": [0, 1, 2, 8, 10, 11, 13, 16, 17, 23, 24, 25, 26, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 78, 80, 85, 86, 89, 90, 91, 93, 98, 99, 102, 103, 104, 107, 108, 112, 113, 135, 146, 147, 151, 155], "set": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 101, 104, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 150, 151, 152, 154, 155, 156, 157, 158, 159, 162, 163, 165], "theobald2005": [0, 8, 36, 107], "rotat": [0, 3, 6, 14, 22, 34, 36, 37, 86, 92, 103, 107, 108, 112, 151, 154], "matrix": [0, 4, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 25, 32, 34, 86, 103, 107, 108, 109, 110, 112], "r": [0, 3, 4, 8, 9, 22, 23, 29, 32, 35, 36, 37, 38, 49, 57, 58, 68, 77, 79, 86, 90, 95, 99, 100, 101, 105, 107, 108, 109, 111, 112, 113, 149], "minim": [0, 3, 25, 36, 48, 79, 99, 110, 147, 150, 154, 165], "liu2010": [0, 107], "pleas": [0, 1, 4, 6, 8, 9, 11, 14, 17, 23, 24, 25, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 49, 58, 68, 74, 75, 99, 101, 107, 109, 112, 113, 140, 141, 151, 164, 165], "cite": [0, 8, 11, 17, 29, 32, 36, 39, 112, 165], "when": [0, 2, 4, 6, 8, 10, 11, 13, 17, 23, 24, 26, 29, 32, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 99, 100, 102, 103, 104, 105, 106, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 121, 134, 136, 141, 147, 151, 152, 155, 156, 157, 159, 160, 161, 165], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 128, 129, 131, 132, 133, 135, 136, 138, 140, 141, 144, 145, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "typic": [0, 6, 9, 10, 19, 23, 25, 26, 34, 35, 39, 46, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 86, 90, 91, 92, 99, 100, 106, 107, 109, 111, 113, 120, 147, 150, 155, 156], "one": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 92, 98, 99, 100, 101, 104, 105, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 130, 131, 135, 140, 141, 146, 147, 151, 155, 156, 160, 164, 165], "select": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 78, 79, 80, 83, 86, 87, 90, 91, 92, 94, 100, 109, 110, 111, 162, 163, 165], "group": [0, 1, 3, 4, 6, 7, 8, 10, 13, 14, 17, 19, 20, 24, 25, 28, 32, 34, 35, 36, 37, 38, 49, 50, 58, 64, 66, 79, 80, 83, 88, 90, 91, 92, 93, 95, 98, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 146, 148, 151, 154, 158, 159, 162, 163], "atom": [0, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 103, 104, 106, 109, 111, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 148, 149, 150, 154, 155, 157, 158, 159, 165], "c": [0, 2, 3, 9, 13, 16, 19, 23, 30, 33, 35, 36, 37, 38, 40, 49, 51, 52, 54, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 83, 86, 88, 90, 91, 98, 99, 100, 103, 104, 107, 108, 109, 111, 112, 113, 141, 148, 149, 153, 160], "alpha": [0, 9, 10, 22, 23, 31, 36, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 113, 153], "transform": [0, 2, 6, 8, 29, 32, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 88, 92, 99, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "appli": [0, 2, 6, 8, 10, 13, 19, 23, 25, 32, 36, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 91, 92, 99, 103, 108, 109, 113, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159], "current": [0, 6, 8, 9, 13, 17, 23, 29, 32, 36, 37, 38, 40, 41, 42, 44, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 86, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 131, 140, 141, 146, 147, 149, 156], "frame": [0, 1, 2, 3, 4, 6, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 82, 83, 86, 92, 98, 100, 101, 102, 105, 108, 109, 111, 113, 114, 115, 116, 117, 118, 119, 150, 151, 155, 156, 162, 163], "trajectori": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 20, 24, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 42, 45, 47, 48, 49, 50, 52, 54, 56, 62, 64, 65, 66, 71, 75, 76, 78, 81, 82, 83, 84, 86, 92, 95, 102, 105, 106, 109, 110, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 152, 153, 154, 159, 160, 162, 163, 165], "obtain": [0, 2, 6, 9, 13, 16, 17, 23, 25, 32, 36, 43, 44, 58, 64, 66, 68, 70, 79, 86, 87, 90, 103, 104, 112, 134, 136, 140, 165], "alignto": 0, "aligntraj": [0, 6, 17, 34, 36], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "do": [0, 1, 4, 6, 9, 10, 14, 17, 23, 34, 36, 38, 40, 44, 58, 64, 67, 70, 74, 75, 76, 79, 81, 82, 84, 86, 102, 109, 110, 111, 134, 147, 150, 152, 154, 155], "individu": [0, 10, 11, 17, 19, 23, 26, 29, 34, 35, 39, 42, 44, 58, 76, 79, 86, 92, 109, 111, 114, 115, 116, 117, 118, 119, 120, 133, 164, 165], "respect": [0, 4, 6, 29, 34, 36, 37, 83, 86, 88, 99, 108, 154], "show": [0, 2, 4, 6, 7, 8, 9, 17, 19, 20, 23, 26, 28, 29, 32, 33, 35, 36, 37, 102, 111, 113, 134], "how": [0, 2, 8, 10, 12, 13, 16, 17, 23, 25, 32, 37, 39, 42, 49, 51, 58, 60, 62, 67, 68, 74, 75, 79, 86, 87, 100, 101, 102, 109, 111, 113, 160, 165], "step": [0, 1, 2, 3, 4, 6, 8, 9, 16, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44, 48, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 92, 98, 99, 100, 101, 147, 151, 155, 160], "manual": [0, 6, 17, 23, 68, 77, 88, 102, 111, 141, 151, 156], "explain": [0, 32, 40], "intermedi": [0, 23, 36, 102, 109, 160], "comput": [0, 1, 2, 3, 6, 7, 8, 10, 11, 13, 14, 17, 22, 24, 28, 30, 31, 32, 34, 35, 36, 37, 38, 54, 58, 67, 79, 86, 87, 90, 98, 103, 104, 107, 109, 110, 112, 155, 156, 160], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 50, 54, 55, 56, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "requir": [0, 2, 3, 8, 13, 14, 15, 17, 20, 23, 24, 29, 32, 33, 34, 36, 39, 41, 44, 49, 50, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 74, 75, 78, 79, 80, 83, 85, 86, 91, 92, 94, 98, 99, 103, 106, 109, 113, 135, 137, 140, 149, 151, 152, 164], "lib": [0, 1, 2, 3, 6, 8, 9, 10, 24, 29, 30, 32, 36, 37, 57, 58, 68, 72, 77, 82, 83, 86, 88, 91], "qcprot": [0, 8, 36, 110, 111, 112], "implement": [0, 2, 4, 6, 8, 11, 13, 15, 16, 17, 25, 28, 29, 34, 36, 42, 50, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 84, 86, 91, 98, 99, 102, 104, 105, 106, 107, 108, 109, 110, 112, 120, 141, 146, 147, 149, 150, 165], "exampl": [0, 1, 5, 6, 7, 8, 11, 13, 14, 16, 17, 19, 23, 25, 27, 28, 29, 32, 33, 34, 35, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 66, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 100, 101, 102, 103, 105, 108, 109, 110, 112, 113, 119, 120, 129, 131, 132, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "file": [0, 1, 3, 6, 8, 9, 13, 14, 16, 17, 18, 20, 24, 26, 29, 32, 34, 36, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 55, 57, 68, 70, 75, 76, 77, 78, 79, 80, 81, 84, 86, 90, 92, 94, 100, 101, 102, 104, 105, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 162, 163, 165], "provid": [0, 1, 2, 4, 6, 7, 8, 9, 10, 13, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 88, 89, 92, 98, 99, 101, 103, 104, 105, 106, 109, 110, 111, 112, 113, 120, 134, 138, 147, 154, 157, 165], "part": [0, 5, 8, 13, 20, 23, 26, 29, 32, 34, 38, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 108, 111, 113, 120, 140], "test": [0, 1, 3, 4, 8, 9, 13, 16, 17, 20, 22, 23, 26, 27, 29, 32, 33, 34, 36, 38, 39, 47, 48, 49, 51, 54, 58, 60, 68, 69, 72, 73, 75, 77, 79, 80, 81, 84, 85, 86, 91, 92, 99, 109, 111, 121, 131, 140, 162, 163], "suit": [0, 1, 8, 13, 16, 17, 23, 29, 32, 39, 111], "variabl": [0, 1, 5, 8, 13, 16, 29, 32, 40, 58, 67, 68, 74, 79, 98, 109, 112, 152], "psf": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 24, 26, 32, 34, 36, 49, 64, 65, 80, 86, 92, 109, 111, 113, 121, 147, 150], "dcd": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 26, 32, 34, 36, 49, 58, 73, 79, 80, 84, 86, 92, 109, 110, 111], "pdb_small": [0, 86], "For": [0, 1, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 82, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 104, 106, 109, 110, 111, 112, 113, 120, 131, 132, 140, 141, 146, 147, 151, 152, 156, 160], "all": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 109, 111, 112, 113, 114, 129, 130, 132, 134, 140, 141, 142, 143, 144, 146, 147, 151, 152, 153, 155, 157, 158, 159, 160, 162, 163, 165], "further": [0, 4, 19, 20, 24, 25, 26, 27, 31, 34, 36, 38, 40, 42, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 102, 105, 113, 120, 141, 142], "execut": [0, 1, 3, 7, 23, 26, 38, 48, 76, 109], "first": [0, 2, 3, 4, 6, 8, 9, 13, 17, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 86, 90, 91, 92, 100, 101, 103, 104, 108, 109, 113, 120, 131, 146, 147, 148, 151, 156, 161, 162, 163, 165], "import": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 16, 17, 20, 22, 23, 24, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 46, 47, 48, 49, 58, 60, 62, 64, 66, 68, 77, 78, 80, 85, 86, 89, 90, 91, 92, 100, 101, 102, 103, 108, 109, 110, 111, 121, 129, 131, 132, 141, 146, 151, 157, 162, 163, 164], "mda": [0, 1, 2, 3, 4, 7, 8, 9, 20, 22, 23, 25, 29, 32, 33, 34, 35, 36, 37, 40, 46, 47, 48, 49, 56, 58, 60, 77, 79, 80, 85, 86, 89, 92, 103, 109, 111, 120, 129, 131, 132, 146, 153, 154, 159], "from": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 165], "datafil": [0, 1, 2, 3, 4, 7, 8, 9, 13, 16, 17, 20, 22, 23, 26, 29, 32, 33, 34, 35, 36, 40, 47, 48, 49, 77, 80, 85, 86, 92, 109, 111, 121, 131, 146], "In": [0, 2, 3, 6, 8, 13, 14, 17, 20, 23, 24, 29, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 84, 86, 88, 89, 90, 92, 98, 99, 100, 102, 104, 105, 108, 109, 111, 112, 113, 114, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 150, 151, 155, 156, 160, 161], "simplest": [0, 17, 24, 92], "case": [0, 1, 6, 7, 8, 10, 14, 17, 23, 24, 28, 29, 34, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 85, 86, 88, 90, 92, 98, 99, 102, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 155, 156, 160], "we": [0, 1, 2, 3, 4, 6, 8, 9, 13, 16, 17, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 82, 88, 91, 100, 102, 109, 110, 111, 112, 113, 138, 140, 146, 148, 151, 160, 161, 165], "simpli": [0, 6, 13, 16, 17, 23, 25, 38, 68, 79, 80, 86, 88, 92, 109, 112, 146, 147, 156], "ref": [0, 2, 9, 32, 36, 107, 154], "univers": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 61, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 87, 90, 91, 93, 103, 105, 107, 108, 109, 111, 113, 121, 125, 129, 131, 132, 133, 136, 144, 146, 147, 149, 150, 151, 154], "mobil": [0, 2, 34, 36, 38], "select_atom": [0, 2, 3, 4, 6, 8, 9, 20, 25, 32, 33, 34, 35, 36, 37, 48, 49, 58, 62, 64, 79, 80, 86, 87, 88, 90, 92, 109, 111, 113, 120, 154], "name": [0, 2, 3, 4, 6, 9, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 42, 44, 46, 49, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 85, 86, 87, 88, 90, 92, 93, 102, 105, 109, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 126, 127, 129, 130, 131, 132, 133, 136, 137, 139, 140, 141, 142, 143, 144, 147, 148, 149, 162, 163], "ca": [0, 2, 4, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 32, 34, 36, 58, 64, 86, 88, 90, 111, 113, 148], "posit": [0, 2, 3, 6, 7, 8, 9, 10, 13, 19, 22, 23, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 87, 90, 92, 95, 99, 100, 101, 102, 103, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 151, 152, 155, 156, 158, 159, 160], "28": [0, 62, 112, 141, 148, 149], "20178579474479": 0, "note": [0, 4, 6, 10, 13, 16, 17, 19, 20, 23, 24, 26, 28, 29, 31, 32, 33, 34, 36, 37, 38, 47, 48, 49, 50, 51, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 80, 86, 89, 90, 91, 92, 93, 99, 100, 101, 102, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 151, 152, 155, 159], "translat": [0, 3, 6, 32, 36, 58, 60, 76, 86, 89, 90, 99, 108, 114, 148, 151, 154, 159], "have": [0, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 20, 23, 24, 26, 27, 29, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 85, 86, 87, 88, 90, 91, 92, 98, 99, 100, 103, 109, 110, 112, 113, 120, 123, 125, 131, 134, 136, 138, 140, 141, 146, 147, 151, 152, 156, 159, 161, 165], "been": [0, 2, 3, 4, 6, 7, 8, 13, 16, 17, 19, 20, 23, 28, 32, 33, 34, 35, 36, 38, 39, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 72, 73, 74, 75, 78, 79, 80, 86, 88, 92, 101, 102, 103, 109, 112, 113, 132, 146, 159, 165], "remov": [0, 2, 4, 6, 8, 9, 10, 19, 20, 21, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 41, 51, 54, 56, 58, 60, 62, 64, 68, 69, 72, 73, 74, 75, 78, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 102, 109, 113, 114, 132, 133, 136, 148, 154, 156], "order": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 17, 18, 19, 23, 24, 26, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 76, 79, 80, 81, 83, 86, 88, 89, 90, 91, 92, 98, 100, 105, 109, 111, 147, 149, 151, 164], "look": [0, 4, 10, 23, 29, 32, 38, 40, 42, 66, 78, 79, 100, 109, 130, 131, 140, 146, 165], "pure": [0, 7, 33, 64, 91, 141], "need": [0, 2, 6, 9, 17, 19, 23, 26, 29, 32, 36, 39, 40, 41, 44, 46, 48, 49, 51, 55, 56, 64, 68, 74, 75, 76, 77, 78, 79, 82, 84, 85, 86, 88, 93, 99, 100, 104, 105, 109, 125, 135, 136, 147, 150, 152, 155, 160, 165], "superimpos": [0, 6, 14, 34, 36, 108], "centr": [0, 23, 25, 28], "mass": [0, 3, 6, 14, 15, 17, 18, 19, 24, 28, 34, 36, 48, 49, 58, 60, 86, 87, 88, 90, 92, 103, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 143, 146, 147, 148, 149, 154, 157, 158, 159, 160], "geometri": [0, 9, 22, 23, 25, 28, 34, 36, 54, 86, 112, 113, 154, 157, 158], "center": [0, 3, 6, 13, 14, 19, 23, 28, 35, 36, 37, 86, 90, 103, 106, 107, 108, 111, 113, 154, 157, 158, 159], "true": [0, 1, 2, 4, 6, 7, 8, 9, 13, 14, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 102, 103, 104, 106, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "21": [0, 8, 23, 37, 64, 65, 112, 149, 160], "892591663632704": 0, "ha": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 19, 20, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 86, 88, 90, 92, 99, 100, 102, 103, 105, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 161, 164, 165], "onli": [0, 2, 3, 4, 6, 9, 13, 16, 17, 19, 20, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 109, 110, 113, 114, 125, 126, 129, 131, 135, 136, 137, 140, 143, 147, 154, 156, 161], "done": [0, 1, 6, 9, 13, 16, 17, 29, 38, 42, 49, 56, 64, 79, 80, 91, 99, 102, 114, 115, 116, 117, 118, 119, 146, 157, 158], "superposit": [0, 6, 36, 107, 110, 112, 154], "If": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 130, 131, 134, 135, 136, 140, 141, 147, 149, 151, 154, 155, 156, 157, 158, 161, 165], "you": [0, 4, 6, 8, 9, 13, 16, 17, 19, 20, 22, 23, 27, 28, 29, 32, 34, 36, 37, 38, 39, 46, 48, 49, 51, 58, 62, 68, 74, 77, 85, 86, 88, 92, 99, 100, 102, 105, 106, 107, 111, 112, 113, 125, 131, 136, 146, 152, 155, 161, 165], "want": [0, 4, 6, 17, 23, 27, 37, 38, 40, 48, 56, 58, 68, 85, 86, 92, 120, 140, 146, 165], "also": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 23, 24, 26, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 99, 100, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 155, 156, 160, 165], "keyword": [0, 1, 2, 3, 4, 6, 9, 10, 13, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 99, 102, 109, 110, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 151], "6": [0, 2, 3, 4, 5, 6, 9, 23, 26, 29, 31, 34, 36, 37, 40, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 78, 80, 86, 89, 91, 92, 99, 100, 103, 104, 108, 109, 113, 131, 140, 141, 142, 148, 149, 153, 156, 159, 160], "809396586471815": 0, "while": [0, 4, 13, 16, 29, 32, 35, 36, 41, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 80, 86, 92, 104, 106, 122, 134, 142, 146], "rotation_matrix": [0, 2, 86, 108], "mobile0": 0, "center_of_mass": [0, 6, 86, 90, 111], "ref0": 0, "809396586471805": 0, "arrai": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 95, 100, 101, 103, 104, 106, 107, 108, 110, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 151, 154, 157, 158, 162, 163, 165], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "14514539": 0, "27259113": 0, "95111876": 0, "88652593": 0, "46267112": 0, "00268642": 0, "43932289": 0, "84358136": 0, "30881368": 0, "put": [0, 13, 18, 92], "togeth": [0, 2, 5, 13, 16, 23, 31, 34, 38, 58, 60, 76, 80, 86, 90, 92, 146, 151, 152, 155, 159, 165], "onto": [0, 2, 8, 9, 32, 86, 99], "atomgroup": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 20, 23, 25, 28, 29, 30, 32, 33, 34, 35, 36, 46, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 74, 75, 77, 79, 80, 83, 86, 87, 88, 90, 91, 92, 93, 94, 95, 99, 103, 109, 111, 113, 114, 115, 116, 117, 118, 119, 146, 147, 151, 154, 156, 157, 158, 159], "3341": [0, 109, 111], "write": [0, 6, 17, 18, 19, 23, 25, 26, 34, 36, 48, 49, 50, 51, 54, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 84, 86, 87, 90, 92, 100, 101, 102, 104, 105, 109, 110, 114, 115, 116, 117, 118, 119, 151, 160, 165], "mobile_on_ref": 0, "pdb": [0, 4, 5, 9, 10, 24, 25, 26, 34, 37, 44, 49, 51, 54, 57, 58, 60, 61, 62, 65, 66, 69, 71, 72, 73, 75, 79, 80, 82, 84, 86, 90, 92, 105, 109, 111, 113, 133, 146, 147, 150, 154, 165], "To": [0, 1, 2, 4, 6, 9, 17, 23, 24, 25, 29, 32, 34, 35, 37, 39, 40, 42, 44, 49, 56, 58, 60, 62, 75, 76, 79, 86, 87, 89, 90, 92, 99, 102, 106, 113, 115, 116, 117, 118, 119, 129, 131, 140, 146, 147, 152, 155, 165], "singl": [0, 2, 3, 4, 8, 10, 13, 16, 17, 19, 22, 23, 29, 33, 34, 35, 36, 37, 40, 44, 49, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 74, 75, 76, 78, 80, 82, 86, 88, 89, 90, 92, 98, 99, 100, 101, 103, 109, 110, 111, 113, 114, 146, 147, 148, 150, 151], "protein": [0, 4, 6, 8, 9, 11, 13, 16, 17, 19, 23, 24, 26, 32, 34, 35, 36, 37, 38, 48, 58, 61, 64, 79, 80, 86, 87, 90, 92, 98, 109, 111, 112, 113, 120, 154, 155], "weight": [0, 8, 13, 14, 15, 17, 19, 34, 36, 38, 58, 86, 107, 109, 122, 154, 157], "809396586471809": 0, "chang": [0, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 107, 108, 109, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 154, 156, 157, 158, 159, 160, 161], "so": [0, 6, 10, 13, 16, 17, 20, 23, 24, 29, 33, 35, 36, 37, 38, 42, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 82, 86, 91, 99, 102, 103, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 151, 154, 155, 156, 158, 159, 160], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "optim": [0, 13, 20, 34, 36, 99, 107, 108, 109, 112, 151], "whole": [0, 3, 6, 7, 9, 17, 26, 32, 36, 38, 64, 68, 79, 80, 83, 86, 87, 103, 148, 151, 154, 155, 165], "1ake": [0, 36], "trj": [0, 34, 60, 79, 82, 84], "4ake": [0, 36, 66, 86, 111, 113], "filenam": [0, 3, 5, 6, 14, 17, 19, 23, 25, 26, 34, 36, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 86, 92, 94, 100, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147], "rmsfit": 0, "run": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 48, 55, 58, 80, 86, 88, 109, 111, 113, 147, 150, 152, 165], "object": [0, 2, 8, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 28, 30, 34, 35, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 88, 95, 100, 101, 102, 104, 105, 106, 108, 109, 110, 111, 113, 114, 121, 122, 124, 125, 126, 128, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 149, 151, 153, 158, 162, 163, 165], "It": [0, 2, 3, 6, 8, 9, 13, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 32, 36, 37, 38, 39, 40, 44, 48, 49, 50, 57, 58, 62, 64, 65, 68, 69, 72, 75, 77, 79, 81, 82, 83, 85, 86, 90, 98, 100, 105, 109, 111, 112, 113, 139, 146, 150, 151, 162, 163, 165], "possibl": [0, 2, 4, 6, 8, 9, 10, 17, 20, 23, 24, 25, 29, 38, 40, 49, 56, 57, 58, 64, 65, 67, 68, 76, 77, 79, 80, 86, 88, 90, 92, 94, 99, 100, 102, 109, 112, 113, 146, 147, 148, 151, 157, 160], "arbitrari": [0, 2, 3, 6, 9, 10, 18, 23, 25, 26, 29, 30, 32, 34, 36, 58, 67, 83, 86, 88, 99, 100, 101, 109], "map": [0, 12, 13, 14, 23, 32, 34, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 88, 89, 90, 91, 92, 99, 106, 109], "base": [0, 3, 4, 6, 8, 9, 11, 13, 14, 15, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 76, 77, 78, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 99, 100, 103, 104, 105, 107, 109, 110, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159], "sequenc": [0, 17, 23, 26, 34, 36, 38, 64, 65, 75, 76, 79, 86, 90, 92, 103, 108, 109, 114, 125, 149, 151], "allow": [0, 2, 3, 5, 6, 9, 13, 16, 17, 20, 23, 24, 28, 29, 30, 32, 35, 36, 37, 40, 41, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 79, 80, 81, 82, 86, 87, 88, 91, 92, 94, 95, 98, 102, 104, 105, 106, 109, 110, 111, 113, 120, 129, 134, 141, 148, 165], "homolog": 0, "wild": 0, "type": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 120, 122, 125, 126, 127, 128, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 148, 149, 153, 154, 155, 156, 157, 158, 159, 160], "mutant": 0, "wa": [0, 3, 9, 20, 21, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 42, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 104, 109, 113, 114, 146, 147, 154, 156, 157, 158, 159], "aln": 0, "would": [0, 6, 20, 23, 32, 38, 40, 49, 51, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 86, 92, 110, 113, 146, 151, 155, 156, 160, 165], "produc": [0, 10, 23, 26, 33, 34, 36, 37, 41, 44, 51, 58, 86, 90, 100, 102, 105, 132, 135, 162, 163], "appropri": [0, 6, 8, 25, 29, 35, 36, 38, 40, 42, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 79, 80, 86, 88, 90, 91, 92, 103, 109, 113, 114, 120, 160], "fasta2select": [0, 34, 36], "feed": [0, 23, 26], "result": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 90, 91, 92, 98, 99, 103, 104, 106, 107, 108, 109, 111, 113, 146, 147, 151, 154], "dictionari": [0, 2, 4, 6, 17, 18, 19, 20, 23, 26, 28, 34, 36, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 69, 70, 71, 72, 73, 75, 79, 80, 88, 91, 109, 147, 148], "seldict": 0, "see": [0, 1, 2, 3, 6, 7, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 37, 38, 39, 42, 44, 47, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 82, 86, 88, 90, 92, 94, 98, 99, 101, 102, 103, 109, 113, 120, 132, 136, 140, 141, 146, 148, 149, 150, 151, 152, 160, 162, 163, 164, 165], "document": [0, 2, 5, 6, 13, 14, 26, 31, 34, 35, 39, 42, 58, 60, 64, 65, 67, 68, 76, 77, 78, 82, 99, 102, 108, 142, 151, 164], "advanc": [0, 44, 79, 86, 92, 110], "version": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 149, 152, 154, 156, 157, 158, 159, 160, 165], "10": [0, 2, 3, 4, 8, 9, 11, 13, 15, 17, 19, 23, 24, 25, 26, 29, 30, 31, 32, 34, 36, 37, 38, 44, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 91, 92, 98, 102, 103, 104, 106, 108, 109, 111, 112, 113, 136, 141, 148, 149, 155, 160, 162, 163], "now": [0, 2, 4, 6, 8, 9, 10, 19, 20, 23, 28, 29, 30, 32, 33, 34, 36, 37, 42, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, 83, 85, 86, 88, 90, 91, 92, 94, 95, 99, 102, 103, 109, 113, 114, 132, 133, 134, 136, 138, 140, 141, 146, 149], "exclus": [0, 20, 23, 35, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 104, 105, 141], "access": [0, 1, 2, 3, 5, 6, 9, 18, 21, 23, 24, 25, 28, 29, 30, 34, 38, 39, 40, 42, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 85, 86, 88, 90, 91, 92, 94, 99, 104, 105, 109, 110, 111, 113, 135, 147, 165], "16": [0, 11, 12, 13, 14, 15, 16, 17, 19, 26, 27, 32, 34, 36, 56, 58, 61, 64, 65, 78, 80, 83, 86, 89, 92, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 133, 138, 147, 148, 149, 162, 165], "rms_fit_trj": 0, "deprec": [0, 4, 6, 8, 9, 19, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 51, 54, 56, 58, 60, 69, 72, 73, 74, 75, 80, 86, 90, 91, 102, 109, 132, 133, 136], "favor": [0, 36, 86], "17": [0, 5, 22, 26, 34, 36, 37, 38, 51, 57, 60, 64, 65, 68, 86, 91, 92, 112, 129, 141, 142, 148, 149], "none": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 99, 100, 101, 102, 103, 105, 106, 108, 109, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 152, 153, 154, 155, 156, 157, 158, 159], "subselect": [0, 9, 86, 113], "tol_mass": [0, 34, 36], "1": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 102, 103, 104, 105, 108, 109, 111, 112, 113, 127, 131, 132, 134, 136, 138, 140, 141, 143, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163], "strict": [0, 66, 86, 90, 91, 98], "fals": [0, 1, 2, 4, 6, 8, 9, 13, 14, 17, 20, 23, 25, 26, 32, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 102, 104, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 152, 155, 156, 157, 158, 163], "match_atom": 0, "sourc": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "perform": [0, 2, 3, 4, 6, 8, 9, 11, 14, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 88, 98, 99, 102, 103, 106, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 152, 154, 157, 162, 163], "spatial": [0, 34, 35, 58, 106, 154], "follow": [0, 2, 3, 6, 13, 16, 17, 19, 20, 24, 29, 34, 38, 39, 40, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 99, 100, 102, 103, 104, 108, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 156, 160, 165], "wai": [0, 2, 4, 6, 8, 9, 13, 14, 19, 23, 24, 25, 29, 37, 40, 42, 49, 68, 75, 76, 79, 82, 85, 92, 108, 110, 111, 113, 114, 115, 116, 117, 118, 119, 135, 151, 154], "A": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 19, 22, 23, 24, 25, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 44, 51, 53, 54, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 75, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 103, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 131, 134, 138, 140, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "sel1": [0, 34, 36], "sel2": [0, 34, 36], "befor": [0, 2, 3, 4, 6, 10, 13, 14, 17, 24, 32, 36, 38, 39, 42, 44, 58, 64, 65, 68, 74, 75, 79, 86, 89, 90, 92, 98, 100, 101, 106, 107, 109, 113, 114, 138, 149, 151, 156, 157, 158], "its": [0, 3, 4, 8, 12, 13, 19, 23, 29, 32, 34, 37, 38, 40, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 81, 82, 85, 86, 88, 90, 92, 99, 103, 104, 105, 109, 112, 113, 120, 148, 151, 154], "coincid": [0, 99], "below": [0, 4, 5, 10, 17, 23, 29, 31, 32, 34, 36, 40, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 85, 86, 102, 113, 120, 131], "explan": [0, 29, 58, 109, 148], "deriv": [0, 2, 6, 7, 11, 17, 38, 42, 44, 75, 79, 83, 92, 102, 109, 114, 144, 147], "shift": [0, 26, 86, 99, 104, 159], "behavior": [0, 34, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 109, 113], "through": [0, 4, 6, 10, 11, 17, 20, 21, 23, 24, 25, 35, 38, 40, 41, 44, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 80, 83, 85, 86, 88, 92, 99, 109, 111, 113, 122, 147, 159, 165], "construct": [0, 6, 8, 13, 19, 20, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 85, 88, 92, 99, 104, 106, 109, 121, 147, 151], "alreadi": [0, 6, 7, 8, 23, 32, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 106, 113], "match": [0, 13, 16, 20, 23, 30, 34, 36, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 77, 80, 86, 88, 90, 91, 154], "should": [0, 2, 3, 4, 6, 8, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 38, 42, 44, 49, 51, 56, 58, 60, 61, 62, 64, 66, 74, 75, 79, 82, 84, 86, 88, 89, 90, 91, 95, 99, 102, 104, 105, 106, 109, 115, 116, 117, 118, 119, 130, 132, 133, 140, 141, 146, 147, 148, 155], "therefor": [0, 2, 6, 14, 17, 26, 27, 58, 64, 68, 74, 86, 103, 109, 140, 146], "preserv": [0, 8, 32, 34, 56, 60, 62, 64, 86], "exact": [0, 4, 17, 23, 29, 34, 68, 86], "either": [0, 4, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 28, 34, 36, 38, 40, 42, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 91, 92, 98, 99, 100, 101, 103, 105, 106, 109, 110, 111, 113, 122, 132, 140, 147, 151, 158, 159, 165], "ani": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 23, 24, 25, 26, 28, 29, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 81, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 102, 103, 104, 105, 106, 109, 110, 112, 113, 120, 126, 127, 129, 131, 132, 136, 146, 147, 151, 152, 160, 165], "other": [0, 2, 3, 4, 6, 8, 9, 13, 16, 17, 19, 23, 25, 26, 28, 29, 30, 32, 34, 37, 38, 39, 40, 41, 42, 46, 47, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 103, 105, 109, 110, 113, 131, 132, 140, 146, 147, 148, 151, 152, 156, 160, 163, 165], "new": [0, 1, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 46, 47, 48, 49, 50, 51, 52, 54, 57, 58, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 103, 104, 105, 108, 109, 111, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 152, 160, 165], "made": [0, 4, 5, 6, 8, 9, 15, 17, 19, 25, 32, 49, 78, 79, 80, 86, 88, 91, 92, 98, 109, 113, 147, 151], "sort": [0, 23, 24, 26, 32, 33, 38, 45, 86, 88, 89, 90, 91, 109, 113], "index": [0, 2, 6, 8, 23, 24, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 89, 90, 91, 99, 101, 109, 114, 115, 116, 117, 118, 119, 120, 129, 140, 141, 147, 148, 165], "destroi": 0, "correspond": [0, 3, 6, 8, 9, 12, 13, 18, 23, 25, 32, 34, 36, 37, 38, 39, 42, 43, 49, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 98, 99, 102, 104, 106, 109, 112, 113, 129, 149, 154, 156, 157], "safest": 0, "mix": [0, 38], "string": [0, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 42, 48, 57, 58, 61, 62, 64, 66, 68, 77, 78, 79, 80, 85, 86, 88, 90, 92, 100, 102, 105, 108, 110, 113, 114, 115, 116, 117, 118, 119, 120, 132, 134, 140, 141, 148, 149, 154, 161, 162, 163], "paramet": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "str": [0, 2, 3, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 34, 35, 36, 37, 38, 40, 41, 42, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 85, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 105, 106, 109, 112, 113, 115, 117, 120, 131, 138, 144, 148, 154, 158, 162, 163], "dict": [0, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 25, 26, 29, 30, 32, 34, 36, 38, 40, 42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 81, 83, 86, 88, 89, 91, 92, 100, 102, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 160], "tupl": [0, 4, 6, 10, 18, 19, 20, 26, 32, 34, 35, 36, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 80, 86, 89, 90, 91, 92, 98, 102, 103, 108, 109, 140, 146, 147, 149, 151], "option": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "oper": [0, 2, 6, 18, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 86, 88, 91, 99, 100, 103, 104, 106, 109, 110, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 159], "valid": [0, 8, 9, 32, 34, 35, 36, 42, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 104, 109, 136, 141, 142, 148], "ident": [0, 17, 20, 32, 34, 36, 56, 57, 86, 91, 92, 108, 109, 129, 147], "where": [0, 1, 5, 6, 7, 8, 15, 17, 18, 19, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 109, 111, 113, 132, 140, 146, 151, 154, 155, 157, 160], "return": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "clustalw": [0, 34, 36], "stamp": [0, 2, 23, 34, 36], "2": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 105, 108, 109, 112, 113, 131, 132, 133, 134, 136, 140, 141, 142, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "3": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 21, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 80, 83, 86, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 112, 113, 131, 132, 133, 136, 140, 141, 146, 147, 148, 149, 151, 156, 157, 158, 159, 160, 162, 163, 165], "gener": [0, 1, 5, 12, 13, 14, 17, 18, 19, 20, 22, 23, 24, 27, 32, 34, 35, 36, 38, 39, 40, 44, 47, 51, 57, 58, 60, 61, 62, 64, 69, 72, 73, 75, 77, 79, 80, 81, 86, 88, 90, 91, 92, 99, 101, 104, 106, 108, 109, 111, 112, 113, 129, 130, 133, 138, 140, 146, 147, 155, 160, 162, 163, 165], "equival": [0, 6, 18, 22, 24, 29, 36, 37, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 81, 86, 105, 106, 113, 141], "each": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 89, 90, 91, 92, 98, 99, 102, 103, 104, 107, 109, 111, 114, 120, 131, 140, 146, 147, 148, 154, 157, 159], "list": [0, 2, 3, 4, 6, 9, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 108, 111, 112, 113, 114, 120, 122, 125, 126, 127, 128, 130, 136, 137, 140, 141, 142, 143, 146, 147, 148, 151, 157, 160, 165], "defin": [0, 2, 3, 4, 6, 13, 16, 17, 20, 23, 24, 25, 28, 34, 36, 37, 38, 40, 44, 51, 56, 58, 60, 64, 65, 68, 74, 75, 78, 79, 86, 90, 91, 92, 99, 100, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 131, 140, 144, 146, 147, 149, 151, 152, 154, 157, 158, 160], "describ": [0, 2, 3, 11, 13, 15, 16, 17, 18, 23, 25, 29, 31, 34, 36, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 102, 103, 104, 109, 111, 112, 113, 120, 138, 141, 150, 151, 161], "under": [0, 17, 23, 25, 26, 34, 36, 37, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 80, 86, 92, 98, 99, 102, 104, 109, 119, 147, 151, 165], "bool": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 42, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 95, 99, 100, 102, 103, 106, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "whether": [0, 9, 13, 14, 16, 17, 20, 23, 24, 26, 34, 40, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 88, 90, 102, 105, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "default": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 102, 103, 105, 106, 109, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "array_lik": [0, 2, 3, 6, 9, 10, 14, 15, 17, 18, 23, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 106, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 154, 157], "choos": [0, 6, 8, 20, 23, 32, 34, 76, 79, 86, 88, 90, 154, 158], "With": [0, 6, 15, 20, 26, 34, 36, 37, 40, 46, 76, 98, 154, 157], "weigh": [0, 34, 36, 154, 157], "equal": [0, 1, 8, 13, 18, 23, 32, 34, 36, 37, 38, 44, 58, 88, 91, 98, 99, 102, 109, 154, 157, 162], "float": [0, 4, 6, 7, 8, 10, 13, 15, 16, 17, 19, 20, 23, 24, 25, 28, 31, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 80, 83, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 113, 146, 148, 149, 153, 154, 157, 160, 162, 163], "same": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 16, 17, 20, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 38, 39, 40, 44, 48, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 91, 92, 98, 99, 100, 103, 104, 108, 109, 113, 120, 129, 146, 147, 149, 154, 156, 157, 159], "length": [0, 2, 3, 6, 8, 10, 13, 14, 17, 19, 20, 22, 23, 24, 29, 30, 32, 33, 34, 36, 38, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 81, 83, 86, 89, 90, 91, 92, 99, 100, 103, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 153, 154, 155, 157, 160], "element": [0, 3, 6, 12, 13, 14, 16, 17, 18, 23, 32, 34, 36, 37, 38, 48, 49, 58, 64, 74, 86, 89, 90, 98, 104, 109, 113, 114, 122, 125, 127, 134, 136, 137, 140, 141, 142, 148, 149, 154, 157], "reject": [0, 25, 34, 36], "differ": [0, 1, 2, 3, 4, 6, 8, 11, 13, 16, 17, 19, 20, 23, 24, 25, 32, 34, 36, 37, 38, 42, 44, 49, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 82, 83, 85, 86, 90, 91, 92, 100, 108, 109, 111, 112, 113, 120, 125, 136, 141, 147, 151, 160], "more": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 23, 24, 25, 32, 34, 36, 37, 38, 39, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 87, 90, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 111, 113, 140, 141, 146, 147, 151, 155, 163, 165], "than": [0, 3, 4, 6, 8, 9, 10, 15, 17, 19, 20, 23, 24, 32, 34, 36, 37, 38, 41, 42, 50, 56, 58, 64, 66, 68, 74, 76, 80, 86, 90, 91, 92, 98, 99, 103, 104, 105, 109, 113, 146, 149, 155], "Will": [0, 4, 6, 8, 9, 17, 18, 20, 24, 28, 32, 33, 35, 36, 38, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 92, 103], "rais": [0, 2, 3, 6, 9, 23, 26, 29, 30, 32, 36, 40, 42, 43, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 92, 94, 101, 102, 103, 105, 108, 109, 113, 120, 134, 136, 144, 146, 156, 160], "selectionerror": [0, 36, 88, 94], "doe": [0, 3, 6, 13, 14, 23, 24, 29, 32, 34, 36, 37, 58, 60, 63, 64, 66, 68, 69, 76, 77, 79, 81, 83, 86, 90, 92, 94, 99, 100, 102, 103, 109, 113, 120, 130, 137, 140, 150, 152, 155], "try": [0, 20, 23, 42, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 78, 80, 82, 84, 109, 130, 132, 141, 146, 161], "prepar": [0, 92], "drop": [0, 17, 57, 86, 109], "residu": [0, 3, 6, 9, 10, 19, 23, 25, 28, 30, 31, 32, 35, 36, 37, 38, 48, 64, 65, 66, 79, 85, 86, 88, 89, 90, 92, 94, 95, 109, 111, 113, 122, 124, 125, 126, 127, 129, 130, 131, 133, 136, 138, 139, 140, 141, 143, 147, 158, 159], "non": [0, 2, 3, 6, 8, 9, 17, 23, 24, 25, 29, 30, 32, 33, 36, 38, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 88, 102, 103, 104, 105, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 125, 140, 155, 156], "get_matching_atom": 0, "detail": [0, 4, 6, 7, 8, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 38, 49, 51, 58, 60, 64, 74, 78, 79, 89, 101, 102, 109, 110, 113, 140, 141, 147, 151, 165], "e": [0, 2, 4, 6, 9, 13, 17, 18, 23, 24, 25, 26, 28, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 88, 90, 91, 92, 98, 99, 100, 102, 103, 104, 108, 109, 110, 111, 112, 113, 114, 136, 140, 146, 147, 148, 149, 151, 152, 153, 156, 157, 160, 161, 162, 163, 165], "context": [0, 23, 44, 48, 57, 58, 64, 68, 75, 77, 79, 100, 101, 105, 109, 120, 152], "rest": [0, 3, 6, 149], "ligand": [0, 3, 6, 19, 35, 38, 77, 92], "surround": 0, "water": [0, 6, 7, 8, 10, 20, 23, 24, 39, 86, 87, 92, 98, 111, 112, 113, 131, 149, 160], "old_rmsd": 0, "new_rmsd": 0, "after": [0, 1, 2, 3, 6, 8, 10, 17, 18, 20, 23, 24, 26, 32, 34, 35, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 85, 86, 90, 92, 102, 105, 106, 109, 113, 140, 146, 148, 151, 156, 157, 161], "effici": [0, 1, 10, 18, 34, 64, 67, 68, 72, 102, 112, 147], "method": [0, 2, 3, 4, 6, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 33, 35, 36, 37, 38, 40, 42, 46, 49, 51, 54, 55, 56, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 99, 100, 101, 102, 104, 106, 107, 108, 109, 111, 112, 113, 114, 120, 135, 144, 146, 147, 149, 151, 155, 158], "ad": [0, 1, 2, 3, 4, 6, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 36, 37, 42, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 82, 83, 86, 88, 89, 90, 91, 92, 98, 99, 101, 102, 103, 109, 131, 132, 134, 136, 137, 138, 140, 141, 142, 144, 146, 148, 151], "toggl": [0, 38, 92, 141], "8": [0, 2, 4, 9, 26, 31, 34, 36, 37, 40, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 90, 91, 92, 99, 103, 109, 113, 114, 115, 116, 117, 118, 119, 125, 136, 141, 147, 148, 149, 159, 160, 162, 163], "check": [0, 4, 6, 9, 10, 13, 19, 20, 23, 31, 32, 33, 34, 36, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 76, 77, 80, 86, 91, 99, 104, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159], "includ": [0, 1, 3, 5, 9, 11, 13, 17, 23, 24, 25, 29, 32, 34, 36, 38, 42, 44, 48, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 88, 89, 92, 98, 99, 102, 105, 108, 109, 113, 120, 131, 137, 141, 147, 149, 151, 165], "work": [0, 2, 4, 6, 8, 9, 10, 11, 13, 16, 17, 18, 23, 28, 31, 36, 37, 38, 39, 40, 49, 51, 54, 57, 58, 60, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 94, 99, 102, 103, 104, 105, 109, 111, 112, 113, 114, 120, 131, 141, 146, 151, 154, 159, 165], "incomplet": [0, 9, 27], "lenient": 0, "wherea": [0, 8, 32, 34, 86, 109, 110], "old": [0, 51, 79, 85, 86, 92, 109, 147], "kwarg": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 18, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 90, 91, 92, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 146, 152], "replac": [0, 6, 12, 23, 57, 86, 92, 98, 99, 105, 109, 146, 147], "mass_weight": [0, 34, 36], "sinc": [0, 4, 6, 8, 9, 14, 17, 19, 21, 23, 24, 28, 32, 33, 34, 35, 36, 38, 39, 49, 51, 64, 68, 74, 75, 80, 86, 90, 113, 140, 155], "instead": [0, 2, 3, 4, 6, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 103, 104, 109, 113, 114, 115, 116, 117, 118, 119, 120, 125, 136, 147, 151, 158], "prefix": [0, 23, 34, 86, 102, 113], "rmsfit_": 0, "forc": [0, 20, 30, 31, 39, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 84, 86, 88, 91, 92, 99, 101, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "in_memori": [0, 17, 36, 37, 80, 92], "both": [0, 2, 3, 4, 6, 9, 10, 14, 17, 23, 24, 26, 29, 30, 32, 34, 36, 38, 40, 49, 53, 55, 57, 60, 64, 68, 71, 79, 86, 91, 98, 101, 102, 111, 112, 113, 129, 132, 139, 140, 163], "must": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 18, 20, 23, 24, 26, 29, 32, 34, 36, 38, 40, 42, 44, 49, 51, 54, 58, 60, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 98, 99, 103, 104, 105, 106, 107, 109, 113, 114, 140, 144, 146, 151, 154, 156, 160], "instanc": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 23, 25, 28, 29, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 85, 86, 87, 90, 91, 92, 99, 100, 102, 104, 105, 109, 111, 113, 114, 140, 144, 147, 149, 151, 158, 162, 163, 164, 165], "output": [0, 2, 6, 13, 14, 17, 18, 19, 23, 26, 32, 34, 35, 36, 40, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 85, 86, 88, 90, 99, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 127, 147, 156], "format": [0, 3, 4, 6, 10, 13, 14, 15, 16, 17, 18, 23, 25, 26, 34, 37, 38, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 55, 57, 58, 59, 61, 64, 65, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 80, 81, 83, 84, 86, 90, 91, 92, 94, 99, 102, 103, 104, 108, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 149, 150, 161, 165], "determin": [0, 3, 4, 6, 8, 9, 10, 13, 18, 22, 23, 24, 25, 26, 29, 32, 33, 34, 38, 42, 44, 58, 64, 78, 79, 86, 90, 92, 99, 103, 107, 109, 112, 146, 156], "extens": [0, 4, 6, 17, 23, 25, 34, 44, 50, 58, 64, 65, 66, 67, 68, 76, 77, 78, 79, 84, 86, 92, 109, 110, 115, 116, 117, 118, 119, 131, 147, 150, 161], "One": [0, 2, 3, 6, 13, 16, 23, 24, 25, 26, 34, 37, 38, 48, 86, 92, 100, 113, 151, 160], "save": [0, 3, 4, 6, 7, 8, 10, 14, 17, 18, 20, 26, 28, 29, 32, 34, 36, 37, 51, 57, 58, 60, 62, 64, 68, 72, 73, 77, 82, 99, 100, 101, 105], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 51, 54, 55, 56, 57, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "altern": [0, 6, 9, 17, 19, 22, 23, 24, 28, 32, 41, 44, 49, 61, 64, 65, 86, 91, 92, 103, 109, 113, 120, 133, 151], "np": [0, 2, 3, 4, 5, 6, 8, 17, 20, 23, 24, 26, 28, 29, 32, 34, 36, 37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 92, 99, 100, 101, 103, 107, 108, 109, 113, 146, 148, 151, 162, 163], "savetxt": [0, 4, 28, 36], "subdomain": [0, 104], "against": [0, 17, 68, 91, 104], "written": [0, 2, 6, 14, 17, 19, 23, 34, 38, 40, 48, 50, 51, 54, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 79, 82, 83, 86, 90, 92, 100, 101, 102, 103, 105, 109, 114, 115, 116, 117, 118, 119, 120, 138, 141, 147, 151, 165], "prepend": [0, 34], "toler": [0, 4, 86, 88, 162, 163], "given": [0, 3, 4, 5, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 100, 101, 105, 109, 113, 131, 135, 140, 146, 149, 151, 154, 155, 156, 157, 158, 159, 161], "find": [0, 9, 10, 13, 19, 20, 23, 24, 25, 32, 34, 38, 40, 42, 43, 51, 60, 76, 82, 86, 89, 95, 100, 109, 110, 113, 130, 140, 146], "fail": [0, 6, 26, 28, 38, 49, 58, 64, 66, 68, 72, 82, 84, 86, 94, 103, 109, 144], "t": [0, 2, 4, 7, 17, 20, 22, 24, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 59, 60, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 89, 90, 98, 99, 101, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 155, 156, 157, 158, 159, 160], "found": [0, 2, 9, 19, 20, 23, 24, 25, 34, 38, 40, 42, 43, 49, 58, 64, 69, 76, 77, 78, 85, 86, 88, 90, 92, 107, 109, 110, 131, 146, 147, 165], "overwrit": [0, 20, 35, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "perman": [0, 37, 92], "switch": [0, 4, 9, 24, 38, 40, 104], "memori": [0, 8, 10, 13, 14, 18, 29, 36, 37, 40, 41, 42, 44, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 84, 86, 89, 92, 109, 146, 156], "place": [0, 6, 9, 14, 17, 23, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 89, 92, 99, 101, 103, 107, 108, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "which": [0, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 23, 24, 25, 29, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 164, 165], "improv": [0, 15, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "substanti": [0, 80], "some": [0, 4, 8, 9, 17, 20, 23, 26, 28, 32, 37, 38, 39, 40, 42, 47, 48, 49, 58, 60, 64, 67, 68, 75, 77, 78, 79, 82, 86, 88, 90, 103, 108, 109, 110, 134, 145, 146, 147, 149, 151, 160, 164, 165], "out": [0, 4, 17, 22, 23, 32, 36, 37, 38, 39, 40, 42, 44, 45, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 92, 102, 108, 114, 140, 147, 160, 161, 164, 165], "ignor": [0, 6, 13, 16, 18, 23, 42, 44, 58, 62, 64, 65, 74, 79, 80, 81, 83, 86, 90, 91, 92, 102, 103, 113, 125, 131, 132, 134, 136, 140, 146, 148], "verbos": [0, 2, 3, 4, 6, 7, 8, 9, 13, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 80, 92, 102], "logger": [0, 38, 102], "inform": [0, 8, 9, 13, 16, 17, 20, 23, 24, 25, 33, 34, 37, 38, 42, 49, 51, 54, 56, 58, 60, 64, 65, 66, 67, 68, 69, 72, 73, 74, 75, 79, 82, 83, 86, 89, 90, 92, 99, 100, 101, 103, 109, 113, 121, 122, 125, 126, 127, 129, 131, 132, 136, 137, 138, 139, 140, 141, 142, 143, 145, 147, 150, 164, 165], "progress": [0, 2, 3, 4, 6, 7, 8, 9, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 92, 102], "reference_atom": [0, 103], "mobile_atom": 0, "insid": [0, 2, 5, 20, 23, 37, 79, 82, 86, 88, 91, 98, 104, 110, 112, 120, 151, 159], "rmsd_align": 0, "valu": [0, 2, 3, 4, 6, 8, 9, 13, 14, 16, 17, 20, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 152, 160, 162, 163], "least": [0, 2, 3, 4, 6, 8, 9, 13, 15, 19, 23, 25, 29, 30, 32, 36, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 76, 80, 105, 107, 109, 125, 136, 141], "minimim": 0, "numpi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 26, 28, 29, 30, 33, 34, 35, 36, 37, 38, 40, 41, 44, 51, 52, 54, 58, 60, 69, 72, 73, 75, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 99, 103, 104, 108, 109, 111, 146, 151, 152, 163, 165], "ndarrai": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 19, 20, 23, 24, 28, 29, 30, 33, 34, 35, 36, 40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 90, 91, 92, 99, 101, 103, 104, 106, 107, 108, 109, 111, 146], "alia": [0, 4, 6, 9, 23, 24, 28, 30, 32, 33, 35, 36, 38, 86, 88, 90, 149], "attribut": [0, 2, 3, 4, 6, 7, 9, 18, 19, 20, 23, 24, 26, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 88, 89, 91, 92, 93, 99, 100, 101, 106, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 152, 160], "reflect": [0, 32, 76, 78, 83, 86, 104, 108, 109, 113], "upon": [0, 20, 58, 60, 74, 75, 76, 77, 91, 92, 102, 144, 146, 151], "recommend": [0, 2, 24, 38, 58, 64, 109, 110, 111, 113, 146, 165], "wrap": [0, 2, 3, 6, 13, 16, 18, 29, 36, 60, 64, 86, 90, 105, 106, 109, 151, 155, 157, 158], "statement": [0, 32, 79, 109, 114], "final": [0, 4, 6, 9, 13, 16, 17, 18, 20, 28, 32, 37, 38, 49, 56, 64, 74, 86, 89, 91, 106, 111, 113], "guarante": [0, 6, 24, 66, 103, 109], "restor": [0, 6], "log": [0, 2, 3, 6, 9, 17, 29, 30, 32, 36, 38, 79, 110, 147], "level": [0, 5, 23, 58, 72, 75, 77, 88, 89, 95, 102, 105, 109], "except": [0, 23, 26, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 80, 83, 86, 88, 90, 92, 109, 110, 147, 151], "represent": [0, 14, 18, 23, 34, 38, 51, 54, 56, 60, 70, 79, 91, 92, 103, 119, 120, 125, 136, 137], "remaind": [0, 111], "python": [0, 2, 6, 17, 23, 26, 39, 40, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 87, 88, 90, 100, 101, 102, 105, 107, 108, 109, 110, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 151, 164, 165], "session": [0, 68, 111], "memoryread": [0, 36, 78, 79, 92], "alwai": [0, 2, 4, 6, 13, 16, 17, 26, 32, 33, 36, 40, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 75, 79, 80, 86, 90, 92, 108, 109, 111, 113, 138, 146, 147, 151, 160], "treat": [0, 6, 19, 22, 24, 37, 38, 42, 58, 61, 76, 86, 91, 92, 103, 111, 131, 140, 147, 162, 163], "had": [0, 35, 155], "directori": [0, 23, 26, 34, 72, 105, 111, 112, 131], "19": [0, 9, 10, 32, 35, 60, 64, 65, 68, 75, 76, 80, 86, 90, 91, 92, 94, 98, 99, 103, 104, 109, 132, 140, 148, 149, 160], "support": [0, 2, 4, 6, 10, 17, 18, 23, 26, 28, 35, 36, 37, 41, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 84, 86, 88, 92, 99, 100, 101, 105, 109, 110, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 154, 160, 165], "start": [0, 1, 2, 3, 4, 6, 8, 9, 16, 18, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 78, 79, 80, 83, 87, 92, 100, 102, 109, 111, 113, 138, 141, 147, 148, 156, 165], "stop": [0, 2, 3, 4, 6, 8, 9, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 92, 100, 102], "These": [0, 1, 2, 4, 5, 9, 17, 28, 29, 32, 34, 35, 36, 37, 40, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 88, 90, 99, 100, 101, 104, 105, 106, 131, 156, 164], "pass": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 98, 102, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147], "store": [0, 2, 3, 4, 5, 6, 8, 9, 13, 14, 19, 23, 25, 28, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 52, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 91, 100, 101, 104, 107, 109, 129, 137, 147, 148, 156, 160], "averagestructur": 0, "ref_fram": [0, 34, 36], "averag": [0, 2, 4, 7, 17, 20, 23, 26, 29, 33, 34, 35, 36, 37, 42, 98, 102, 111, 151], "u": [0, 1, 2, 3, 4, 6, 8, 9, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 77, 79, 80, 85, 86, 87, 88, 90, 91, 92, 102, 103, 109, 111, 112, 113, 120, 121, 129, 131, 132, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "third": [0, 3, 37, 38, 86, 90, 91, 103, 140, 156], "av": 0, "averaged_univers": 0, "int": [0, 1, 2, 3, 6, 9, 12, 13, 14, 16, 17, 18, 20, 23, 24, 26, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 42, 49, 50, 51, 54, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 88, 89, 90, 92, 95, 98, 99, 100, 101, 102, 103, 106, 107, 109, 110, 113, 140, 148, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "dtype": [0, 6, 10, 58, 83, 86, 88, 89, 90, 95, 99, 103, 104, 106, 109, 113, 146, 151], "per": [0, 6, 13, 16, 17, 23, 24, 32, 34, 36, 37, 38, 58, 60, 66, 83, 86, 90, 92, 103, 114, 115, 116, 117, 118, 119, 152, 160], "b": [0, 2, 3, 4, 6, 9, 10, 13, 18, 23, 26, 29, 32, 35, 36, 37, 38, 51, 54, 58, 60, 64, 65, 68, 69, 72, 73, 75, 79, 80, 83, 86, 88, 89, 91, 99, 103, 108, 109, 111, 112, 113, 146, 147, 148, 149, 153, 160], "3x3": [0, 86, 103], "vector": [0, 3, 31, 32, 33, 34, 37, 51, 54, 56, 79, 83, 86, 90, 91, 99, 100, 101, 103, 108, 109, 111, 153, 157, 158], "overlap": [0, 32, 37, 76, 86, 92, 146], "mathbf": [0, 33, 35, 36, 37, 86, 90, 103], "mathsf": [0, 86, 90], "cdot": [0, 28, 32, 33, 37, 86, 90, 99, 103, 146], "n": [0, 3, 8, 9, 10, 15, 16, 17, 18, 19, 20, 23, 25, 29, 32, 33, 34, 35, 36, 37, 38, 49, 54, 56, 58, 60, 66, 74, 86, 88, 90, 98, 99, 102, 103, 104, 106, 107, 108, 109, 111, 112, 113, 116, 140, 146, 148, 149, 156, 160, 162], "shape": [0, 3, 4, 10, 12, 13, 15, 17, 20, 25, 32, 34, 35, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 104, 106, 107, 108, 109, 112, 153, 157, 163], "g": [0, 2, 6, 8, 9, 17, 18, 23, 24, 25, 26, 28, 30, 34, 35, 36, 37, 38, 39, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 99, 100, 102, 108, 109, 110, 111, 112, 113, 114, 120, 136, 140, 147, 149, 151, 152, 153, 157, 160, 161, 165], "core": [0, 6, 7, 8, 12, 13, 14, 16, 17, 18, 20, 23, 25, 34, 36, 39, 44, 45, 46, 47, 48, 49, 58, 64, 66, 79, 80, 83, 84, 95, 103, 105, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 125, 136, 146, 147, 148, 150, 159, 162, 163], "size": [0, 4, 6, 12, 13, 14, 17, 18, 19, 23, 25, 29, 32, 34, 35, 37, 40, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80, 89, 90, 91, 98, 99, 107, 108, 109, 140, 149, 155, 158, 163], "argument": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 18, 23, 25, 26, 29, 30, 31, 32, 34, 36, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 84, 85, 86, 88, 90, 92, 99, 102, 104, 105, 106, 108, 109, 113, 120, 131, 132, 135, 146, 147, 148, 149, 150, 151, 157], "mdanalysistest": [0, 2, 3, 4, 7, 9, 35, 40, 49, 77, 80, 84, 86, 146, 165], "tpr": [0, 2, 6, 23, 24, 36, 58, 77, 80, 86, 92, 113, 147, 150], "trr": [0, 23, 72, 73, 76, 77, 79, 84, 92, 101, 111], "copi": [0, 18, 36, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 104, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "backbon": [0, 5, 8, 9, 31, 32, 33, 36, 86, 88, 90, 111, 113], "47681": [0, 77, 85], "user": [0, 2, 6, 8, 9, 28, 32, 34, 36, 38, 40, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 84, 86, 88, 92, 99, 107, 109, 110, 113, 118, 120, 140, 146, 147, 150, 151, 154, 157, 158], "complet": [0, 3, 6, 17, 32, 44, 46, 64, 91, 92, 100, 111, 112, 147, 156, 165], "probabl": [0, 6, 11, 17, 37, 68, 84, 86, 98, 150], "interest": [0, 6, 9, 20, 32, 35, 36, 37, 38, 40, 41, 42, 44, 75, 76, 84, 93, 98, 109, 150, 165], "develop": [0, 57, 76, 81, 82, 84, 88, 89, 93, 99, 108, 109, 110, 111, 145, 150, 152, 161, 165], "normal": [0, 3, 6, 17, 18, 19, 23, 29, 34, 35, 38, 46, 71, 79, 82, 83, 86, 88, 92, 100, 101, 103, 108, 109, 112, 114, 151, 155, 162, 163], "_fit_to": 0, "mobile_coordin": 0, "ref_coordin": [0, 36], "mobile_com": 0, "ref_com": 0, "xyz": [0, 3, 28, 29, 37, 54, 56, 71, 77, 79, 84, 92, 100, 101, 111, 142, 147, 150, 165], "min_rmsd": 0, "minimum": [0, 6, 10, 13, 17, 23, 35, 58, 86, 91, 92, 99, 102, 104, 106, 107, 125, 129, 136, 137, 146, 147, 162, 163], "assum": [0, 3, 6, 13, 17, 23, 25, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 92, 119, 136, 146], "depend": [0, 4, 6, 7, 11, 13, 14, 17, 29, 37, 39, 40, 42, 44, 49, 57, 58, 60, 67, 70, 79, 86, 90, 98, 99, 100, 105, 106, 109, 110, 112, 113, 115, 116, 117, 118, 119, 131, 147, 152, 155, 160, 165], "origin": [0, 3, 6, 8, 12, 13, 16, 17, 22, 23, 24, 32, 34, 38, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 82, 83, 86, 91, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 112, 113, 131, 138, 148, 163], "directli": [0, 2, 4, 6, 13, 16, 19, 20, 34, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 90, 92, 95, 100, 101, 107, 109, 113, 134, 151], "x": [0, 5, 6, 13, 17, 20, 23, 24, 28, 29, 33, 34, 36, 37, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 98, 99, 100, 101, 103, 104, 105, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 160, 162, 163], "accord": [0, 3, 17, 23, 32, 34, 36, 38, 54, 58, 60, 71, 86, 90, 91, 99, 103, 109, 111, 113, 122, 141], "bar": [0, 2, 3, 6, 9, 29, 30, 32, 33, 36, 80, 102, 108], "_": [0, 17, 29, 33, 34, 36, 37, 44, 58, 86, 90, 102, 103, 141], "text": [0, 6, 17, 23, 34, 36, 57, 58, 68, 74, 77, 79, 105, 109, 148], "fastafilenam": 0, "is_align": 0, "ref_resid": 0, "target_resid": 0, "ref_offset": 0, "target_offset": 0, "alnfilenam": 0, "treefilenam": 0, "clustalw2": 0, "fasta": [0, 86, 90], "un": [0, 75, 76, 88, 92], "second": [0, 3, 17, 23, 25, 30, 31, 32, 34, 35, 37, 38, 40, 41, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 102, 103, 109, 113, 147, 156, 160], "pairwis": [0, 8, 14, 34, 103], "suffix": [0, 6, 17, 34, 50, 59, 63, 68, 79, 89, 92, 109, 161], "unless": [0, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 102, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "specifi": [0, 3, 6, 8, 9, 13, 14, 15, 16, 17, 23, 24, 26, 28, 31, 34, 37, 38, 40, 42, 44, 46, 50, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 86, 88, 89, 92, 98, 99, 101, 102, 104, 105, 106, 108, 109, 113, 125, 132, 134, 147, 149, 159], "resid": [0, 3, 6, 9, 10, 31, 35, 36, 37, 38, 49, 50, 56, 64, 72, 79, 86, 88, 90, 92, 99, 103, 109, 113, 122, 124, 125, 128, 131, 132, 133, 134, 136, 137, 138, 139, 141, 147, 149], "complic": [0, 86, 87, 113], "number": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 129, 130, 135, 136, 137, 140, 141, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163], "input": [0, 6, 7, 9, 10, 11, 12, 13, 14, 17, 23, 25, 26, 28, 32, 33, 34, 35, 36, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 86, 90, 92, 94, 98, 99, 105, 107, 109, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 147, 150, 151, 158, 160], "gap": [0, 8, 76, 98], "due": [0, 9, 17, 26, 29, 34, 35, 38, 49, 51, 54, 57, 58, 60, 66, 69, 72, 73, 74, 75, 79, 82, 99, 106, 140], "miss": [0, 9, 56, 64, 68, 74, 76, 79, 92, 94, 98, 103, 109, 133, 136, 140], "appear": [0, 6, 20, 38, 55, 60, 74, 76, 86, 91, 103, 118, 119, 120, 134, 147, 155, 159], "topologi": [0, 3, 9, 13, 16, 17, 20, 23, 24, 25, 30, 34, 38, 46, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 92, 105, 109, 110, 111, 113, 132, 134, 151, 162, 163, 165], "tabl": [0, 38, 49, 78, 84, 86, 89, 92, 99, 141, 145, 146, 150, 160], "combin": [0, 13, 16, 24, 26, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 92, 99, 113, 120, 140, 141, 152, 153, 154, 155, 156, 157, 158, 159], "path": [0, 23, 24, 26, 39, 40, 44, 58, 77, 86, 90, 105, 109, 112, 162, 163], "add": [0, 2, 3, 6, 9, 10, 20, 29, 30, 32, 36, 38, 39, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 89, 90, 92, 109, 129, 131, 140, 146, 151, 152, 161, 165], "column": [0, 2, 3, 18, 32, 34, 36, 37, 38, 41, 44, 60, 62, 64, 65, 66, 71, 74, 76, 80, 134, 138, 142], "get": [0, 1, 8, 13, 17, 19, 23, 34, 36, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 87, 89, 90, 91, 101, 102, 103, 109, 111, 140, 151], "clustal": 0, "substitut": [0, 64, 65, 86, 94, 109], "guid": [0, 2, 58, 74, 113, 146, 160], "tree": [0, 13, 88, 106], "newick": 0, "dnd": 0, "binari": [0, 3, 14, 23, 26, 40, 51, 60, 63, 67, 70, 79, 98, 105, 109, 111], "select_dict": 0, "immedi": [0, 79, 83, 92, 111, 151], "sequence_align": 0, "program": [0, 22, 23, 34, 39, 64, 100, 109, 112, 120], "creat": [0, 2, 4, 7, 8, 9, 10, 12, 13, 16, 17, 20, 25, 26, 28, 34, 35, 36, 37, 38, 40, 42, 43, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 66, 69, 70, 71, 72, 73, 75, 77, 79, 82, 83, 86, 88, 89, 90, 91, 92, 99, 100, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 129, 130, 131, 134, 135, 136, 137, 138, 139, 142, 143, 144, 146, 147, 149, 152, 155], "arg": [0, 2, 4, 6, 14, 18, 23, 28, 38, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 85, 86, 92, 109, 148], "kwd": [0, 23, 58], "global": [0, 13, 36, 58, 86, 90, 113, 151], "needleman": 0, "wunsch": 0, "bio": [0, 64, 86, 90], "pairwisealign": 0, "dynam": [0, 6, 29, 34, 39, 58, 79, 86, 102, 104, 108, 111, 112, 121, 155, 165], "tune": [0, 25, 58], "suitabl": [0, 6, 23, 34, 38, 88, 113, 146, 155], "similar": [0, 2, 10, 12, 13, 14, 29, 32, 37, 38, 39, 66, 79, 81, 86, 99, 100, 101, 102, 104, 112, 130, 141], "low": [0, 8, 10, 13, 72, 75, 77], "special": [0, 6, 8, 67, 78, 79, 88, 92, 98, 100, 106, 114, 115, 116, 117, 118, 119, 148, 151], "tool": [0, 19, 23, 28, 30, 33, 35, 48, 51, 62, 69, 80, 98, 114, 120, 162, 163], "muscl": 0, "tcoffe": 0, "match_scor": 0, "score": [0, 17, 32], "mismatch_penalti": 0, "penalti": 0, "gap_penalti": 0, "open": [0, 4, 19, 23, 26, 36, 42, 44, 55, 57, 62, 68, 70, 71, 72, 74, 76, 77, 79, 82, 86, 100, 101, 103, 105, 109, 111, 112, 114, 141], "high": [0, 6, 8, 10, 13, 32, 38, 44, 58, 86, 110, 113], "compact": [0, 23, 38, 147], "highli": [0, 24, 29, 68], "might": [0, 4, 13, 16, 38, 40, 49, 51, 68, 75, 76, 86, 91, 104, 113, 146, 148, 159, 160], "gapextension_penalti": 0, "extend": [0, 2, 32, 37, 38, 40, 41, 42, 44, 50, 58, 75, 79, 86, 90, 113, 136, 139, 147, 149, 150], "top": [0, 6, 32, 58, 62, 66, 68, 90, 102, 114, 115, 116, 117, 118, 119, 120, 131, 134, 140, 147], "begin": [0, 6, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 102, 109], "end": [0, 2, 13, 16, 23, 32, 37, 38, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 102, 109, 111, 113, 146], "prefer": [0, 13, 23, 37, 58], "your": [0, 2, 9, 17, 23, 26, 29, 36, 38, 39, 48, 51, 58, 68, 74, 87, 91, 99, 102, 112, 151], "alig": 0, "mode": [0, 6, 13, 17, 19, 50, 57, 58, 64, 65, 66, 68, 69, 77, 100, 101, 102, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120], "mismatch_scor": 0, "open_gap_scor": 0, "extend_gap_scor": 0, "seq": [0, 86, 90, 113, 114], "highest": [0, 86, 90], "topalign": 0, "bioinformat": [0, 9, 38, 112], "workflow": [0, 2, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "biopython": 0, "4": [0, 2, 3, 4, 5, 6, 8, 9, 11, 13, 17, 19, 24, 26, 30, 34, 35, 36, 37, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 80, 86, 87, 89, 90, 91, 92, 99, 101, 102, 103, 104, 107, 108, 109, 112, 113, 131, 140, 141, 142, 146, 147, 148, 149, 159, 160], "pairwise2": 0, "globalm": 0, "usebio": 0, "residuegroup": [0, 9, 25, 28, 86, 90, 92, 94, 95, 109], "releas": [0, 23, 38, 40, 49, 75, 86, 104, 109, 112, 140, 141, 151, 161, 165], "ag1": [0, 1, 35, 86, 99], "ag2": [0, 1, 35, 86, 99, 113], "take": [0, 2, 6, 9, 10, 13, 16, 23, 25, 26, 29, 30, 31, 32, 35, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 99, 102, 103, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "g1": [0, 35, 107], "g2": [0, 35, 107], "consist": [0, 3, 6, 19, 36, 37, 64, 80, 86, 88, 92, 105, 111, 113, 147, 148], "etc": [0, 2, 3, 6, 9, 23, 29, 30, 32, 34, 36, 37, 39, 42, 58, 60, 70, 79, 91, 92, 102, 111, 116, 130, 147, 148], "veri": [0, 17, 23, 27, 37, 38, 58, 64, 66, 68, 80, 86, 101, 102, 109, 111, 113, 146], "simplist": 0, "basi": [0, 20, 22, 24, 34, 66, 75, 112], "discard": [0, 38, 78], "compar": [0, 4, 9, 11, 17, 25, 32, 34, 36, 49, 73, 79, 83, 86, 91, 109, 156], "consid": [0, 1, 6, 8, 10, 13, 17, 19, 20, 23, 24, 26, 36, 37, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 91, 92, 98, 102, 104, 109, 113, 146, 160], "start_log": [0, 38, 102], "about": [0, 3, 4, 8, 9, 16, 34, 37, 38, 44, 58, 67, 69, 73, 86, 90, 100, 102, 108, 126, 127, 140, 143, 151], "mismatch": 0, "attempt": [0, 6, 20, 23, 32, 38, 42, 43, 44, 56, 58, 64, 74, 92, 102, 109, 140, 160], "slice": [0, 2, 3, 6, 9, 17, 23, 26, 29, 30, 32, 36, 39, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 86, 91, 113], "error": [0, 8, 9, 17, 23, 26, 29, 36, 57, 58, 82, 86, 89, 92, 94, 99, 109, 111, 113, 155], "tol": [0, 13], "could": [0, 4, 8, 19, 20, 24, 32, 68, 78, 80, 92, 104, 109, 110, 122, 132, 140], "profile2": 0, "too": [0, 9, 23, 42, 49, 86, 88, 91, 92, 113, 165], "expens": [0, 17, 32], "renam": [0, 23, 28, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "check_same_atom": 0, "possibli": [0, 10, 25, 36, 38, 68, 110, 111, 147], "xu": [1, 60, 98], "hong": 1, "chen": 1, "2023": [1, 141, 165], "class": [1, 6, 7, 11, 13, 14, 16, 17, 18, 19, 28, 30, 33, 35, 39, 41, 42, 43, 45, 46, 50, 52, 53, 55, 65, 66, 67, 68, 69, 72, 73, 76, 78, 82, 84, 87, 88, 90, 91, 93, 95, 100, 101, 103, 106, 108, 110, 111, 115, 116, 117, 118, 119, 120, 121, 145, 148, 150, 153, 154, 155, 156, 157, 158, 159], "over": [1, 2, 3, 4, 6, 8, 17, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 36, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 98, 100, 101, 102, 103, 105, 109, 121, 147, 154, 156, 159], "specif": [1, 2, 3, 15, 23, 26, 29, 34, 35, 38, 39, 49, 51, 54, 57, 58, 60, 62, 64, 66, 67, 69, 71, 72, 73, 75, 79, 80, 86, 94, 99, 109, 110, 112, 120, 140, 149, 151, 152, 160, 164, 165], "n_atom": [1, 32, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 87, 88, 89, 90, 92, 101, 113, 132, 135], "By": [1, 4, 6, 17, 19, 23, 26, 34, 41, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 90, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "period": [1, 3, 4, 6, 10, 20, 25, 29, 35, 36, 54, 58, 68, 76, 79, 86, 88, 91, 95, 99, 103, 104, 106, 110, 113, 141, 146, 155, 162, 163], "boundari": [1, 3, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 99, 104, 106, 109, 146, 155, 162, 163], "condit": [1, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 104, 106, 131, 146], "easili": [1, 2, 9, 14, 17, 79, 86, 110, 111, 156], "turn": [1, 2, 3, 6, 9, 17, 23, 29, 30, 32, 36, 44, 56, 89, 113, 140], "off": [1, 4, 8, 9, 16, 23, 25, 38, 40, 56, 67, 72, 103, 104, 113], "time": [1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 109, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 151, 160], "function": [1, 2, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 22, 24, 26, 29, 31, 33, 37, 38, 39, 44, 45, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 84, 85, 86, 88, 90, 91, 93, 100, 101, 104, 105, 106, 111, 112, 113, 120, 132, 140, 141, 146, 148, 150, 154, 157, 158, 159, 161, 162, 163], "gro": [1, 9, 20, 23, 37, 46, 48, 79, 84, 85, 86, 92, 111, 113, 141, 147, 150, 162, 163], "xtc": [1, 2, 6, 9, 36, 37, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 75, 76, 79, 80, 84, 86, 92, 101, 111, 162, 163], "101": [1, 37, 65, 148], "105": [1, 112], "4001": 1, "4005": 1, "100": [1, 12, 16, 17, 20, 22, 23, 29, 37, 44, 58, 79, 86, 109, 125, 141, 148, 149, 160], "4000": 1, "choic": [1, 8, 13, 16, 32, 79, 86, 99], "my_dist": 1, "our": [1, 8, 20, 23, 29, 32, 37, 48, 58, 146], "37": [1, 19, 34, 66, 88, 148, 149], "80813681": 1, "33": [1, 23, 64, 65, 114, 149], "2594864": 1, "34": [1, 34, 64, 65, 108, 149, 163], "93676414": 1, "51183299": 1, "96340209": 1, "27": [1, 64, 65, 86, 141, 148, 149, 160], "11746625": 1, "31": [1, 26, 38, 64, 65, 107, 112, 148, 149], "19878079": 1, "69439435": 1, "32": [1, 30, 31, 104, 112, 148, 149], "63446126": 1, "10451345": 1, "23": [1, 48, 64, 65, 83, 108, 109, 141, 149, 160], "27210749": 1, "30": [1, 8, 13, 36, 37, 62, 102, 148, 149, 160], "38714688": 1, "48269361": 1, "91444505": 1, "84583838": 1, "18": [1, 23, 37, 56, 62, 64, 65, 86, 109, 112, 132, 136, 137, 138, 140, 148, 149, 155, 160], "40607922": 1, "39": [1, 64, 65, 148, 149], "21993135": 1, "33468192": 1, "41": [1, 3, 64, 65, 86, 149], "0133789": 1, "46885946": 1, "26": [1, 37, 64, 65, 66, 86, 112, 141, 148, 149], "26006981": 1, "9966713": 1, "14991106": 1, "38": [1, 64, 65, 149], "13423586": 1, "95451427": 1, "83845081": 1, "66255735": 1, "35": [1, 2, 4, 6, 23, 67, 148, 149], "59335027": 1, "8926705": 1, "27175056": 1, "51994763": 1, "12161091": 1, "56481743": 1, "36": [1, 66, 112, 148, 149], "8488121": 1, "75278065": 1, "27275501": 1, "7831456": 1, "74359073": 1, "54893794": 1, "76495816": 1, "76272761": 1, "31816555": 1, "81588421": 1, "82491432": 1, "890219": 1, "20012515": 1, "40": [1, 6, 29, 37, 64, 65, 148, 149], "00563374": 1, "83857688": 1, "77886735": 1, "45775864": 1, "without": [1, 18, 37, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 86, 88, 90, 92, 106, 109, 112, 131, 135, 141, 147], "enter": [1, 114, 115, 116, 117, 118, 119], "pbc": [1, 4, 6, 20, 25, 29, 38, 48, 85, 86, 90, 91, 104, 106, 151, 157], "my_dists_nopbc": 1, "482695": 1, "21992825": 1, "0133757": 1, "99666906": 1, "14990985": 1, "13423708": 1, "95451311": 1, "66255625": 1, "27174827": 1, "51": [1, 35, 148, 149], "86981409": 1, "48": [1, 64, 65, 148, 149], "10347964": 1, "39570072": 1, "49": [1, 148, 149], "14423513": 1, "50": [1, 6, 9, 13, 17, 20, 32, 37, 112, 148, 149], "44804292": 1, "56": [1, 149], "39657447": 1, "n_frame": [1, 8, 9, 29, 32, 51, 54, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 92, 100], "5": [1, 2, 3, 4, 6, 8, 9, 13, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 159, 160], "think": [2, 4, 38], "analysisbas": [2, 19, 30, 34, 35, 36, 37, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "subclass": [2, 6, 44, 68, 75, 79, 86, 88, 90, 91, 92, 94, 102, 134, 152], "inherit": [2, 44, 82, 92, 105, 151, 154, 156, 157, 158, 159], "common": [2, 6, 29, 38, 45, 55, 60, 64, 68, 75, 76, 79, 84, 86, 90, 92, 100, 103, 109, 112, 113, 132, 150, 151], "api": [2, 4, 8, 29, 34, 36, 42, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 83, 84, 85, 86, 105, 108, 161], "make": [2, 6, 7, 23, 24, 29, 36, 38, 40, 42, 49, 51, 58, 68, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 102, 103, 105, 109, 110, 111, 113, 133, 144, 145, 155, 160, 161, 162, 163, 165], "mani": [2, 9, 12, 13, 23, 29, 32, 37, 51, 60, 75, 79, 87, 89, 99, 109, 110, 112, 132, 146], "addit": [2, 4, 13, 17, 18, 19, 20, 29, 30, 31, 34, 36, 38, 39, 40, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 88, 91, 100, 102, 103, 106, 109, 113, 120, 147, 150, 161, 164], "featur": [2, 22, 32, 36, 58, 66, 68, 89, 92, 98, 109], "automat": [2, 6, 14, 17, 18, 33, 38, 39, 40, 49, 50, 56, 58, 60, 64, 68, 72, 78, 79, 80, 85, 86, 88, 91, 99, 102, 104, 109, 112, 113, 120, 151, 156, 160, 165], "avail": [2, 13, 14, 15, 16, 18, 20, 22, 23, 26, 32, 34, 35, 39, 40, 44, 46, 49, 51, 54, 57, 58, 60, 62, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 88, 89, 91, 92, 100, 106, 109, 113, 120, 133, 141, 146, 147, 151, 161, 162, 163, 165], "progressbar": [2, 3, 6, 9, 29, 30, 32, 36, 102], "point": [2, 3, 5, 6, 8, 9, 13, 19, 20, 23, 29, 33, 34, 37, 38, 58, 79, 86, 88, 90, 99, 102, 103, 106, 108, 113, 148, 156, 157, 158], "instanti": [2, 104], "kept": [2, 23, 56, 57, 86, 132, 159], "fix": [2, 6, 13, 28, 36, 57, 58, 60, 68, 74, 75, 76, 79, 80, 86, 91, 100, 104, 111, 113, 161], "being": [2, 3, 4, 6, 13, 17, 20, 24, 25, 30, 32, 34, 37, 38, 56, 58, 64, 67, 76, 79, 80, 82, 89, 95, 98, 101, 103, 147, 151, 155, 156], "abl": [2, 23, 79, 85], "enabl": [2, 14, 34, 38, 39, 41, 42, 44, 58, 64, 67, 72, 99, 102, 104, 106, 109, 163], "shown": [2, 5, 6, 9, 26, 29, 40, 72, 109, 121, 151], "estim": [2, 11, 13, 15, 17, 20, 29, 102], "remain": [2, 6, 13, 20, 37, 38, 44, 74, 79, 84, 86, 92, 102, 108, 109, 112, 150, 154], "until": [2, 8, 32, 38, 44, 49, 64, 79, 86, 88, 140], "kind": [2, 31, 79, 86, 92, 146], "item": [2, 19, 34, 86, 89, 90, 91, 102, 149], "via": [2, 5, 8, 20, 24, 28, 35, 40, 58, 68, 91, 99, 109, 111, 112, 133, 140, 155, 160], "decid": [2, 64], "what": [2, 6, 20, 23, 29, 76, 82, 92, 109, 111], "seri": [2, 3, 4, 34, 36, 38, 40, 90, 108, 111], "analyz": [2, 3, 4, 5, 6, 9, 19, 26, 29, 30, 31, 32, 34, 36, 37, 60, 76, 102, 111, 165], "rm": [2, 8, 34, 39, 107, 112], "9": [2, 9, 13, 20, 21, 23, 24, 26, 30, 31, 34, 38, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 80, 86, 90, 91, 92, 99, 105, 109, 113, 127, 132, 134, 136, 138, 141, 143, 144, 146, 148, 149, 160], "boolean": [2, 3, 4, 6, 9, 13, 29, 30, 32, 36, 37, 44, 58, 75, 79, 83, 86, 88, 90, 99, 104, 146, 152], "plot": [2, 4, 5, 6, 8, 16, 20, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 40, 41, 111, 162, 163], "y": [2, 5, 6, 23, 29, 33, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 99, 103, 108, 109, 113, 132, 148, 162, 163], "doc": [2, 6, 26, 58, 86, 102, 109], "matplotlib": [2, 4, 5, 8, 9, 16, 20, 23, 26, 29, 33, 34, 36, 37, 40, 162, 164], "pyplot": [2, 4, 5, 8, 9, 20, 23, 26, 29, 34, 36, 37, 40, 162], "plt": [2, 4, 5, 8, 9, 16, 20, 29, 35, 36, 37, 40], "xlabel": [2, 4, 8, 23, 37], "p": [2, 17, 20, 23, 25, 26, 34, 36, 37, 38, 40, 41, 42, 44, 47, 51, 52, 53, 54, 55, 56, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 88, 109, 112, 113, 146, 148, 157, 160, 162, 163], "ylabel": [2, 4, 8, 23, 37], "\u00e5": [2, 4, 6, 20, 23, 24, 38, 51, 54, 60, 64, 66, 68, 80, 83, 86, 90, 98, 153, 160], "_single_fram": 2, "chapter": [2, 111], "own": [2, 8, 9, 13, 23, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 83, 85, 87, 101, 109, 112, 151, 152], "essenti": [2, 6, 32, 93, 109, 112, 147], "almost": [2, 51, 60, 79, 92, 113], "aim": [2, 17, 79, 84, 147, 150], "useabl": 2, "analysisfromfunct": [2, 80], "analysis_class": 2, "simpl": [2, 8, 17, 19, 23, 26, 29, 39, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 79, 80, 86, 87, 92, 94, 98, 102, 108, 109, 110, 111, 112, 120, 147, 151, 160], "wrapper": [2, 13, 16, 100, 101, 102, 106, 110], "even": [2, 6, 10, 23, 60, 75, 92, 99, 108, 112, 113, 141, 147, 161], "easier": [2, 28, 36, 38, 40, 105], "fulli": [2, 58, 79], "multi": [2, 20, 23, 38, 64, 75, 78, 79, 86, 90, 137, 140, 148, 152, 155], "design": [2, 3, 4, 13, 18, 79, 91, 109, 152], "templat": [2, 90, 152], "analys": [2, 3, 6, 9, 16, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 36, 37, 38, 86, 90, 98, 151, 164], "care": [2, 39, 66, 104], "up": [2, 4, 10, 13, 19, 23, 24, 26, 29, 32, 34, 37, 38, 42, 51, 54, 56, 58, 60, 64, 66, 69, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 98, 99, 100, 106, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 134, 136, 146, 151, 152, 156], "reader": [2, 29, 43, 45, 47, 48, 49, 50, 51, 54, 56, 58, 59, 60, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 76, 78, 83, 84, 92, 100, 105, 109, 125, 132, 135, 136, 140, 141, 149, 150], "iter": [2, 3, 4, 6, 13, 14, 17, 23, 25, 26, 32, 33, 36, 38, 41, 42, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 83, 86, 92, 100, 101, 102, 109, 111, 149, 153, 156], "offer": [2, 29, 91], "meter": [2, 102], "_prepar": 2, "_conclud": 2, "pre": [2, 4, 13, 16, 20, 34, 98, 101, 149, 160, 161], "post": [2, 100, 103], "process": [2, 6, 19, 20, 23, 26, 29, 34, 38, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 100, 109, 136, 149, 155, 159], "coordin": [2, 6, 8, 10, 14, 15, 16, 17, 19, 22, 23, 26, 29, 32, 34, 35, 36, 39, 40, 42, 44, 47, 48, 49, 86, 87, 90, 92, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 150, 151, 154, 155, 157, 158, 159, 162, 163, 165], "readerbas": [2, 40, 42, 60, 75, 79, 92], "debug": [2, 38, 102], "timestep": [2, 10, 17, 24, 29, 32, 33, 37, 38, 42, 44, 48, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 82, 84, 86, 92, 95, 99, 103, 104, 106, 109, 110, 132, 151, 153, 154, 155, 156, 157, 158, 159], "exist": [2, 4, 8, 17, 20, 23, 34, 35, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 80, 81, 83, 86, 89, 90, 92, 99, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 146, 151], "call": [2, 4, 6, 8, 10, 13, 16, 17, 18, 20, 23, 24, 29, 32, 34, 38, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 85, 86, 87, 88, 92, 98, 99, 100, 101, 102, 104, 107, 109, 111, 113, 135, 147, 149, 151, 152, 156], "indic": [2, 3, 6, 9, 13, 14, 17, 20, 23, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 44, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 91, 92, 94, 98, 99, 100, 103, 104, 106, 109, 113, 120, 129, 132, 140, 147, 161], "newanalysi": 2, "def": [2, 4, 38, 85, 109, 151, 152], "__init__": [2, 42, 44, 68, 75, 79, 83, 85, 110, 114, 151, 152], "self": [2, 8, 44, 58, 70, 75, 79, 83, 85, 86, 104, 109, 112, 151, 152], "super": [2, 44, 75, 152], "_paramet": 2, "_ag": 2, "begun": 2, "data": [2, 3, 6, 8, 9, 11, 13, 17, 18, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 41, 42, 43, 44, 45, 47, 48, 49, 51, 54, 55, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 84, 85, 86, 89, 91, 92, 93, 94, 98, 100, 103, 105, 108, 110, 111, 112, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 151, 162, 163, 164], "example_result": 2, "move": [2, 20, 21, 23, 26, 29, 38, 42, 44, 48, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 79, 80, 85, 86, 89, 90, 99, 102, 103, 108, 109, 147, 148, 155, 157, 158, 159, 160], "some_funct": [2, 152], "append": [2, 34, 38, 72, 77, 79, 86, 92, 105, 114, 115, 116, 117, 118, 119, 120], "onc": [2, 6, 20, 22, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 92, 100, 102, 109, 112, 113, 156], "finish": [2, 18, 23, 79], "normalis": [2, 38], "here": [2, 6, 8, 13, 16, 17, 24, 28, 32, 34, 37, 40, 42, 48, 56, 62, 64, 84, 86, 90, 91, 100, 104, 109, 140, 146, 150], "asarrai": 2, "sum": [2, 3, 6, 20, 32, 34, 36, 38, 76, 86, 90, 108, 162], "afterward": [2, 72, 86, 152], "like": [2, 4, 6, 10, 23, 28, 32, 38, 40, 49, 51, 54, 55, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 81, 83, 86, 90, 92, 95, 100, 101, 102, 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 140, 147, 151, 152, 157, 158], "na": [2, 20, 23, 108, 109, 148], "20": [2, 4, 6, 20, 24, 25, 29, 33, 37, 60, 61, 62, 64, 65, 68, 83, 86, 90, 98, 99, 102, 103, 109, 133, 134, 146, 148, 149, 160, 162, 163], "print": [2, 3, 4, 7, 13, 14, 17, 22, 23, 28, 33, 37, 38, 39, 40, 44, 58, 62, 68, 77, 79, 85, 86, 92, 100, 101, 102, 105, 109, 111, 113, 146, 155, 156], "kei": [2, 6, 20, 26, 28, 34, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 89, 91, 92, 99, 109, 113, 148], "progressbar_kwarg": [2, 3, 6, 9, 29, 30, 32, 36], "skip": [2, 3, 6, 9, 23, 29, 30, 32, 36, 44, 51, 60, 64, 76, 79, 80, 83, 100, 102, 103, 140], "integ": [2, 3, 6, 9, 10, 13, 17, 23, 29, 30, 32, 36, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 80, 88, 89, 100, 101, 104, 105, 109, 113, 129, 147, 148, 149], "valueerror": [2, 3, 6, 9, 29, 30, 32, 36, 42, 43, 44, 49, 50, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 78, 80, 85, 86, 88, 90, 92, 94, 103, 105, 108, 109, 134, 144, 146, 160], "custom": [2, 3, 4, 6, 8, 9, 29, 30, 32, 36, 38, 58, 74, 79, 82, 85, 92, 102, 109, 114, 146, 151, 157], "regard": [2, 3, 6, 9, 23, 29, 30, 32, 36, 38, 58, 75], "full": [2, 3, 6, 9, 13, 17, 19, 29, 30, 32, 34, 36, 39, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 79, 80, 92, 107, 109, 132, 135, 147, 161, 165], "abil": [2, 3, 6, 9, 24, 29, 30, 32, 36, 68], "modifi": [2, 3, 6, 9, 13, 16, 24, 29, 30, 32, 36, 38, 47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 86, 99, 103, 107, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "descript": [2, 3, 6, 9, 13, 17, 18, 23, 26, 29, 30, 32, 36, 42, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 99, 107, 112, 151], "tqdm": [2, 3, 6, 9, 29, 30, 32, 36, 102], "callabl": [2, 4, 13, 18, 23, 34, 86], "evalu": [2, 11, 17, 20, 37, 58, 86, 88, 99, 104, 106, 113], "simul": [2, 4, 6, 7, 8, 10, 11, 13, 16, 17, 19, 28, 29, 30, 32, 36, 37, 38, 40, 41, 44, 47, 48, 51, 57, 64, 67, 68, 76, 79, 86, 87, 92, 95, 99, 100, 105, 106, 111, 112, 120, 129, 147, 153, 155, 160, 162, 163], "timeseri": [2, 4, 24, 29, 36, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 98], "align": [2, 6, 10, 14, 17, 20, 23, 32, 34, 36, 37, 39, 44, 45, 58, 66, 86, 90, 110, 111, 112, 154, 158], "rot": [2, 107], "former": [2, 33, 80, 82, 86, 98], "value_kei": 2, "sklearn": [2, 13, 16, 17], "util": [2, 11, 12, 13, 14, 16, 17, 29, 36, 57, 82, 88, 105, 110, 125, 150], "bunch": 2, "scikit": [2, 13, 16, 39, 151], "learn": [2, 13, 16, 32, 39, 151], "attributeerror": [2, 3, 94], "assign": [2, 4, 6, 8, 12, 13, 23, 24, 30, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 86, 92, 109, 113, 134, 136, 140, 147, 163], "librari": [2, 13, 23, 46, 51, 58, 60, 67, 68, 75, 77, 79, 102, 108, 151, 165], "style": [2, 23, 51, 60, 79, 111, 140, 151], "rotationmatrix": 2, "decor": [2, 88, 102], "soohaeng": 3, "yoo": 3, "willow": 3, "david": [3, 9, 36, 67, 108, 112], "minh": 3, "2020": [3, 22, 23, 29, 98, 141, 149], "v2": [3, 8, 9, 19, 23, 26, 29, 36, 80, 98, 104], "higher": [3, 8, 28, 30, 38, 99, 100, 103], "interconvert": 3, "cartesian": [3, 6, 28, 34, 56, 83, 86, 90, 100], "intern": [3, 6, 10, 19, 22, 34, 44, 76, 83, 86, 88, 89, 90, 91, 98, 99, 100, 101, 102, 103, 109, 113, 125, 136, 137, 140, 141, 146], "system": [3, 6, 7, 8, 10, 19, 20, 23, 25, 26, 29, 31, 33, 35, 40, 48, 49, 51, 56, 58, 60, 61, 62, 64, 66, 67, 69, 72, 73, 79, 83, 86, 88, 89, 90, 91, 92, 99, 102, 103, 107, 109, 111, 112, 125, 131, 136, 138, 139, 140, 147, 154, 155, 162, 163], "chang2003": 3, "redund": [3, 86, 113], "correl": [3, 24, 32, 35, 37, 51, 60, 110, 112], "degre": [3, 20, 24, 31, 38, 51, 60, 64, 65, 68, 80, 83, 86, 90, 91, 99, 103, 109, 153, 157], "freedom": 3, "3n": [3, 32, 34], "improp": [3, 60, 86, 90, 91, 92, 129, 130, 131, 139, 140, 141, 146, 149], "hikiri2016": 3, "pair": [3, 4, 13, 16, 17, 20, 23, 24, 26, 30, 31, 34, 35, 86, 90, 99, 103, 104, 106, 147, 148, 149], "central": [3, 83, 93, 99, 106, 109], "four": [3, 17, 90, 91, 99, 125, 147], "d": [3, 4, 6, 10, 24, 29, 30, 31, 34, 35, 37, 38, 86, 88, 89, 90, 98, 99, 103, 109, 111, 112, 146, 149, 157], "plane": [3, 23, 86, 90, 91, 99, 103, 108, 146, 147, 154, 163], "anoth": [3, 6, 10, 32, 35, 37, 38, 46, 79, 83, 85, 86, 87, 91, 92, 99, 100, 101, 106, 111, 113, 114, 120, 155, 160], "share": [3, 14, 30, 35, 58, 67, 75, 79, 80, 86, 90, 92, 131, 132], "primari": [3, 29, 79, 86, 90, 99, 103, 106, 121, 159], "raw": [3, 20, 32, 35, 37, 58, 61, 79, 80, 83, 92, 98, 100, 105, 148], "definit": [3, 4, 8, 20, 29, 37, 47, 55, 64, 65, 74, 75, 86, 90, 91, 93, 103, 140], "reduc": [3, 8, 16, 17, 23, 32, 58, 73, 102, 104], "molecul": [3, 6, 7, 8, 10, 23, 24, 35, 36, 37, 38, 46, 54, 60, 62, 74, 86, 90, 92, 98, 103, 113, 130, 131, 134, 151, 155, 159, 160, 162, 163], "six": [3, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 89, 99], "extern": [3, 26, 39, 79, 86, 92, 94, 113, 114, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159], "space": [3, 6, 8, 11, 16, 17, 23, 32, 36, 40, 58, 64, 66, 73, 74, 79, 83, 86, 99, 109, 113, 132, 139, 148, 162, 163], "three": [3, 6, 11, 17, 20, 23, 26, 28, 32, 38, 54, 56, 58, 66, 76, 79, 83, 89, 90, 91, 92, 99, 103, 147], "": [3, 6, 9, 13, 16, 22, 23, 29, 32, 34, 36, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 90, 92, 95, 98, 99, 100, 103, 107, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 148, 149, 150, 160, 162, 163], "axi": [3, 20, 23, 29, 32, 33, 34, 36, 37, 86, 90, 91, 99, 103, 104, 108, 157, 162, 163], "convent": [3, 10, 29, 34, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 99, 100, 102, 104, 106, 140], "polar": [3, 23, 112, 149], "phi": [3, 5, 9, 86, 90], "azimuth": 3, "theta": [3, 37], "omega": [3, 86, 90], "adapt": 3, "algdock": 3, "minh2020": 3, "dihedr": [3, 5, 39, 60, 86, 90, 91, 92, 99, 103, 113, 129, 130, 131, 139, 140, 141, 146], "calc_dihedr": [3, 9, 99], "adenyl": [3, 9, 36, 111], "kinas": [3, 9, 36, 111], "adk": [3, 4, 9, 13, 16, 17, 36, 111], "within": [3, 4, 6, 7, 9, 10, 19, 20, 23, 24, 25, 32, 35, 37, 38, 40, 42, 44, 47, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 87, 88, 90, 91, 92, 95, 98, 99, 102, 104, 106, 109, 111, 113, 131, 133, 140, 144, 146, 159], "selected_residu": 3, "code": [3, 15, 22, 23, 26, 29, 34, 36, 38, 39, 40, 44, 51, 56, 61, 62, 64, 65, 79, 81, 85, 86, 87, 90, 92, 94, 99, 100, 101, 102, 103, 108, 110, 112, 113, 130, 132, 134, 138, 145, 146, 148, 151, 152, 160, 164], "snippet": 3, "previou": [3, 6, 9, 13, 17, 20, 30, 37, 38, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 82, 86, 90, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 156], "reconstruct": 3, "close": [3, 4, 8, 17, 19, 23, 26, 29, 32, 36, 38, 42, 44, 47, 48, 49, 51, 52, 54, 55, 57, 58, 60, 62, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 91, 99, 100, 101, 105, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146], "allclos": [3, 108], "atol": [3, 86, 88], "1e": [3, 13, 86, 88, 160], "pi": [3, 35, 99, 103, 108], "12": [3, 8, 23, 34, 37, 48, 54, 58, 62, 64, 65, 86, 109, 112, 114, 140, 148, 149, 160, 162, 163], "good": [3, 37, 67, 102], "disk": [3, 17, 23, 36, 58, 68, 72, 73, 109], "load": [3, 5, 6, 7, 8, 14, 17, 18, 20, 26, 29, 32, 34, 36, 40, 44, 57, 62, 64, 68, 69, 72, 73, 79, 80, 83, 86, 87, 92, 105, 111, 121, 129], "again": [3, 20, 23, 72, 99, 147, 155], "npy": 3, "rnew": 3, "o": [3, 8, 9, 15, 20, 23, 33, 38, 39, 46, 54, 58, 75, 77, 79, 82, 84, 86, 88, 91, 99, 104, 109, 110, 111, 112, 113, 146, 148], "ag": [3, 9, 29, 35, 49, 58, 64, 80, 85, 86, 90, 91, 92, 113, 148, 152, 154, 157, 158, 159], "initial_atom": 3, "belong": [3, 13, 16, 17, 20, 24, 32, 36, 76, 86, 89, 90, 91, 92, 103, 111, 113, 140, 147], "unavail": [3, 92], "mai": [3, 6, 13, 23, 24, 29, 34, 35, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 92, 98, 99, 102, 105, 109, 113, 120, 125, 146, 152, 155, 157, 161, 165], "guess": [3, 20, 23, 24, 43, 44, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 80, 86, 89, 90, 91, 92, 99, 103, 109, 120, 122, 123, 124, 125, 126, 127, 128, 130, 131, 133, 134, 136, 137, 138, 140, 143, 147, 148, 150, 160], "guess_bond": [3, 20, 86, 92, 103, 146, 148], "associ": [3, 6, 13, 17, 19, 36, 39, 40, 42, 51, 54, 58, 60, 64, 69, 72, 73, 75, 77, 86, 90, 109, 112, 151], "whose": [3, 8, 17, 32, 34, 38, 60, 165], "heaviest": 3, "termin": [3, 38, 100, 102, 109], "recalcul": [3, 6, 17, 72], "nframe": [3, 29, 80], "row": [3, 8, 14, 18, 22, 24, 34, 38, 99, 109], "initi": [3, 6, 8, 13, 18, 20, 23, 32, 36, 38, 39, 44, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 86, 90, 92, 99, 102, 104, 106, 108, 109, 114, 147, 149, 156], "next": [3, 4, 24, 26, 29, 37, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 100, 101, 108, 113, 120, 140], "r_": [3, 29], "01": [3, 11, 17, 48, 88, 112, 132], "a_": [3, 33], "012": [3, 65], "bat_fram": 3, "convers": [3, 6, 10, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 99, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "dimens": [3, 6, 8, 10, 16, 17, 23, 29, 30, 32, 34, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 75, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 109, 151, 155, 158], "proper": [3, 34, 75, 109, 141, 147, 149], "oppos": [3, 34], "around": [3, 6, 10, 13, 24, 29, 35, 37, 58, 64, 86, 87, 88, 91, 95, 98, 99, 103, 106, 109, 113, 138], "properti": [3, 6, 22, 29, 30, 31, 34, 42, 49, 51, 54, 55, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 98, 106, 109, 113, 129, 147, 149], "read": [3, 6, 23, 32, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 82, 83, 84, 86, 89, 90, 92, 106, 109, 110, 111, 113, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 142, 143, 144, 147, 149, 150, 151, 160, 165], "chia": 3, "en": [3, 14, 40, 103, 109, 149], "michael": [3, 9, 34], "j": [3, 4, 8, 9, 10, 13, 14, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 37, 38, 98, 99, 104, 107, 108, 111, 112, 148, 160], "potter": 3, "k": [3, 8, 9, 10, 13, 16, 23, 26, 34, 36, 76, 86, 88, 90, 99, 107, 112, 148], "gilson": 3, "molecular": [3, 8, 9, 16, 23, 29, 32, 37, 53, 60, 67, 79, 90, 104, 108, 111, 112, 121, 147, 150, 155, 165], "configur": [3, 9, 10, 34, 36, 51, 58, 99, 102, 104], "integr": [3, 17, 20, 26, 29, 48, 51, 58, 60, 67, 70, 72, 79, 100], "journal": [3, 8, 9, 11, 15, 16, 17, 19, 23, 29, 30, 31, 34, 37, 67, 98, 108, 112, 155, 160], "physic": [3, 6, 8, 29, 37, 58, 98, 112, 160], "chemistri": [3, 29, 30, 31, 37, 67, 90, 160], "107": [3, 38, 98, 112, 148], "1048": 3, "1055": 3, "2003": [3, 9, 15, 16, 26], "doi": [3, 4, 8, 9, 11, 17, 19, 23, 26, 29, 30, 31, 32, 34, 36, 37, 38, 67, 98, 108, 111, 112, 148, 155, 160, 162, 163], "1021": [3, 19, 29, 30, 31, 37, 98, 112, 148, 155], "jp027149c": 3, "simon": [3, 9], "hikiri": 3, "takashi": 3, "yoshidom": 3, "mitsunori": 3, "ikeguchi": 3, "entropi": 3, "chemic": [3, 8, 19, 29, 30, 31, 37, 98, 146, 155], "theori": [3, 29, 90, 98, 155], "5990": 3, "6000": 3, "2016": [3, 8, 32, 36, 80, 107, 112, 141, 149], "pmid": [3, 19, 30, 31], "27951672": 3, "ac": [3, 19, 38, 98, 148, 155], "jctc": [3, 98, 155], "6b00563": 3, "l": [3, 6, 8, 19, 25, 29, 34, 36, 86, 99, 107, 109, 112, 160], "alchem": 3, "grid": [3, 6, 19, 23, 99, 104, 110, 162, 163], "dock": [3, 62, 134], "bind": [3, 6, 35, 38, 68], "free": [3, 26, 58, 79], "energi": [3, 4, 40, 47, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 80, 98, 149, 160], "flexibl": [3, 17, 23, 36, 51, 58, 80, 86, 90, 105, 165], "rigid": [3, 55, 74], "receptor": 3, "7": [3, 6, 9, 19, 23, 26, 31, 32, 34, 35, 36, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 90, 94, 98, 102, 103, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 156, 159, 160, 161, 165], "715": 3, "730": 3, "http": [3, 8, 9, 14, 15, 23, 29, 30, 31, 38, 58, 62, 67, 88, 102, 103, 107, 108, 109, 140, 160, 165], "org": [3, 8, 9, 23, 29, 30, 31, 38, 58, 67, 102, 103, 108, 109, 140, 160, 165], "1002": [3, 9, 30, 31, 38, 67, 112, 160], "jcc": [3, 30, 31, 67, 112], "26036": 3, "q": [4, 17, 18, 23, 26, 34, 65, 66, 79, 86, 88, 90, 108, 149], "conform": [4, 9, 12, 13, 14, 16, 17, 19, 30, 31, 34, 49, 56, 64, 66, 92, 112], "closer": [4, 42], "radiu": [4, 23, 35, 37, 66, 79, 86, 88, 90, 95, 106, 108, 111, 113, 141, 147, 163], "fraction": [4, 38, 54, 60, 99], "metric": [4, 8, 34, 102], "well": [4, 11, 13, 17, 18, 38, 39, 51, 75, 79, 80, 86, 94, 98, 99, 100, 101, 104, 106, 108, 111, 134, 146, 147], "hard": [4, 56, 68, 86, 113, 145, 146, 148, 160], "cut": [4, 16, 25, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "count": [4, 6, 10, 19, 20, 24, 34, 35, 37, 38, 79, 162, 163], "soft": 4, "potenti": [4, 13, 16, 24, 38, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 109, 111, 141, 149], "larg": [4, 6, 9, 23, 25, 34, 35, 36, 38, 42, 66, 68, 101, 112, 162, 163], "soft_cut_q": 4, "cannot": [4, 6, 9, 23, 26, 29, 43, 49, 58, 60, 66, 68, 70, 78, 79, 82, 86, 90, 109, 129, 151], "apart": [4, 155], "total": [4, 13, 24, 32, 34, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 79, 80, 83, 86, 87, 89, 90, 98, 102, 113, 149], "divid": [4, 6, 17, 19, 34, 36, 68, 104, 109, 140], "As": [4, 6, 32, 34, 38, 40, 42, 44, 51, 56, 58, 60, 62, 74, 76, 86, 92, 98, 113, 121, 140, 147, 148, 151, 160, 161], "unzip": [4, 111], "salt": [4, 38], "bridg": [4, 10, 24, 39], "enzym": 4, "transit": [4, 36, 111], "crude": [4, 23], "nh": [4, 20, 38, 148], "nz": [4, 38, 54], "ly": [4, 10, 38, 86, 99, 103, 104, 109, 113], "oe": 4, "od": [4, 38], "asp": [4, 38], "glu": [4, 38, 113], "littl": [4, 70, 99, 101, 148], "bit": [4, 62, 68, 100, 101, 104, 134, 148], "harder": [4, 37], "problem": [4, 8, 13, 29, 32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 94, 113, 161], "real": [4, 6, 54, 60, 64, 65, 66, 99, 108, 109, 111], "sel_bas": 4, "resnam": [4, 6, 9, 20, 24, 37, 38, 48, 49, 50, 56, 64, 65, 86, 88, 90, 92, 109, 113, 122, 124, 125, 128, 131, 133, 134, 136, 137, 138, 139, 140, 141, 147, 149], "sel_acid": 4, "separ": [4, 12, 13, 16, 17, 23, 26, 33, 34, 35, 37, 41, 42, 64, 66, 79, 86, 88, 92, 99, 109, 113, 120, 132, 139, 147, 148], "eg": [4, 61, 86, 88, 89, 92, 113], "crystal": [4, 86, 113, 148], "acid": [4, 9, 26, 38, 86, 88, 90, 109, 112], "basic": [4, 6, 9, 17, 19, 32, 40, 54, 75, 79, 82, 87, 102, 104, 113, 122, 128, 130, 141, 160], "ca1": 4, "refgroup": 4, "averav": 4, "average_contact": 4, "fig": [4, 9, 29, 36, 162, 163], "ax": [4, 5, 6, 8, 9, 22, 23, 26, 28, 29, 33, 34, 36, 86, 90, 108, 162, 163], "subplot": [4, 8, 9, 37], "titl": [4, 37, 64, 68, 70, 109], "2f": 4, "graph": [4, 9, 23, 25, 26, 33, 37], "state": [4, 13, 17, 19, 28, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 107, 108, 111, 112], "disappear": [4, 24, 98], "wise": [4, 10, 34], "fashion": [4, 38, 160], "clear": [4, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 111], "movi": [4, 64], "adk_zipper_cartoon": 4, "avi": 4, "suggest": [4, 6], "cutoff": [4, 8, 9, 10, 19, 24, 25, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 99, 104, 106, 113], "coars": [4, 38, 149], "grain": [4, 149], "dim": [4, 16, 28, 36, 153], "project": [4, 17, 32, 39, 99, 108, 110], "franklin2007": 4, "q1q2": 4, "f": [4, 6, 8, 24, 32, 33, 34, 44, 51, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 80, 100, 101, 104, 105, 108, 109, 111, 112, 146, 148, 160], "figsiz": [4, 9, 34, 36, 37], "figaspect": [4, 9], "label": [4, 23, 29, 34, 36, 38, 68, 147, 161], "legend": [4, 23, 36], "loc": [4, 36], "best": [4, 8, 9, 13, 23, 25, 29, 34, 36, 58, 108, 114], "pathwai": [4, 23, 34, 112], "minactionpath": 4, "form": [4, 10, 13, 17, 19, 20, 23, 24, 26, 34, 37, 38, 40, 68, 83, 86, 90, 91, 92, 95, 99, 103, 106, 108, 109, 111, 146, 147, 157], "prescrib": [4, 18, 64], "is_any_clos": 4, "r0": [4, 108], "dist": [4, 10, 34, 38, 99], "nc": [4, 68, 79, 92, 148, 149], "bound": [4, 17, 32, 38, 58, 86, 102, 104, 109], "ylim": 4, "hard_cut_q": 4, "beta": [4, 10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 141, 153], "lambda_const": 4, "best2013": 4, "r_0": 4, "frac": [4, 7, 20, 25, 29, 33, 36, 37, 86, 90, 98, 103, 160, 162], "lambda": [4, 16, 58, 69, 80, 86, 99, 101, 140], "reason": [4, 8, 17, 23, 39, 58, 68, 109, 147], "unitless": [4, 130], "angstrom": [4, 6, 20, 25, 28, 48, 49, 50, 51, 52, 54, 55, 59, 60, 62, 63, 64, 65, 66, 68, 71, 74, 79, 81, 86, 95, 113, 151, 160, 162, 163], "robert": [4, 38, 107], "gerhard": [4, 29], "hummer": [4, 29], "william": [4, 160], "eaton": 4, "fold": [4, 99, 112], "mechan": [4, 25], "atomist": [4, 111], "proceed": [4, 112], "nation": 4, "academi": 4, "scienc": [4, 8, 9, 13, 29, 108, 112], "110": [4, 141, 149], "44": [4, 86, 148, 149], "17874": 4, "17879": 4, "1073": 4, "pna": 4, "1311599110": 4, "radius_cut_q": 4, "unus": [4, 19, 36, 64, 68, 140], "fullfil": 4, "joel": 4, "franklin": 4, "patric": 4, "koehl": 4, "sebastian": 4, "doniach": 4, "marc": 4, "delaru": 4, "maximum": [4, 6, 10, 12, 13, 14, 15, 16, 17, 20, 24, 32, 37, 38, 49, 56, 58, 60, 64, 76, 86, 98, 99, 102, 106, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "likelihood": [4, 15, 17], "scale": [4, 6, 8, 17, 29, 60, 68, 102, 108, 146], "local": [4, 8, 22, 58, 76, 86, 131], "harmon": [4, 8, 11, 17, 141, 149], "landscap": 4, "nucleic": [4, 26, 86, 88, 113], "research": [4, 26, 39], "suppl_2": 4, "w477": 4, "w482": 4, "2007": [4, 13, 19, 108, 112, 160], "1093": [4, 26], "nar": [4, 26, 148], "gkm342": 4, "contact_matrix": [4, 10], "suppli": [4, 6, 7, 8, 9, 10, 13, 16, 17, 23, 25, 26, 28, 29, 32, 34, 35, 38, 43, 44, 51, 54, 56, 58, 60, 64, 69, 72, 73, 74, 75, 78, 79, 86, 92, 99, 103, 104, 109, 144, 146, 147], "alloc": [4, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "correct": [4, 24, 29, 32, 33, 36, 38, 49, 51, 58, 70, 79, 86, 90, 91, 99, 109, 146, 147, 151, 157], "fill": [4, 6, 10, 14, 20, 23, 36, 79, 99, 102, 132], "increas": [4, 6, 8, 17, 23, 34, 49, 58, 76, 86, 106, 109, 113, 146, 161], "hard_cut": 4, "basekwarg": 4, "observ": [4, 19, 20, 24, 38, 58, 86, 90, 98, 109, 160], "standard": [4, 6, 9, 13, 15, 17, 18, 23, 25, 26, 28, 31, 38, 42, 49, 50, 51, 54, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 86, 102, 105, 109, 111, 113, 125, 136, 139, 147, 149, 160, 162], "signatur": [4, 34, 79, 107], "func": [4, 23, 86, 88, 109, 114], "2d": [4, 10, 29, 30, 34, 86, 90, 99, 109, 163, 164], "accept": [4, 6, 8, 10, 17, 23, 25, 29, 32, 78, 85, 86, 90, 99, 109, 113], "soft_cut": 4, "radius_cut": 4, "mdanalysi": [5, 15, 18, 22, 39, 45, 46, 82, 84, 93, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 149, 150, 164], "experiment": [5, 11, 17, 36, 49, 68, 79, 147], "theoret": [5, 29], "packag": [5, 26, 27, 29, 34, 39, 40, 46, 51, 53, 58, 67, 68, 77, 79, 82, 85, 99, 109, 111, 112, 113, 114, 120, 124, 140, 150, 160, 164, 165], "literatur": [5, 6, 165], "rama_ref": [5, 9], "ramachandran": 5, "histogram": [5, 6, 23, 25, 28, 35, 37, 109], "were": [5, 6, 9, 10, 28, 32, 37, 42, 48, 49, 51, 56, 58, 64, 68, 75, 86, 87, 88, 90, 91, 92, 99, 107, 109, 112, 113, 120], "500": [5, 9, 13, 37, 48, 108], "taken": [5, 6, 9, 10, 17, 23, 29, 36, 37, 38, 40, 66, 70, 74, 79, 86, 90, 91, 95, 99, 104, 106, 109, 113, 148, 151, 158, 160], "lovell2003": [5, 9], "psi": [5, 9, 86, 90], "angl": [5, 20, 22, 24, 37, 38, 39, 40, 51, 60, 68, 80, 83, 86, 90, 91, 92, 99, 103, 108, 109, 113, 129, 130, 131, 139, 140, 141, 146, 149, 153, 157], "meshgrid": 5, "arang": [5, 29, 109, 163], "180": [5, 38, 51, 86, 90, 91, 99, 103, 113, 148], "z": [5, 6, 8, 13, 23, 29, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 90, 99, 103, 108, 109, 113, 132, 149, 151, 163], "contourf": 5, "15000": 5, "draw": [5, 17], "contour": [5, 9], "90": [5, 9, 83, 104, 109, 148, 149, 153, 157], "99": [5, 9, 38, 49, 50, 56, 125, 136], "figur": [5, 9, 29, 34, 36, 37, 68, 79, 162, 163], "region": [5, 6, 9, 17, 37, 98, 99], "janin_ref": [5, 9], "janin": [5, 86, 90], "chi_1": [5, 9], "chi_2": [5, 9], "sidechain": [5, 9, 86, 90], "360": [5, 23], "600": 5, "98": [5, 9, 111, 112, 148, 149], "2011": [6, 8, 19, 30, 31, 37, 107, 112], "repres": [6, 8, 13, 14, 20, 23, 29, 32, 33, 34, 35, 37, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 108, 109, 140, 146, 147], "volumetr": 6, "particular": [6, 13, 16, 17, 20, 23, 31, 34, 42, 44, 51, 71, 79, 84, 86, 91, 94, 99, 104, 113, 154, 160], "density_from_univers": 6, "density_from_pdb": 6, "bfactor2rmsf": 6, "solvent": [6, 35, 86, 92], "densityanalysi": 6, "unit": [6, 23, 28, 37, 40, 41, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 81, 83, 90, 92, 94, 99, 100, 102, 103, 106, 108, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 153, 155, 157, 158, 159], "cell": [6, 10, 28, 29, 51, 54, 56, 58, 60, 61, 64, 68, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 146, 153, 155, 157, 158, 159], "necessari": [6, 12, 23, 34, 42, 44, 48, 64, 75, 78, 82, 92, 99, 100, 103, 113, 140], "orient": [6, 37, 79, 108, 111, 149, 154, 165], "box": [6, 10, 19, 36, 40, 51, 54, 56, 58, 60, 64, 66, 67, 68, 79, 86, 95, 99, 100, 101, 103, 104, 106, 109, 113, 132, 146, 149, 151, 155], "practic": [6, 29, 40, 41], "compon": [6, 16, 17, 25, 39, 67, 69, 86, 89, 90, 103, 107, 112, 147, 162, 163, 165], "broken": [6, 86, 159], "across": [6, 36, 38, 86, 89, 98, 111, 113, 115, 116, 117, 118, 119, 153, 155], "remap": 6, "closest": [6, 42, 44], "solut": [6, 13, 20, 25, 35, 68, 108], "triclin": [6, 10, 51, 54, 56, 60, 83, 85, 86, 99, 103, 104, 109], "dodecahedron": 6, "truncat": [6, 56, 58, 109], "octahedron": 6, "studi": [6, 29, 37], "artifact": 6, "ow": [6, 38, 86, 92, 113, 131], "delta": [6, 31, 35, 37, 51, 60, 68, 70, 79, 100, 109], "convert_dens": 6, "tip4p": [6, 38, 92, 111, 160], "export": [6, 26, 58, 112, 113, 114, 165], "dx": [6, 162], "doubl": [6, 16, 19, 20, 23, 49, 63, 86, 90, 103, 146, 152], "oxygen": [6, 20, 31, 38, 49, 86, 87, 113], "measur": [6, 11, 17, 20, 30, 32, 33, 34, 38, 60, 103, 160], "rel": [6, 13, 23, 29, 36, 75, 82, 86, 88, 90, 99, 109, 110, 113, 149, 160, 165], "model": [6, 16, 17, 19, 23, 24, 29, 33, 47, 64, 74, 79, 89, 92, 98, 108, 111, 112, 133, 134, 137, 147, 160], "ambient": 6, "opendx": 6, "compat": [6, 36, 37, 74, 80, 86, 109, 149, 161, 165], "vmd": [6, 24, 25, 51, 64, 74, 86, 88, 100, 114, 120, 146, 165], "chimera": 6, "pymol": [6, 25, 86, 114, 120, 165], "manner": [6, 34, 37, 38, 76, 79, 146, 161], "metadata": [6, 13, 14, 17, 18, 58, 67, 86, 90, 161], "pad": [6, 23], "gridcent": 6, "xdim": 6, "ydim": 6, "zdim": 6, "3d": [6, 23, 29, 34, 54, 58, 92, 108, 162, 164], "updatingatomgroup": [6, 29, 86, 113], "everi": [6, 16, 17, 23, 32, 37, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 98, 102, 104, 106, 111, 113, 114, 131, 147, 151, 155], "bin": [6, 23, 26, 28, 35, 37, 109], "\u00e5ngstr\u00f6m": [6, 54, 60, 68, 160], "float32": [6, 10, 79, 83, 86, 92, 99, 103, 104, 109, 151], "edg": [6, 23, 28, 35, 49, 58, 103, 155], "empti": [6, 13, 42, 48, 51, 58, 60, 64, 66, 74, 75, 77, 79, 80, 86, 88, 91, 92, 94, 95, 102, 105, 109, 113, 114, 115, 116, 117, 118, 119, 133, 134, 136, 140, 141, 148, 149], "incorrectli": [6, 24, 66], "userwarn": [6, 136, 147], "pmda": 6, "parallel": [6, 14, 18, 23, 37, 82, 86, 99, 103, 110, 112, 113, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "gridbox": 6, "static": [6, 7, 37, 38, 51, 58, 59, 60, 63, 67, 68, 80, 86, 108, 109, 113, 138, 148], "h": [6, 20, 22, 23, 24, 26, 33, 38, 62, 86, 88, 91, 97, 102, 109, 113, 141, 146, 148, 149], "heavi": [6, 86, 90], "updat": [6, 16, 23, 24, 25, 28, 31, 38, 39, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 91, 102, 108, 111, 112, 113, 146, 165], "situat": [6, 37, 120], "limit": [6, 23, 26, 32, 36, 40, 51, 54, 57, 58, 60, 64, 68, 69, 72, 73, 75, 76, 88, 102, 147, 151, 152, 154, 156, 157, 158, 159, 163], "although": [6, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 104, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "respons": [6, 76], "ensur": [6, 19, 36, 37, 38, 58, 64, 75, 76, 79, 86, 89, 98, 104, 109, 111, 113], "encompass": [6, 104], "convert": [6, 10, 26, 29, 34, 40, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 79, 80, 85, 86, 88, 92, 94, 99, 101, 103, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 160], "invers": [6, 32, 108], "cubic": [6, 64, 141, 149], "bulk": [6, 160], "recov": [6, 108, 140], "underli": [6, 64, 68, 75, 77, 78, 79, 80, 83, 86, 90, 92, 98, 109], "probability_dens": 6, "similarli": [6, 18, 23, 25, 34, 35, 64, 75, 79, 85, 91, 99, 105], "multipli": [6, 86, 90, 101, 140], "volum": [6, 28, 37, 79, 83, 103, 148, 160], "dv": [6, 149], "voxel": 6, "prod": 6, "atom_count_histogram": 6, "thank": [6, 85, 112, 165], "fact": [6, 37, 38, 57, 86, 91], "griddata": 6, "just": [6, 13, 16, 17, 18, 23, 36, 38, 42, 46, 49, 51, 60, 64, 65, 80, 86, 88, 91, 92, 109, 111, 113], "site": [6, 35, 68, 77, 146, 149], "certain": [6, 17, 18, 23, 37, 38, 44, 79, 86, 91, 111, 113], "vicin": [6, 10, 99, 106], "near_wat": 6, "156": 6, "157": [6, 148], "305": [6, 148], "d_site": 6, "small": [6, 10, 13, 17, 19, 23, 29, 38, 49, 62, 88, 109], "explicitli": [6, 13, 16, 27, 40, 49, 50, 58, 60, 64, 68, 76, 78, 79, 92, 147, 150], "lig": 6, "com": [6, 8, 9, 11, 23, 62, 67, 86, 90, 108, 109, 149, 165], "ligand_select": 6, "extract": [6, 16, 23, 29, 37, 38, 40, 64, 68, 80, 91, 108, 109, 112, 132, 140], "ligand_com": 6, "abov": [6, 9, 19, 23, 24, 29, 37, 40, 44, 51, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 86, 102, 113, 146, 151, 162, 163], "ligand_wat": 6, "d_water": 6, "_set_user_grid": 6, "smin": 6, "smax": 6, "helper": [6, 72, 78, 110, 140], "umin": 6, "umax": 6, "staticmethod": [6, 79], "main": [6, 38, 49, 73, 148], "creation": [6, 42, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80, 91, 92, 144, 151], "regular": [6, 42, 44, 86, 88, 105, 109, 113, 141, 147], "lower": [6, 8, 17, 23, 25, 38, 41, 44, 58, 86, 90, 103, 109, 147], "upper": [6, 17, 23, 25, 34, 79, 109], "along": [6, 20, 23, 24, 28, 29, 32, 34, 37, 79, 86, 90, 99, 103, 106, 107, 108, 109, 147, 151], "meaning": [6, 76, 79, 86], "isdens": 6, "make_dens": 6, "nm": [6, 37, 47, 56, 58, 60, 67, 69, 70, 73, 79, 149, 160], "otherwis": [6, 8, 13, 18, 24, 29, 32, 36, 40, 42, 44, 58, 64, 66, 68, 79, 80, 86, 90, 92, 104, 105, 108, 109, 146], "touch": [6, 68], "histogramdd": 6, "1d": [6, 10, 23, 26, 36, 86, 90, 99, 103, 109], "front": [6, 13, 16], "left": [6, 8, 20, 24, 32, 33, 36, 68, 86, 88, 98, 100, 109, 113], "corner": [6, 86, 113], "convert_length": 6, "manipul": [6, 8, 36, 79, 83, 92, 110, 111, 165], "constructor": [6, 13, 18, 26, 60, 64, 68, 74, 91, 105, 109, 149], "hold": [6, 40, 44, 64, 79, 80, 83, 89, 104], "annot": [6, 34, 64], "readabl": [6, 40, 109], "understand": [6, 49, 67, 86, 93, 104, 109], "known": [6, 29, 43, 58, 79, 109, 111, 141, 160], "issu": [6, 8, 26, 27, 40, 42, 49, 51, 58, 60, 64, 68, 74, 79, 80, 86, 89, 99, 109, 113, 133, 136, 140, 141, 147, 152, 165], "griddataformat": 6, "right": [6, 20, 23, 33, 36, 54, 64, 74, 82, 86, 90, 109, 113], "awai": [6, 38, 86, 113], "becaus": [6, 10, 12, 32, 34, 36, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 86, 91, 92, 103, 109, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 160], "reliabl": [6, 32, 68, 79, 99, 151], "detect": [6, 49, 51, 57, 58, 60, 68, 78, 92, 109, 120, 122, 140, 156], "conveni": [6, 18, 23, 32, 34, 40, 44, 68, 86, 92, 114, 151, 160], "less": [6, 8, 19, 20, 23, 24, 32, 34, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 99, 103, 146], "demonstr": [6, 29, 88], "itself": [6, 13, 17, 18, 23, 24, 26, 35, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 109, 110, 111, 113, 120], "algebra": [6, 86, 113], "subtract": [6, 13, 36, 86], "saniti": 6, "sure": [6, 31, 42, 58, 82, 86, 90, 113, 165], "ndindex": 6, "check_compat": 6, "arithmet": 6, "scalar": [6, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 103, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "resampl": [6, 12, 17], "typeerror": [6, 36, 58, 78, 79, 80, 86, 90, 92, 109], "particl": [6, 10, 19, 29, 35, 37, 57, 58, 67, 86, 92, 98, 99, 104, 106, 129, 149, 155, 162, 163], "spc": [6, 38, 86, 113, 160], "tip3p": [6, 38, 160], "997": [6, 160], "cm": [6, 23, 28, 148, 160], "molar": [6, 160], "mol": [6, 23, 28, 47, 49, 62, 67, 68, 69, 111, 160], "runtimeerror": [6, 23, 58, 136], "unknown": [6, 134, 136, 137, 140, 150], "go": [6, 23, 32, 36, 86, 113], "back": [6, 13, 29, 32, 46, 48, 49, 58, 68, 78, 86, 92, 99, 106, 108, 109, 140, 156, 159, 160], "uniti": 6, "round": [6, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "multipl": [6, 13, 16, 20, 22, 23, 26, 34, 38, 41, 44, 58, 60, 64, 76, 77, 78, 79, 86, 90, 92, 100, 102, 105, 109, 112, 113, 114, 115, 116, 117, 118, 119, 151, 160, 162, 163], "default_format": 6, "file_format": [6, 86], "typequot": 6, "deduc": [6, 51, 54, 57, 58, 59, 60, 63, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 109, 137, 138], "preced": [6, 32, 38, 42, 78, 86, 88, 102, 113], "visual": [6, 17, 23, 26, 29, 33, 102, 112, 114, 120, 151], "pickl": [6, 26, 34, 57, 58, 68, 75, 76, 77, 82, 86, 92, 100, 101, 105, 109], "simpler": 6, "charact": [6, 51, 56, 60, 64, 65, 66, 70, 88, 100, 102, 105, 108, 109, 113, 115, 116, 117, 118, 119, 125, 146], "quot": 6, "parser": [6, 46, 86, 88, 90, 92, 93, 113, 132, 144, 145, 147, 148, 150], "namd": [6, 23, 51, 63, 64, 79, 92, 100, 111, 139, 147, 150, 165], "gridforc": 6, "backend": [6, 10, 110, 151, 152], "mdff": 6, "expect": [6, 17, 20, 32, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 88, 102, 108, 109, 113, 132, 146, 148, 153, 157], "appeas": 6, "them": [6, 9, 13, 16, 23, 27, 30, 32, 34, 40, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 91, 92, 99, 110, 111, 112, 113, 131, 146, 147, 156, 164], "interpol": [6, 114, 115, 116, 117, 118, 119], "spline": 6, "x1": [6, 17, 163], "x2": [6, 17, 49], "y1": [6, 163], "y2": 6, "z1": [6, 163], "z2": 6, "interpolation_spline_ord": 6, "cach": [6, 32, 49, 58, 91, 109], "better": [6, 19, 20, 36, 38, 49, 91, 92, 122, 151, 154, 157], "whenev": [6, 44, 79, 80], "recomput": 6, "interpolation_cv": 6, "todo": [6, 89, 98, 117], "usag": [6, 10, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 111, 148], "xx": 6, "yy": 6, "zz": 6, "mgrid": [6, 163], "75": [6, 23, 32, 34, 35, 58, 148, 149], "96": [6, 148, 163], "150": [6, 24, 65, 148], "ff": [6, 66, 140], "neg": [6, 13, 17, 34, 36, 49, 51, 54, 58, 60, 69, 72, 73, 75, 86, 89, 103, 109, 113, 129, 140], "especi": [6, 23, 38, 51, 68, 75, 86, 90, 109, 160], "scipi": [6, 10, 17, 20, 29, 34, 68, 106, 111, 112, 160, 164], "ndimag": 6, "map_coordin": 6, "constant": [6, 7, 8, 10, 20, 29, 42, 44, 79, 113, 149, 153, 155], "wherebi": 6, "outsid": [6, 23, 44, 86, 99, 102, 103, 104], "beyond": [6, 9, 29, 86, 90, 106], "rather": [6, 15, 17, 23, 37, 41, 66, 74, 80, 86, 90, 146, 159], "nearest": [6, 8, 13, 34, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 108], "elimin": [6, 113], "extrud": 6, "spline_filt": 6, "reset": [6, 57, 77, 90, 105, 109, 156], "irrevoc": 6, "warn": [6, 9, 28, 40, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 92, 109, 113, 140, 155, 156], "noth": [6, 23, 38, 89, 109, 151], "harm": 6, "othergrid": 6, "resample_factor": 6, "factor": [6, 13, 20, 29, 64, 65, 68, 86, 90, 92, 102, 108, 122, 146, 147, 160], "n_i": [6, 19, 25], "fewer": [6, 13, 68], "alter": [6, 17, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 90, 102], "rang": [6, 10, 23, 24, 35, 37, 39, 42, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 80, 86, 88, 98, 99, 102, 103, 104, 109, 113, 165], "creep": 6, "steadili": 6, "inward": 6, "extent": [6, 163], "regener": 6, "sai": [6, 36, 79, 85, 89, 109, 151], "portabl": [6, 112, 147, 150], "footnot": [6, 23, 109], "accomplish": 6, "compound": [6, 64, 86, 90, 159], "fragment": [6, 28, 33, 49, 60, 86, 90, 103, 113, 159], "fit": [6, 8, 14, 20, 23, 29, 33, 34, 36, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109, 111, 149, 151, 165], "properli": [6, 34, 36, 42, 61, 64, 75, 76, 79, 111, 150], "omit": [6, 40, 51, 54, 57, 58, 60, 62, 64, 66, 69, 71, 72, 73, 75, 78, 80, 105, 134], "clearli": [6, 23, 66], "actual": [6, 10, 17, 23, 29, 32, 34, 40, 79, 102, 109, 140, 149], "mattia": 7, "felic": 7, "palermo": [7, 34], "philip": [7, 19, 23, 112], "loch": 7, "2022": [7, 30, 141, 155], "dielectricconst": [7, 112], "temperatur": [7, 40, 48, 51, 54, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 80, 149, 160], "300": [7, 13, 19, 38, 48, 109, 162, 163], "make_whol": [7, 86, 103], "dipol": [7, 37, 86, 90, 112], "moment": [7, 23, 64, 68, 74, 79, 80, 86, 90, 112, 113, 129, 146], "boldsymbol": [7, 86, 90], "m": [7, 10, 15, 16, 17, 22, 23, 34, 37, 38, 86, 99, 103, 108, 109, 112, 149, 160], "sum_i": [7, 86, 90], "q_i": [7, 86, 90], "r_i": [7, 86, 90], "charg": [7, 24, 28, 49, 58, 60, 64, 65, 66, 79, 86, 90, 92, 113, 124, 127, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 146, 147, 149, 160], "varepsilon": 7, "langl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "rangl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "varepsilon_": 7, "v": [7, 9, 34, 37, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 103, 108, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 155], "k_b": 7, "tin": 7, "foil": 7, "usual": [7, 9, 39, 40, 48, 49, 68, 73, 77, 79, 90, 92, 103, 109, 140], "electrostat": 7, "handl": [7, 11, 17, 38, 49, 50, 51, 54, 55, 57, 58, 60, 62, 63, 64, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 82, 86, 88, 89, 90, 100, 103, 104, 105, 106, 125, 129, 136], "ewald": 7, "summat": 7, "techniqu": 7, "neumann1983": [7, 112], "kelvin": [7, 48], "disabl": [7, 38, 49, 56, 58, 64, 78, 102], "gain": 7, "speedup": [7, 58, 99], "direct": [7, 23, 26, 28, 29, 32, 34, 35, 37, 40, 54, 58, 67, 68, 72, 89, 99, 108, 131, 156, 157, 162, 163], "e\u00e5": [7, 86, 90], "m2": 7, "fluct": 7, "fluctuat": [7, 36, 112], "ep": [7, 13, 17, 34], "eps_mean": 7, "psf_triclin": 7, "dcd_triclin": 7, "diel": 7, "eugen": 8, "hruska": 8, "john": [8, 32, 36, 162, 163], "detlef": [8, 32, 36], "linear": [8, 9, 29, 32, 33, 39], "reduct": [8, 11, 17, 32], "eigenvector": [8, 19, 32, 86, 90], "collect": [8, 13, 17, 23, 26, 38, 75, 78, 79, 88, 89, 91, 103, 112, 151], "largest": [8, 25, 34, 162, 163], "eigenvalu": [8, 19, 32, 86, 90], "domin": [8, 19], "fundament": [8, 111], "difficult": [8, 26], "complex": [8, 17, 24, 38, 49, 95, 103, 106, 109, 165], "storag": [8, 23, 58, 67, 101], "sampl": [8, 9, 12, 13, 17, 20, 23, 29, 30, 31, 32, 36, 79], "equilibr": 8, "irrelev": 8, "porte2008": 8, "coifman2006": 8, "ferguson2011": 8, "rohrdanz2011": 8, "decompos": [8, 38, 108], "leav": [8, 17, 23, 24, 37, 98, 102], "epsilon": [8, 31, 90], "involv": [8, 24, 38, 86, 91, 99, 106, 140, 149], "neighbor": [8, 13, 19, 34, 35, 99, 106, 110], "trial": 8, "approach": [8, 19, 29, 38, 79, 98, 99, 105, 152, 153, 154, 155, 156, 157, 158, 159, 165], "dmap": 8, "embed": [8, 16, 17], "explicit": [8, 49, 76, 78, 99], "relationship": 8, "dimension": [8, 11, 14, 17, 24, 26, 29, 32, 37, 86], "howev": [8, 17, 23, 24, 32, 38, 40, 49, 50, 56, 58, 60, 72, 75, 76, 79, 80, 84, 86, 90, 92, 99, 113, 132, 147, 150, 151, 156, 159, 161], "isometri": 8, "vice": [8, 38, 89], "versa": [8, 38, 89], "emb": 8, "most": [8, 9, 23, 32, 34, 42, 49, 57, 58, 60, 66, 68, 75, 76, 77, 78, 79, 80, 84, 86, 90, 93, 103, 105, 109, 110, 111, 113, 114, 141, 150, 155, 159, 165], "relev": [8, 20, 40, 74, 83, 86, 99, 106], "diminish": 8, "rate": [8, 16, 17, 98, 102], "fall": [8, 42, 44, 64, 67, 68, 78, 99], "spectral": 8, "somewhat": [8, 68], "appar": 8, "equilibrium": [8, 29], "upper_limit": 8, "n_eigenvector": 8, "tight_layout": [8, 9], "num_eigenvector": 8, "inspect": [8, 23, 29, 32, 36, 109], "interpret": [8, 51, 100, 108, 109, 111, 148], "task": [8, 14, 102, 165], "approxim": [8, 23, 26, 29, 32, 34, 49, 58, 141], "euclidean": [8, 34, 36, 103], "diffusion_spac": 8, "anisotrop": 8, "kernel": [8, 17, 141], "decomposit": 8, "distancematrix": 8, "md": [8, 32, 37, 39, 49, 51, 53, 57, 60, 64, 70, 79, 92, 100, 112, 124, 147, 148, 150, 160, 162, 163], "rememb": [8, 86], "cost": [8, 104], "interv": [8, 32, 34, 51, 58, 60, 86, 99, 102, 103], "exclud": [8, 20, 23, 29, 35, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 86, 88, 92], "symmetr": [8, 17, 18, 23, 32, 34, 127], "give": [8, 13, 29, 34, 36, 37, 38, 40, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 91, 92, 99, 100, 105, 109, 111, 113, 151], "entir": [8, 19, 37, 38, 58, 80, 86, 102, 138, 146], "1eo": 8, "subject": [8, 20], "dist_matrix": 8, "ij": [8, 20, 34], "zero": [8, 17, 18, 34, 37, 51, 56, 58, 64, 74, 86, 90, 92, 99, 100, 101, 102, 103, 109, 130, 140], "diagon": [8, 17, 18, 99, 109], "often": [8, 29, 58, 60, 68, 79, 86, 98, 109, 113, 131, 147, 151], "calcrmsdrotationalmatrix": [8, 36, 107], "publish": [8, 11, 17, 36, 112, 165], "port": 8, "ben": 8, "herbst": 8, "willi": 8, "hereman": 8, "st\u00e9fan": 8, "van": [8, 23, 67, 108, 146, 148], "der": [8, 23, 67, 146, 148], "walt": 8, "introduct": [8, 32, 111], "11": [8, 10, 11, 17, 23, 26, 34, 36, 37, 50, 52, 53, 55, 56, 60, 62, 64, 65, 66, 68, 70, 74, 75, 76, 77, 83, 86, 91, 99, 103, 108, 109, 112, 113, 114, 130, 141, 148, 149, 160, 161], "2008": [8, 26, 112], "ronald": [8, 108], "coifman": 8, "st\u00e9phane": 8, "lafon": 8, "2006": [8, 108], "wavelet": 8, "url": [8, 9, 29, 67, 108, 109], "www": [8, 9, 15, 23, 62, 88, 108, 109, 165], "sciencedirect": [8, 9, 108], "articl": [8, 9, 29, 108], "pii": [8, 9, 108], "s1063520306000546": 8, "1016": [8, 9, 23, 98, 108, 111, 112], "acha": 8, "04": [8, 108, 148], "006": [8, 65], "andrew": 8, "ferguson": 8, "athanassio": 8, "panagiotopoulo": 8, "ioanni": 8, "kevrekidi": 8, "pablo": 8, "debenedetti": 8, "nonlinear": 8, "letter": [8, 23, 64, 65, 66, 86, 90, 109], "509": 8, "s0009261411004957": 8, "cplett": 8, "066": 8, "mari": 8, "rohrdanz": 8, "wenwei": 8, "zheng": 8, "mauro": 8, "maggioni": 8, "cecilia": 8, "clementi": 8, "reaction": [8, 23, 49], "134": [8, 30, 31, 86], "124116": 8, "1063": [8, 29, 37, 98], "3569857": 8, "dougla": [8, 36, 107, 112], "theobald": [8, 36, 107, 112], "rapid": [8, 107, 112], "quaternion": [8, 107, 110, 112], "characterist": [8, 20, 107, 112], "polynomi": [8, 37, 107, 112], "acta": [8, 34, 107, 108, 112], "crystallographica": [8, 107, 108, 112], "section": [8, 13, 17, 23, 36, 44, 58, 60, 64, 79, 86, 93, 108, 127, 131, 132, 134, 140, 141, 147], "61": [8, 64, 65, 107, 112, 148, 149, 162], "478": [8, 107, 112], "480": [8, 66, 107, 112], "jul": 8, "2005": [8, 23, 107, 108, 112], "1107": [8, 108], "s0108767305015266": 8, "henri": 9, "mull": 9, "2018": [9, 29, 33, 38, 112, 141], "desir": [9, 26, 29, 38, 39, 41, 48, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 78, 79, 80, 91, 102, 104, 106, 109, 156, 162, 163], "re": [9, 58, 62, 79, 86, 92, 108, 109, 110, 113, 131, 148], "phi_select": [9, 86, 90], "quick": [9, 165], "classic": [9, 68], "ramachandran1963": 9, "unlik": [9, 17, 37, 57, 58, 60, 67, 68, 77, 79, 86, 105], "those": [9, 13, 14, 24, 32, 34, 35, 38, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 113, 140, 141], "repeat": [9, 13, 16, 20, 38, 99, 109], "Then": [9, 23, 38, 42, 49, 149], "built": [9, 23, 57, 58, 68, 91, 105, 106, 149], "color": [9, 16, 23, 34, 162], "marker": 9, "background": [9, 77, 86, 90], "margin": 9, "yourself": [9, 109, 113], "prone": 9, "duplic": [9, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 94, 99, 106, 109, 113], "altloc": [9, 49, 64, 65, 86, 90, 113, 125, 133, 137, 146, 147], "janin1978": 9, "side": [9, 19, 23, 33, 64, 75, 86, 99, 103, 155, 159], "chain": [9, 22, 33, 35, 38, 64, 65, 66, 84, 92, 113], "furthermor": [9, 35, 79], "carefulli": [9, 23, 27, 38, 51, 146], "filter": [9, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102, 162, 163], "messag": [9, 13, 18, 23, 72, 102, 109], "few": [9, 18, 23, 32, 78, 86, 88, 92, 113], "mull2018": 9, "len": [9, 18, 34, 35, 38, 55, 62, 64, 74, 75, 86, 101, 102, 109, 113], "content": [9, 28, 32, 36, 40, 41, 64, 67, 74, 79, 83, 86, 90, 91, 92, 97, 109, 121, 132, 159], "c_name": [9, 30, 86, 90], "n_name": [9, 86, 90], "ca_nam": [9, 86, 90], "check_protein": 9, "legitim": 9, "carbon": [9, 22, 23, 86, 90, 98, 113, 148], "subset": [9, 23, 24, 26, 32, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 83, 86, 147], "suffic": 9, "polym": [9, 22, 113], "peptid": [9, 86, 90, 111], "cx": 9, "nt": [9, 38], "scope": [9, 29], "last": [9, 17, 23, 29, 34, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 102, 103, 105, 106, 108, 109, 111, 114, 138, 156, 162, 163], "still": [9, 18, 27, 37, 49, 51, 57, 58, 68, 77, 82, 85, 86, 90, 98, 104, 105, 109], "n_residu": [9, 86, 89, 90, 92], "activ": [9, 23, 65, 79, 99, 106], "scatter": [9, 16], "select_remov": 9, "ala": [9, 86, 113], "cy": [9, 38], "gly": [9, 86, 92, 113], "pro": 9, "ser": [9, 38], "thr": [9, 38, 113], "val": [9, 88, 90, 140], "select_protein": 9, "amino": [9, 30, 86, 90, 109], "adjust": [9, 13, 38, 48, 86, 90, 102], "enough": [9, 20], "locat": [9, 23, 34, 40, 41, 42, 64, 65, 86, 111, 113], "chi1": [9, 86, 90], "chi2": 9, "ramakrishnan": 9, "sasisekharan": 9, "stereochemistri": 9, "polypeptid": 9, "biologi": [9, 11, 17, 23, 34], "95": [9, 23, 32, 86, 148], "1963": 9, "s0022283663800236": 9, "s0022": 9, "2836": 9, "63": [9, 148, 149], "80023": 9, "jo\u00ebl": 9, "shoshanna": 9, "wodak": 9, "levitt": 9, "bernard": 9, "maigret": 9, "125": [9, 65], "357": 9, "386": 9, "1978": [9, 108], "0022283678904084": 9, "0022": 9, "78": [9, 64, 148, 149], "90408": 9, "technic": [9, 68, 109], "report": [9, 16, 19, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 165], "spidal": 9, "summer": 9, "reu": 9, "figshar": 9, "journal_contribut": 9, "technical_report_spidal_summer_reu_2018_dihedral_analysis_in_mdanalysi": 9, "6957296": 9, "6084": 9, "m9": 9, "v1": [9, 108, 162], "lovel": 9, "ian": 9, "w": [9, 19, 23, 32, 34, 36, 38, 56, 58, 60, 64, 77, 79, 100, 101, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 148], "davi": 9, "bryan": 9, "arendal": 9, "iii": [9, 108], "paul": [9, 23, 24, 98, 108], "de": [9, 105], "bakker": 9, "word": [9, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 113], "prisant": 9, "jane": 9, "richardson": 9, "\u03c8": 9, "\u03c6": 9, "c\u03b2": 9, "deviat": [9, 23, 26, 28, 34, 36, 66, 162], "437": 9, "450": 9, "prot": [9, 38, 48], "10286": 9, "rapidli": [10, 141], "sub": [10, 60, 69, 72, 73, 92, 149, 151], "awar": [10, 86, 104], "interfac": [10, 13, 16, 23, 26, 37, 58, 79, 80, 99, 105, 107, 109, 112, 118, 121], "member": [10, 13, 89, 91, 92, 109, 165], "search": [10, 19, 23, 38, 86, 99, 106, 110, 146, 165], "bigger": [10, 17, 19], "fulfil": 10, "criterion": [10, 34, 38, 111], "coord": [10, 14, 23, 74, 86, 87, 92, 99, 103, 104, 106, 146, 147], "15": [10, 23, 25, 35, 64, 65, 83, 86, 98, 109, 113, 148, 149], "returntyp": 10, "contact": [10, 19, 38, 95, 106, 107, 111, 148], "There": [10, 29, 49, 55, 67, 74, 75, 78, 79, 89, 103, 120, 151], "slower": [10, 68], "larger": [10, 56, 64, 66, 76, 86, 88, 89, 98, 99, 109, 146], "spars": [10, 25], "lil_matrix": 10, "account": [10, 23, 25, 29, 35, 36, 38, 86, 90, 95, 99, 106, 113, 140], "suppress_progmet": 10, "progress_meter_freq": 10, "offset": [10, 68, 69, 72, 73, 79, 82, 100, 101, 102, 109], "id": [10, 13, 17, 24, 31, 34, 37, 38, 44, 56, 60, 64, 66, 86, 90, 91, 98, 108, 109, 113, 122, 131, 132, 133, 137, 139, 140, 147, 149], "facilit": [10, 44, 79], "comparison": [10, 11, 29, 34, 36, 86, 88, 99, 112, 113, 148], "resids_a": 10, "resids_b": 10, "distance_arrai": [10, 25, 99], "union": [10, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 95, 99, 103, 106], "_scalartype_co": [10, 99, 103, 106], "serial": [10, 64, 65, 66, 84, 86, 96, 99, 104, 105, 109, 110, 113, 125, 137, 149, 151], "imag": [10, 35, 60, 86, 91, 99, 103, 104, 106, 110, 113, 159], "orthogon": [10, 32, 48, 60, 64, 65, 86, 99, 104, 108, 109, 155], "float64": [10, 90, 99, 103, 107, 108, 146], "prealloc": [10, 99], "speed": [10, 13, 19, 29, 38, 79, 86, 99, 102, 106, 108, 110, 160, 162], "unitcel": [10, 51, 54, 58, 60, 64, 65, 69, 72, 73, 74, 75, 79, 80, 83, 86, 99, 100, 103, 106, 109], "lx": [10, 86, 99, 103, 104, 109], "lz": [10, 86, 99, 103, 104, 109], "gamma": [10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 153], "avoid": [10, 36, 38, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 99, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 156], "repeatedli": [10, 23, 99, 109], "openmp": [10, 97, 99, 110, 152], "acceler": [10, 108], "13": [10, 11, 17, 23, 33, 35, 56, 64, 65, 76, 83, 86, 99, 102, 109, 149], "hint": [10, 99, 109], "self_distance_arrai": [10, 99], "loop": [10, 13, 16, 49, 99, 102, 103], "matteo": [11, 12, 13, 14, 15, 16, 17], "tiberti": [11, 12, 13, 14, 15, 16, 17, 112], "wouter": [11, 12, 13, 14, 15, 16, 17, 80], "boomsma": [11, 12, 13, 14, 15, 16, 17, 80, 112], "tone": [11, 12, 13, 14, 15, 16, 17], "bengtsen": [11, 12, 13, 14, 15, 16, 17, 112], "2015": [11, 17, 33, 34, 37, 98, 112], "2017": [11, 38], "maintain": [11, 27, 29, 38, 39, 80, 82, 89], "gmail": 11, "mtiberti": 11, "github": [11, 23, 38, 80, 99, 165], "\u1d43lindorff": 11, "larsen2009": [11, 17], "\u1d43tiberti2015": 11, "facil": [11, 17, 18], "cluster": [11, 17, 34, 111], "multivari": [11, 17], "distribut": [11, 17, 18, 23, 37, 39, 55, 104, 111], "converg": [11, 13, 17, 29, 32, 112], "he": [11, 17, 148], "ce": [11, 17, 148], "dre": [11, 17], "ces_converg": [11, 17], "dres_converg": [11, 17], "confdistmatrix": [11, 12], "covari": [11, 17, 32], "bootstrap": [11, 17], "procedur": [11, 13, 16, 20, 23, 49], "kresten": [11, 17], "lindorff": [11, 17, 112], "larsen": [11, 17, 112], "jesper": [11, 17], "ferkinghoff": [11, 17], "borg": [11, 17], "plo": [11, 17, 34, 112], "ONE": [11, 17], "2009": [11, 17, 111, 148], "1371": [11, 17, 34, 112], "pone": [11, 17], "0004203": [11, 17], "elena": [11, 17], "papaleo": [11, 17, 112], "softwar": [11, 17, 26, 51, 58, 91, 112, 113], "quantit": [11, 17, 112], "pcbi": [11, 17, 34, 112], "1004415": [11, 17, 112], "matric": [12, 13, 14, 16, 34, 103, 110], "encor": [12, 14, 39, 112], "bootstrapped_matrix": 12, "ensemble_assign": [12, 17], "drawn": [12, 17, 23, 32], "repetit": [12, 108], "triangularmatrix": [12, 13, 14, 16, 17, 18], "dissimilar": [12, 14, 34], "long": [12, 17, 23, 29, 37, 76, 86, 90, 102, 109, 161], "this_m": 12, "get_distance_matrix_bootstrap_sampl": 12, "distance_matrix": [12, 13, 16, 17], "ncore": [12, 13, 16, 17], "independ": [12, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 90, 92, 98, 110], "get_ensemble_bootstrap_sampl": 12, "serv": [13, 16, 64], "variou": [13, 16, 25, 29, 33, 36, 47, 58, 60, 67, 79, 87, 92, 110, 145, 147], "interchang": [13, 16], "ensembl": [13, 15, 16, 28, 29, 34, 39, 86, 111, 112], "affinitypropagationn": [13, 17], "allow_collapsed_result": [13, 16, 17], "thereof": [13, 16, 79], "merg": [13, 16, 17, 18, 36, 80, 86, 92, 99], "keep": [13, 16, 17, 23, 44, 50, 58, 65, 66, 79, 86, 90, 91, 102, 103, 109, 149, 155], "track": [13, 16, 58, 86, 91], "outer": [13, 16, 25, 86, 90, 113], "explor": [13, 16, 17, 111], "fly": [13, 16, 17, 36, 55, 76, 79, 109, 152], "sever": [13, 16, 22, 24, 29, 74, 76, 86], "collaps": [13, 16, 17], "clusterscollect": [13, 17], "clusteringcollect": 13, "dcd2": [13, 16, 17], "ens1": [13, 16, 17], "ens2": [13, 16, 17], "cluster_collect": 13, "illustr": [13, 16, 17, 82], "dbscan": [13, 17], "membership": [13, 89, 90], "breviti": [13, 34], "ensemble_membership": [13, 16], "elem_list": 13, "centroid": [13, 17, 23, 86, 162, 163], "idn": 13, "4th": [13, 99], "implicitli": [13, 86], "get_centroid": 13, "get_id": 13, "nativ": [13, 16, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 111, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152], "instal": [13, 16, 17, 23, 26, 29, 34, 39, 40, 58, 67, 68, 99, 111, 112], "affinitypropag": 13, "damp": 13, "max_it": [13, 49], "convergence_it": 13, "affin": [13, 16, 17], "propag": [13, 16, 17], "unchang": [13, 44, 48, 76, 109], "achiev": [13, 24, 29, 38, 82, 109], "add_nois": 13, "nois": 13, "min_sampl": 13, "auto": [13, 34, 51, 58, 60, 68, 88, 102, 114, 115, 116, 117, 118, 119], "leaf_siz": 13, "neighborhood": [13, 16], "ball_tre": 13, "kd_tree": 13, "brute": [13, 99], "nearestneighbor": 13, "pointwis": 13, "leaf": [13, 106], "balltre": 13, "ckdtree": [13, 106], "affect": [13, 32, 49, 86], "queri": [13, 83, 86, 88, 91, 95, 104, 106, 113], "natur": [13, 17, 26, 38], "sample_weight": 13, "n_sampl": 13, "inhibit": 13, "absolut": [13, 17, 54, 86, 88, 90, 108, 109, 113, 129, 162, 163], "kmean": [13, 17], "n_cluster": 13, "n_init": 13, "init": [13, 75, 79, 109, 155], "0001": 13, "random_st": 13, "copy_x": 13, "seed": [13, 163], "consecut": [13, 24, 25, 34, 37, 49, 64, 86, 98, 109, 113], "term": [13, 40, 49, 86, 91, 113, 114, 140], "inertia": [13, 86, 90], "random": [13, 23, 26, 29, 72, 79, 82, 108, 109], "smart": [13, 23, 49, 86, 88, 113], "k_init": 13, "gaussian": [13, 17, 19], "varianc": [13, 32], "n_featur": [13, 32], "increment": [13, 38, 66, 114, 115, 116, 117, 118, 119, 147, 161], "declar": [13, 109], "randomst": 13, "numer": [13, 29, 36, 40, 60, 86, 88, 91, 105, 113, 160], "accur": [13, 29, 32, 49, 146], "introduc": [13, 35, 44, 64, 89, 149, 161], "accepts_distance_matrix": 13, "encode_centroid_info": 13, "cluster_centers_indic": 13, "cython": [13, 16, 82, 91, 99, 103, 104, 107, 110], "perturb": 13, "affinityprop": 13, "lam": 13, "max_iter": 13, "ap": [13, 37], "paper": [13, 16, 39, 67, 108, 112], "brendan": 13, "frei": [13, 108], "delbert": 13, "dueck": 13, "toronto": 13, "315": 13, "972": 13, "976": 13, "februari": 13, "triangular": [13, 14, 16, 18, 109], "notic": [13, 14, 17], "asymmetr": [13, 51, 54, 58, 60, 69, 72, 73, 75], "much": [13, 17, 58, 79, 111, 151], "reach": [13, 17, 23, 38, 42, 44, 49, 88], "ye": [13, 112, 141], "conformational_distance_matrix": 14, "conf_dist_funct": 14, "superimposition_select": 14, "n_job": [14, 18], "pairwise_align": 14, "max_nbyt": 14, "set_rmsd_matrix_el": 14, "superimposit": 14, "build": [14, 20, 25, 28, 41, 68, 89, 91, 92, 111, 114, 122, 125, 128, 130, 131, 136, 137, 139, 140, 141, 146, 150, 161], "dataset": [14, 40, 41, 49, 58], "threshold": [14, 34, 42, 58, 99], "worker": [14, 18], "trigger": [14, 86, 109], "autom": [14, 23, 109], "temp_fold": 14, "joblib": 14, "readthedoc": 14, "io": [14, 58, 68, 79, 102, 105, 109, 120], "latest": [14, 58, 165], "html": [14, 62, 102, 108, 109, 140], "conf_dist_matrix": 14, "get_distance_matrix": [14, 17], "load_matrix": [14, 17], "save_matrix": [14, 17], "superimposition_subset": 14, "conf_dist_arg": 14, "conf_dist_kwarg": 14, "retriev": [14, 32, 91], "themselv": [14, 84, 150], "signific": [14, 66, 109], "npz": [14, 17, 18, 34, 72], "bi": [14, 148], "flatten": [14, 15, 23, 34, 54, 56, 109], "meant": [14, 64], "syntax": [14, 40, 46, 86, 109, 113], "rmsdmat": 14, "fit_coord": 14, "fit_weight": 14, "trm_indic": [14, 18], "corrispond": 14, "major": [14, 18, 31, 161], "analysi": [15, 18, 41, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 87, 90, 98, 102, 107, 109, 111, 112, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 165], "covariance_matrix": 15, "shrinkage_covariance_estim": 15, "ml_covariance_estim": 15, "chose": [15, 17], "uniform": [15, 23, 68, 108], "cov_mat": 15, "reference_coordin": 15, "coordiant": [15, 66, 99], "shrinkage_paramet": 15, "shrinkag": [15, 17], "stock": 15, "applic": [15, 30, 31, 34, 35, 37, 47, 57, 58, 60, 86, 94, 102, 104, 109, 113, 155], "portfolio": 15, "ledoit": 15, "wolf": 15, "empir": 15, "financ": 15, "matlab": [15, 34], "olivi": 15, "hi": [15, 38], "websit": 15, "net": [15, 86, 90], "ole2_abstract": 15, "htm": [15, 88, 108], "nump": 15, "stochasticproximityembeddingn": [16, 17], "stochast": [16, 17, 112], "proxim": [16, 17], "princip": [16, 17, 39, 69, 86, 90, 112], "red": [16, 23], "blue": [16, 23, 34, 57], "principalcomponentanalysi": [16, 17], "pca": [16, 39], "distance_cutoff": 16, "min_lam": 16, "max_lam": 16, "ncycl": 16, "nstep": 16, "10000": 16, "cycl": [16, 23, 102], "At": [16, 23, 29, 38, 64, 68, 80, 86, 105, 113, 129, 146, 148], "stochasticproxemb": 16, "stochasticproximityembed": 16, "rco": 16, "maxlam": 16, "minlam": 16, "stressfreq": 16, "dmitrii": 16, "rassokhin": 16, "dimitri": 16, "agrafioti": [16, 107, 112], "rule": [16, 58, 86, 90, 103, 113], "graphic": [16, 23, 108, 119, 120], "22": [16, 23, 34, 48, 64, 65, 88, 98, 114, 148, 149], "133": [16, 34, 37], "140": [16, 148], "spe": [16, 17], "compos": [16, 34, 149], "lern": 16, "stress": 16, "\u1d47lindorff": 17, "\u1d47tiberti2015": 17, "38279540": 17, "04524205": 17, "computation": [17, 29], "68070702": 17, "reus": [17, 62], "densiti": [17, 23, 35, 39, 149, 160, 162], "rmsd_matrix": 17, "merge_univers": [17, 18], "later": [17, 19, 23, 58, 80, 86, 90, 101, 106, 113, 149, 165], "dimensionality_reduct": 17, "reduce_dimension": 17, "necessarili": [17, 33, 80, 113], "exactli": [17, 32, 68, 79, 102], "twice": [17, 20, 104], "jensen": 17, "shannon": 17, "diverg": 17, "ln": 17, "signifi": 17, "contrast": [17, 86, 113], "kullback": 17, "leibler": 17, "unbound": 17, "cov_estim": 17, "estimate_error": 17, "bootstrapping_sampl": 17, "calc_diagon": 17, "likelyhood": 17, "ml": 17, "thu": [17, 28, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 90, 98, 110, 151, 155, 156], "estimat": 17, "comparis": 17, "d_": 17, "kl": 17, "int_": 17, "infti": [17, 20, 29], "x_i": [17, 86], "_p": 17, "denot": 17, "everyth": [17, 23, 38, 86, 102, 111, 165], "6889": 17, "89729056": 17, "greater": [17, 20, 24, 34, 38, 58, 86, 104, 113], "doesn": [17, 64, 83, 86, 99, 104, 109, 130], "anymor": 17, "clustering_method": 17, "clusteringmethod": 17, "latter": [17, 34, 35, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 102], "arrang": [17, 38, 109], "ens3": 17, "elabor": 17, "partit": [17, 108], "popul": [17, 20, 68, 75, 92, 109, 126, 127, 136, 143], "likewis": [17, 34, 99, 113], "45": [17, 148, 149], "20447236": 17, "25331629": 17, "dimensionality_reduction_method": 17, "dimensionalityreductionmethod": 17, "nsampl": [17, 20], "1000": [17, 20, 36, 37, 79, 86, 88, 101, 102, 113, 160], "simlar": 17, "reduced_coordin": 17, "pca_method": 17, "original_ensembl": 17, "window_s": 17, "window": [17, 20, 29, 37, 98, 102, 108, 119, 120], "gradual": 17, "number_of_fram": 17, "preference_valu": 17, "split": [17, 36, 37, 49, 58, 76, 86, 88, 92, 103, 109, 132, 138, 140, 152, 153, 154, 155, 156, 157, 158, 159], "ces_conv": 17, "48194205": 17, "40284672": 17, "31699026": 17, "25220447": 17, "19829817": 17, "14642725": 17, "09911411": 17, "05667391": 17, "clustering_ensemble_similar": 17, "cc": [17, 58], "ens1_id": 17, "ens2_id": 17, "discret": [17, 34, 98], "dj": 17, "cumulative_clustering_ensemble_similar": 17, "ens1_id_min": 17, "ens2_id_min": 17, "join": [17, 38, 88, 109, 114], "compris": [17, 34], "cumulative_gen_kde_pdf": 17, "embedded_spac": 17, "nensembl": 17, "ens_id_min": 17, "ens_id_max": 17, "kde": 17, "distinguish": [17, 147], "stage": 17, "stat": [17, 29, 102], "gaussian_kd": 17, "mixtur": [17, 79], "embedded_ensembl": 17, "dimred_ensemble_similar": 17, "kde1": 17, "resamples1": 17, "kde2": 17, "resamples2": 17, "ln_p1_exp_p1": 17, "ln_p2_exp_p2": 17, "ln_p1p2_exp_p1": 17, "ln_p1p2_exp_p2": 17, "continu": [17, 20, 24, 34, 37, 48, 76, 92, 98, 108, 113, 115, 116, 117, 118, 119], "liebler": 17, "dkl": 17, "_q": 17, "discrete_jensen_shannon_diverg": 17, "pa": [17, 148], "pb": [17, 148], "discrete_kullback_leibler_diverg": 17, "p_a": 17, "p_b": 17, "akin": 17, "dres_conv": 17, "gen_kde_pdf": 17, "harmonic_ensemble_similar": 17, "sigma1": 17, "sigma2": 17, "dhe": 17, "prepare_ensembles_for_convergence_increasing_window": 17, "fed": [17, 34], "divis": [17, 67], "tmp_ensembl": 17, "write_output": 17, "base_fnam": 17, "header": [17, 60, 64, 68, 71, 79, 83, 100, 105, 110, 115, 116, 117, 118, 119, 132, 149], "dat": [17, 19, 148], "nice": 17, "stdout": 17, "concaten": [17, 29, 76, 86, 89, 99, 105, 108, 113], "basenam": 17, "parallelcalcul": 18, "request": [18, 50, 78, 79, 102, 156, 165], "nrun": [18, 20], "__call__": [18, 85, 151, 154, 157, 158, 159], "multiprocess": [18, 151, 162, 163], "manag": [18, 23, 44, 57, 58, 64, 68, 75, 77, 79, 91, 100, 101, 102, 105, 106, 112, 120, 151, 152], "queue": 18, "fetch": [18, 61, 91], "loadfil": 18, "behav": [18, 23, 44, 81, 86, 91, 100, 101, 113], "memor": 18, "though": [18, 23, 38, 44, 60, 76, 141], "as_arrai": 18, "loadz": 18, "fname": [18, 100, 101], "compress": [18, 34, 50, 55, 58, 63, 64, 65, 66, 67, 68, 73, 74, 76, 79, 101, 105, 109, 111], "savez": [18, 20], "indec": 18, "yield": [18, 33, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 101], "trm_indices_diag": 18, "trm_indices_nodiag": 18, "cutil": 18, "purermsd": 18, "coordsi": 18, "coordsj": 18, "atomsn": 18, "summass": 18, "benjamin": [19, 112], "hall": [19, 112], "ucl": 19, "uk": [19, 38, 55, 127], "hall2007": 19, "cookbook": 19, "gnmexampl": 19, "gnmanalysi": 19, "reportvector": 19, "txt": 19, "zip": [19, 37, 99, 111], "outputfil": 19, "samantha": [19, 112], "kay": [19, 112], "andi": [19, 112], "pang": [19, 112], "rafael": [19, 112], "perera": [19, 112], "biggin": [19, 112], "character": [19, 29, 98, 112], "frequenc": [19, 24, 38, 112], "american": [19, 30, 31], "societi": [19, 30, 31, 108], "129": [19, 112, 141, 149], "11394": [19, 112], "11401": [19, 112], "17715919": 19, "ja071797i": 19, "bonus_group": 19, "novel": [19, 98, 112], "monitor": [19, 20, 102], "identifi": [19, 24, 25, 26, 29, 34, 44, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 90, 104, 109, 130, 147, 150], "enm": 19, "popular": [19, 64, 79], "drug": 19, "lead": [19, 29, 38, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 109, 148, 151], "No": [19, 36, 57, 60, 78, 85, 109, 136, 138, 146, 148, 149, 151], "closecontactgnmanalysi": 19, "generate_output": 19, "privat": [19, 44], "_generate_output": 19, "parent": [19, 38, 44, 58, 85, 89], "generate_kirchoff": 19, "kirchhoff": 19, "neighbour": [19, 35, 49, 104], "kirchoff": 19, "sqrt": [19, 36, 86, 90, 103, 162], "n_j": 19, "massweight": 19, "entri": [19, 26, 28, 30, 35, 40, 44, 56, 60, 64, 66, 79, 86, 89, 90, 91, 92, 99, 106, 109, 114, 115, 116, 117, 118, 119, 136, 140, 160], "generate_grid": 19, "6x": 19, "smallish": 19, "order_list": 19, "scrambl": 19, "backup_fil": 19, "richard": [20, 21, 29, 33, 98], "gower": [20, 21, 33, 98, 112], "2014": [20, 21, 23, 26, 37, 67, 98, 112, 162, 163], "hbond": [20, 24, 38, 39, 48, 98], "c_x": 20, "startpoint": 20, "t_0": [20, 29, 37, 98], "geometr": [20, 24, 34, 37, 38, 86], "criteria": [20, 24, 51, 54, 58, 60, 69, 72, 73, 75], "lifetim": [20, 24, 37, 72, 98], "behaviour": [20, 37, 38, 42, 49, 51, 56, 68, 78, 86, 88, 91, 98, 109, 113, 156], "h_": 20, "subscript": 20, "intermitt": [20, 24, 37, 110], "attach": [20, 40, 42, 79, 86, 90, 92, 109], "whilst": [20, 68, 79, 98], "break": [20, 34, 60, 86, 103, 159], "subsequ": [20, 24, 29, 64, 80, 104, 151, 155], "reform": 20, "tau_x": 20, "int_0": [20, 35], "dt": [20, 29, 37, 42, 44, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 88], "exponenti": [20, 33, 102], "expon": 20, "a_1": 20, "exp": [20, 33, 88, 160], "tau_1": 20, "a_2": 20, "tau_2": 20, "a_3": 20, "tau_3": 20, "expoenti": 20, "a_n": 20, "limits_": 20, "a_i": [20, 33], "gowers2015": [20, 98], "donor": [20, 24, 38, 149], "acceptor": [20, 24, 38, 149], "wish": [20, 23, 48, 74, 92, 99], "find_hydrogen_donor": 20, "waterpsf": 20, "waterdcd": 20, "isn": [20, 32, 58, 105], "present": [20, 23, 24, 37, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 71, 72, 73, 74, 75, 79, 80, 83, 86, 89, 90, 91, 98, 103, 125, 130, 131, 134, 136, 138, 140], "sol": [20, 23, 24, 37, 38, 48, 56, 86, 92, 131, 149], "dummi": [20, 92, 148], "address": [20, 58], "hidx": 20, "aidx": 20, "permit": [20, 109], "consider": [20, 24, 29, 98], "strictli": [20, 56, 58, 76, 83], "intermolecular": [20, 148], "dist_crit": 20, "angle_crit": 20, "sample_tim": 20, "control": [20, 23, 26, 29, 38, 42, 49, 88, 105, 108, 113, 141, 151], "curv": [20, 34], "a1": [20, 35, 65], "tau1": [20, 37], "tau2": [20, 37], "a2": [20, 35, 65], "tau3": 20, "tau": [20, 24, 29, 37, 98], "solv": [20, 32], "130": [20, 113], "gather": [20, 23], "reli": [20, 66, 75, 98, 146], "frequent": [20, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trz_psf": [20, 33], "trz": [20, 33, 79, 82, 84], "hn": [20, 38], "hb_ac": 20, "hydrogenbondautocorrel": 20, "bond_typ": 20, "equat": [20, 155], "grab": 20, "ro": 20, "time_cut": 20, "connect": [20, 25, 34, 35, 38, 64, 65, 71, 86, 90, 91, 92, 99, 109, 111, 137, 138, 141, 142, 147, 149], "ie": [20, 33, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 91, 92, 103, 146], "mask": [20, 35, 68, 75, 79, 86, 109], "amount": [20, 32, 38, 48, 68, 90, 151], "versionchang": [20, 23, 34, 38, 60, 64, 86, 89, 90, 91, 107, 144, 146], "save_result": [20, 34], "p_guess": 20, "decai": [20, 33, 37], "leastsq": 20, "coeffici": [20, 29, 33, 37, 48, 155], "defit": 20, "tripl": [20, 49, 103, 108], "infodict": 20, "mesg": 20, "ier": 20, "hydrogenbond": [21, 37, 39, 112], "lili": [22, 23], "wang": [22, 23], "bansal2000": 22, "sugeta1967": 22, "quantifi": [22, 34, 112], "c\u03b1": 22, "twist": [22, 26], "rise": [22, 26, 37], "virtual": [22, 76, 86, 92, 108, 146, 149], "torsion": [22, 31, 39, 65, 91, 141, 147], "helix": [22, 112], "bend": [22, 141], "success": [22, 49, 57, 58, 68, 77, 82, 105, 108], "sugeta": 22, "miyazawa": 22, "1967": 22, "bond": [22, 23, 31, 32, 33, 35, 37, 38, 40, 48, 49, 60, 62, 64, 71, 85, 86, 90, 91, 92, 98, 99, 103, 112, 113, 125, 129, 130, 131, 133, 134, 136, 139, 140, 141, 142, 146, 149, 150, 159], "biopolym": 22, "673": 22, "679": 22, "bansal": [22, 112], "kumar": [22, 34, 112], "velavan": [22, 112], "2000": [22, 79, 108, 112], "characteris": [22, 112], "biomol": [22, 112], "struct": [22, 112], "dyn": [22, 112], "811": [22, 112, 148], "819": [22, 112], "helix_analysi": 22, "hel": 22, "resnum": [22, 36, 49, 86, 90, 92, 113, 122, 133, 141, 147], "161": 22, "187": [22, 51], "summari": [22, 112], "helanal2": 22, "160": [22, 36, 111], "200": [22, 44, 49, 108, 148], "230": 22, "carri": [22, 37, 39, 108, 160, 164], "hel_xyz": 22, "ref_axi": 22, "smart1993": 23, "smart1996": 23, "ion": [23, 37, 109, 113, 146], "channel": [23, 86, 90, 165], "pore": 23, "transport": [23, 29], "stelzl2014": 23, "holeprogram": 23, "osmart": 23, "apach": 23, "ex": 23, "pdb_hole": 23, "profil": [23, 27, 28, 111], "create_vmd_surfac": 23, "visualis": [23, 33], "tk": 23, "consol": [23, 37, 102], "sphpdb": 23, "sph": 23, "waal": [23, 146, 148], "radii": [23, 38, 66, 86, 90, 129, 130, 138, 146, 147, 148], "vdwradii_fil": 23, "simple2": 23, "rad": [23, 99], "symlink": 23, "infil": 23, "keep_fil": 23, "delet": [23, 64, 92], "wrong": [23, 51, 88, 108, 109, 113, 146], "mind": [23, 57, 86], "holeanalysi": 23, "cpoint": 23, "cvect": 23, "becom": [23, 32, 33, 35, 40, 56, 68, 80, 86, 109, 137, 157, 160], "runtim": [23, 68], "multipdb_hol": 23, "h2": [23, 24, 31, 49, 62], "delete_temporary_fil": 23, "temporari": [23, 86], "sos_triangl": 23, "displai": [23, 58, 80, 91, 102, 109, 112], "triangul": 23, "anim": 23, "hole_surfac": 23, "tcl": [23, 86, 119, 120], "hole_surface_subsampl": 23, "command": [23, 26, 39, 60, 86, 92, 111, 112, 120, 165], "stride": [23, 67, 79, 109], "inclus": [23, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 113], "come": [23, 38, 64, 79, 92, 111, 146, 151], "prmtop": [23, 24, 68, 147, 150], "frame0": 23, "trim": 23, "line": [23, 24, 29, 37, 41, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 80, 99, 100, 101, 102, 105, 109, 114, 115, 116, 117, 118, 119, 125, 131, 136, 137, 138, 140, 148, 162, 163], "menu": 23, "beg": 23, "render": [23, 34, 86], "caviti": [23, 37], "pdbfile": [23, 26, 47, 92], "card": [23, 50, 79, 111, 122, 147], "brookhaven": [23, 26, 79, 111, 147], "databank": [23, 26, 111], "someth": [23, 26, 37, 44, 102, 109, 114], "hetatm": [23, 64, 65, 66, 86, 90, 136, 137, 138], "record": [23, 38, 44, 51, 60, 62, 64, 65, 68, 74, 83, 86, 90, 102, 113, 134, 136, 137, 138, 140, 146, 147, 148], "infile_text": 23, "outfil": 23, "pars": [23, 26, 40, 48, 49, 56, 60, 62, 64, 67, 86, 88, 93, 113, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 162, 163], "collect_hol": 23, "sphpdb_file": 23, "sphere": [23, 37, 86, 113], "occup": [23, 49, 64, 65, 90, 125, 133, 136, 137, 147], "qss": 23, "dot": [23, 103, 108, 109, 113], "sph_process": 23, "simple2_rad": 23, "bare": 23, "suffici": [23, 37, 38, 44, 51, 60, 80, 88, 146], "tmpdir": 23, "shorten": 23, "purpos": [23, 109], "tight": [23, 102], "constrict": 23, "smaller": [23, 28, 32, 34, 64, 66, 98, 104], "end_radiu": 23, "center_of_geometri": [23, 25, 86], "55": [23, 38, 49, 64, 65, 86, 92, 105, 146, 148, 149], "li": [23, 86, 99, 104, 106, 148], "gramicidin": 23, "great": [23, 80], "sensit": [23, 34, 49, 86, 113, 131], "easi": [23, 40, 102, 112], "lie": [23, 86, 99, 103], "Or": [23, 44, 83, 86], "counter": [23, 102], "ignore_residu": 23, "refin": 23, "far": [23, 156], "infal": 23, "random_se": 23, "dai": 23, "reproduc": 23, "dure": [23, 38, 40, 41, 44, 49, 72, 74, 77, 82, 86, 90, 104, 106, 109, 129, 155, 156], "wildcard": 23, "hand": [23, 37, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 89, 90, 114], "output_level": 23, "contemporari": 23, "ditto": 23, "plu": 23, "conduct": [23, 165], "mirror": [23, 108], "charmm": [23, 30, 31, 50, 51, 60, 64, 66, 68, 79, 86, 88, 92, 100, 111, 113, 114, 120, 122, 139, 140, 146, 147, 148, 150, 160, 165], "tag": [23, 34, 39, 54, 102, 165], "grep": 23, "dcd_step": 23, "dcd_iniskip": 23, "recarrai": [23, 26, 38], "picki": 23, "doubt": 23, "diagnost": 23, "mdakit": 23, "wat": 23, "tip": 23, "hoh": 23, "cl": [23, 83, 109, 148], "write_input_fil": 23, "logfil": [23, 26, 102], "inp": 23, "arrau": 23, "versionad": [23, 60, 83, 86, 90, 91, 92, 98, 138, 144, 146], "bin_radii": 23, "width": [23, 28, 34, 56, 66, 74, 102, 109], "monoton": [23, 58, 76], "rightmost": [23, 108], "min": [23, 51, 54, 58, 60, 69, 72, 73, 75, 104, 109], "max": [23, 29, 34, 51, 54, 58, 60, 69, 72, 73, 75, 86, 88, 100, 104, 109, 113, 162], "dot_dens": 23, "no_water_color": 23, "one_water_color": 23, "green": [23, 29], "double_water_color": 23, "smooth": [23, 102], "facet": 23, "mont": [23, 160], "carlo": [23, 160], "flat": [23, 34, 38, 107, 149, 162], "field": [23, 30, 31, 37, 40, 41, 54, 56, 64, 65, 66, 68, 74, 79, 86, 88, 105, 111, 113, 125, 132, 133, 134, 140, 149, 162, 163], "guess_cpoint": 23, "histogram_radii": 23, "aggreg": [23, 38, 58], "min_radiu": 23, "over_order_paramet": 23, "order_paramet": 23, "ordereddict": 23, "cmap": [23, 86, 90, 91, 149], "viridi": 23, "linestyl": 23, "y_shift": 23, "legend_loc": 23, "zeta": [23, 31], "displac": [23, 32, 37, 39, 112, 162, 163], "clearer": 23, "plot3d": [23, 26], "r_max": 23, "stack": [23, 26, 35], "axes3d": 23, "plot3d_order_paramet": 23, "mpl_toolkit": 23, "mplot3d": 23, "plot_mean_profil": 23, "fill_alpha": 23, "n_std": 23, "opac": 23, "area": 23, "plot_order_paramet": 23, "aa": [23, 36, 38, 88, 109, 111, 148, 162], "goodfellow": 23, "wallac": 23, "biophys": [23, 98, 112], "65": [23, 32, 148, 149], "2455": 23, "2460": 23, "1993": 23, "s0006": 23, "3495": 23, "93": [23, 148, 149], "81293": 23, "joseph": [23, 162, 163], "neduvelil": 23, "xiaonan": 23, "mark": [23, 76, 120, 162, 163], "sansom": [23, 112, 162, 163], "14": [23, 28, 36, 48, 60, 64, 65, 78, 83, 86, 113, 148, 149, 160], "354": 23, "1996": [23, 37, 148], "s0263": 23, "7855": 23, "97": [23, 148], "00009": 23, "luka": 23, "stelzl": 23, "fowler": 23, "gate": 23, "occlud": 23, "laci": 23, "426": [23, 65], "735": 23, "751": 23, "jmb": [23, 111], "024": [23, 65], "andcr": 23, "eat": 23, "extra": [23, 38, 66, 70, 92, 147], "principl": [23, 68, 80], "patchi": 23, "recogn": [23, 58, 60, 64, 68, 78, 79, 84, 86, 88, 109, 141, 146, 149, 150], "overcom": 23, "check_and_fix_long_filenam": 23, "max_length": 23, "70": [23, 148, 149], "make_symlink": 23, "relpath": 23, "safe": [23, 58, 75], "short": [23, 29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 111], "tmp": 23, "curdir": 23, "trick": [23, 32], "recompil": 23, "run_hol": 23, "set_up_hole_input": 23, "write_simplerad2": 23, "nremark": 23, "57": [23, 86, 149], "ob": 23, "amber": [23, 38, 59, 79, 84, 88, 90, 92, 131, 146, 147, 148, 150, 160, 165], "weiner": 23, "et": [23, 148], "al": [23, 108, 148], "1984": [23, 90], "jac": [23, 112], "vol": 23, "106": [23, 148], "pp765": 23, "768": 23, "nvdwr": 23, "85": [23, 148, 149], "00": [23, 62, 65, 102, 109], "asn": [23, 38], "gln": [23, 38, 113], "odd": [23, 56, 108], "xplor": [23, 92, 111, 139, 147], "e2": [23, 86, 90], "d2": 23, "lone": [23, 109], "sulphur": 23, "lp": [23, 33], "funni": 23, "hydrat": [23, 113], "hill": 23, "2001": 23, "81": [23, 109, 149], "hydrogen": [23, 31, 33, 37, 38, 48, 49, 62, 86, 92, 98, 112, 113, 140, 146], "ga": [23, 108, 148], "1h": 23, "2h": 23, "3h": 23, "molqpt": 23, "nbond": 23, "2002": [23, 32], "smith": [24, 98, 112], "2019": [24, 98, 112, 141], "plugin": [24, 74, 100], "donors_sel": 24, "hydrogens_sel": 24, "acceptors_sel": 24, "d_h_cutoff": 24, "d_a_cutoff": 24, "d_h_a_angle_cutoff": 24, "update_select": [24, 38, 86], "hba": 24, "tip3": 24, "h1": [24, 49, 62, 146], "oh2": [24, 37, 38, 87], "guess_hydrogen": 24, "guess_acceptor": 24, "prior": [24, 34, 76, 98, 141], "slightli": [24, 58, 79], "protein_hydrogens_sel": 24, "protein_acceptors_sel": 24, "water_hydrogens_sel": 24, "water_acceptors_sel": 24, "tau_timeseri": [24, 37, 98], "correctli": [24, 29, 32, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 91, 109, 112, 125, 136], "absent": [24, 54, 86, 98, 113], "identif": [24, 31, 38, 39], "interact": [24, 37, 38, 90, 91, 111, 112, 140, 141, 149, 151], "count_by_id": 24, "uniqu": [24, 27, 34, 51, 86, 89, 90, 109, 113, 140, 160], "occurr": 24, "count_by_tim": 24, "count_by_typ": 24, "max_charg": 24, "o1": [24, 65], "potential_acceptor": 24, "capabl": [24, 27, 68, 79, 135], "particip": [24, 38], "quickli": [24, 32, 66], "guess_donor": 24, "potential_donor": 24, "max_mass": 24, "min_charg": 24, "min_mass": 24, "potential_hydrogen": 24, "tau_max": [24, 37, 98], "window_step": [24, 98], "autocorrel": [24, 33, 37, 39, 110], "hydrogenbondlifetim": 24, "That": [24, 29, 36, 37, 42], "yet": [24, 37, 58, 88, 94, 108, 152], "autcorrel": 24, "leafletfind": 25, "michaud": [25, 112, 165], "agrawal2011": [25, 112, 165], "lipid": [25, 37, 86, 98, 111, 112, 113, 120, 162, 163], "bilay": [25, 98, 111, 120], "planar": 25, "undul": 25, "vesicl": [25, 163], "membran": [25, 37, 98, 111, 112, 154, 162, 163], "inner": [25, 32, 86, 107, 108, 113], "radius_of_gyr": [25, 86, 90, 111], "script": [25, 66, 111, 117, 118, 151, 160], "mdanalysiscookbook": 25, "optimize_cutoff": 25, "slow": [25, 37, 49, 68, 101, 102, 106], "heurist": [25, 109], "phosphat": 25, "subgraph": 25, "head": 25, "po4": [25, 162, 163], "deem": 25, "fastest": [25, 105], "routin": [25, 56, 99], "leaflet0": 25, "leaflet1": 25, "longer": [25, 38, 48, 52, 64, 68, 70, 74, 86, 113, 131, 140], "component_index": 25, "groups_it": 25, "write_select": [25, 86], "pml": [25, 86, 118, 120], "ndx": [25, 86, 116, 120], "gromac": [25, 29, 38, 40, 41, 44, 56, 58, 67, 69, 72, 73, 76, 79, 86, 88, 92, 103, 104, 110, 111, 114, 120, 128, 131, 138, 147, 148, 149, 150, 162, 163, 165], "selectionwrit": [25, 114, 115, 116, 117, 118, 119, 120], "dmin": 25, "dmax": 25, "max_imbal": 25, "disconnect": 25, "n_0": 25, "n_1": 25, "mathrm": [25, 28, 86, 90, 160], "pick": [25, 69, 72, 73, 108, 120], "balanc": 25, "scan": [25, 60], "stepsiz": 25, "optimum": 25, "die": 25, "realli": [25, 38, 68, 149], "ought": 25, "robust": 25, "elizabeth": [26, 30, 31], "den": [26, 30, 31, 111, 112], "restrict": [26, 37, 79, 103, 109, 141, 149], "unmaintain": 26, "906": 26, "help": [26, 109, 111, 113], "lu2003": 26, "lu2008": 26, "xiang": 26, "jun": 26, "lu": [26, 148], "wilma": 26, "olson": 26, "3dna": 26, "rebuild": [26, 49], "5108": 26, "5121": 26, "09": [26, 111, 160], "gkg680": 26, "versatil": 26, "protocol": [26, 40, 75, 100, 101], "1213": 26, "1227": 26, "1038": 26, "nprot": 26, "104": [26, 112], "dna": 26, "x3dnatraj": 26, "pdb_x3dna": 26, "bashrc": 26, "x3dna_ensembl": 26, "355d": 26, "bp": [26, 31], "basepair": [26, 30, 31], "shear": [26, 108], "stretch": 26, "stagger": 26, "buckl": 26, "propel": 26, "slide": [26, 49], "tilt": 26, "roll": [26, 92], "xdna_ensembl": 26, "opt": 26, "instruct": [26, 29, 32, 39, 58, 99], "x3dna_param": 26, "bp_step": 26, "par": 26, "deal": [26, 44, 46, 79, 129, 134, 147], "outdir": 26, "gzip": [26, 58, 64, 68, 74, 79, 105, 109, 111], "mean_std": 26, "bass": 26, "png": [26, 34, 162, 163], "parameter_nam": 26, "cpickl": 26, "sorted_profiles_it": 26, "std": 26, "understood": [26, 79, 86, 90, 113], "sequenti": [26, 34, 56, 66, 79, 90, 113, 137, 147, 155, 156], "run_x3dna": 26, "applicationerror": [26, 94], "regularli": 27, "nevertheless": [27, 72], "sometim": [27, 29, 38, 64, 72, 83, 151], "discuss": [27, 68, 79, 89, 108, 112, 141, 162, 163, 165], "743": 27, "x3dna": 27, "helicoid": 27, "orthoromb": 28, "canon": [28, 79, 86, 113], "nvt": 28, "binsiz": 28, "25": [28, 32, 64, 65, 66, 86, 108, 148, 149], "segment": [28, 29, 31, 35, 76, 86, 88, 89, 90, 92, 94, 95, 113, 122, 124, 126, 127, 133, 141, 143, 147, 159], "resolut": [28, 86, 113, 163], "mass_dens": 28, "mass_density_stddev": 28, "charge_dens": 28, "charge_density_stddev": 28, "po": [28, 54, 56, 148], "pos_std": 28, "char": [28, 95, 109], "char_std": 28, "slice_volum": 28, "hist_bin_edg": 28, "futur": [28, 29, 49, 86, 113, 140, 148, 160], "lden": 28, "bug": [28, 68, 104, 161, 165], "caus": [28, 40, 42, 74, 86, 103, 113, 159], "previous": [28, 32, 39, 40, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 106, 146, 160], "histrogram": 28, "onward": [28, 142, 151], "docstr": [28, 34, 109], "hugo": 29, "macdermott": 29, "opeskin": 29, "einstein": [29, 155], "relat": [29, 34, 38, 40, 86, 99, 108, 155], "brownian": 29, "motion": [29, 32, 112, 154, 155], "behind": [29, 111], "maginn2018": 29, "express": [29, 54, 86, 88, 113], "formula": [29, 112, 160], "bigg": 29, "sum_": [29, 35, 36, 37, 86, 90], "t_": 29, "vari": [29, 42, 58, 64, 77, 129], "lag": [29, 37, 98, 102], "le": [29, 86, 90, 149], "tau_": 29, "therebi": 29, "maxim": [29, 34], "intens": 29, "fourier": [29, 141, 149], "fft": 29, "calandri2011": [29, 112], "buyl2018": [29, 112], "tidynam": [29, 112], "importerror": [29, 40, 67, 68], "citat": [29, 164], "unwrap": [29, 36, 60, 86, 90, 103, 151, 157], "despit": [29, 91, 156], "plan": [29, 109], "meantim": 29, "gmx": 29, "trjconv": 29, "nojump": [29, 151], "flag": [29, 60, 67, 75, 80, 83, 86, 100, 106, 109, 131, 140, 147, 154], "movement": [29, 36, 37, 44], "undergo": 29, "walk": 29, "random_walk": 29, "random_walk_topo": 29, "einsteinmsd": 29, "msd_type": 29, "let": [29, 34, 58], "lagtim": 29, "lc": 29, "black": 29, "slope": 29, "middl": 29, "ballist": 29, "poorli": [29, 51], "confirm": 29, "reccomend": 29, "loglog": 29, "d_d": 29, "lim_": 29, "60": [29, 36, 47, 64, 65, 149], "linregress": 29, "start_tim": 29, "start_index": 29, "end_tim": 29, "linear_model": 29, "end_index": 29, "stderr": [29, 102], "dim_fac": 29, "msd1": 29, "msd2": 29, "u1": [29, 92, 160, 162], "u2": [29, 48, 80, 92, 160], "combined_msd": 29, "msds_by_particl": 29, "average_msd": 29, "replica": 29, "jump": [29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 151], "artifici": 29, "inflat": 29, "henc": [29, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 84, 100, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 160], "elaps": [29, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "addition": [29, 37, 42, 44, 67, 100, 101], "finit": 29, "effect": [29, 32, 35, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 81, 92, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "emploi": [29, 51, 92, 99], "yeh2004": 29, "von": 29, "b\u00fclow2020": 29, "review": 29, "pitfal": 29, "kubo": 29, "prove": 29, "judici": 29, "incorpor": [29, 86, 90], "edward": [29, 37], "maginn": 29, "messerli": 29, "daniel": [29, 67], "carlson": 29, "roe": 29, "elliot": 29, "viscos": 29, "live": 29, "6324": 29, "dec": [29, 62], "livecomsjourn": 29, "php": 29, "livecom": 29, "view": [29, 80, 83, 91, 109], "v1i1e6324": 29, "33011": 29, "chul": 29, "yeh": [29, 37], "108": [29, 37, 112], "15873": 29, "15879": 29, "2004": [29, 37, 112], "jp0477147": 29, "s\u00f6ren": 29, "b\u00fclow": 29, "jakob": 29, "t\u00f3ma": 29, "bullerjahn": 29, "systemat": 29, "pressur": [29, 40, 67, 70, 149, 155], "153": 29, "021101": 29, "0008316": 29, "xy": [29, 99, 154], "yz": [29, 154], "xz": [29, 154], "n_particl": 29, "lescouli": 30, "licenc": [30, 104, 107, 108, 165], "\u1d47denning2011": 30, "\u1d47denning2012": 30, "deva": [30, 31], "priyakumar": [30, 31], "lennart": [30, 31], "nilsson": [30, 31], "alexand": [30, 31], "mackerel": [30, 31], "jr": [30, 31], "impact": [30, 31, 102], "hydroxyl": [30, 31, 38], "rna": [30, 31], "1929": [30, 31], "1943": [30, 31], "21777": [30, 31], "intrins": [30, 31, 90, 99], "contribut": [30, 31, 32, 38, 39, 68], "heterogen": [30, 31, 98], "2800": [30, 31], "2806": [30, 31], "2012": [30, 31], "22242623": [30, 31], "ja211328g": [30, 31], "nucpairdist": 30, "selection1": [30, 38], "selection2": [30, 38], "superclass": 30, "pair_dist": 30, "watsoncrickdist": 30, "strand1": 30, "strand2": 30, "n1_name": 30, "n1": [30, 31, 88, 109], "n3_name": 30, "n3": [30, 31, 38, 88], "g_name": 30, "a_nam": 30, "u_nam": 30, "t_name": 30, "watson": [30, 31], "crick": [30, 31], "nitrogen": [30, 31, 86, 113], "guanin": 30, "adenin": 30, "uracil": 30, "thymin": 30, "cytosin": [30, 38], "strand": 30, "chi": 31, "AS": 31, "cp": 31, "c2": [31, 62, 86, 88, 113], "o2": [31, 38, 65, 88], "n6": [31, 88], "o4": [31, 65, 88], "o6": [31, 88], "n4": [31, 88], "\u1d43denning2011": 31, "\u1d43denning2012": 31, "question": [31, 58, 109, 165], "wc_pair": 31, "seg1": 31, "seg2": 31, "failur": 31, "occur": [31, 35, 36, 82, 86, 113, 134], "minor_pair": 31, "minor": [31, 161], "groov": 31, "major_pair": 31, "phase_cp": 31, "seg": [31, 86, 113], "pseudo": [31, 104, 108, 109], "ribos": 31, "pucker": 31, "ring": [31, 49, 86, 113, 140], "phase_a": 31, "tor": 31, "tors_alpha": 31, "tors_beta": 31, "tors_gamma": 31, "tors_delta": 31, "tors_ep": 31, "tors_zeta": 31, "tors_chi": 31, "c1": [31, 62, 88], "hydroxyl_angl": 31, "pseudo_dihe_baseflip": 31, "bp1": 31, "bp2": 31, "seg3": 31, "flip": [31, 38, 98], "segid1": 31, "segid": [31, 49, 64, 65, 66, 86, 88, 89, 90, 111, 113, 122, 124, 125, 131, 133, 136, 137, 138, 139, 141, 147], "segid2": 31, "segid3": 31, "descend": [32, 34], "cumulated_vari": 32, "ratio": [32, 34], "significantli": [32, 73], "psf_pca": 32, "retain": [32, 49, 75, 76, 82, 109], "percent": 32, "cumul": [32, 35, 76], "ith": 32, "n_pc": 32, "pca_spac": 32, "n_compon": 32, "conclus": 32, "decreas": 32, "p_compon": 32, "percentag": [32, 38, 58, 102], "chosen": [32, 37, 64, 78, 86, 90, 113], "sped": [32, 80], "precalcul": 32, "0th": [32, 34], "mean_atom": 32, "did": [32, 58], "cumulative_overlap": [32, 112], "subspac": 32, "yang2008": [32, 112], "mutual": [32, 34], "project_single_fram": 32, "anchor": [32, 86, 103], "pc": [32, 55], "extrapol": 32, "atomselect": [32, 118, 119, 120], "captur": [32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75], "_i": [32, 33, 35, 36, 86, 90], "w_": 32, "textbf": 32, "3r": 32, "broadcast": 32, "fanci": [32, 58, 75], "index_extrapol": 32, "add_transform": [32, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 151, 152, 153, 154, 155, 156, 159], "rmsip": [32, 112], "product": [32, 36, 86, 90, 103, 107], "amadei1999": [32, 112], "leo": [32, 112], "macias2004": [32, 112], "first_interv": 32, "second_interv": 32, "last_interv": 32, "38147609331128324": 32, "17478244043688052": 32, "cosine_cont": 32, "cosin": [32, 37, 51], "hess2002": 32, "pca_compon": 32, "agreement": 32, "disagr": 32, "berk": 32, "hess": 32, "phy": [32, 112, 148], "rev": 32, "031910": 32, "mar": 32, "1103": 32, "physrev": 32, "transpos": [32, 36, 108], "commonli": [33, 64, 155], "persistencelength": 33, "persist": [33, 34, 58, 72], "decorrel": 33, "co": [33, 37, 38, 51, 112, 148, 160], "theta_": 33, "approx": 33, "l_b": 33, "l_p": 33, "bond_autocorrel": 33, "lb": 33, "predict": 33, "sort_backbon": 33, "melt": 33, "polyamid": [33, 98], "sorted_backbon": 33, "bb": [33, 36, 111], "persistence_length": 33, "perform_fit": 33, "fit_exponential_decai": 33, "rearrang": [33, 56], "sean": 34, "seyler": [34, 112], "hausdorff": 34, "fr\u00e9chet": 34, "seyler2015": 34, "nonneg": 34, "snapshot": [34, 78], "loos": [34, 66, 74], "speak": 34, "glanc": 34, "pattern": [34, 49, 58, 111], "triangl": 34, "inequ": 34, "psanalysistutori": 34, "outlin": 34, "heat": [34, 48], "dendrogram": 34, "hierarch": 34, "avishek": 34, "thorp": [34, 112], "macromolecular": [34, 61, 79, 107, 112, 133, 147], "1004568": [34, 112], "sqnorm": 34, "zeroth": 34, "get_msd_matrix": 34, "msd": [34, 37, 39, 112], "n_p": 34, "n_q": 34, "msd_matrix": 34, "m_": 34, "p_i": 34, "q_j": 34, "get_coord_ax": 34, "1st": [34, 99], "2nd": [34, 99], "get_path_metric_func": 34, "path_metr": 34, "l2": 34, "norm": [34, 35, 99, 103, 111], "revers": [34, 40, 91, 155], "halv": 34, "mid": [34, 86, 103, 159], "half": [34, 86, 99, 104, 155], "778663899862152": 34, "directed_hausdorff": 34, "earli": 34, "taha2015": 34, "abdel": 34, "aziz": 34, "taha": 34, "allan": 34, "hanburi": 34, "ieee": 34, "transact": 34, "machin": [34, 70, 99], "intellig": 34, "2153": 34, "2163": 34, "1109": 34, "tpami": 34, "2408351": 34, "hausdorff_wavg": 34, "5669644353703447": 34, "avg": 34, "obei": 34, "hausdorff_avg": 34, "bias": 34, "toward": [34, 160], "5669646575869005": 34, "hausdorff_neighbor": 34, "farthest": 34, "sens": [34, 35, 144], "discrete_frechet": 34, "778663984013591": 34, "frechet": 34, "842901117711383": 34, "fr\u00e8chet1906": 34, "alt1995": 34, "eiter1994": 34, "eiter1997": 34, "mauric": 34, "fr\u00e8chet": 34, "sur": 34, "quelqu": 34, "du": [34, 88], "fonctionnel": 34, "rendiconti": 34, "del": [34, 44, 102, 109], "circolo": 34, "matematico": 34, "di": [34, 80, 149], "1884": 34, "1940": 34, "72": [34, 83, 86, 148, 149], "1906": 34, "1007": 34, "bf03018603": 34, "helmut": 34, "alt": 34, "godau": 34, "polygon": 34, "05": [34, 49, 86, 88, 98, 108], "01n02": 34, "91": [34, 148, 149], "1995": 34, "1142": 34, "s0218195995000064": 34, "thoma": [34, 108], "eiter": 34, "heikki": 34, "mannila": 34, "1994": [34, 37, 108], "informatica": 34, "109": 34, "1997": 34, "s002360050075": 34, "dist_mat_to_vec": 34, "path_select": 34, "psanalysi": 34, "selection_str": 34, "u_origin": 34, "u_refer": 34, "u_fit": 34, "fit_to_refer": 34, "postfix": [34, 102], "_fit": 34, "rmsdfile": 34, "targetdir": 34, "refactor": [34, 36, 86, 90], "get_num_atom": 34, "to_path": 34, "unpack": [34, 109, 149], "top_nam": 34, "newtraj_nam": 34, "topology_trajectori": 34, "els": [34, 38, 49, 64, 66, 68, 86, 107, 109], "overridden": 34, "psapair": 34, "npath": 34, "compute_nearest_neighbor": 34, "nearest_neighbor": 34, "find_hausdorff_pair": 34, "overal": 34, "hausdorff_pair": 34, "encapsul": 34, "among": [34, 104], "math": [34, 37, 86, 108, 110], "ext": [34, 50, 109, 115, 116, 117, 118, 119, 139], "summar": 34, "matrix_id": 34, "pair_id": 34, "th": [34, 35, 37, 83, 99, 103, 148], "psadata": 34, "dist_mat": 34, "ward": 34, "count_sort": 34, "distance_sort": 34, "no_plot": 34, "no_label": 34, "color_threshold": 34, "heatmap": 34, "hierarchi": [34, 58, 93], "linkag": [34, 38], "squareform": 34, "link": [34, 38, 40, 68, 99, 112, 140], "node": [34, 38, 103, 130], "tm": [34, 148], "dgram": 34, "generate_path": 34, "infix": 34, "insert": [34, 64, 65, 68, 90, 125, 138], "trj_fit": 34, "subdirectori": 34, "xxx": [34, 148], "_psa": 34, "000": [34, 62, 125, 136], "999": [34, 50, 56, 66, 86, 125, 136, 148], "get_num_path": 34, "get_pairwise_dist": 34, "vectorform": 34, "get_path": 34, "psa_pair": 34, "run_pairs_analysi": 34, "psa_path": 34, "pkl": 34, "save_path": 34, "labels": 34, "uses": 34, "pdf": [34, 36, 37, 62, 108], "matshow": 34, "vertic": 34, "inch": 34, "font": 34, "colorbar": 34, "dist_matrix_clu": 34, "reorder": 34, "tick1on": 34, "tick2on": 34, "label1on": 34, "label2on": 34, "tick1lin": 34, "tick2lin": 34, "label1": 34, "label2": 34, "upstream": [34, 67], "2493": 34, "plot_annotated_heatmap": 34, "annot_s": 34, "imshow": 34, "seaborn": 34, "pip": [34, 39, 58, 112], "conda": [34, 39, 68], "plot_nearest_neighbor": 34, "idx": [34, 38, 89], "multiplot": 34, "aspect_ratio": 34, "height": [34, 102], "partial": [34, 60, 65, 79, 92, 136, 137, 140, 146, 147, 151], "nn": [34, 148], "hp": 34, "pp": [34, 112], "savez_compress": 34, "g_": 35, "ab": [35, 67, 86, 103, 105, 113], "n_": 35, "n_a": [35, 160], "n_b": 35, "_j": 35, "homogen": [35, 86, 110], "shell": [35, 38, 68, 86, 111], "dr": 35, "rho": [35, 36, 160], "solvat": [35, 38, 86, 90, 111], "r_1": [35, 146], "interrdf": 35, "nbin": [35, 109], "exclusion_block": 35, "exclude_sam": 35, "suppos": [35, 38, 51, 54, 58, 60, 69, 72, 73, 75, 155], "b1": 35, "b2": 35, "spheric": [35, 113, 163], "tile": 35, "intend": [35, 90, 102, 109], "interrdf_": 35, "superfl": 35, "opposit": [35, 86, 89, 99], "offici": [35, 54, 83], "cdf": 35, "get_cdf": 35, "gro_memprot": 35, "xtc_memprot": 35, "s1": [35, 108], "znd": 35, "289": 35, "s2": 35, "od1": [35, 38], "od2": [35, 38], "sphzone": [35, 37, 86, 113], "s3": 35, "291": 35, "292": 35, "s4": 35, "dotson": [36, 112], "rmsf": 36, "coordinat": 36, "investig": [36, 98], "lid": 36, "nmp": 36, "crd": [36, 68, 79, 84, 86, 92, 109, 111, 147, 150], "groupselect": 36, "29": [36, 148, 149, 160], "121": [36, 148, 149], "214": [36, 111], "122": [36, 65, 141, 149], "159": 36, "59": [36, 148, 149], "add_subplot": [36, 162], "111": [36, 162], "set_xlabel": [36, 162], "set_ylabel": [36, 162], "savefig": [36, 162, 163], "rmsd_all_core_lid_nmp_ref1ak": 36, "impli": [36, 54], "w_i": 36, "forward": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "838544558398293": 36, "weights_groupselect": 36, "impos": 36, "correspondingli": [36, 44], "get_weight": [36, 109], "scheme": [36, 58, 151], "rotation": 36, "overflow": 36, "underflow": 36, "rho_i": 36, "welford1962": 36, "tran": [36, 86, 90, 99, 108], "not_protein": 36, "center_in_box": [36, 158], "prealign": 36, "asel": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "reshap": [36, 108, 109], "load_new": [36, 79, 80, 92], "afc": [36, 51, 60, 80], "calpha": [36, 64, 111], "rmsfer": 36, "welford": 36, "technometr": 36, "419": [36, 112], "420": 36, "1962": 36, "1080": [36, 37, 112], "00401706": 36, "10490022": 36, "quiet": 36, "alejandro": [37, 98, 112], "bernardin": [37, 98, 112], "relax": [37, 79], "wor": 37, "yeh1999": 37, "hbl": 37, "rapaport1983": 37, "angular": [37, 98], "grigera1996": 37, "br\u00f3dka1994": 37, "surviv": [37, 98], "sp": [37, 109], "liu2004": 37, "araya": [37, 98, 112], "secchi2014": [37, 98], "milischuk2011": 37, "nanopor": 37, "yu": [37, 60], "ling": 37, "chung": 37, "yuan": 37, "mou": 37, "liquid": 37, "103": [37, 141, 149], "3699": 37, "3705": 37, "1999": [37, 112], "jp984584r": 37, "rapaport": 37, "1151": 37, "1162": 37, "1983": [37, 112], "00268978300102931": 37, "raul": [37, 98], "grigera": 37, "susana": 37, "kalko": 37, "jorg": 37, "fischbarg": 37, "wall": [37, 99], "langmuir": 37, "154": 37, "158": [37, 148], "la9408681": 37, "aleksand": 37, "br\u00f3dka": 37, "diffus": [37, 39, 112, 155, 162, 163], "82": [37, 148, 149], "1075": 37, "1078": 37, "00268979400100764": 37, "pu": [37, 107, 112, 148], "liu": [37, 107, 112], "bern": 37, "On": [37, 38, 42, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 82, 86, 105, 112, 149], "confin": [37, 64], "fluid": [37, 90, 112], "vapor": 37, "6595": 37, "6602": 37, "jp0375057": 37, "anatoli": 37, "milischuk": 37, "branka": 37, "ladanyi": 37, "silica": 37, "135": [37, 65], "174709": 37, "3657408": 37, "hbond_analysi": [37, 39, 98, 112], "hydrogenbondanalysi": 37, "stabl": [37, 86, 108], "byre": [37, 86, 113], "42": [37, 49, 56, 86, 92, 102, 113, 148, 149], "wor_analysi": 37, "readi": [37, 86], "wor_oh": 37, "wor_hh": 37, "wor_dip": 37, "oh": [37, 38], "131": [37, 148], "hh": [37, 148], "132": [37, 108, 148], "dip": 37, "t0": [37, 98, 108], "tf": 37, "dtmax": 37, "333": 37, "straight": [37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "preferenti": 37, "electr": 37, "ad_analysi": 37, "ad_analysisoh": 37, "ad_analysishh": 37, "ad_analysisdip": 37, "graph0": 37, "graph1": 37, "graph2": 37, "travel": 37, "cylindr": [37, 86, 113], "zone": [37, 86, 113], "zmax": [37, 86, 104, 113, 163], "zmin": [37, 86, 104, 113, 163], "strong": 37, "weak": [37, 83], "cyzon": [37, 86, 113], "msd_analysi": 37, "sp_timeseri": 37, "exhibit": 37, "potassium": [37, 148], "hop": 37, "advis": [37, 104, 151], "reload": [37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "md100n": 37, "joined_sp_timeseri": 37, "o13": 37, "o14": 37, "new_sp": 37, "sp_timeseries_data": 37, "datapoint": [37, 98], "sp_data": 37, "t1": [37, 108], "x_axi": 37, "y_axi": 37, "cos_theta0": 37, "ang_distr0": 37, "cos_theta1": 37, "ang_distr1": 37, "msd_t0": 37, "msd_t1": 37, "tau_n": 37, "sp_tau1": 37, "sp_tau2": 37, "sp_tau_n": 37, "nproc": 37, "propos": 37, "c_": 37, "hat": [37, 86, 90, 103], "mathit": 37, "_2": [37, 103], "p_2": 37, "3x": 37, "legendr": 37, "crash": 37, "lg2": 37, "dipolar": 37, "know": [37, 38, 58, 75], "2ndt": 37, "frac1t": 37, "comment": [37, 38, 41, 62, 64, 71, 74, 114, 115, 116, 117, 118, 119, 134, 148], "py": [37, 58, 68, 82, 111, 112, 149, 151], "act": [37, 79, 86, 102], "classifi": 37, "zhiyi": 38, "wu": 38, "gtc": 38, "ox": 38, "xiki": 38, "tempula": 38, "simultan": 38, "water_select": 38, "120": 38, "forcefield": 38, "breadth": 38, "partner": [38, 91], "water2": 38, "sele1_acceptor": 38, "water1_donor": 38, "water1_donor_heavi": 38, "water1_acceptor": 38, "sele2_donor": 38, "sele2_donor_heavi": 38, "water2_acceptor": 38, "donor_proton": 38, "donor_heavy_atom": 38, "fourth": [38, 91, 140], "depth": [38, 89, 102], "network2timeseri": 38, "travers": [38, 103], "expand_timeseri": 38, "expand": [38, 77, 109], "familiar": 38, "generate_t": 38, "reformat": 38, "databas": [38, 89, 147], "datafram": 38, "120\u00ba": 38, "123": [38, 108, 109], "oc1": 38, "oc2": 38, "amber99sb": 38, "ildn": 38, "ne": [38, 148], "nh1": [38, 66], "nh2": 38, "nd2": 38, "sg": [38, 86, 90, 148], "cyh": 38, "ne2": 38, "oe1": 38, "oe2": 38, "nd1": 38, "presenc": [38, 67, 79, 91, 106], "hsd": 38, "hse": 38, "hsp": 38, "met": [38, 66, 86, 88], "sd": 38, "gregoret1991": 38, "og": [38, 86, 90], "og1": [38, 86, 90], "trp": 38, "ne1": 38, "tyr": [38, 113], "oi": 38, "sm": [38, 148], "opl": [38, 88, 111], "ambigu": [38, 148], "histidin": [38, 49], "carbohydr": 38, "glycam": 38, "inappropri": 38, "oneself": 38, "waterbridgeanalysis_otherff": 38, "default_donor": 38, "otherff": 38, "default_acceptor": 38, "lydia": 38, "gregoret": 38, "stephen": 38, "rader": 38, "fletterick": 38, "fred": 38, "cohen": 38, "sulfur": 38, "1991": [38, 108], "340090204": 38, "arginin": [38, 49], "aspart": 38, "exit": [38, 44, 79, 109, 114], "carboxyl": [38, 49], "asp3": 38, "hw1": [38, 92, 131], "hw2": [38, 92, 131], "sol2": 38, "arg1": 38, "customis": [38, 60, 91, 132], "sele1": 38, "ang": 38, "sele2": 38, "phase": 38, "sele1_index": 38, "sele1_heavy_index": 38, "atom2": [38, 74, 86, 91], "heavy_atom2": 38, "atom1": [38, 74, 86, 91], "heavy_atom1": 38, "sele2_index": 38, "sele2_heavy_index": 38, "s1_resnam": 38, "s1_resid": 38, "s1_name": 38, "s2_resnam": 38, "s2_resid": 38, "s2_name": 38, "analysis_func": 38, "proport": 38, "peopl": 38, "pai": 38, "attent": 38, "insist": 38, "shouldn": [38, 51, 60], "order_of_water_bridg": 38, "undesir": [38, 75], "s1_index": 38, "to_index": 38, "to_resnam": 38, "to_resid": 38, "to_nam": 38, "from_index": 38, "from_resnam": 38, "from_resid": 38, "from_nam": 38, "key1": 38, "key2": 38, "s2_index": 38, "wbridge_analysi": 38, "selection1_typ": 38, "update_water_select": 38, "filter_first": 38, "distance_typ": 38, "output_format": 38, "sele1_sele2": 38, "anyth": [38, 66, 68, 81, 88, 109, 146, 152], "consum": [38, 68], "20th": [38, 112], "domain": [38, 104, 155], "surfac": [38, 40, 86], "constantli": [38, 102], "tini": [38, 112], "engag": 38, "ideal": [38, 58, 98], "180\u00ba": 38, "fairli": [38, 58, 165], "150\u00ba": 38, "shall": 38, "donor_acceptor": 38, "farther": 38, "entiti": [38, 64], "tidi": 38, "atom_1": 38, "atom_2": 38, "_only_": 38, "r_cov": 38, "58": [38, 141, 148, 149, 163], "defaultdict": 38, "coval": 38, "meth": 38, "_get_bonded_hydrogens_list": 38, "timesteps_by_typ": 38, "exampleanalysismodul": 39, "analysis_obj": 39, "analysisclass": 39, "start_fram": [39, 162, 163], "stop_fram": 39, "caveat": 39, "hole2": 39, "hole": 39, "atomicdist": 39, "quantiti": [39, 74, 160], "psa": [39, 112], "bat": 39, "hbond_autocorrel": 39, "waterbridgeanalysi": 39, "leaflet": [39, 111, 120], "nuclinfo": 39, "nucleicacid": 39, "elast": [39, 112], "network": [39, 68, 102, 112], "gnm": [39, 112], "helan": [39, 112], "helic": 39, "radial": 39, "rdf": 39, "lineardens": 39, "waterdynam": [39, 98, 112], "dielectr": [39, 112], "diffusionmap": 39, "xdr": [40, 69, 73, 84, 110, 149], "pyedr": 40, "human": [40, 98, 112], "has_pyedr": 40, "availbl": [40, 67], "aux": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "some_edr_fil": 40, "newli": 40, "data_dict": 40, "gave": 40, "unit_dict": 40, "cf": [40, 148], "mdanalysis_base_unit": 40, "inconsist": [40, 76], "convert_unit": [40, 47, 48, 50, 51, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76], "temp": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 149], "get_data": 40, "some_term": 40, "kinet": [40, 149], "all_term": 40, "auxread": [40, 41, 42, 43, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "aux_spec": [40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "surf": 40, "surften": 40, "constr": [40, 149], "inconveni": 40, "epot": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 149], "surf_tens": 40, "tension": 40, "aux_edr": 40, "aux_edr_tpr": 40, "aux_edr_xtc": 40, "namespac": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 88, 109, 164], "add_auxiliari": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "525164": 40, "0625": 40, "3764": 40, "52734375": 40, "auxdata": [40, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "1857": 40, "519287109375": 40, "initialis": [40, 41, 44, 90, 91, 102, 147], "_auxdata": [40, 44], "pathlib": 40, "posixpath": 40, "data_selector": [40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "_n_step": [40, 44], "exce": [40, 50, 86, 113], "gb": [40, 42, 149], "memory_limit": [40, 42], "keyerror": 40, "invalid": [40, 64, 103, 109, 136], "read_all_tim": [40, 41, 44], "edrstep": 40, "time_selector": [40, 41, 42, 44], "auxstep": [40, 41, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "grace": 41, "xvgstep": 41, "xvgreader": [41, 42, 44], "xvgfileread": [41, 44], "footprint": [41, 44], "auxfileread": [41, 42, 44], "uncom": 41, "trail": [41, 64, 102, 109], "initial_tim": [42, 44], "constant_dt": [42, 44], "throughout": [42, 44, 92, 98], "represent_ts_a": [42, 44], "auxnam": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "veloc": [42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 86, 92, 98, 101, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "deep": [42, 79, 83], "calc_repres": [42, 44], "frame_data": [42, 44], "frame_rep": [42, 44], "attach_auxiliari": 42, "coord_par": 42, "agnost": [42, 160], "xvg": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "edr": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "nan": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "indici": 42, "get_descript": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "replic": [42, 68], "original_aux": 42, "new_aux": 42, "move_to_t": [42, 44], "n_step": [42, 44], "next_nonempty_fram": [42, 44], "read_t": [42, 44], "update_t": [42, 44], "recent": [42, 49, 51, 68, 141, 147], "rewind": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 109], "step_to_fram": [42, 44], "return_time_diff": [42, 44], "time_frame_0": 42, "floor": [42, 44], "step_to_tim": [42, 44], "frame_index": 42, "time_diff": 42, "consant": 42, "austep": 42, "auxfil": [42, 44], "get_auxreader_for": [43, 44], "submodul": [44, 79, 147, 151], "protoread": [44, 75, 79, 92], "alongsid": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "accompani": [44, 58], "remark": [44, 51, 60, 64, 65, 66, 68, 74, 79, 100, 120, 147], "edrread": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "stand": 44, "alon": 44, "do_someth": 44, "10th": 44, "datatyp": [44, 58], "time_at_step": 44, "time_at_frame_0": 44, "pullforc": 44, "pull_forc": 44, "next_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "iter_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "particularli": [44, 66], "low_f": 44, "low_freq_aux_data": 44, "worri": [44, 86], "__iter__": [44, 75, 79, 83], "iter_auxiliari": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "get_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf_dt": 44, "settabl": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "set_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "rename_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf": 44, "reload_aux": 44, "get_aux_descript": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullx": 44, "And": [44, 85], "descr": 44, "new_u": 44, "new_trajectori": 44, "_auxstep": 44, "_data": 44, "_dt": 44, "_initial_tim": 44, "_time_selector": 44, "_data_selector": 44, "_constant_dt": 44, "setup": [44, 58], "ausstep": 44, "_select_tim": 44, "selector": [44, 86, 88, 92, 113], "_select_data": 44, "overload": 44, "_empty_data": 44, "cap": [44, 104], "required_attr": 44, "__len__": [44, 79], "__getitem__": [44, 79, 83, 109], "reposit": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "_read_next_step": 44, "__enter__": 44, "__exit__": [44, 79], "__del__": [44, 75, 79], "__eq__": [44, 79, 83], "addion": 44, "stopiter": 44, "past": [44, 79], "_go_to_step": 44, "count_n_step": 44, "_restart": 44, "overwritten": [44, 64, 83, 91], "seek": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100, 101, 105, 109, 160], "_reopen": [44, 58], "reopen": [44, 58], "recognis": [46, 58, 68, 88, 146], "parm": [46, 78, 85, 140], "pmd": [46, 48], "pgro": [46, 48], "load_fil": [46, 48], "ugro": 46, "convert_to": [46, 48, 49, 85, 86], "insensit": [46, 85, 86, 99], "pgro2": 46, "tab": [46, 66, 111, 149], "parmedpars": [46, 147], "rdkit": [46, 62, 85, 86, 88, 92, 113, 146], "rdkitpars": 46, "openmm": [46, 48], "openmmpars": 46, "accessor": 46, "app": [47, 48], "layer": [47, 86, 113], "pdbxfile": 47, "openmmtopologypars": 47, "convert_forces_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "inplac": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 103, 107, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_forces_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "unmodifi": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "modif": [47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 82, 86, 103, 105, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "caller": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "openmmapptopologypars": 47, "openmmread": 47, "pdbx": 47, "openmmsimulationread": 47, "kj": [47, 67, 68, 69, 160], "openmmappread": 47, "prm7_ala2": 48, "rst7_ala2": 48, "prm": 48, "amberparm": 48, "3026": 48, "1003": 48, "3025": 48, "parametr": [48, 85], "prm_prot": 48, "mm": 48, "createsystem": 48, "nonbondedmethod": 48, "nocutoff": 48, "constraint": [48, 131, 141, 149], "implicitsolv": 48, "gbn2": 48, "langevinintegr": 48, "bath": 48, "picosecond": [48, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 160], "friction": 48, "femtosecond": [48, 60, 160], "sim": 48, "setposit": 48, "minimizeenergi": 48, "maxiter": 48, "recogins": 48, "parmedread": [48, 78], "parmedconvert": 48, "neat": 48, "hmassrepartit": 48, "008": [48, 86, 148], "pmt": 48, "hmass": 48, "dalton": 48, "03399992": 48, "01799965": 48, "034": 48, "mgro": 48, "parmed_subset": 48, "obj": [48, 49, 51, 54, 56, 58, 60, 62, 64, 69, 72, 73, 74, 75, 79, 109, 149], "chem": [49, 62, 92, 107, 112, 148], "rdchem": 49, "atomid": [49, 90, 122, 123, 124, 128, 134, 138, 147], "atomnam": [49, 56, 66, 86, 90, 109, 113, 122, 123, 124, 126, 128, 134, 138, 140, 142, 143, 146, 148, 149], "aromat": [49, 88, 90, 146], "rschiral": [49, 88, 90], "atomtyp": [49, 62, 65, 90, 122, 123, 124, 126, 128, 129, 130, 134, 138, 140, 142, 143, 148], "chainid": [49, 50, 64, 65, 66, 90, 109, 113, 124, 125, 136, 137, 138, 147], "icod": [49, 64, 65, 86, 90, 133, 137, 147], "tempfactor": [49, 50, 64, 65, 86, 90, 92, 109, 122, 125, 133, 136, 137, 147], "getmonomerinfo": 49, "getaltloc": 49, "getisaromat": 49, "getchainid": 49, "getdoubleprop": 49, "_gasteigercharg": 49, "_tripospartialcharg": 49, "getsymbol": 49, "getinsertioncod": 49, "getidx": 49, "getmass": 49, "getnam": 49, "getprop": 49, "_triposatomnam": 49, "_cipcod": 49, "chiral": [49, 86, 88, 90, 113], "getoccup": 49, "getresiduenam": 49, "getresiduenumb": 49, "gettempfactor": 49, "_triposatomtyp": 49, "monomerinfo": 49, "rdkitread": [49, 92], "rdkitconvert": [49, 86, 88, 113], "molfrommol2fil": 49, "docking_pos": 49, "mol2": [49, 77, 79, 84, 147, 150], "removeh": [49, 62], "0x7fcebb958148": 49, "infer": [49, 76, 92], "chembl27": 49, "ongo": 49, "3339": 49, "benchmark": [49, 151], "atompdbresidueinfo": 49, "_mdanalysis_nam": 49, "segindic": [49, 88, 90], "getsegmentnumb": 49, "_mdanalysis_charg": 49, "getintprop": 49, "_mdanalysis_index": 49, "_mdanalysis_segid": 49, "_mdanalysis_typ": 49, "pdb_full": 49, "dm": [49, 79, 84, 124, 147, 160], "getatomwithidx": 49, "descriptors3d": 49, "aspher": [49, 86, 90, 112], "guesser": [49, 86, 140, 150], "guess_typ": [49, 146], "add_topologyattr": [49, 74, 89, 92, 146], "noimplicit": 49, "implicit": [49, 86], "scratch": 49, "set_converter_cache_s": 49, "bypass": 49, "hood": [49, 67, 147], "ugm": 49, "video": 49, "tackl": 49, "info": [49, 102], "accuraci": [49, 99, 101], "guidelin": 49, "prevent": 49, "conjug": 49, "_rebuild_conjugated_bond": 49, "inorgan": 49, "mostli": [49, 58, 90, 145], "_infer_bo_and_charg": 49, "formal": [49, 74, 86, 90, 113, 136], "don": [49, 86, 103, 109, 134, 138, 159], "valenc": 49, "unpair": 49, "electron": [49, 64, 66, 140, 160], "nue": 49, "ue": 49, "smallest": [49, 58], "rwmol": 49, "receiv": 49, "_standardize_pattern": 49, "recombin": 49, "x3": 49, "d4": 49, "v4": 49, "cterm": [49, 111], "h0": 49, "nterm": [49, 111], "keto": 49, "enol": 49, "sulfon": 49, "v6": 49, "anion": 49, "problemat": [49, 86, 103, 159], "goal": 49, "triplet": [49, 99, 147], "forth": 49, "kekul": 49, "cover": [49, 99, 109], "crdreader": 50, "formaterror": 50, "writer": [50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 77, 78, 80, 81, 84, 86, 109], "crdwriter": [50, 56], "wt": [50, 65, 66], "namedstream": [50, 62, 63, 94, 109, 114], "stream": [50, 57, 58, 62, 63, 64, 92, 94, 100, 105, 115], "noextend": 50, "regardless": [50, 51, 60, 92, 156, 160], "lammp": [51, 79, 84, 92, 100, 111, 132, 147, 165], "endian": [51, 60, 70, 79], "dcdreader": [51, 60, 79, 80, 111], "dcdwriter": [51, 60], "akma": [51, 58, 60, 68, 79, 160], "seamlessli": [51, 79], "watch": 51, "tri": [51, 58, 68, 79, 100, 109, 140], "wiki": [51, 103, 161], "dcdplugin": 51, "plor": 51, "c36b2": 51, "newer": [51, 140], "libdcd": [51, 60, 82, 110], "pyx": [51, 60, 101], "otherwrit": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "pull": [51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 80, 126, 127, 143, 149], "ener": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "precis": [51, 54, 56, 57, 58, 60, 63, 64, 69, 71, 72, 73, 75, 79, 80, 91, 99, 101, 103, 104, 108, 113, 149], "term_dict": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "selected_fram": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_threshold": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "remove_auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "another_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "this_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "innermost": [51, 57, 58, 60, 64, 69, 71, 72, 73, 75], "transform_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "aux_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "check_slice_indic": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "clip": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "unexpect": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80], "downstream": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109], "randomli": [51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80], "splice": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "discrep": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "held": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 86], "attrnam": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 88, 90], "gettabl": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "recreat": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "trajectory_1": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trajectory_2": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "inter": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "lst": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "encount": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99, 136], "pace": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "parse_n_atom": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 135], "notimplementederror": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 102, 120], "tom": [51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80], "rame": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "oordin": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "fac": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100], "nodataerror": [51, 58, 60, 79, 80, 83, 86, 89, 92, 94, 103], "totaltim": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "nsavc": [51, 60, 100], "istart": [51, 60, 100], "240": [51, 60, 100], "convert_dimensions_to_unitcel": [51, 54, 56, 58, 60, 69, 72, 73, 75, 79], "overriden": [51, 54, 58, 60, 69, 72, 73, 75, 79, 90], "has_valid_coordin": [51, 54, 58, 60, 69, 72, 73, 75], "dl": [52, 149, 150], "poli": [52, 150], "configread": 52, "config": [52, 79, 147, 165], "layout": [52, 58], "historyread": 52, "histori": [52, 79, 147, 152], "desmond": [53, 124, 147], "dmsreader": 53, "lattice_vector": 54, "matter": 54, "atom_frac": 54, "nx": 54, "ny": [54, 113, 148], "vx": 54, "vy": 54, "vz": 54, "speci": [54, 86, 90], "fhiaimsread": 54, "classmethod": [54, 57, 60, 64, 69, 71, 72, 73, 75, 79, 83, 90, 92, 149], "fmt": [54, 56, 109], "box_triclin": [54, 56], "8f": 54, "nlattice_vector": 54, "vel": [54, 56], "newlin": [54, 56, 64, 109, 114, 115, 116, 117, 118, 119, 148], "resourc": [55, 58, 67, 75, 151], "firefli": [55, 127], "approb": 55, "tweak": [55, 74, 102], "gmsreader": 55, "outfilenam": 55, "uncompress": [55, 105, 109], "foo": [55, 100, 101, 109], "bz2": [55, 63, 68, 74, 79, 105, 109], "gz": [55, 63, 68, 74, 79, 109], "decompress": [55, 109], "time_offset": [55, 74, 75, 83], "runtyp": 55, "renumb": [56, 66, 92], "reindex": [56, 64], "subsect": 56, "OR": 56, "groread": 56, "unk": 56, "decim": [56, 73, 91, 101, 109], "3dp": 56, "4dp": 56, "triclinic_dimens": [56, 83], "box_orthorhomb": 56, "5f": 56, "5d": 56, "3f": [56, 102], "xyz_v": 56, "4f": 56, "digit": [56, 64, 79, 109, 125, 147], "chop": 56, "nwo": 56, "ow2": 56, "orthorhomb": [56, 68, 86], "hoomd": [57, 79, 129, 147, 150], "gsdparser": [57, 129, 147], "gsdreader": [57, 82, 129], "picklabl": [57, 68, 109, 110], "hoomdtrajectori": 57, "gsdpicklabl": [57, 82], "schema": 57, "open_trajectori": [57, 58, 68, 70], "hoodm": 57, "fl": 57, "gsdfile": 57, "unpickl": [57, 58, 68, 75, 76, 77, 82, 86, 92, 105], "gsd_pickle_open": 57, "gsdfileobj": 57, "schema_vers": 57, "file_pickl": [57, 105], "dump": [57, 64, 86, 105, 132, 147], "picklable_file_io": [57, 58, 68, 77, 82, 109, 110], "fileiopickl": [57, 58, 68, 77, 82, 105], "bufferiopickl": [57, 58, 68, 77, 82, 105], "textiopickl": [57, 58, 68, 77, 82, 105], "gzippickl": [57, 58, 68, 77, 82, 105], "bz2picklabl": [57, 58, 68, 77, 82, 105], "byte": [57, 58, 68, 70, 77, 95, 100, 101, 102, 103, 105, 106, 109], "readlin": [57, 105, 109], "anyopen": [57, 82, 105, 109], "pickle_open": [57, 105], "bz2_pickle_open": [57, 105], "gzip_pickle_open": [57, 105], "rb": [57, 105, 148], "mpi": [58, 112], "wide": [58, 67], "h5mdreader": 58, "notat": [58, 65, 109, 113], "h5mdwriter": 58, "timeunit": [58, 60], "lengthunit": [58, 60, 160], "velocityunit": 58, "forceunit": 58, "arug": 58, "2884": 58, "contigu": [58, 109], "chunk": [58, 140], "output_contig": 58, "alpha_carbon": 58, "mpi4pi": 58, "driver": 58, "comm": 58, "mpio": 58, "comm_world": 58, "environ": [58, 68, 102, 109, 112, 152], "challeng": 58, "supercomput": 58, "successfulli": [58, 82], "openmpi": 58, "ubuntu": 58, "plai": [58, 106], "mpicc": 58, "ve": [58, 111], "implemen": 58, "env": [58, 68, 77], "hdf5_path": 58, "clean": [58, 102], "gcc": 58, "hdf5_dir": 58, "everyon": 58, "forum": 58, "overview": [58, 121], "gcmc": 58, "email": 58, "creator": 58, "group1": 58, "arrari": 58, "commun": [58, 68, 112, 165], "lost": 58, "cuboid": 58, "timstep": 58, "_particle_group": 58, "has_forc": [58, 79, 83], "has_posit": [58, 79, 83], "has_veloc": [58, 79, 83], "compression_opt": 58, "author_email": 58, "creator_vers": 58, "dev0": [58, 102, 161, 165], "parellel": 58, "violat": 58, "block": [58, 67, 79, 91, 102, 109, 111], "szip": 58, "lzf": 58, "tup": 58, "lowest": [58, 64, 77], "recogniz": 58, "wrote": 58, "__version__": [58, 161], "ioerror": [58, 68, 79, 101, 109, 144], "datset": 58, "enforc": [58, 64, 68, 76, 99, 106, 109], "\u00e5ngstrom": 58, "fine": 58, "piec": 58, "noncontigu": 58, "ill": 58, "thought": [58, 111], "drastic": 58, "apriori": 58, "diskspac": 58, "incom": 58, "explic": 58, "kib": 58, "mib": 58, "suboptim": 58, "mimic": [58, 149], "jakupovic2021": [58, 112], "led": 58, "10x": 58, "versu": 58, "additionali": 58, "h5md_version": 58, "data_blacklist": 58, "h5pypickl": [58, 82], "libver": 58, "userblock_s": 58, "swmr": 58, "rdcc_nslot": 58, "rdcc_nbyte": 58, "rdcc_w0": 58, "track_ord": 58, "fs_strategi": 58, "fs_persist": 58, "fs_threshold": 58, "fs_page_s": 58, "page_buf_s": 58, "min_meta_keep": 58, "min_raw_keep": 58, "lock": [58, 72], "alignment_threshold": 58, "alignment_interv": 58, "meta_block_s": 58, "readonli": 58, "legal": [58, 109], "sec2": 58, "stdio": 58, "ros3": 58, "earliest": 58, "v108": 58, "v110": 58, "v112": 58, "1024": 58, "preemption": 58, "polici": 58, "penal": 58, "flush": [58, 102, 109], "lru": 58, "preempt": 58, "slot": 58, "collis": 58, "hash": 58, "strategi": 58, "prime": 58, "thumb": 58, "521": 58, "h5": [58, 62], "get_config": 58, "fsm": 58, "vfd": 58, "page": [58, 62, 84, 104, 108, 112, 150, 161, 165], "4096": 58, "buffer": [58, 105, 109], "power": [58, 67, 111, 151], "evict": 58, "effort": 58, "hdf5_use_file_lock": 58, "overrid": [58, 99, 114, 131, 152, 158], "conjunct": 58, "portal": 58, "hdfgroup": 58, "h5p_set_align": 58, "h5p_set_meta_block_s": 58, "restart": [59, 79, 102, 156], "inpread": 59, "978": [60, 90], "888821e": [60, 160], "biomolecular": [60, 147], "lennard": [60, 140], "jone": [60, 140], "autodetect": [60, 68, 79, 92], "dumpread": 60, "ascii": [60, 79, 100, 102, 132, 147], "datapars": [60, 132], "lammps_real": 60, "nano": 60, "lammps_nano": 60, "take_this_fram": 60, "dcdfilenam": 60, "dataread": 60, "datawrit": 60, "atom_typ": [60, 146], "lammps_coordinate_convent": 60, "unwrap_imag": 60, "unscal": 60, "scaled_unwrap": 60, "whichev": [60, 86, 113], "xsu": 60, "ysu": 60, "zsu": 60, "zu": 60, "read_data": 60, "3383": 60, "transmiss": [61, 79, 133, 147], "quicker": [61, 133], "mmtfreader": [61, 78], "fetch_mmtf": 61, "pdb_id": 61, "rcsb": 61, "bank": 61, "4ucp": 61, "tripo": [62, 79, 134, 147], "gr": 62, "molecule_noh": 62, "cheminformat": 62, "toolkit": [62, 112, 165], "mol2read": 62, "statu": [62, 65, 134], "mol2writ": 62, "molfrompdbfil": 62, "moltomolfil": 62, "master": 62, "sybyl": [62, 134], "tripos_resourc": 62, "fileroot": 62, "mol2_format2": 62, "encode_block": 62, "substructur": 62, "crysin": 62, "dimensionless": 62, "mol2_format3": 62, "benzen": 62, "wed": 62, "1988": 62, "no_charg": [62, 134], "207": [62, 148], "091": 62, "414": 62, "394": [62, 111], "c3": [62, 88], "c4": [62, 88], "697": 62, "c5": [62, 88], "c6": [62, 88], "175": [62, 108], "353": 62, "936": 62, "h3": 62, "542": 62, "h4": 62, "781": 62, "939": 62, "h6": 62, "perm": 62, "coor": [63, 79], "namdbinread": 63, "namdbinwrit": 63, "denomin": 64, "exchang": [64, 86], "thath": 64, "calpha_onli": 64, "multifram": [64, 78, 79, 86], "calpha_traj": 64, "happen": [64, 68, 72, 86, 89, 92, 113, 147, 149], "pdbreader": [64, 82, 136], "pdbwriter": 64, "enhanc": [64, 79, 165], "multipdbwrit": 64, "pdbparser": [64, 125, 136], "retir": 64, "frill": [64, 65], "cryst1": [64, 65], "resseq": [64, 65, 109], "compnd": [64, 65], "bfactor": [64, 86, 90, 92, 113, 133, 136, 141], "expos": [64, 110, 141], "24": [64, 65, 100, 108, 141, 148, 149, 160], "47": [64, 65, 148, 149], "54": [64, 65, 148, 149], "achar": [64, 65], "46": [64, 65, 149], "66": [64, 65, 148, 149], "67": [64, 65, 83, 149], "76": [64, 65, 149], "unoffici": 64, "77": [64, 149], "lstring": [64, 65], "symbol": [64, 68, 141, 142, 149], "justifi": 64, "79": [64, 65, 148, 149], "80": [64, 65, 70, 113, 148, 149], "microscopi": 64, "unitari": 64, "2698": 64, "strip": [64, 109], "valus": 64, "aka": [64, 134], "bzip2": [64, 68, 74, 79, 105, 109, 111], "conect": [64, 86, 136], "endmdl": 64, "9999": 64, "record_typ": [64, 86, 136, 137], "accordingli": [64, 78, 86, 90, 109], "charat": 64, "2224": 64, "redindex": 64, "earlier": [64, 68], "100000": [64, 160], "remark_max_length": 64, "ones": [64, 78, 79, 86, 109, 111, 113, 141, 151], "_check_pdb_coordin": 64, "stringio": [64, 102, 109], "2512": 64, "_write_pdb_bond": 64, "_update_fram": 64, "_write_next_fram": [64, 72], "_write_timestep": 64, "nummdl": 64, "signal": 64, "traj": 64, "1753": 64, "2423": 64, "3144": 64, "spacegroup": 64, "zvalu": 64, "sanit": [64, 92], "2324": 64, "modelnumb": 64, "9998": 64, "write_all_timestep": 64, "extendedpdbread": [64, 125], "five": [64, 90, 91, 125], "reserv": [64, 92], "autodock": [65, 79, 137, 147], "pdbqtreader": 65, "gamm": 65, "partialchrg": 65, "gasteig": [65, 146], "peoe": 65, "nsc7810": 65, "inact": 65, "a7_7": 65, "c22_23": 65, "a9_9": 65, "a11_11": 65, "a17_17": 65, "c21_21": 65, "123456789": [65, 102], "inh": 65, "054": 65, "021": 65, "002": [65, 108, 160], "704": 65, "764": 65, "a3": 65, "975": 65, "431": 65, "a4": 65, "070": 65, "385": 65, "081": 65, "a5": 65, "062": 65, "073": 65, "238": [65, 148], "a6": 65, "306": 65, "456": 65, "226": [65, 148], "019": 65, "a7": 65, "885": 65, "114": [65, 148], "052": 65, "a8": [65, 109], "265": [65, 148], "621": 65, "449": 65, "a9": 65, "339": 65, "986": 65, "801": 65, "013": 65, "a10": 65, "176": [65, 111], "667": 65, "128": 65, "endroot": 65, "branch": 65, "a11": 65, "644": 65, "682": 65, "827": [65, 108], "a16": 65, "007": [65, 86, 148], "557": 65, "220": 65, "a12": 65, "522": 65, "485": 65, "882": 65, "a15": 65, "262": [65, 148], "209": [65, 148], "177": 65, "a17": 65, "144": [65, 148], "784": 65, "319": 65, "a14": 65, "981": 65, "910": 65, "a20": 65, "627": 65, "077": 65, "222": [65, 108, 148], "a13": 65, "749": 65, "912": [65, 91], "a19": 65, "777": 65, "285": 65, "267": 65, "a18": 65, "543": 65, "650": 65, "328": 65, "c21": 65, "834": 65, "113": [65, 148], "388": 65, "210": [65, 148], "774": 65, "915": 65, "581": 65, "oa": 65, "o3": [65, 88], "298": 65, "828": [65, 108], "237": [65, 148], "endbranch": 65, "c22": 65, "535": 65, "378": 65, "708": 65, "659": 65, "196": [65, 148], "059": 65, "torsdof": 65, "permiss": 65, "pdbqtwriter": 65, "spec": 65, "pdb2pqr": [66, 138], "adopt": 66, "apb": [66, 147], "whitespac": [66, 79, 88, 109, 113, 147, 148], "delimit": [66, 74, 88], "mandat": 66, "liber": 66, "recordnam": 66, "residuenam": 66, "residuenumb": 66, "shorter": [66, 70, 86, 146], "wildli": 66, "921": [66, 86], "307": [66, 86], "410": 66, "3000": 66, "8500": 66, "545": 66, "499": 66, "854": 66, "8000": 66, "hh11": 66, "042": [66, 86], "723": [66, 148], "4600": 66, "2245": 66, "white": [66, 79, 109, 148], "pqrreader": 66, "pqrwriter": 66, "lundborg2014": 67, "pytng": [67, 79], "has_pytng": 67, "virial": 67, "absenc": [67, 83, 98], "encourag": 67, "essenc": 67, "critic": 67, "henceforth": 67, "magnu": 67, "lundborg": 67, "rossen": 67, "apostolov": 67, "sp\u00e5ngberg": 67, "ander": 67, "g\u00e4rden\u00e4": 67, "spoel": 67, "erik": 67, "lindahl": 67, "260": [67, 109], "269": 67, "onlinelibrari": 67, "wilei": 67, "23495": 67, "tngreader": 67, "pend": 67, "additional_block": 67, "special_block": 67, "feedback": 68, "appreci": 68, "tracker": [68, 141, 165], "mailinglist": [68, 103], "Such": [68, 120], "ncdf": [68, 79], "ncdfreader": 68, "mmap": 68, "_veloc": [68, 79, 83], "_forc": [68, 79, 83], "angstroem": [68, 111], "faster": [68, 83, 86, 90, 103, 108, 146], "netcdf_fil": 68, "prevail": 68, "ncdfwriter": 68, "scale_factor": 68, "adher": [68, 165], "2323": 68, "cell_angl": 68, "2327": [68, 112], "ncdfpicklabl": [68, 82], "scale_tim": 68, "scale_cell_length": 68, "scale_cell_angl": 68, "scale_coordin": 68, "scale_veloc": 68, "scale_forc": 68, "kcal": [68, 160], "kilocalori": 68, "mole": 68, "455": [68, 112, 162, 163], "netcdf4": [68, 79], "compil": [68, 99], "506": 68, "traceback": 68, "scratch2": 68, "miniconda": 68, "py35": 68, "python3": [68, 77], "_netcdf4": 68, "cpython": 68, "35m": 68, "x86_64": 68, "linux": 68, "undefin": [68, 92, 99], "nc_inq_var_fletcher32": 68, "ldd": 68, "ld_library_path": 68, "hdf5": 68, "ld": 68, "obviou": 68, "unload": 68, "futurewarn": 68, "breach": 68, "ambertool": 68, "sander": 68, "echo": 68, "seen": [68, 156], "is_period": [68, 100], "maskandscal": 68, "64": [68, 109, 149], "fileobj": [68, 105], "trjreader": 68, "mdcrd": [68, 79], "crdbox": 68, "conflict": 68, "baseread": [69, 73], "trrreader": 69, "refresh_offset": [69, 72, 73], "lossless": [69, 73], "refresh": [69, 72, 73, 102], "trrwriter": 69, "ibisco": [70, 79], "yasp": [70, 79], "hardwar": 70, "architectur": [70, 99], "trzreader": [70, 82], "trzfilenam": 70, "weakref": 70, "_reader": 70, "_frame": [70, 79], "skip_timestep": [70, 79], "trzwriter": 70, "tinker": [71, 79, 142, 147], "arc": [71, 79, 108, 142, 147], "txyzread": 71, "libmdaxdr": [72, 82, 110], "xdrbaseread": 72, "_frame_to_t": 72, "hidden": [72, 112], "_offset": 72, "sync": 72, "writabl": [72, 109], "rebuilt": 72, "interprocesslock": 72, "xdrbasewrit": 72, "offsets_filenam": 72, "fileend": 72, "offset_filenam": 72, "read_numpy_offset": 72, "xtcreader": 73, "formart": 73, "advantag": [73, 109], "loss": 73, "xtcwriter": 73, "trjactori": 73, "xyzplugin": 74, "neither": [74, 109, 112], "nor": [74, 109], "xyzread": 74, "xyzwrit": 74, "whenc": [74, 109], "NOT": [74, 85, 103, 141], "blank": [74, 90, 92, 102], "atomn": 74, "molfil": [74, 100], "event": [74, 147], "consequ": [74, 92, 100, 155, 156], "invok": [74, 86, 113, 140], "default_remark": 74, "2692": 74, "frameiteratorbas": [75, 86], "resolv": 75, "frameiteratorsl": [75, 79], "frameiteratoral": 75, "frameiteratorindic": [75, 79], "singleframereaderbas": [75, 79, 92], "garbag": 75, "leak": 75, "mainli": 75, "inher": 75, "offload": 75, "_ts_kwarg": 75, "_read_first_fram": 75, "iobas": [75, 109], "reconstrunct": 75, "writerbas": [75, 79], "write_next_timestep": 75, "converterbas": 75, "bundl": 75, "primarili": [76, 84, 93, 98, 150], "backward": [76, 161], "ultim": 76, "stitch": 76, "part01": 76, "part02": 76, "part03": 76, "lammpsdump": [76, 79, 147], "__repr__": 76, "plain": [76, 148], "Not": [76, 79, 146], "_get_local_fram": 76, "indexerror": 76, "_appli": 76, "_get": 76, "attr": [76, 89, 92, 140], "_get_sam": 76, "verifi": [76, 86], "_read_fram": [76, 82], "active_read": 76, "interoper": [77, 120], "deleg": 77, "chemfilesread": 77, "anaconda3": 77, "mda3": 77, "adk_oplsaa": 77, "transpar": 77, "mol2_ligand": 77, "chemfiles_format": 77, "chemfileserror": 77, "chemfileswrit": 77, "writ": 77, "chemfilespickl": [77, 82], "min_chemfiles_vers": 77, "max_chemfiles_vers": 77, "check_chemfiles_vers": 77, "usabl": [77, 85, 114], "throw": 78, "ommit": 78, "get_writer_for": 78, "get_reader_for": [78, 79], "mmtf": [78, 79, 84, 92, 147, 150], "chainread": [78, 79, 84, 92], "format_hint": 78, "functionalityx": 78, "examin": 78, "nullwrit": [78, 81], "silent": [78, 79, 102], "mandatori": [78, 79, 157], "abstract": 79, "duck": 79, "simplifi": [79, 147], "factori": [79, 88], "analogi": 79, "indirectli": 79, "broad": 79, "emphasi": 79, "lossi": 79, "tng": [79, 84], "txyz": [79, 84, 147, 150], "gsd": [79, 82, 84, 147, 150], "gamess": [79, 84, 147, 150], "gm": [79, 84, 147], "semi": 79, "inpcrd": [79, 84], "restrt": 79, "netcdf": 79, "ent": [79, 147], "xpdb": [79, 125, 136, 147], "xpbd": [79, 147], "pdbqt": [79, 84, 147, 150], "pqr": [79, 84, 147, 150], "gromos96": [79, 147], "desr": [79, 84, 147, 150], "dl_poli": [79, 84, 147, 165], "dlpoli": [79, 84, 123], "namdbin": [79, 84], "fhiaim": [79, 84, 126, 147], "fhi": [79, 84, 147, 150], "h5md": [79, 82, 84, 112], "chemfil": [79, 82, 84], "_format_hint": 79, "_get_read": 79, "singlefram": 79, "250": [79, 108], "_init_unitcel": 79, "hook": 79, "_unitcel": 79, "miscellan": 79, "setter": 79, "_po": [79, 83], "ceas": 79, "__entry__": 79, "gracefulli": 79, "314": 79, "process_fram": 79, "100th": 79, "frameiter": 79, "extrem": 79, "sensibl": 79, "pico": [79, 160], "_aux": 79, "trajctori": 79, "trajectorywrit": 79, "delai": 79, "framewrit": 79, "blanket": 79, "wb": [80, 105], "ku": 80, "dk": [80, 149], "wouterboomsma": 80, "transfer": [80, 92], "straightforward": [80, 113], "Of": 80, "cours": [80, 129, 156], "decis": [80, 109], "transfer_to_memori": [80, 86, 92], "universe2": 80, "coordinate_arrai": 80, "acf": 80, "caf": 80, "fca": 80, "cfa": 80, "1041": 80, "_kwarg": [80, 109], "get_arrai": 80, "set_arrai": 80, "favour": [80, 91], "dev": [81, 161], "suppress": 81, "idea": [82, 111], "__getstate__": 82, "__setstate__": 82, "__reduce__": 82, "consult": [82, 99, 110], "tell": [82, 100, 101, 105, 109], "But": [82, 109], "mayb": [82, 146], "_seek": 82, "ing": 82, "_read_next_timestep": 82, "crucial": [82, 86, 113], "machineri": 82, "pickliabl": 82, "test_multiprocess": 82, "test_pickleio": 82, "uint64": 83, "has_": 83, "hardcod": 83, "from_coordin": 83, "from_timestep": 83, "weren": 83, "81138802": 83, "58312416": 83, "58049774": 83, "45159912": 83, "71": [83, 148, 149], "56504822": 83, "mdamath": [83, 109, 110], "triclinic_vector": [83, 103, 109], "copy_slic": 83, "sel": [83, 86, 119, 120], "new_t": [83, 151], "rework": 83, "concern": [84, 109, 110, 150], "null": [84, 100, 103], "programm": 84, "anyon": 84, "serializ": 84, "multiframereadertest": 84, "basereadertest": 84, "speechwrapp": 85, "person": 85, "whoami": 85, "am": [85, 148], "bob": 85, "hello": 85, "converterwrapp": [85, 86], "destin": [85, 102], "lowercas": 85, "metaclass": [85, 88], "magic": 85, "parmed_structur": 85, "11302": 85, "segmentgroup": [86, 90, 92, 94, 95, 109], "atom3": [86, 91], "aslic": 86, "ag_concat": 86, "conserv": [86, 149], "contrari": [86, 149], "synomym": 86, "ag_union": 86, "dedupl": [86, 109], "isdisjoint": 86, "issubset": 86, "is_strict_subset": 86, "issuperset": 86, "is_strict_superset": 86, "intersect": [86, 91, 113], "symmetric_differ": 86, "isol": [86, 113], "g_pickl": 86, "u_pickl": 86, "h_pickl": 86, "aforement": 86, "detach": 86, "reattach": 86, "unives": 86, "instant": [86, 92], "accumul": 86, "acuumul": 86, "contract": [86, 90], "molnum": [86, 90, 131, 147], "prop": [86, 88, 113], "align_principal_axi": [86, 90], "principal_ax": [86, 90], "topologyobject": [86, 93], "dima2004b": [86, 90, 112], "asuniqu": 86, "ix": [86, 89, 91, 108, 113], "int64": [86, 90, 99, 103, 109], "ag3": [86, 113], "bbox": [86, 149], "enclos": 86, "2x3": 86, "xmin": [86, 104, 109, 162, 163], "ymin": [86, 104, 162, 163], "xmax": [86, 104, 109, 162, 163], "ymax": [86, 104, 162, 163], "bsphere": 86, "xcen": 86, "ycen": 86, "zcen": 86, "intact": [86, 90], "center_of_charg": [86, 90], "vert": [86, 90], "m_i": [86, 90], "dipole_mo": [86, 90], "mu": [86, 90], "magnitud": [86, 90], "dipole_vector": [86, 90], "q_": [86, 90], "coc": [86, 90], "fragindic": [86, 90], "interconnect": [86, 90], "get_connect": 86, "typenam": 86, "topologygroup": [86, 91, 92], "ureybradlei": [86, 90, 91], "groupbi": 86, "topattr": 86, "010999999999999": 86, "462": 86, "116": [86, 141, 148, 149], "999000000000001": 86, "011": [86, 112, 148], "169": [86, 112, 162, 163], "vdwradii": [86, 92, 146, 148], "fudge_factor": [86, 92, 146], "lower_bound": [86, 92, 146], "vdw": [86, 146, 148], "guess_angl": [86, 146], "guess_dihedr": [86, 146], "mislead": 86, "gyration_mo": [86, 90], "gyrat": [86, 90, 111], "tensor": [86, 90], "dima2004a": [86, 90, 112], "principle_moments_of_gyr": [86, 90], "improperdihedr": [86, 91], "0a": 86, "shell1": 86, "shell2": 86, "superset": 86, "isuniqu": 86, "ix_arrai": 86, "moment_of_inertia": [86, 90], "big": [86, 90], "otim": [86, 90], "i_": [86, 90], "m_k": [86, 90], "delta_": [86, 90], "_k": [86, 90], "n_fragment": [86, 90], "n_segment": [86, 89, 90, 92], "pack_into_box": 86, "boxlength": 86, "l_i": 86, "lfloor": 86, "rfloor": 86, "e1": [86, 90], "e3": [86, 90], "axis_vector": [86, 90], "quadrupole_mo": [86, 90], "quadrupol": [86, 90], "gray1984": [86, 90], "traceless": [86, 90], "quadropol": [86, 90], "unsymmetr": [86, 90], "quadrupole_tensor": [86, 90], "tr": [86, 90, 109], "rightarrow": 86, "rotatebi": [86, 157], "othersel": 86, "rtol": [86, 88], "08": [86, 88, 108, 148], "rdkit_kwarg": [86, 88, 92, 113], "smarts_kwarg": [86, 88, 113], "selgroup": [86, 88], "isclos": [86, 88], "getsubstructmatch": [86, 88, 113], "preexist": 86, "parenthes": [86, 88, 113], "dmpc": [86, 113], "3420": [86, 113], "notho": 86, "1250": 86, "nucleicbackbon": [86, 113], "identfi": [86, 113], "esoter": [86, 113], "colon": [86, 109, 113], "163b": 86, "163": 86, "162": [86, 148], "sensic": [86, 113], "moltyp": [86, 90, 113, 131, 141, 147, 149], "protein_a": [86, 113], "daylight": [86, 113], "usechir": [86, 113], "maxmatch": [86, 88, 113], "occasion": [86, 90, 113], "stereocent": [86, 113], "formalcharg": [86, 90, 113, 125, 136], "aren": [86, 109, 113], "lysin": [86, 113], "alanin": [86, 113], "sphlayer": [86, 113], "cog": [86, 113], "isolay": [86, 113], "iso": [86, 160], "externalradiu": [86, 113], "cylind": [86, 113], "cylay": [86, 113], "innerradiu": [86, 113], "bynum": [86, 113], "entireti": [86, 113], "lazili": [86, 91, 101, 113], "fullgroup": [86, 113], "shape_paramet": [86, 90, 112], "superflu": [86, 90], "keyfunc": 86, "multidimension": 86, "447": 86, "741": 86, "595": [86, 108], "926": [86, 109], "632": 86, "619": 86, "046": 86, "argsort": 86, "total_charg": [86, 90], "total_mass": [86, 87, 90], "4x4": [86, 108], "pack": [86, 103, 159], "Be": [86, 148], "all_frag_atom": 86, "apply_pbc": [86, 99], "meaningless": 86, "euclidian": 86, "filenamefmt": 86, "trjname": 86, "pbd": 86, "trjname_fram": 86, "jmol": [86, 120], "spt": [86, 117, 120], "token": [86, 88], "s_": 86, "topologyattr": [86, 88, 89, 92, 93, 113], "groupbas": 86, "hoc": [86, 146, 148], "resindex": [86, 89, 90], "rg": [86, 90], "rg2": 86, "chi1_select": [86, 90], "cb_name": [86, 90], "cb": [86, 90], "cg_name": [86, 90], "cg": [86, 90, 131], "cg1": [86, 90], "omega_select": [86, 90], "ci": [86, 90, 99], "prolin": [86, 90], "psi_select": [86, 90], "seqrecord": [86, 90], "seqio": [86, 90], "myseq1": [86, 90], "myprotein": [86, 90], "record1": [86, 90], "record2": [86, 90], "iupac": [86, 90], "segindex": [86, 89, 90], "sg2": 86, "base_group": 86, "water_shel": [86, 87], "water_shell_prev": 86, "is_uptod": 86, "stale": 86, "caught": 86, "erron": 86, "date": [86, 165], "reevalu": 86, "componentbas": 86, "bonded_atom": [86, 90], "fragindex": [86, 90], "cg2": [86, 90], "1970": [86, 90], "singular": [86, 88, 90, 113], "plural": 86, "topology_fil": 87, "trajectory_fil": 87, "invis": 88, "aromaticselect": 88, "backboneselect": 88, "ot": 88, "termini": 88, "bb_atom": 88, "100x": 88, "baseselect": 88, "nucleobas": 88, "n9": 88, "n7": 88, "c8": 88, "n2": [88, 109], "c5m": 88, "base_atom": 88, "boolselect": 88, "bynumselect": 88, "byresselect": 88, "resindic": [88, 90], "2669": 88, "2672": 88, "float_pattern": [88, 113], "2e": 88, "floatrangeselect": 88, "int_pattern": [88, 113], "sign": [88, 104, 111], "nucleicbackboneselect": 88, "o5": 88, "nucleicselect": 88, "awk": 88, "resi": 88, "printf": 88, "top_all27_prot_na": 88, "rtf": 88, "ura": 88, "cyt": 88, "gua": 88, "thy": 88, "da": 88, "dc": [88, 149], "dg": 88, "nucl_r": 88, "nucleicsugarselect": 88, "sug_atom": 88, "propertyselect": 88, "proteinselect": 88, "prot_r": 88, "top_all27_prot_lipid": 88, "convert_aa_cod": [88, 109], "range_pattern": [88, 113], "rangeselect": 88, "residselect": 88, "sameselect": 88, "subkeyword": [88, 113], "selectionpars": 88, "recurs": 88, "descent": 88, "climb": 88, "engr": 88, "mun": 88, "theo": 88, "misc": 88, "exp_pars": 88, "nest": [88, 102, 109], "grammar": 88, "xpression": 88, "inari": 88, "nari": 88, "erm": 88, "anticip": 88, "selectstr": 88, "goe": 88, "singlecharselect": 88, "smartsselect": 88, "rdkit_warg": 88, "thrown": 88, "gen_selection_class": 88, "per_object": [88, 90], "codebas": 88, "_topologyattrmeta": 88, "_protostringselect": 88, "_selector": 88, "clash": 88, "resnameselect": 88, "_selectionmeta": 88, "grab_not_keyword": 88, "pop": 88, "hit": 88, "dequ": 88, "is_keyword": 88, "selectiondict": 88, "logicoper": 88, "eof": 88, "join_separated_valu": 88, "return_empty_on_appli": 88, "363": 89, "n_re": 89, "n_seg": 89, "atom_resindex": [89, 92], "residue_segindex": [89, 92], "heirarchi": 89, "add_residu": [89, 92], "new_attr": 89, "residx": 89, "_add_new": 89, "resiz": [89, 102], "add_seg": [89, 92], "wasn": 89, "deepcopi": [89, 90], "del_topologyattr": [89, 92], "guessed_attribut": 89, "read_attribut": 89, "transtabl": 89, "upward": 89, "downward": 89, "_1": [89, 103], "_2d": 89, "lazi": 89, "ra": [89, 148], "sr": [89, 148, 149], "atoms2residu": 89, "aix": 89, "rix": 89, "atoms2seg": 89, "move_atom": 89, "move_residu": 89, "residues2atoms_1d": 89, "residues2atoms_2d": 89, "raix": 89, "residues2seg": 89, "segments2atoms_1d": 89, "segments2atoms_2d": 89, "saix": 89, "segments2residues_1d": 89, "segments2residues_2d": 89, "srix": 89, "make_downshift_arrai": 89, "upshift": 89, "nparent": 89, "downshift": 89, "children": 89, "atom2r": 89, "never": [89, 155], "topologypars": 90, "grai": 90, "keith": 90, "gubbin": 90, "joslin": 90, "monograph": 90, "oxford": 90, "press": [90, 108], "york": 90, "isbn": 90, "855602": 90, "atomattr": 90, "get_atom": 90, "get_residu": 90, "child": [90, 114], "get_seg": 90, "set_atom": 90, "set_residu": 90, "set_seg": 90, "segmentattribut": 90, "atomstringattr": 90, "atomindic": 90, "unambigu": 90, "epsilon14": 90, "lj": [90, 140, 149], "gbscreen": 90, "born": 90, "screen": [90, 102], "imaginari": [90, 108], "nonbondedindic": 90, "nonbond": [90, 148], "rmin14": 90, "rmin": 90, "recordtyp": [90, 138], "residueattr": 90, "residuestringattr": 90, "segmentattr": 90, "segmentstringattr": 90, "solventradii": 90, "bfactor_sett": 90, "bfactors_sett": 90, "skeleton": 90, "coerc": 90, "from_blank": 90, "topologyattribut": [90, 92, 133, 136], "is_guess": [90, 91], "apex": [91, 147], "__slots__": 91, "coupl": 91, "span": [91, 99, 103], "improper_tors": 91, "topologydict": 91, "topdict": 91, "categoris": 91, "ethanol": [91, 92], "td": 91, "smartli": 91, "ever": 91, "bondidx": 91, "btype": 91, "tg2": 91, "tg": 91, "select_bond": 91, "atomgroup_intersect": 91, "shortcut": [91, 113], "overhaul": 91, "selectbond": 91, "from_indic": 91, "dump_cont": 91, "to_indic": [91, 92], "radian": [91, 99, 103, 108], "predefin": 91, "atom4": 91, "_topologi": [91, 146], "urei": [91, 141], "bradlei": [91, 141], "ti": [92, 148], "all_coordin": 92, "topology_format": [92, 131, 147, 150], "in_memory_step": 92, "topologyreaderbas": [92, 134, 144, 147], "nth": [92, 148], "traj1": 92, "traj2": 92, "newr": 92, "alias": [92, 133, 136], "add_angl": 92, "hashabl": 92, "add_bond": 92, "ow_hw1": 92, "ow_hw2": 92, "ow_mw": 92, "mw": [92, 148], "add_dihedr": 92, "add_improp": 92, "hasattr": 92, "delete_angl": 92, "delete_bond": 92, "delete_dihedr": 92, "delete_improp": 92, "from_smil": 92, "smile": 92, "addh": 92, "generate_coordin": 92, "numconf": 92, "allchem": 92, "embedmultipleconf": 92, "cco": 92, "etkdgv3": 92, "param": [92, 149, 152], "edit": [92, 109], "upto": 92, "relabel": 92, "u3": 92, "assert": [92, 109], "conversionwarn": 94, "duplicatewarn": [94, 109], "aris": 94, "fileformatwarn": 94, "missingdatawarn": 94, "selectionwarn": 94, "streamwarn": [94, 109], "everywher": [94, 107], "atomneighborsearch": 95, "atom_group": 95, "_supportsarrai": [95, 103, 106], "_nestedsequ": [95, 103, 106], "capped_dist": [95, 99], "atom_list": 95, "calc_dist": 97, "mateusz": 98, "bieniek": 98, "acount": 98, "inspir": [98, 104], "seemingli": 98, "dispar": 98, "cholesterol": 98, "flop": 98, "gu2019": 98, "survivalprob": 98, "paola": 98, "multiscal": 98, "142": 98, "224907": 98, "4922445": 98, "secchi": [98, 112], "toma": [98, 112], "perez": [98, 112], "acl": [98, 112], "seung": [98, 112], "gu": [98, 112], "kang": [98, 112], "tien": [98, 112], "huynh": [98, 112], "yerko": [98, 112], "escalona": [98, 112], "jose": [98, 112], "antonio": [98, 112], "garat": [98, 112], "agustin": [98, 112], "mart": 98, "\u00ed": 98, "nez": 98, "isaac": [98, 112], "garc": 98, "juan": [98, 112], "\u00e1": 98, "ez": 98, "ruhong": [98, 112], "zhou": [98, 112], "pocket": [98, 112], "cx26": [98, 112], "hemichannel": [98, 112], "599": [98, 112], "612": [98, 112], "bpj": 98, "037": 98, "ruo": 98, "svetlana": 98, "baoukina": 98, "peter": 98, "tieleman": 98, "2064": 98, "2070": 98, "8b00933": 98, "list_of_set": 98, "encod": [98, 102, 108], "said": 98, "transloc": 98, "bracket": 98, "autocorel": 98, "timeseries_data": 98, "evolut": 98, "correct_intermitt": 98, "preprocess": [98, 155], "probabilti": 98, "consit": 98, "used_openmp": 99, "c_distanc": 99, "c_distances_openmp": 99, "standalon": [99, 132], "simd": 99, "vectoris": 99, "calc_bond": 99, "isa": 99, "vcl2": 99, "satisfi": [99, 140], "repositori": 99, "max_cutoff": [99, 104], "min_cutoff": 99, "return_dist": 99, "kdtree": [99, 106, 110], "bruteforc": 99, "nsgrid": [99, 110], "pkdtree": [99, 110], "n_pair": 99, "enumer": 99, "coord1": 99, "coord2": [99, 107], "periodickdtre": [99, 110], "fastn": [99, 104], "temporarili": 99, "2919": 99, "2229": 99, "2345": 99, "2670": 99, "2930": 99, "self_capped_dist": 99, "self_search": [99, 104], "coords1": [99, 107, 109], "coords2": [99, 107, 109], "linalg": [99, 103, 108, 111], "bondlength": 99, "calc_angl": 99, "coords3": 99, "apic": 99, "coords4": 99, "quadruplet": [99, 147], "3rd": 99, "calc_tors": 99, "newcoord": 99, "transform_rto": 99, "reciproc": 99, "transform_stor": 99, "augment_coordin": [99, 106], "vec": 99, "augment": [99, 146], "thick": 99, "augmented_index": 99, "original_index": 99, "all_coord": [99, 104], "undo_aug": [99, 106], "nreal": 99, "counterpart": 99, "minimize_vector": 99, "naiv": 99, "minimized_vector": 99, "_distanc": 99, "caution": 99, "_distances_openmp": 99, "dcdfile": 100, "namedtupl": [100, 101], "natom": [100, 101, 109, 110, 149], "besid": [100, 101, 151], "acknowledg": 100, "catdcd": 100, "4d": 100, "mdawiki": 100, "charmm_bitfield": 100, "bitfield": 100, "dcd_is_charmm": 100, "0x01": 100, "dcd_has_4dim": 100, "0x02": 100, "dcd_has_extra_block": 100, "0x04": 100, "charm": 100, "dcdframe": 100, "readfram": 100, "write_head": 100, "239": 100, "pretend": 100, "xtcfile": 101, "trrfile": 101, "read_direct_xvf": 101, "calc_offset": 101, "set_offset": 101, "trrframe": 101, "haven": 101, "_lambda": 101, "cartes": 101, "read_direct_x": 101, "xtcframe": 101, "strang": 101, "getlogg": 102, "modulenam": 102, "stop_log": 102, "progressmet": 102, "nullhandl": 102, "handler": [102, 109], "addhandl": 102, "advic": 102, "formatt": 102, "emit": [102, 136, 155], "whatev": 102, "__": 102, "tty": 102, "devic": 102, "desc": 102, "unspecifi": 102, "inf": 102, "resort": 102, "statist": 102, "eta": 102, "trace": [102, 103, 106], "textiowrapp": [102, 105], "sy": 102, "write_byt": 102, "ncol": 102, "stai": 102, "fallback": 102, "mininterv": 102, "maxinterv": 102, "minit": 102, "dynamic_minit": 102, "thread": [102, 110, 151, 152, 153, 154, 155, 156, 157, 158, 159], "cpu": 102, "errat": 102, "unicod": 102, "unit_scal": 102, "kilo": 102, "mega": 102, "dynamic_ncol": 102, "nrow": 102, "gui": [102, 119, 120], "instantan": [102, 112, 162, 163], "bar_format": 102, "l_bar": 102, "r_bar": 102, "0f": 102, "n_fmt": 102, "total_fmt": 102, "rate_fmt": 102, "var": 102, "elapsed_": 102, "rate_noinv": 102, "rate_noinv_fmt": 102, "rate_inv": 102, "rate_inv_fmt": 102, "unit_divisor": 102, "remaining_": 102, "set_postfix": 102, "lock_arg": 102, "hide": 102, "jupyt": 102, "notebook": 102, "clear_handl": 102, "logger_nam": 102, "vec1": 103, "vec2": 103, "collinear": 103, "lot": 103, "fuss": 103, "pdot": 103, "pnorm": 103, "bc": [103, 148], "cd": [103, 108, 112, 148], "\u03c0": 103, "stp": 103, "vec3": 103, "epip": 103, "_3": 103, "sarrus_det": 103, "sarru": 103, "det": 103, "triclinic_box": 103, "wikipedia": 103, "lattice_const": 103, "_type": 103, "_array_lik": 103, "_nested_sequ": 103, "_dtype_lik": 103, "_supportsdtyp": 103, "supportsindex": 103, "abc": 103, "_dtypedict": 103, "tsjerk": 103, "wassenaar": 103, "box_matrix": 103, "box_volum": 103, "necessit": 103, "frag": 103, "find_frag": 103, "bondlist": 103, "distinct": 103, "int32": 103, "versionadd": 103, "greatli": 104, "appendix": [104, 160], "552": 104, "frenkel": 104, "smit": 104, "brief": [104, 161], "cellsiz": 104, "rewrot": 104, "1290": 104, "cube": 104, "lmax": 104, "lmin": 104, "pseudobox": 104, "gridsearch": 104, "search_coord": 104, "nsresult": 104, "get_pair": 104, "get_pair_dist": 104, "regist": 104, "hald": 104, "demand": 104, "coontain": 104, "composit": [105, 111], "fileio": [105, 149], "wider": 105, "bufferedread": 105, "buffer_wrap": 105, "text_wrap": 105, "bz2file": 105, "xyz_bz2": 105, "pathlik": 105, "xb": 105, "compresslevel": 105, "gzipfil": 105, "mmtf_gz": 105, "1218": 105, "trivial": 105, "bytesio": 105, "discern": 105, "slowest": 105, "mtime": 105, "timestamp": 105, "rt": [105, 109], "leafsiz": 106, "condtion": 106, "treatment": 106, "suffer": 106, "poor": 106, "down": [106, 108], "get_indic": 106, "search_pair": 106, "search_tre": 106, "set_coord": 106, "pittsburgh": 107, "delgado": 107, "cornel": 107, "arizona": 107, "jla65": 107, "pitt": 107, "edu": 107, "bsd": [107, 108], "pyqcprot": 107, "brandei": 107, "dmitri": [107, 112], "1561": [107, 112], "1563": [107, 112], "conf": 107, "float64_t": 107, "condid": 107, "npfloat64_t": 107, "3xn": 107, "nx3": 107, "innerproduct": 107, "candid": 107, "e0": 107, "fastcalcrmsdandrot": 107, "euler": 108, "arcbal": 108, "christoph": 108, "gohlk": 108, "laboratori": 108, "fluoresc": 108, "california": 108, "irvin": 108, "claus": 108, "revis": 108, "epydoc": 108, "invert": 108, "inv": 108, "m0": 108, "m1": 108, "opengl": 108, "glmultmatrixd": 108, "jy": 108, "kz": 108, "sxyz": 108, "ryxi": 108, "tatic": 108, "otat": 108, "pariti": 108, "goldman": 108, "gem": 108, "472": 108, "475": [108, 112, 162, 163], "morgan": 108, "kaufmann": 108, "usa": 108, "1990": 108, "ken": 108, "shoemak": 108, "kirk": 108, "editor": [108, 112], "124": 108, "academ": [108, 112], "1992": 108, "charl": 108, "karnei": 108, "604": 108, "jmgm": 108, "itzhack": 108, "guidanc": 108, "1085": 108, "1087": 108, "2514": 108, "4654": 108, "vii": 108, "perspect": 108, "jame": 108, "arvo": 108, "ii": 108, "338": 108, "341": 108, "san": 108, "diego": 108, "b9780080507545500724": 108, "b978": 108, "050754": 108, "50072": 108, "spencer": 108, "320": 108, "323": 108, "b9780080507545500694": 108, "50069": 108, "324": 108, "331": 108, "b9780080507545500700": 108, "50070": 108, "heckbert": 108, "iv": 108, "229": 108, "192": [108, 148], "ljll": 108, "upmc": 108, "fr": [108, 148], "scientif": [108, 109, 112, 165], "20visualis": 108, "20k": 108, "20quaternion": 108, "diebel": 108, "attitud": 108, "kabsch": 108, "sep": 108, "s0567739478001680": 108, "berthold": 108, "horn": 108, "optic": 108, "629": 108, "642": 108, "1987": 108, "1364": 108, "josaa": 108, "000629": 108, "jmp": 108, "waveren": 108, "intel": 108, "asmo": 108, "eng": 108, "293748": 108, "234": 108, "345": 108, "xaxi": 108, "yaxi": 108, "zaxi": 108, "identity_matrix": 108, "rx": 108, "ry": 108, "rz": 108, "concatenate_matric": 108, "euler_from_matrix": 108, "rxyz": 108, "euler_matrix": 108, "is_same_transform": 108, "qx": 108, "quaternion_about_axi": 108, "qy": 108, "qz": 108, "quaternion_multipli": 108, "rq": 108, "quaternion_matrix": 108, "scale_matrix": 108, "translation_matrix": 108, "shear_matrix": 108, "random_rotation_matrix": 108, "rand": 108, "persp": 108, "decompose_matrix": 108, "tan": 108, "compose_matrix": 108, "trackbal": 108, "ball": 108, "drag": 108, "275": 108, "90583455": 108, "setax": 108, "setconstrain": 108, "400": 108, "2055924": 108, "cursor": 108, "constrain": 108, "getconstrain": 108, "arcball_nearest_axi": 108, "degen": 108, "r1": 108, "euler_from_quaternion": 108, "99810947": 108, "06146124": 108, "projection_from_matrix": 108, "projection_matrix": 108, "p0": 108, "p1": 108, "quaternion_imag": 108, "quaternion_r": 108, "reflection_from_matrix": 108, "reflection_matrix": 108, "v0": 108, "rotation_from_matrix": 108, "direc": 108, "rotaxi": 108, "scale_from_matrix": 108, "s0": 108, "shear_from_matrix": 108, "cross": [108, 120, 141, 149, 162, 163], "translation_from_matrix": 108, "anywher": [109, 152], "mathemat": [109, 110], "openani": [109, 114], "datasourc": 109, "isstream": 109, "socket": 109, "ead": 109, "rite": 109, "startswith": 109, "urllib2": 109, "urlopen": 109, "bzip": 109, "ppend": 109, "openf": 109, "greedy_splitext": 109, "extsep": 109, "splitext": 109, "home": 109, "joe": 109, "jai": 109, "stackoverflow": 109, "377017": 109, "realpath": 109, "get_ext": 109, "check_compressed_format": 109, "uppercas": [109, 146], "format_from_filename_extens": 109, "guess_format": 109, "insuffici": 109, "ordinari": 109, "pdb_": 109, "982": 109, "26000214": 109, "98200226": 109, "92599964": 109, "recognit": 109, "glue": 109, "thing": 109, "remot": 109, "seekabl": 109, "fake": 109, "expandvar": 109, "expandus": 109, "close_stream": 109, "fileno": 109, "descriptor": 109, "fsync": 109, "seek_set": 109, "seek_cur": 109, "seek_end": 109, "writelin": 109, "asiter": 109, "hasmethod": 109, "unique_int_1d": 109, "unique_row": 109, "arr": 109, "return_index": 109, "answer": 109, "r_idx": 109, "dupic": 109, "blocks_of": 109, "nblock": 109, "miniblock": 109, "group_same_or_consecutive_integ": 109, "fortranread": 109, "fortran": [109, 140], "fortran_format_regex": 109, "2i10": 109, "2x": 109, "3f20": 109, "f20": 109, "atomformat": 109, "totr": 109, "number_of_match": 109, "parse_fortran_format": 109, "edit_descriptor": 109, "totallength": 109, "tl": [109, 148], "ss": 109, "bn": 109, "bz": 109, "ew": 109, "dee": 109, "ifeax": 109, "numfmt": 109, "expresss": 109, "ifelax": 109, "fixedwidth_bin": 109, "nd": [109, 148], "correpsond": 109, "ltruncate_int": 109, "ndigit": 109, "1234": 109, "flatten_dict": 109, "parent_kei": 109, "shallow": 109, "6027615": 109, "1897": 109, "imran": 109, "amino_acid_cod": 109, "inverse_aa_cod": 109, "parse_residu": 109, "lys300": 109, "hz1": 109, "k300": 109, "4gb300": 109, "h6o": 109, "4gb": 109, "conv_float": 109, "comprehens": [109, 112, 165], "universe_valid": 109, "_cach": 109, "def__init__": 109, "keynam": 109, "lookup": [109, 148, 160], "others": 109, "_valid": 109, "store_init_argu": 109, "static_vari": 109, "equip": 109, "msg": 109, "279586": 109, "claudiu": 109, "warn_if_not_uniqu": 109, "groupmethod": 109, "assur": 109, "check_coord": 109, "coord_nam": 109, "allow_singl": 109, "enforce_copi": 109, "check_lengths_match": 109, "enforce_dtyp": 109, "convert_singl": 109, "reduce_result_if_singl": 109, "allow_atomgroup": 109, "coordsum": 109, "c_contigu": 109, "err": 109, "got": 109, "check_atomgroup_not_empti": 109, "deprecationwarn": 109, "old_nam": 109, "rebind": 109, "__name__": 109, "restructur": 109, "sphinx": 109, "role": 109, "new_nam": 109, "old_func": 109, "oldfunc": 109, "confus": 109, "new_func": 109, "_deprec": 109, "dedent_docstr": 109, "dedent": 109, "__doc__": 109, "textwrap": 109, "check_box": 109, "boxtyp": 109, "ortho": 109, "tri_vec": 109, "checked_box": 109, "cecked_box": 109, "why": 109, "framework": [110, 152, 165], "elsewher": 110, "multitud": 110, "neighborsearch": 110, "pxd": 110, "cimport": 110, "imagin": 110, "cdef": 110, "make_timestep": 110, "s4ake": 111, "rgyr": 111, "ipython": 111, "onlin": 111, "invari": 111, "gromo": [111, 128, 146, 148], "prompt": 111, "elementari": [111, 160], "adk_dim": 111, "easiest": [111, 165], "u_dims_adk": 111, "u_eq_adk": 111, "beckstein2009": 111, "ten": 111, "perilla": 111, "woolf": [111, 112], "insight": 111, "biol": [111, 112], "009": 111, "aspect": [111, 162], "rmsfit_qcp": 111, "potential_profil": 111, "nativecontact": 111, "multimer": 111, "transmembran": 111, "multim": 111, "dcd2xtc": 111, "amber2dcd": 111, "make_mthk_tetram": 111, "gowers2016": [112, 165], "ask": [112, 165], "upcom": 112, "supersed": 112, "agraw": 112, "2319": 112, "21787": 112, "barnoud": 112, "reddi": [112, 162, 163], "melo": 112, "domanski": 112, "buchoux": 112, "kennei": 112, "benthal": 112, "rostrup": 112, "15th": 112, "confer": 112, "austin": 112, "tx": 112, "25080": 112, "majora": 112, "629e541a": 112, "00e": 112, "theobald2005b": 112, "liu2010b": 112, "bansal2000b": 112, "hall2007b": 112, "secchi2014b": 112, "martinez": 112, "garcia": 112, "saez": 112, "seyler2015b": 112, "sl": 112, "mf": 112, "e1004568": 112, "tiberti2015b": 112, "e1004415": 112, "streamlin": [112, 163, 164], "streamlines_3d": [112, 162, 164], "chavent2014b": 112, "chavent": [112, 162, 163], "dahl": [112, 162, 163], "goos": [112, 162, 163], "jobard": [112, 162, 163], "methodologi": [112, 162, 163], "faradai": [112, 162, 163], "1039": [112, 162, 163], "c3fd00145h": [112, 162, 163], "smith2019": 112, "ziolek": 112, "gazzarrini": 112, "owen": 112, "lorenz": 112, "hyaluron": 112, "synovi": 112, "pccp": 112, "9845": 112, "9857": 112, "c9cp01532a": 112, "amadei": 112, "ceruso": 112, "nola": 112, "424": 112, "sici": [112, 160], "1097": 112, "0134": 112, "19990901": 112, "aid": [112, 160], "prot5": 112, "macia": 112, "lopez": 112, "romero": 112, "lupyan": 112, "zerbino": 112, "ortiz": 112, "deform": 112, "superfamili": 112, "biophi": 112, "88": [112, 148, 149], "1291": 112, "1299": 112, "1529": 112, "biophysj": 112, "052449": 112, "yang": 112, "song": 112, "carriquiri": 112, "jernigan": 112, "hiv": 112, "proteas": 112, "321": 112, "330": 112, "calandrini": 112, "pellegrini": 112, "calligari": 112, "hinsen": 112, "kneller": 112, "nmoldyn": 112, "spectroscop": 112, "experi": 112, "sfn": 112, "201": 112, "232": [112, 148], "1051": 112, "201112010": 112, "buyl": 112, "877": 112, "21105": 112, "joss": 112, "00877": 112, "dima": 112, "thirumalai": 112, "asymmetri": 112, "denatur": 112, "6564": 112, "6570": 112, "jp037128y": 112, "neumann": 112, "841": 112, "858": 112, "00268978300102721": 112, "buyl2013": 112, "colberg": 112, "h\u00f6fling": 112, "185": 112, "cpc": 112, "018": 112, "jakupov": 112, "meghann": 112, "agarw": 112, "chri": 112, "callowai": 112, "dillon": 112, "niederhut": 112, "shupe": 112, "ed": 112, "2021": [112, 141], "1b6fd038": 112, "005": 112, "yourscript": 112, "yourmodul": 112, "duecredit_en": 112, "bibtex": 112, "kalp": 113, "sixth": 113, "circumv": 113, "mytopologyattr": 113, "tricki": 113, "exhaust": 113, "fnmatch": 113, "gl": 113, "glx29": 113, "referenc": 113, "convention": 113, "arbitrarili": 113, "ag_upd": 113, "chained_ag_upd": 113, "static_ag": 113, "concatent": 113, "570": 113, "452": 113, "selectionwriterbas": [114, 115, 116, 117, 118, 119, 120], "_write_head": 114, "_translat": 114, "_write_tail": 114, "numterm": [114, 115, 116, 117, 118, 119], "preambl": [114, 115, 116, 117, 118, 119], "commentfmt": [114, 115, 116, 117, 118, 119], "presum": [114, 115, 116, 117, 118, 119], "macro": [115, 116, 117, 118, 119, 120], "mdanalysis001": [115, 116, 117, 119], "write_preambl": [115, 116, 117, 118, 119], "gromacs_command": 116, "mdanalysis002": 116, "default_numterm": 117, "singleword": [119, 120], "favourit": 120, "mda_protein": 120, "mda_mdanalysi": 120, "upper_satur": 120, "upper_sat": 120, "lower_satur": 120, "lower_sat": 120, "upper_unsatur": 120, "upper_unsat": 120, "lower_unsatur": 120, "lower_unsat": 120, "get_writ": 120, "defaultformat": 120, "briefli": 121, "atomno": 122, "resno": 122, "crdparser": [122, 147], "dmsparser": [124, 147], "atomnum": 124, "extendedpdbpars": [125, 136], "assembli": [127, 147], "symmetri": 127, "gmsparser": [127, 147], "gropars": [128, 147], "variat": 129, "bodi": [129, 149], "hoomdxmlpars": [130, 147], "placehold": 130, "anywai": 130, "chargegroup": [131, 147], "infer_system": 131, "moleculetyp": 131, "itppars": [131, 147], "include_dir": 131, "usr": 131, "itp_tip5p": 131, "hw2_charg": 131, "topol": 131, "tip5p": 131, "molnam": 131, "nrexcl": 131, "ifndef": 131, "hw1_charg": 131, "241": 131, "endif": 131, "nr": [131, 149], "opls_118": 131, "opls_119": 131, "opls_120": 131, "lp1": 131, "lp2": 131, "ifdef": 131, "extra_atom": 131, "lp3": 131, "lp4": 131, "settl": [131, 141, 149], "lammpsdataconvert": 132, "atom_styl": 132, "7151744275286681e": 132, "8684434743140471e": 132, "9285127961842125e": 132, "myfil": 132, "grab_datafil": 132, "read_data_timestep": 132, "ts_class": 132, "ts_kwarg": 132, "lammpsdumppars": 132, "1901": [133, 136], "mmtfparser": 133, "mol2pars": [134, 147], "subst_nam": 134, "fledg": 135, "minimalpars": 135, "incorrect": 136, "2422": 136, "corrupt": 136, "pdbqtparser": [137, 147], "pqrparser": [138, 147], "guess_flavour": 138, "variant": [138, 139], "flavour": 138, "no_chainid": 138, "psfparser": [139, 147], "atom_nam": [140, 146], "atomic_numb": [140, 149], "bonds_inc_hydrogen": 140, "bonds_without_hydrogen": 140, "angles_inc_hydrogen": 140, "angles_without_hydrogen": 140, "dihedrals_inc_hydrogen": 140, "dihedrals_without_hydrogen": 140, "atom_type_index": 140, "type_indic": [140, 147], "amber_atom_typ": 140, "residue_label": 140, "residue_point": 140, "chamber": 140, "stringent": 140, "2223": [140, 160], "scenario": 140, "toppars": [140, 147], "inc": 140, "amber10": 140, "amber12": 140, "parse_bond": 140, "num_per_record": 140, "numlin": 140, "parm7": [140, 147], "ambermd": 140, "parse_charg": 140, "parse_chunk": 140, "chunksiz": 140, "parse_dihedr": 140, "diha": 140, "dihh": 140, "sublist": 140, "nb": [140, 148, 149], "parse_el": 140, "pasr": 140, "2306": 140, "2651": 140, "unrecognis": 140, "parse_mass": 140, "parse_nam": 140, "parse_residx": 140, "pointer": 140, "parse_resnam": 140, "recrod": 140, "parse_type_indic": 140, "typeindic": 140, "parse_typ": 140, "parsesection_mapp": 140, "mapper": 140, "skipper": 140, "tpx": [141, 149], "73": [141, 148, 149, 163], "83": [141, 148, 149], "112": [141, 148, 149], "119": [141, 149], "127": [141, 148, 149], "2428": 141, "463": 141, "g96": 141, "mors": [141, 149], "fene": [141, 149], "restraint": [141, 149], "tabul": 141, "type3": 141, "quartic": [141, 149], "ryckaert": [141, 149], "belleman": 141, "tpr_resid_from_on": [141, 149], "itp": [141, 147, 150], "gromacs_dir": [141, 149], "src": [141, 149], "gmxdump": 141, "gmxlib": [141, 149], "tpxio": [141, 149], "gmxfio_rw": 141, "gmxfio_xdr": 141, "gmxfiofio": 141, "read_tpxhead": [141, 149], "tprreaderdevelop": 141, "read_": 141, "do_": 141, "extract_": 141, "txyzpars": [142, 147], "won": 143, "xyzpars": [143, 147], "guess_atom_typ": [145, 146, 148], "guess_atom_mass": [145, 146], "guess_atom_x": 146, "guess_x": 146, "guess_atom_el": [146, 148], "synonym": 146, "prm7": 146, "inde": 146, "prm19sbopc": 146, "epw": 146, "outcom": 146, "guessed_el": 146, "get_atom_mass": 146, "guess_aromat": 146, "guess_atom_charg": 146, "r_2": 146, "eachoth": 146, "superced": 146, "lewi": 146, "burn": 146, "somebodi": 146, "guess_gasteiger_charg": 146, "guess_improper_dihedr": 146, "guess_mass": 146, "atom_mass": 146, "validate_atom_typ": 146, "vaildat": 146, "anton": 147, "tprparser": 147, "lammpspars": [147, 150], "elem": 147, "dlpolypars": [147, 150], "xml": [147, 150], "fhiaimspars": [147, 150], "sole": 147, "histor": 147, "permut": 147, "bondtupl": 147, "_init_bond": 147, "atomel": 148, "br": 148, "c0": 148, "ca2": 148, "cal": 148, "cla": 148, "clal": 148, "cu": 148, "fe": 148, "fe2": 148, "iod": 148, "lit": 148, "mg": 148, "mg2": 148, "pot": [148, 149], "qc": 148, "qk": 148, "ql": 148, "qn": 148, "qr": 148, "sod": 148, "zn": 148, "227": 148, "028": 148, "8682": 148, "981539": 148, "243": 148, "948": 148, "74": [148, 149], "92159": 148, "au": 148, "96654": 148, "904": 148, "ba": [148, 149], "137": 148, "327": 148, "012182": 148, "bh": 148, "208": 148, "98037": 148, "bk": 148, "247": 148, "546": 148, "411": 148, "251": 148, "9332": 148, "cr": 148, "9961": 148, "db": 148, "dy": [148, 162], "er": 148, "167": 148, "252": 148, "eu": 148, "151": 148, "965": 148, "998": 148, "847": 148, "fm": [148, 160], "257": 148, "223": 148, "69": [148, 149], "gd": 148, "ge": 148, "0026": 148, "hf": 148, "178": 148, "hg": 148, "ho": 148, "164": 148, "93032": 148, "126": 148, "9045": 148, "ir": 148, "102": 148, "kr": 148, "la": 148, "138": 148, "9055": 148, "941": 148, "lr": [148, 149], "174": 148, "967": 148, "258": 148, "mn": 148, "93805": 148, "mo": 148, "94": [148, 149], "mt": 148, "266": 148, "98977": 148, "1797": 148, "989768": 148, "92": [148, 149], "90638": 148, "ni": 148, "6934": 148, "259": 148, "048": 148, "190": 148, "974": 148, "231": 148, "0359": 148, "pd": 148, "pm": [148, 160], "145": 148, "pr": [148, 152], "90765": 148, "pt": 148, "195": 148, "244": 148, "4678": 148, "025": 148, "186": 148, "rf": [148, 149], "261": 148, "rh": 148, "rn": 148, "ru": 148, "07": 148, "06": [148, 160], "sb": 148, "757": 148, "sc": 148, "95591": 148, "se": 148, "263": 148, "si": [148, 160], "0855": 148, "sn": 148, "118": [148, 149], "87": [148, 149], "62": [148, 149], "ta": 148, "9479": 148, "tb": 148, "92534": 148, "tc": 148, "te": 148, "0381": 148, "204": 148, "3833": 148, "168": 148, "93421": 148, "0289": 148, "9415": 148, "183": 148, "xe": 148, "90585": 148, "yb": 148, "173": 148, "zr": 148, "224": 148, "84": [148, 149], "AT": 148, "02": 148, "68": [148, 149], "BE": 148, "53": [148, 149], "43": [148, 149], "IN": 148, "52": [148, 149], "rr": 148, "03": 148, "86": [148, 149], "seealso": 148, "kv2dict": 148, "convertor": 148, "primit": 148, "table_atomel": 148, "propka": 148, "chlorid": 148, "bromid": 148, "nbr": 148, "calcium": 148, "ncal": 148, "nc0": 148, "nca2": 148, "cesium": 148, "nce": 148, "ncla": 148, "nclal": 148, "ncl": 148, "iodid": 148, "niod": 148, "iron": 148, "nfe": 148, "nfe2": 148, "lithium": 148, "nlit": 148, "nli": 148, "nql": 148, "magnesium": 148, "nmg": 148, "nmg2": 148, "nobl": 148, "gase": 148, "collid": 148, "nk": 148, "npot": 148, "nqk": 148, "sodium": 148, "nsod": 148, "nna": 148, "nqn": 148, "zink": 148, "nzn": 148, "copper": 148, "ncu": 148, "cerium": 148, "nqc": 148, "rubidium": 148, "nrb": 148, "nqr": 148, "nbc": 148, "nac": 148, "nmw": 148, "table_mass": 148, "atommass": 148, "nal": 148, "nam": 148, "nsb": 148, "nat": 148, "nba": 148, "nbk": 148, "nbe": 148, "nbi": 148, "nbh": 148, "90400": 148, "ncd": 148, "nca": 148, "08000": 148, "ncf": 148, "01100": 148, "11600": 148, "90000": 148, "45000": 148, "ncr": 148, "nco": 148, "54600": 148, "ncm": 148, "ndb": 148, "ndy": 148, "ner": 148, "neu": 148, "nfm": 148, "nf": 148, "99800": 148, "nfr": 148, "ngd": 148, "nga": 148, "nge": 148, "nau": 148, "nhf": 148, "nhe": 148, "00260": 148, "nho": 148, "00800": 148, "nin": 148, "90450": 148, "nir": 148, "84700": 148, "nkr": 148, "nla": 148, "nlr": 148, "npb": 148, "nlu": 148, "30500": 148, "nmn": 148, "nmt": 148, "nmd": 148, "nhg": 148, "nmo": 148, "00700": 148, "nnd": 148, "nne": 148, "17970": 148, "nnp": 148, "nni": 148, "nnb": 148, "nno": 148, "nOs": 148, "nO": 148, "99900": 148, "npd": 148, "97400": 148, "npt": [148, 160], "npu": 148, "npo": 148, "10200": 148, "npr": 148, "npm": 148, "npa": 148, "nra": 148, "nrn": 148, "nre": [148, 149], "nrh": 148, "46780": 148, "nru": 148, "nrf": 148, "nsm": 148, "nsc": 148, "nsg": 148, "nse": 148, "nsi": 148, "nag": 148, "nsr": 148, "06000": 148, "nta": 148, "ntc": 148, "nte": 148, "ntb": 148, "ntl": 148, "ntm": 148, "nsn": 148, "nti": 148, "nw": 148, "nu": 148, "nv": 148, "nxe": 148, "nyb": 148, "37000": 148, "nzr": 148, "ndummi": 148, "table_vdwradii": 148, "bondi": 148, "1964": 148, "441": 148, "451": 148, "j100785a001": 148, "rowland": 148, "taylor": 148, "organ": 148, "7384": 148, "7391": 148, "jp953141": 148, "mantina": 148, "5806": 148, "5812": 148, "jp8111556": 148, "r_vdw": 148, "naa": 148, "nrr": 148, "nhh": 148, "supported_vers": 149, "immut": 149, "f_angl": 149, "idef": 149, "f_angr": 149, "f_angresz": 149, "f_anharm_pol": 149, "f_bham": 149, "f_bham_lr": 149, "f_bond": 149, "f_cbtdih": 149, "f_cmap": 149, "f_com_pul": 149, "f_connbond": 149, "f_constr": 149, "f_constrnc": 149, "f_coul14": 149, "f_coul_lr": 149, "f_coul_recip": 149, "f_coul_sr": 149, "f_cross_bond_angl": 149, "f_cross_bond_bond": 149, "f_cubicbond": 149, "f_densityfit": 149, "f_dhdl_con": 149, "f_dihr": 149, "f_dihresviol": 149, "f_dispcorr": 149, "f_disr": 149, "f_disresviol": 149, "f_dkdl": 149, "f_dpd": 149, "f_dvdl": 149, "f_dvdl_bond": 149, "f_dvdl_coul": 149, "89": 149, "f_dvdl_restraint": 149, "f_dvdl_temperatur": 149, "f_dvdl_vdw": 149, "f_econserv": 149, "f_ekin": 149, "f_epot": 149, "f_eqm": 149, "f_etot": 149, "f_fbposr": 149, "f_fenebond": 149, "f_fourdih": 149, "f_g96angl": 149, "f_g96bond": 149, "f_gb12": 149, "f_gb13": 149, "f_gb14": 149, "f_gbpol": 149, "f_harmon": 149, "f_idih": 149, "f_linear_angl": 149, "f_lj": 149, "f_lj14": 149, "f_ljc14_q": 149, "f_ljc_pairs_nb": 149, "f_lj_lr": 149, "f_lj_recip": 149, "f_mors": 149, "f_npsolvat": 149, "f_nre": 149, "f_orir": 149, "f_oriresdev": 149, "f_pdih": 149, "f_pdispcorr": 149, "f_pidih": 149, "f_polar": 149, "f_posr": 149, "f_pre": 149, "f_quartic_angl": 149, "f_rbdih": 149, "f_restrangl": 149, "f_restrbond": 149, "f_restrdih": 149, "f_rf_excl": 149, "f_settl": 149, "f_tabangl": 149, "f_tabbond": 149, "f_tabbondsnc": 149, "f_tabdih": 149, "f_temp": 149, "f_thole_pol": 149, "f_urey_bradlei": 149, "f_vsite1": 149, "f_vsite2": 149, "f_vsite2fd": 149, "f_vsite3": 149, "f_vsite3fad": 149, "f_vsite3fd": 149, "f_vsite3out": 149, "f_vsite4fd": 149, "f_vsite4fdn": 149, "f_vsiten": 149, "f_vtemp_nolongerus": 149, "f_water_pol": 149, "ftupd": 149, "117": 149, "interaction_typ": 149, "g96bond": 149, "cubicbond": 149, "connbond": 149, "fenebond": 149, "tabbond": 149, "tabbondsnc": 149, "restraintpot": 149, "g96angl": 149, "restrangl": 149, "linear_angl": 149, "lin": 149, "cross_bond_bond": 149, "cross_bond_angl": 149, "urey_bradlei": 149, "qangl": 149, "tabangl": 149, "pdih": 149, "dih": 149, "rbdih": 149, "bell": 149, "restrdih": 149, "cbtdih": 149, "cbt": 149, "fourdih": 149, "idih": 149, "pidih": 149, "tabdih": 149, "gb12": 149, "pol": 149, "gb13": 149, "gb14": 149, "gbpol": 149, "npsolvat": 149, "nonpolar": 149, "lj14": 149, "coul14": 149, "coulomb": 149, "ljc14_q": 149, "ljc": 149, "ljc_nb": 149, "lj_sr": 149, "bham": 149, "buck": 149, "ham": 149, "lj_lr": 149, "bham_lr": 149, "dispcorr": 149, "disper": 149, "corr": 149, "coul_sr": 149, "coul_lr": 149, "rf_excl": 149, "excl": 149, "coul_recip": 149, "coul": 149, "recip": 149, "lj_recip": 149, "dpd": 149, "waterpol": 149, "thole": 149, "anharm_pol": 149, "anharm": 149, "posr": 149, "fbposr": 149, "bottom": 149, "disr": 149, "disresviol": 149, "viol": 149, "orir": 149, "ordev": 149, "ori": 149, "angr": 149, "angresz": 149, "dihr": 149, "dihresviol": 149, "constrnc": 149, "conn": 149, "vsite1": 149, "vsite2": 149, "vsite2fd": 149, "2fd": 149, "vsite3": 149, "vsite3fd": 149, "3fd": 149, "vsite3fad": 149, "3fad": 149, "vsite3out": 149, "3out": 149, "vsite4fd": 149, "4fd": 149, "vsite4fdn": 149, "4fdn": 149, "vsiten": 149, "com_pul": 149, "densityfit": 149, "eqm": 149, "quantum": 149, "ekin": 149, "etot": 149, "econ": 149, "vtemp": 149, "vir": 149, "pdispcorr": 149, "dh": 149, "dl_con": 149, "dvremain": 149, "dekin": 149, "dvc": 149, "dvcoul": 149, "dvv": 149, "dvvdw": 149, "dvb": 149, "dvbond": 149, "dvr": 149, "dvrestraint": 149, "dvt": 149, "dvtemperatur": 149, "ifunc": 149, "mb": 149, "qb": 149, "tp": 149, "typeb": 149, "ptype": 149, "resind": 149, "atomnumb": 149, "atomkind": 149, "element_symbol": 149, "ilist": 149, "ik": 149, "iatom": 149, "interactionkind": 149, "long_nam": 149, "atom_ndx": 149, "molblock": 149, "molb_typ": 149, "molb_nmol": 149, "molb_natoms_mol": 149, "molb_nposres_xa": 149, "molb_nposres_xb": 149, "moleculekind": 149, "dihe": 149, "impr": 149, "number_of_atom": 149, "number_of_residu": 149, "remap_angl": 149, "atom_start_ndx": 149, "remap_bond": 149, "remap_dih": 149, "remap_impr": 149, "mtop": 149, "nmoltyp": 149, "nmolblock": 149, "atnr": 149, "ntype": 149, "functyp": 149, "reppow": 149, "fudgeqq": 149, "tpxheader": 149, "ver_str": 149, "fver": 149, "fgen": 149, "file_tag": 149, "ngtc": 149, "fep_stat": 149, "lamb": 149, "bir": 149, "btop": 149, "bx": 149, "bv": 149, "bf": 149, "sizeoftprbodi": 149, "do_mtop": 149, "do_symtab": 149, "do_ffparam": 149, "do_iparam": 149, "do_moltyp": 149, "do_atom": 149, "do_resinfo": 149, "do_ilist": 149, "do_block": 149, "do_blocka": 149, "do_molblock": 149, "stuff": 149, "do_inputrec": 149, "tpxunpack": 149, "do_str": 149, "emul": 149, "gmx_fio_do_str": 149, "unpack_str": 149, "unsign": 149, "gmx_system_xdr": 149, "454": 149, "unpack_int64": 149, "unpack_uchar": 149, "unpack_uint64": 149, "unpack_ushort": 149, "tpxunpacker2020": 149, "inmemoryseri": 149, "from_unpack": 149, "unpack_fstr": 149, "define_unpack_r": 149, "prec": 149, "unpack_r": 149, "symtab": 149, "do_harm": 149, "do_rvec": 149, "do_symstr": 149, "extract_box_info": 149, "fileversion_err": 149, "ndo_int": 149, "gmx_fio_ndo_r": 149, "ndo_ivec": 149, "gmx_fio_ndo_rvec": 149, "ndo_real": 149, "ndo_rvec": 149, "do_tpxhead": 149, "cpp": 149, "glean": 150, "topolgi": 150, "transformation_1": 151, "transformation_2": 151, "up_by_2": 151, "transformationbas": [151, 152], "_transform": [151, 152], "roughli": 151, "up_by_x_class": 151, "up_by_x_func": 151, "functool": 151, "up_by_x": 151, "notabl": 151, "max_thread": [151, 152, 153, 154, 155, 156, 157, 158, 159], "assess": 151, "paralleliz": [151, 152, 153, 154, 155, 156, 157, 158, 159], "ultil": 151, "oversubscrib": [151, 152], "hyper": 151, "openbla": [151, 152], "engin": [151, 152], "dask": [151, 152], "threadpoolctl": 151, "environment": 151, "varibal": 151, "omp_num_thread": [151, 152], "mkl_num_thread": 151, "openblas_num_thread": 151, "blis_num_thread": 151, "positionaverag": [151, 152], "boxdimens": 151, "kill": 152, "subscrib": [152, 165], "hyperthread": 152, "2950": 152, "2996": 152, "newtransform": 152, "_param": 152, "new_transform": 152, "set_dimens": 153, "fit_transl": 154, "suport": 154, "closur": [154, 157, 158, 159], "fit_rot_tran": 154, "kulke2022": 155, "check_continu": 155, "b6": 155, "orthonorm": 155, "dimer": 155, "martin": 155, "kulk": 155, "josh": 155, "vermaa": 155, "6161": 155, "6171": 155, "2c00327": 155, "avg_fram": 156, "check_reset": 156, "resetarrai": 156, "current_avg": 156, "arround": 157, "bon": 159, "66053892103219": 160, "602176565": 160, "f_": 160, "precomput": 160, "get_conversion_factor": 160, "densityunit_factor": 160, "concentr": 160, "n_avogadro": 160, "rho0": 160, "h2o": 160, "rho_0": 160, "unit_typ": 160, "conversion_factor": 160, "incompat": [160, 161], "boltzmann_const": 160, "008314462159": 160, "02214129e": 160, "calori": 160, "184": 160, "electric_const": 160, "00552635": 160, "elementary_charg": 160, "602176565e": 160, "codata": 160, "nist": 160, "thermochem": 160, "80000": 160, "lengthunit_factor": 160, "femtomet": 160, "nanomet": 160, "picomet": 160, "molarmass": 160, "016": 160, "985": 160, "001": 160, "298k": 160, "1atm": 160, "jorgensen1998": 160, "1660": 160, "5389210321898": 160, "37184690488927": 160, "85655608913766": 160, "886382818497438": 160, "00628806551247": 160, "timeunit_factor": 160, "45482949774598": 160, "microsecond": 160, "millisecond": 160, "nanosecond": 160, "sec": 160, "\u03bc": 160, "speedunit_factor": 160, "04888821": 160, "forceunit_factor": 160, "66053892103219e": 160, "newton": 160, "2390057361376673": 160, "chargeunit_factor": 160, "602176487": 160, "8000000e": 160, "ev": 160, "01036426919046959": 160, "jorgensen": 160, "corki": 160, "jenson": 160, "1179": 160, "1186": 160, "1998": 160, "1096": 160, "987x": 160, "19980730": 160, "jcc6": 160, "semant": 161, "patch": 161, "stabil": 161, "soon": 161, "tyler": [162, 163], "matthieu": [162, 163], "generate_streamlin": [162, 163], "flow": [162, 163], "analyi": [162, 163], "topology_file_path": [162, 163], "trajectory_file_path": [162, 163], "grid_spac": [162, 163], "mda_select": [162, 163], "end_fram": [162, 163], "maximum_delta_magnitud": [162, 163], "num_cor": [162, 163], "g_filter": [162, 163], "\u1d43chavent2014": 162, "excess": [162, 163], "dx_arrai": [162, 163], "dy_arrai": [162, 163], "average_displac": 162, "standard_deviation_of_displac": 162, "testing_filt": [162, 163], "73000049591": 162, "1225": [162, 163], "96008301": 162, "5799999237": 162, "1224": [162, 163], "34008789": 162, "linspac": 162, "1200": [162, 163], "linewidth": 162, "testing_streamlin": 162, "dpi": 162, "anna": [162, 163], "carolin": [162, 163], "stone": [162, 163], "bruno": [162, 163], "generate_streamlines_3d": [162, 163], "viru": 163, "capsid": 163, "\u1d47chavent2014": 163, "dz_arrai": 163, "mayavi": 163, "mlab": 163, "x_lower": 163, "x_upper": 163, "y_lower": 163, "y_upper": 163, "z_lower": 163, "z_upper": 163, "grid_spacing_valu": 163, "1j": 163, "bgcolor": 163, "800": 163, "fgcolor": 163, "z_valu": 163, "st": 163, "line_width": 163, "seedtyp": 163, "integration_direct": 163, "streamline_typ": 163, "tube": 163, "tube_filt": 163, "widget": 163, "point1": 163, "point2": 163, "scene": 163, "z_plus_view": 163, "test_streamplot_3d": 163, "compel": 163, "tailor": 164, "streamplot": 164, "aug": 165, "mdnalysi": 165, "mail": 165, "agre": 165, "forg": 165, "upgrad": 165, "tutori": 165, "gpl": 165, "git": 165, "clone": 165}, "objects": {"MDAnalysis.analysis": [[0, 0, 0, "-", "align"], [1, 0, 0, "-", "atomicdistances"], [2, 0, 0, "-", "base"], [3, 0, 0, "-", "bat"], [4, 0, 0, "-", "contacts"], [6, 0, 0, "-", "density"], [7, 0, 0, "-", "dielectric"], [8, 0, 0, "-", "diffusionmap"], [9, 0, 0, "-", "dihedrals"], [10, 0, 0, "-", "distances"], [19, 0, 0, "-", "gnm"], [22, 0, 0, "-", "helix_analysis"], [23, 0, 0, "-", "hole2"], [25, 0, 0, "-", "leaflet"], [28, 0, 0, "-", "lineardensity"], [29, 0, 0, "-", "msd"], [30, 0, 0, "-", "nucleicacids"], [31, 0, 0, "-", "nuclinfo"], [32, 0, 0, "-", "pca"], [33, 0, 0, "-", "polymer"], [34, 0, 0, "-", "psa"], [35, 0, 0, "-", "rdf"], [36, 0, 0, "-", "rms"], [37, 0, 0, "-", "waterdynamics"]], "MDAnalysis.analysis.align": [[0, 1, 1, "", "AlignTraj"], [0, 1, 1, "", "AverageStructure"], [0, 3, 1, "", "_fit_to"], [0, 3, 1, "", "alignto"], [0, 3, 1, "", "fasta2select"], [0, 3, 1, "", "get_matching_atoms"], [0, 3, 1, "", "rotation_matrix"], [0, 3, 1, "", "sequence_alignment"]], "MDAnalysis.analysis.align.AlignTraj": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AlignTraj.results": [[0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AverageStructure": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "positions"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.align.AverageStructure.results": [[0, 2, 1, "", "positions"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.atomicdistances": [[1, 1, 1, "", "AtomicDistances"]], "MDAnalysis.analysis.atomicdistances.AtomicDistances": [[1, 2, 1, "", "n_atoms"], [1, 2, 1, "", "n_frames"], [1, 2, 1, "", "results"]], "MDAnalysis.analysis.base": [[2, 1, 1, "", "AnalysisBase"], [2, 1, 1, "", "AnalysisFromFunction"], [2, 1, 1, "", "Results"], [2, 3, 1, "", "analysis_class"]], "MDAnalysis.analysis.base.AnalysisBase": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "results"], [2, 4, 1, "", "run"], [2, 2, 1, "", "times"]], "MDAnalysis.analysis.base.AnalysisFromFunction.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.base.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.bat": [[3, 1, 1, "", "BAT"]], "MDAnalysis.analysis.bat.BAT": [[3, 4, 1, "", "Cartesian"], [3, 5, 1, "", "atoms"], [3, 4, 1, "", "load"], [3, 4, 1, "", "run"], [3, 4, 1, "", "save"]], "MDAnalysis.analysis.bat.BAT.results": [[3, 2, 1, "", "bat"]], "MDAnalysis.analysis.contacts": [[4, 1, 1, "", "Contacts"], [4, 3, 1, "", "contact_matrix"], [4, 3, 1, "", "hard_cut_q"], [4, 3, 1, "", "q1q2"], [4, 3, 1, "", "radius_cut_q"], [4, 3, 1, "", "soft_cut_q"]], "MDAnalysis.analysis.contacts.Contacts.results": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.contacts.Contacts": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.data": [[5, 0, 0, "-", "filenames"]], "MDAnalysis.analysis.data.filenames": [[5, 6, 1, "", "Janin_ref"], [5, 6, 1, "", "Rama_ref"]], "MDAnalysis.analysis.density": [[6, 1, 1, "", "Density"], [6, 1, 1, "", "DensityAnalysis"]], "MDAnalysis.analysis.density.Density": [[6, 4, 1, "", "centers"], [6, 4, 1, "", "check_compatible"], [6, 4, 1, "", "convert_density"], [6, 4, 1, "", "convert_length"], [6, 2, 1, "", "default_format"], [6, 2, 1, "", "delta"], [6, 2, 1, "", "edges"], [6, 4, 1, "", "export"], [6, 2, 1, "", "grid"], [6, 5, 1, "", "interpolated"], [6, 5, 1, "", "interpolation_spline_order"], [6, 4, 1, "", "load"], [6, 4, 1, "", "make_density"], [6, 2, 1, "", "origin"], [6, 4, 1, "", "resample"], [6, 4, 1, "", "resample_factor"], [6, 4, 1, "", "save"], [6, 2, 1, "", "units"]], "MDAnalysis.analysis.density.DensityAnalysis": [[6, 4, 1, "", "_set_user_grid"], [6, 2, 1, "", "density"], [6, 4, 1, "", "run"]], "MDAnalysis.analysis.density.DensityAnalysis.results": [[6, 2, 1, "", "density"]], "MDAnalysis.analysis.dielectric": [[7, 1, 1, "", "DielectricConstant"]], "MDAnalysis.analysis.dielectric.DielectricConstant.results": [[7, 2, 1, "", "M"], [7, 2, 1, "", "M2"], [7, 2, 1, "", "eps"], [7, 2, 1, "", "eps_mean"], [7, 2, 1, "", "fluct"]], "MDAnalysis.analysis.diffusionmap": [[8, 1, 1, "", "DiffusionMap"], [8, 1, 1, "", "DistanceMatrix"]], "MDAnalysis.analysis.diffusionmap.DiffusionMap": [[8, 2, 1, "", "eigenvalues"], [8, 4, 1, "", "run"], [8, 4, 1, "", "transform"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix": [[8, 2, 1, "", "atoms"], [8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results": [[8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.dihedrals": [[9, 1, 1, "", "Dihedral"], [9, 1, 1, "", "Janin"], [9, 1, 1, "", "Ramachandran"]], "MDAnalysis.analysis.dihedrals.Dihedral": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Dihedral.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Janin": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Janin.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Ramachandran": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Ramachandran.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.distances": [[10, 3, 1, "", "between"], [10, 3, 1, "", "contact_matrix"], [10, 3, 1, "", "dist"], [10, 3, 1, "", "distance_array"], [10, 3, 1, "", "self_distance_array"]], "MDAnalysis.analysis.encore": [[12, 0, 0, "-", "bootstrap"], [14, 0, 0, "-", "confdistmatrix"], [15, 0, 0, "-", "covariance"], [17, 0, 0, "-", "similarity"], [18, 0, 0, "-", "utils"]], "MDAnalysis.analysis.encore.bootstrap": [[12, 3, 1, "", "bootstrapped_matrix"], [12, 3, 1, "", "get_distance_matrix_bootstrap_samples"], [12, 3, 1, "", "get_ensemble_bootstrap_samples"]], "MDAnalysis.analysis.encore.clustering": [[13, 0, 0, "-", "ClusterCollection"], [13, 0, 0, "-", "ClusteringMethod"], [13, 0, 0, "-", "affinityprop"], [13, 0, 0, "-", "cluster"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, 1, 1, "", "Cluster"], [13, 1, 1, "", "ClusterCollection"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster": [[13, 2, 1, "", "centroid"], [13, 2, 1, "", "elements"], [13, 2, 1, "", "id"], [13, 2, 1, "", "metadata"], [13, 2, 1, "", "size"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection": [[13, 2, 1, "", "clusters"], [13, 4, 1, "", "get_centroids"], [13, 4, 1, "", "get_ids"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, 1, 1, "", "AffinityPropagation"], [13, 1, 1, "", "AffinityPropagationNative"], [13, 1, 1, "", "ClusteringMethod"], [13, 1, 1, "", "DBSCAN"], [13, 1, 1, "", "KMeans"], [13, 3, 1, "", "encode_centroid_info"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans": [[13, 2, 1, "", "accepts_distance_matrix"]], "MDAnalysis.analysis.encore.clustering.affinityprop": [[13, 3, 1, "", "AffinityPropagation"]], "MDAnalysis.analysis.encore.clustering.cluster": [[13, 3, 1, "", "cluster"]], "MDAnalysis.analysis.encore.confdistmatrix": [[14, 3, 1, "", "conformational_distance_matrix"], [14, 3, 1, "", "get_distance_matrix"], [14, 3, 1, "", "set_rmsd_matrix_elements"]], "MDAnalysis.analysis.encore.covariance": [[15, 3, 1, "", "covariance_matrix"], [15, 3, 1, "", "ml_covariance_estimator"], [15, 3, 1, "", "shrinkage_covariance_estimator"]], "MDAnalysis.analysis.encore.cutils": [[18, 3, 1, "", "PureRMSD"]], "MDAnalysis.analysis.encore.dimensionality_reduction": [[16, 0, 0, "-", "DimensionalityReductionMethod"], [16, 0, 0, "-", "reduce_dimensionality"], [16, 0, 0, "-", "stochasticproxembed"]], "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod": [[16, 1, 1, "", "DimensionalityReductionMethod"], [16, 1, 1, "", "PrincipalComponentAnalysis"], [16, 1, 1, "", "StochasticProximityEmbeddingNative"]], "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, 3, 1, "", "reduce_dimensionality"]], "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, 3, 1, "", "StochasticProximityEmbedding"]], "MDAnalysis.analysis.encore.similarity": [[17, 3, 1, "", "ces"], [17, 3, 1, "", "ces_convergence"], [17, 3, 1, "", "clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_gen_kde_pdfs"], [17, 3, 1, "", "dimred_ensemble_similarity"], [17, 3, 1, "", "discrete_jensen_shannon_divergence"], [17, 3, 1, "", "discrete_kullback_leibler_divergence"], [17, 3, 1, "", "dres"], [17, 3, 1, "", "dres_convergence"], [17, 3, 1, "", "gen_kde_pdfs"], [17, 3, 1, "", "harmonic_ensemble_similarity"], [17, 3, 1, "", "hes"], [17, 3, 1, "", "prepare_ensembles_for_convergence_increasing_window"], [17, 3, 1, "", "write_output"]], "MDAnalysis.analysis.encore.utils": [[18, 1, 1, "", "ParallelCalculation"], [18, 1, 1, "", "TriangularMatrix"], [18, 3, 1, "", "merge_universes"], [18, 3, 1, "", "trm_indices"], [18, 3, 1, "", "trm_indices_diag"], [18, 3, 1, "", "trm_indices_nodiag"]], "MDAnalysis.analysis.encore.utils.ParallelCalculation": [[18, 2, 1, "", "args"], [18, 2, 1, "", "function"], [18, 2, 1, "", "kwargs"], [18, 2, 1, "", "n_jobs"], [18, 2, 1, "", "nruns"], [18, 4, 1, "", "run"], [18, 4, 1, "", "worker"]], "MDAnalysis.analysis.encore.utils.TriangularMatrix": [[18, 4, 1, "", "as_array"], [18, 4, 1, "", "loadz"], [18, 4, 1, "", "savez"]], "MDAnalysis.analysis.gnm": [[19, 1, 1, "", "GNMAnalysis"], [19, 1, 1, "", "closeContactGNMAnalysis"], [19, 3, 1, "", "generate_grid"], [19, 3, 1, "", "order_list"]], "MDAnalysis.analysis.gnm.GNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.GNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.hbonds": [[21, 0, 0, "-", "hbond_autocorrel"]], "MDAnalysis.analysis.hole2": [[23, 1, 1, "", "HoleAnalysis"], [23, 3, 1, "", "hole"], [23, 0, 0, "-", "templates"], [23, 0, 0, "-", "utils"]], "MDAnalysis.analysis.hole2.HoleAnalysis": [[23, 4, 1, "", "bin_radii"], [23, 4, 1, "", "create_vmd_surface"], [23, 4, 1, "", "delete_temporary_files"], [23, 4, 1, "", "gather"], [23, 4, 1, "", "guess_cpoint"], [23, 4, 1, "", "histogram_radii"], [23, 4, 1, "", "min_radius"], [23, 2, 1, "", "outfiles"], [23, 4, 1, "", "over_order_parameters"], [23, 4, 1, "", "plot"], [23, 4, 1, "", "plot3D"], [23, 4, 1, "", "plot3D_order_parameters"], [23, 4, 1, "", "plot_mean_profile"], [23, 4, 1, "", "plot_order_parameters"], [23, 2, 1, "", "profiles"], [23, 4, 1, "", "run"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.HoleAnalysis.results": [[23, 2, 1, "", "outfiles"], [23, 2, 1, "", "profiles"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.templates": [[23, 6, 1, "", "SIMPLE2_RAD"]], "MDAnalysis.analysis.hole2.utils": [[23, 3, 1, "", "check_and_fix_long_filename"], [23, 3, 1, "", "collect_hole"], [23, 3, 1, "", "create_vmd_surface"], [23, 3, 1, "", "run_hole"], [23, 3, 1, "", "write_simplerad2"]], "MDAnalysis.analysis.hydrogenbonds": [[24, 0, 0, "-", "hbond_analysis"], [20, 0, 0, "-", "hbond_autocorrel"], [38, 0, 0, "-", "wbridge_analysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, 1, 1, "", "HydrogenBondAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis": [[24, 4, 1, "", "count_by_ids"], [24, 4, 1, "", "count_by_time"], [24, 4, 1, "", "count_by_type"], [24, 4, 1, "", "guess_acceptors"], [24, 4, 1, "", "guess_donors"], [24, 4, 1, "", "guess_hydrogens"], [24, 2, 1, "", "hbonds"], [24, 4, 1, "", "lifetime"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results": [[24, 2, 1, "", "hbonds"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, 1, 1, "", "HydrogenBondAutoCorrel"], [20, 3, 1, "", "find_hydrogen_donors"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel": [[20, 4, 1, "", "run"], [20, 4, 1, "", "solve"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, 1, 1, "", "WaterBridgeAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis": [[38, 2, 1, "", "DEFAULT_ACCEPTORS"], [38, 2, 1, "", "DEFAULT_DONORS"], [38, 4, 1, "", "count_by_time"], [38, 4, 1, "", "count_by_type"], [38, 4, 1, "", "generate_table"], [38, 2, 1, "", "network"], [38, 2, 1, "", "r_cov"], [38, 2, 1, "", "table"], [38, 2, 1, "", "timeseries"], [38, 2, 1, "", "timesteps"], [38, 4, 1, "", "timesteps_by_type"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results": [[38, 2, 1, "", "network"], [38, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.leaflet": [[25, 1, 1, "", "LeafletFinder"], [25, 3, 1, "", "optimize_cutoff"]], "MDAnalysis.analysis.leaflet.LeafletFinder": [[25, 4, 1, "", "group"], [25, 4, 1, "", "groups"], [25, 4, 1, "", "groups_iter"], [25, 4, 1, "", "sizes"], [25, 4, 1, "", "update"], [25, 4, 1, "", "write_selection"]], "MDAnalysis.analysis.legacy": [[26, 0, 0, "-", "x3dna"]], "MDAnalysis.analysis.legacy.x3dna": [[26, 7, 1, "", "ApplicationError"], [26, 1, 1, "", "X3DNA"], [26, 1, 1, "", "X3DNAtraj"]], "MDAnalysis.analysis.legacy.x3dna.X3DNA": [[26, 4, 1, "", "collect"], [26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj": [[26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "run_x3dna"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.lineardensity": [[28, 1, 1, "", "LinearDensity"], [28, 1, 1, "", "Results"]], "MDAnalysis.analysis.lineardensity.LinearDensity": [[28, 2, 1, "", "Note"]], "MDAnalysis.analysis.lineardensity.LinearDensity.results.x": [[28, 2, 1, "", "char"], [28, 2, 1, "", "char_std"], [28, 2, 1, "", "charge_density"], [28, 2, 1, "", "charge_density_stddev"], [28, 2, 1, "", "dim"], [28, 2, 1, "", "hist_bin_edges"], [28, 2, 1, "", "mass_density"], [28, 2, 1, "", "mass_density_stddev"], [28, 2, 1, "", "pos"], [28, 2, 1, "", "pos_std"], [28, 2, 1, "", "slice_volume"]], "MDAnalysis.analysis.msd": [[29, 1, 1, "", "EinsteinMSD"]], "MDAnalysis.analysis.msd.EinsteinMSD": [[29, 2, 1, "", "ag"], [29, 2, 1, "", "dim_fac"], [29, 2, 1, "", "n_frames"], [29, 2, 1, "", "n_particles"], [29, 4, 1, "", "run"]], "MDAnalysis.analysis.msd.EinsteinMSD.results": [[29, 2, 1, "", "msds_by_particle"], [29, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.nucleicacids": [[30, 1, 1, "", "NucPairDist"], [30, 1, 1, "", "WatsonCrickDist"]], "MDAnalysis.analysis.nucleicacids.NucPairDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.NucPairDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nuclinfo": [[31, 3, 1, "", "hydroxyl"], [31, 3, 1, "", "major_pair"], [31, 3, 1, "", "minor_pair"], [31, 3, 1, "", "phase_as"], [31, 3, 1, "", "phase_cp"], [31, 3, 1, "", "pseudo_dihe_baseflip"], [31, 3, 1, "", "tors"], [31, 3, 1, "", "tors_alpha"], [31, 3, 1, "", "tors_beta"], [31, 3, 1, "", "tors_chi"], [31, 3, 1, "", "tors_delta"], [31, 3, 1, "", "tors_eps"], [31, 3, 1, "", "tors_gamma"], [31, 3, 1, "", "tors_zeta"], [31, 3, 1, "", "wc_pair"]], "MDAnalysis.analysis.pca": [[32, 1, 1, "", "PCA"], [32, 3, 1, "", "cosine_content"], [32, 3, 1, "", "cumulative_overlap"], [32, 3, 1, "", "rmsip"]], "MDAnalysis.analysis.pca.PCA": [[32, 2, 1, "", "cumulated_variance"], [32, 4, 1, "", "cumulative_overlap"], [32, 2, 1, "", "p_components"], [32, 4, 1, "", "project_single_frame"], [32, 4, 1, "", "rmsip"], [32, 4, 1, "", "run"], [32, 4, 1, "", "transform"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.pca.PCA.results": [[32, 2, 1, "", "cumulated_variance"], [32, 2, 1, "", "p_components"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.polymer": [[33, 1, 1, "", "PersistenceLength"], [33, 3, 1, "", "fit_exponential_decay"], [33, 3, 1, "", "sort_backbone"]], "MDAnalysis.analysis.polymer.PersistenceLength": [[33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 4, 1, "", "plot"]], "MDAnalysis.analysis.polymer.PersistenceLength.results": [[33, 2, 1, "", "bond_autocorrelation"], [33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 2, 1, "", "x"]], "MDAnalysis.analysis.psa": [[34, 1, 1, "", "PSAPair"], [34, 1, 1, "", "PSAnalysis"], [34, 1, 1, "", "Path"], [34, 3, 1, "", "discrete_frechet"], [34, 3, 1, "", "dist_mat_to_vec"], [34, 3, 1, "", "get_coord_axes"], [34, 3, 1, "", "get_msd_matrix"], [34, 3, 1, "", "get_path_metric_func"], [34, 3, 1, "", "hausdorff"], [34, 3, 1, "", "hausdorff_avg"], [34, 3, 1, "", "hausdorff_neighbors"], [34, 3, 1, "", "hausdorff_wavg"], [34, 3, 1, "", "sqnorm"]], "MDAnalysis.analysis.psa.PSAPair": [[34, 2, 1, "", "hausdorff_pair"], [34, 2, 1, "", "matrix_id"], [34, 2, 1, "", "nearest_neighbors"], [34, 2, 1, "", "npaths"], [34, 2, 1, "", "pair_id"]], "MDAnalysis.analysis.psa.PSAnalysis": [[34, 2, 1, "", "D"], [34, 4, 1, "", "cluster"], [34, 4, 1, "", "generate_paths"], [34, 4, 1, "", "get_num_atoms"], [34, 4, 1, "", "get_num_paths"], [34, 4, 1, "", "get_pairwise_distances"], [34, 4, 1, "", "get_paths"], [34, 5, 1, "", "hausdorff_pairs"], [34, 4, 1, "", "load"], [34, 5, 1, "", "nearest_neighbors"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "paths"], [34, 4, 1, "", "plot"], [34, 4, 1, "", "plot_annotated_heatmap"], [34, 4, 1, "", "plot_nearest_neighbors"], [34, 5, 1, "", "psa_pairs"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 4, 1, "", "run_pairs_analysis"], [34, 4, 1, "", "save_paths"], [34, 2, 1, "", "select"], [34, 2, 1, "", "u_reference"], [34, 2, 1, "", "universes"]], "MDAnalysis.analysis.psa.Path": [[34, 4, 1, "", "fit_to_reference"], [34, 4, 1, "", "get_num_atoms"], [34, 2, 1, "", "path"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 2, 1, "", "select"], [34, 4, 1, "", "to_path"], [34, 2, 1, "", "u_fitted"], [34, 2, 1, "", "u_original"], [34, 2, 1, "", "u_reference"]], "MDAnalysis.analysis.rdf": [[35, 1, 1, "", "InterRDF"], [35, 1, 1, "", "InterRDF_s"]], "MDAnalysis.analysis.rdf.InterRDF": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 4, 1, "", "get_cdf"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rms": [[36, 1, 1, "", "RMSD"], [36, 1, 1, "", "RMSF"], [36, 3, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD.results": [[36, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD": [[36, 2, 1, "", "rmsd"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.rms.RMSF.results": [[36, 2, 1, "", "rmsf"]], "MDAnalysis.analysis.rms.RMSF": [[36, 2, 1, "", "rmsf"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics": [[37, 1, 1, "", "AngularDistribution"], [37, 1, 1, "", "MeanSquareDisplacement"], [37, 1, 1, "", "SurvivalProbability"], [37, 1, 1, "", "WaterOrientationalRelaxation"]], "MDAnalysis.analysis.waterdynamics.AngularDistribution": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.SurvivalProbability": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation": [[37, 4, 1, "", "lg2"], [37, 4, 1, "", "run"]], "MDAnalysis.auxiliary": [[40, 0, 0, "-", "EDR"], [41, 0, 0, "-", "XVG"], [44, 0, 0, "-", "__init__"], [42, 0, 0, "-", "base"], [43, 0, 0, "-", "core"]], "MDAnalysis.auxiliary.EDR": [[40, 1, 1, "", "EDRReader"], [40, 1, 1, "", "EDRStep"]], "MDAnalysis.auxiliary.EDR.EDRReader": [[40, 2, 1, "", "_auxdata"], [40, 2, 1, "", "_n_steps"], [40, 2, 1, "", "data_dict"], [40, 4, 1, "", "get_data"], [40, 4, 1, "", "read_all_times"], [40, 2, 1, "", "terms"], [40, 2, 1, "", "unit_dict"]], "MDAnalysis.auxiliary.XVG": [[41, 1, 1, "", "XVGFileReader"], [41, 1, 1, "", "XVGReader"], [41, 1, 1, "", "XVGStep"], [41, 3, 1, "", "uncomment"]], "MDAnalysis.auxiliary.XVG.XVGFileReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.XVG.XVGReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.base": [[42, 1, 1, "", "AuxFileReader"], [42, 1, 1, "", "AuxReader"], [42, 1, 1, "", "AuxStep"]], "MDAnalysis.auxiliary.base.AuxFileReader": [[42, 2, 1, "", "auxfile"], [42, 4, 1, "", "close"]], "MDAnalysis.auxiliary.base.AuxReader": [[42, 4, 1, "", "attach_auxiliary"], [42, 2, 1, "", "auxstep"], [42, 4, 1, "", "calc_representative"], [42, 5, 1, "", "constant_dt"], [42, 4, 1, "", "copy"], [42, 5, 1, "", "data_selector"], [42, 5, 1, "", "dt"], [42, 2, 1, "", "frame_data"], [42, 2, 1, "", "frame_rep"], [42, 4, 1, "", "get_description"], [42, 5, 1, "", "initial_time"], [42, 4, 1, "", "move_to_ts"], [42, 5, 1, "", "n_steps"], [42, 4, 1, "", "next"], [42, 4, 1, "", "next_nonempty_frame"], [42, 4, 1, "", "read_ts"], [42, 5, 1, "", "represent_ts_as"], [42, 4, 1, "", "rewind"], [42, 5, 1, "", "step"], [42, 4, 1, "", "step_to_frame"], [42, 4, 1, "", "step_to_time"], [42, 5, 1, "", "time"], [42, 5, 1, "", "time_selector"], [42, 4, 1, "", "update_ts"]], "MDAnalysis.auxiliary.base.AuxStep": [[42, 5, 1, "", "data"], [42, 2, 1, "", "step"], [42, 5, 1, "", "time"]], "MDAnalysis.auxiliary.core": [[43, 3, 1, "", "auxreader"], [43, 3, 1, "", "get_auxreader_for"]], "MDAnalysis": [[46, 0, 0, "-", "converters"], [94, 0, 0, "-", "exceptions"], [110, 0, 0, "-", "lib"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"], [151, 0, 0, "-", "transformations"], [160, 0, 0, "-", "units"], [161, 0, 0, "-", "version"]], "MDAnalysis.converters": [[47, 0, 0, "-", "OpenMM"], [47, 0, 0, "-", "OpenMMParser"], [48, 0, 0, "-", "ParmEd"], [48, 0, 0, "-", "ParmEdParser"], [49, 0, 0, "-", "RDKit"], [49, 0, 0, "-", "RDKitParser"]], "MDAnalysis.converters.OpenMM": [[47, 1, 1, "", "OpenMMAppReader"], [47, 1, 1, "", "OpenMMSimulationReader"]], "MDAnalysis.converters.OpenMM.OpenMMAppReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMM.OpenMMSimulationReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser": [[47, 1, 1, "", "OpenMMAppTopologyParser"], [47, 1, 1, "", "OpenMMTopologyParser"]], "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd": [[48, 1, 1, "", "ParmEdConverter"], [48, 1, 1, "", "ParmEdReader"]], "MDAnalysis.converters.ParmEd.ParmEdConverter": [[48, 4, 1, "", "convert"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd.ParmEdReader": [[48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEdParser": [[48, 1, 1, "", "ParmEdParser"]], "MDAnalysis.converters.ParmEdParser.ParmEdParser": [[48, 4, 1, "", "close"], [48, 4, 1, "", "convert_forces_from_native"], [48, 4, 1, "", "convert_forces_to_native"], [48, 4, 1, "", "convert_pos_from_native"], [48, 4, 1, "", "convert_pos_to_native"], [48, 4, 1, "", "convert_time_from_native"], [48, 4, 1, "", "convert_time_to_native"], [48, 4, 1, "", "convert_velocities_from_native"], [48, 4, 1, "", "convert_velocities_to_native"], [48, 4, 1, "", "parse"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit": [[49, 1, 1, "", "RDKitConverter"], [49, 1, 1, "", "RDKitReader"], [49, 3, 1, "", "_infer_bo_and_charges"], [49, 3, 1, "", "_rebuild_conjugated_bonds"], [49, 3, 1, "", "_standardize_patterns"]], "MDAnalysis.converters.RDKit.RDKitConverter": [[49, 4, 1, "", "convert"], [49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit.RDKitReader": [[49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKitParser": [[49, 1, 1, "", "RDKitParser"]], "MDAnalysis.converters.RDKitParser.RDKitParser": [[49, 4, 1, "", "close"], [49, 4, 1, "", "convert_forces_from_native"], [49, 4, 1, "", "convert_forces_to_native"], [49, 4, 1, "", "convert_pos_from_native"], [49, 4, 1, "", "convert_pos_to_native"], [49, 4, 1, "", "convert_time_from_native"], [49, 4, 1, "", "convert_time_to_native"], [49, 4, 1, "", "convert_velocities_from_native"], [49, 4, 1, "", "convert_velocities_to_native"], [49, 4, 1, "", "parse"], [49, 2, 1, "", "units"]], "MDAnalysis.coordinates": [[50, 0, 0, "-", "CRD"], [51, 0, 0, "-", "DCD"], [52, 0, 0, "-", "DLPoly"], [53, 0, 0, "-", "DMS"], [54, 0, 0, "-", "FHIAIMS"], [55, 0, 0, "-", "GMS"], [56, 0, 0, "-", "GRO"], [57, 0, 0, "-", "GSD"], [58, 0, 0, "-", "H5MD"], [59, 0, 0, "-", "INPCRD"], [60, 0, 0, "-", "LAMMPS"], [61, 0, 0, "-", "MMTF"], [62, 0, 0, "-", "MOL2"], [63, 0, 0, "-", "NAMDBIN"], [64, 0, 0, "-", "PDB"], [65, 0, 0, "-", "PDBQT"], [66, 0, 0, "-", "PQR"], [67, 0, 0, "-", "TNG"], [68, 0, 0, "-", "TRJ"], [69, 0, 0, "-", "TRR"], [70, 0, 0, "-", "TRZ"], [71, 0, 0, "-", "TXYZ"], [72, 0, 0, "-", "XDR"], [73, 0, 0, "-", "XTC"], [74, 0, 0, "-", "XYZ"], [79, 0, 0, "-", "__init__"], [75, 0, 0, "-", "base"], [76, 0, 0, "-", "chain"], [77, 0, 0, "-", "chemfiles"], [78, 0, 0, "-", "core"], [80, 0, 0, "-", "memory"], [81, 0, 0, "-", "null"], [83, 0, 0, "-", "timestep"]], "MDAnalysis.coordinates.CRD": [[50, 1, 1, "", "CRDReader"], [50, 1, 1, "", "CRDWriter"]], "MDAnalysis.coordinates.CRD.CRDReader": [[50, 4, 1, "", "Writer"], [50, 2, 1, "", "units"]], "MDAnalysis.coordinates.CRD.CRDWriter": [[50, 2, 1, "", "units"], [50, 4, 1, "", "write"]], "MDAnalysis.coordinates.DCD": [[51, 1, 1, "", "DCDReader"], [51, 1, 1, "", "DCDWriter"]], "MDAnalysis.coordinates.DCD.DCDReader": [[51, 4, 1, "", "OtherWriter"], [51, 4, 1, "", "Writer"], [51, 4, 1, "", "add_auxiliary"], [51, 4, 1, "", "add_transformations"], [51, 5, 1, "", "aux_list"], [51, 4, 1, "", "check_slice_indices"], [51, 4, 1, "", "close"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "copy"], [51, 5, 1, "", "dimensions"], [51, 5, 1, "", "dt"], [51, 5, 1, "", "frame"], [51, 4, 1, "", "get_aux_attribute"], [51, 4, 1, "", "get_aux_descriptions"], [51, 4, 1, "", "iter_as_aux"], [51, 4, 1, "", "iter_auxiliary"], [51, 5, 1, "", "n_frames"], [51, 4, 1, "", "next"], [51, 4, 1, "", "next_as_aux"], [51, 4, 1, "", "parse_n_atoms"], [51, 4, 1, "", "remove_auxiliary"], [51, 4, 1, "", "rename_aux"], [51, 4, 1, "", "rewind"], [51, 4, 1, "", "set_aux_attribute"], [51, 5, 1, "", "time"], [51, 4, 1, "", "timeseries"], [51, 5, 1, "", "totaltime"], [51, 5, 1, "", "transformations"], [51, 2, 1, "", "units"]], "MDAnalysis.coordinates.DCD.DCDWriter": [[51, 4, 1, "", "close"], [51, 4, 1, "", "convert_dimensions_to_unitcell"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "has_valid_coordinates"], [51, 2, 1, "", "units"], [51, 4, 1, "", "write"]], "MDAnalysis.coordinates.DLPoly": [[52, 1, 1, "", "ConfigReader"], [52, 1, 1, "", "HistoryReader"]], "MDAnalysis.coordinates.DLPoly.ConfigReader": [[52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DLPoly.HistoryReader": [[52, 4, 1, "", "close"], [52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DMS": [[53, 1, 1, "", "DMSReader"]], "MDAnalysis.coordinates.DMS.DMSReader": [[53, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS": [[54, 1, 1, "", "FHIAIMSReader"], [54, 1, 1, "", "FHIAIMSWriter"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader": [[54, 4, 1, "", "OtherWriter"], [54, 4, 1, "", "Writer"], [54, 4, 1, "", "add_auxiliary"], [54, 4, 1, "", "add_transformations"], [54, 5, 1, "", "aux_list"], [54, 4, 1, "", "check_slice_indices"], [54, 4, 1, "", "close"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 4, 1, "", "copy"], [54, 5, 1, "", "dt"], [54, 5, 1, "", "frame"], [54, 4, 1, "", "get_aux_attribute"], [54, 4, 1, "", "get_aux_descriptions"], [54, 4, 1, "", "iter_as_aux"], [54, 4, 1, "", "iter_auxiliary"], [54, 4, 1, "", "next"], [54, 4, 1, "", "next_as_aux"], [54, 4, 1, "", "parse_n_atoms"], [54, 4, 1, "", "remove_auxiliary"], [54, 4, 1, "", "rename_aux"], [54, 4, 1, "", "rewind"], [54, 4, 1, "", "set_aux_attribute"], [54, 5, 1, "", "time"], [54, 4, 1, "", "timeseries"], [54, 5, 1, "", "totaltime"], [54, 5, 1, "", "transformations"], [54, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter": [[54, 4, 1, "", "close"], [54, 4, 1, "", "convert_dimensions_to_unitcell"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 2, 1, "", "fmt"], [54, 4, 1, "", "has_valid_coordinates"], [54, 2, 1, "", "units"], [54, 4, 1, "", "write"]], "MDAnalysis.coordinates.GMS": [[55, 1, 1, "", "GMSReader"]], "MDAnalysis.coordinates.GMS.GMSReader": [[55, 4, 1, "", "close"], [55, 5, 1, "", "n_atoms"], [55, 5, 1, "", "runtyp"], [55, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO": [[56, 1, 1, "", "GROReader"], [56, 1, 1, "", "GROWriter"]], "MDAnalysis.coordinates.GRO.GROReader": [[56, 4, 1, "", "Writer"], [56, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO.GROWriter": [[56, 2, 1, "", "fmt"], [56, 2, 1, "", "units"], [56, 4, 1, "", "write"]], "MDAnalysis.coordinates.GSD": [[57, 1, 1, "", "GSDPicklable"], [57, 1, 1, "", "GSDReader"], [57, 3, 1, "", "gsd_pickle_open"]], "MDAnalysis.coordinates.GSD.GSDReader": [[57, 4, 1, "", "OtherWriter"], [57, 4, 1, "", "Writer"], [57, 4, 1, "", "add_auxiliary"], [57, 4, 1, "", "add_transformations"], [57, 5, 1, "", "aux_list"], [57, 4, 1, "", "check_slice_indices"], [57, 4, 1, "", "close"], [57, 4, 1, "", "convert_forces_from_native"], [57, 4, 1, "", "convert_forces_to_native"], [57, 4, 1, "", "convert_pos_from_native"], [57, 4, 1, "", "convert_pos_to_native"], [57, 4, 1, "", "convert_time_from_native"], [57, 4, 1, "", "convert_time_to_native"], [57, 4, 1, "", "convert_velocities_from_native"], [57, 4, 1, "", "convert_velocities_to_native"], [57, 4, 1, "", "copy"], [57, 5, 1, "", "dt"], [57, 5, 1, "", "frame"], [57, 4, 1, "", "get_aux_attribute"], [57, 4, 1, "", "get_aux_descriptions"], [57, 4, 1, "", "iter_as_aux"], [57, 4, 1, "", "iter_auxiliary"], [57, 5, 1, "", "n_frames"], [57, 4, 1, "", "next"], [57, 4, 1, "", "next_as_aux"], [57, 4, 1, "", "open_trajectory"], [57, 4, 1, "", "parse_n_atoms"], [57, 4, 1, "", "remove_auxiliary"], [57, 4, 1, "", "rename_aux"], [57, 4, 1, "", "rewind"], [57, 4, 1, "", "set_aux_attribute"], [57, 5, 1, "", "time"], [57, 4, 1, "", "timeseries"], [57, 5, 1, "", "totaltime"], [57, 5, 1, "", "transformations"], [57, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD": [[58, 1, 1, "", "H5MDReader"], [58, 1, 1, "", "H5MDWriter"], [58, 1, 1, "", "H5PYPicklable"]], "MDAnalysis.coordinates.H5MD.H5MDReader": [[58, 4, 1, "", "OtherWriter"], [58, 4, 1, "", "Writer"], [58, 4, 1, "", "_reopen"], [58, 4, 1, "", "add_auxiliary"], [58, 4, 1, "", "add_transformations"], [58, 5, 1, "", "aux_list"], [58, 4, 1, "", "check_slice_indices"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 4, 1, "", "copy"], [58, 5, 1, "", "dt"], [58, 5, 1, "", "frame"], [58, 4, 1, "", "get_aux_attribute"], [58, 4, 1, "", "get_aux_descriptions"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 5, 1, "", "has_velocities"], [58, 4, 1, "", "iter_as_aux"], [58, 4, 1, "", "iter_auxiliary"], [58, 5, 1, "", "n_frames"], [58, 4, 1, "", "next"], [58, 4, 1, "", "next_as_aux"], [58, 4, 1, "", "open_trajectory"], [58, 4, 1, "", "parse_n_atoms"], [58, 4, 1, "", "remove_auxiliary"], [58, 4, 1, "", "rename_aux"], [58, 4, 1, "", "rewind"], [58, 4, 1, "", "set_aux_attribute"], [58, 5, 1, "", "time"], [58, 4, 1, "", "timeseries"], [58, 5, 1, "", "totaltime"], [58, 5, 1, "", "transformations"], [58, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD.H5MDWriter": [[58, 2, 1, "", "H5MD_VERSION"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_dimensions_to_unitcell"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 2, 1, "", "data_blacklist"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 4, 1, "", "has_valid_coordinates"], [58, 5, 1, "", "has_velocities"], [58, 2, 1, "", "units"], [58, 4, 1, "", "write"]], "MDAnalysis.coordinates.INPCRD": [[59, 1, 1, "", "INPReader"]], "MDAnalysis.coordinates.INPCRD.INPReader": [[59, 4, 1, "", "parse_n_atoms"], [59, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS": [[60, 1, 1, "", "DATAReader"], [60, 1, 1, "", "DATAWriter"], [60, 1, 1, "", "DCDReader"], [60, 1, 1, "", "DCDWriter"], [60, 1, 1, "", "DumpReader"]], "MDAnalysis.coordinates.LAMMPS.DATAReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DATAWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DCDReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dimensions"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 5, 1, "", "n_frames"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DCDWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DumpReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.MMTF": [[61, 1, 1, "", "MMTFReader"], [61, 3, 1, "", "fetch_mmtf"]], "MDAnalysis.coordinates.MOL2": [[62, 1, 1, "", "MOL2Reader"], [62, 1, 1, "", "MOL2Writer"]], "MDAnalysis.coordinates.MOL2.MOL2Reader": [[62, 2, 1, "", "units"]], "MDAnalysis.coordinates.MOL2.MOL2Writer": [[62, 4, 1, "", "close"], [62, 4, 1, "", "encode_block"], [62, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN": [[63, 1, 1, "", "NAMDBINReader"], [63, 1, 1, "", "NAMDBINWriter"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader": [[63, 4, 1, "", "Writer"], [63, 4, 1, "", "parse_n_atoms"], [63, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter": [[63, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB": [[64, 1, 1, "", "ExtendedPDBReader"], [64, 1, 1, "", "MultiPDBWriter"], [64, 1, 1, "", "PDBReader"], [64, 1, 1, "", "PDBWriter"]], "MDAnalysis.coordinates.PDB.ExtendedPDBReader": [[64, 4, 1, "", "OtherWriter"], [64, 4, 1, "", "Writer"], [64, 4, 1, "", "add_auxiliary"], [64, 4, 1, "", "add_transformations"], [64, 5, 1, "", "aux_list"], [64, 4, 1, "", "check_slice_indices"], [64, 4, 1, "", "close"], [64, 4, 1, "", "convert_forces_from_native"], [64, 4, 1, "", "convert_forces_to_native"], [64, 4, 1, "", "convert_pos_from_native"], [64, 4, 1, "", "convert_pos_to_native"], [64, 4, 1, "", "convert_time_from_native"], [64, 4, 1, "", "convert_time_to_native"], [64, 4, 1, "", "convert_velocities_from_native"], [64, 4, 1, "", "convert_velocities_to_native"], [64, 4, 1, "", "copy"], [64, 5, 1, "", "dt"], [64, 5, 1, "", "frame"], [64, 4, 1, "", "get_aux_attribute"], [64, 4, 1, "", "get_aux_descriptions"], [64, 4, 1, "", "iter_as_aux"], [64, 4, 1, "", "iter_auxiliary"], [64, 4, 1, "", "next"], [64, 4, 1, "", "next_as_aux"], [64, 4, 1, "", "parse_n_atoms"], [64, 4, 1, "", "remove_auxiliary"], [64, 4, 1, "", "rename_aux"], [64, 4, 1, "", "rewind"], [64, 4, 1, "", "set_aux_attribute"], [64, 5, 1, "", "time"], [64, 4, 1, "", "timeseries"], [64, 5, 1, "", "totaltime"], [64, 5, 1, "", "transformations"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBReader": [[64, 4, 1, "", "Writer"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBWriter": [[64, 4, 1, "", "CONECT"], [64, 4, 1, "", "CRYST1"], [64, 4, 1, "", "END"], [64, 4, 1, "", "ENDMDL"], [64, 4, 1, "", "HEADER"], [64, 4, 1, "", "MODEL"], [64, 4, 1, "", "REMARK"], [64, 4, 1, "", "TITLE"], [64, 4, 1, "", "_check_pdb_coordinates"], [64, 4, 1, "", "_update_frame"], [64, 4, 1, "", "_write_pdb_bonds"], [64, 4, 1, "", "_write_timestep"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"], [64, 4, 1, "", "write"], [64, 4, 1, "", "write_all_timesteps"]], "MDAnalysis.coordinates.PDBQT": [[65, 1, 1, "", "PDBQTReader"], [65, 1, 1, "", "PDBQTWriter"]], "MDAnalysis.coordinates.PDBQT.PDBQTReader": [[65, 4, 1, "", "Writer"], [65, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDBQT.PDBQTWriter": [[65, 4, 1, "", "close"], [65, 2, 1, "", "units"], [65, 4, 1, "", "write"]], "MDAnalysis.coordinates.PQR": [[66, 1, 1, "", "PQRReader"], [66, 1, 1, "", "PQRWriter"]], "MDAnalysis.coordinates.PQR.PQRReader": [[66, 4, 1, "", "Writer"], [66, 2, 1, "", "units"]], "MDAnalysis.coordinates.PQR.PQRWriter": [[66, 2, 1, "", "units"], [66, 4, 1, "", "write"]], "MDAnalysis.coordinates.TNG": [[67, 1, 1, "", "TNGReader"]], "MDAnalysis.coordinates.TNG.TNGReader": [[67, 4, 1, "", "Writer"], [67, 5, 1, "", "additional_blocks"], [67, 5, 1, "", "blocks"], [67, 4, 1, "", "close"], [67, 5, 1, "", "n_frames"], [67, 4, 1, "", "parse_n_atoms"], [67, 5, 1, "", "special_blocks"], [67, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ": [[68, 1, 1, "", "NCDFPicklable"], [68, 1, 1, "", "NCDFReader"], [68, 1, 1, "", "NCDFWriter"], [68, 1, 1, "", "TRJReader"]], "MDAnalysis.coordinates.TRJ.NCDFReader": [[68, 4, 1, "", "Writer"], [68, 4, 1, "", "close"], [68, 4, 1, "", "parse_n_atoms"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.NCDFWriter": [[68, 4, 1, "", "close"], [68, 4, 1, "", "is_periodic"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.TRJReader": [[68, 4, 1, "", "close"], [68, 5, 1, "", "n_frames"], [68, 4, 1, "", "open_trajectory"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR": [[69, 1, 1, "", "TRRReader"], [69, 1, 1, "", "TRRWriter"]], "MDAnalysis.coordinates.TRR.TRRReader": [[69, 4, 1, "", "OtherWriter"], [69, 4, 1, "", "Writer"], [69, 4, 1, "", "add_auxiliary"], [69, 4, 1, "", "add_transformations"], [69, 5, 1, "", "aux_list"], [69, 4, 1, "", "check_slice_indices"], [69, 4, 1, "", "close"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "copy"], [69, 5, 1, "", "dt"], [69, 5, 1, "", "frame"], [69, 4, 1, "", "get_aux_attribute"], [69, 4, 1, "", "get_aux_descriptions"], [69, 4, 1, "", "iter_as_aux"], [69, 4, 1, "", "iter_auxiliary"], [69, 5, 1, "", "n_frames"], [69, 4, 1, "", "next"], [69, 4, 1, "", "next_as_aux"], [69, 4, 1, "", "parse_n_atoms"], [69, 4, 1, "", "remove_auxiliary"], [69, 4, 1, "", "rename_aux"], [69, 4, 1, "", "rewind"], [69, 4, 1, "", "set_aux_attribute"], [69, 5, 1, "", "time"], [69, 4, 1, "", "timeseries"], [69, 5, 1, "", "totaltime"], [69, 5, 1, "", "transformations"], [69, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR.TRRWriter": [[69, 4, 1, "", "close"], [69, 4, 1, "", "convert_dimensions_to_unitcell"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "has_valid_coordinates"], [69, 2, 1, "", "units"], [69, 4, 1, "", "write"]], "MDAnalysis.coordinates.TRZ": [[70, 1, 1, "", "TRZReader"], [70, 1, 1, "", "TRZWriter"]], "MDAnalysis.coordinates.TRZ.TRZReader": [[70, 4, 1, "", "Writer"], [70, 4, 1, "", "close"], [70, 5, 1, "", "delta"], [70, 5, 1, "", "n_atoms"], [70, 5, 1, "", "n_frames"], [70, 4, 1, "", "open_trajectory"], [70, 5, 1, "", "skip_timestep"], [70, 2, 1, "", "ts"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRZ.TRZWriter": [[70, 4, 1, "", "close"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TXYZ": [[71, 1, 1, "", "TXYZReader"]], "MDAnalysis.coordinates.TXYZ.TXYZReader": [[71, 4, 1, "", "OtherWriter"], [71, 4, 1, "", "Writer"], [71, 4, 1, "", "add_auxiliary"], [71, 4, 1, "", "add_transformations"], [71, 5, 1, "", "aux_list"], [71, 4, 1, "", "check_slice_indices"], [71, 4, 1, "", "close"], [71, 4, 1, "", "convert_forces_from_native"], [71, 4, 1, "", "convert_forces_to_native"], [71, 4, 1, "", "convert_pos_from_native"], [71, 4, 1, "", "convert_pos_to_native"], [71, 4, 1, "", "convert_time_from_native"], [71, 4, 1, "", "convert_time_to_native"], [71, 4, 1, "", "convert_velocities_from_native"], [71, 4, 1, "", "convert_velocities_to_native"], [71, 4, 1, "", "copy"], [71, 5, 1, "", "dt"], [71, 5, 1, "", "frame"], [71, 4, 1, "", "get_aux_attribute"], [71, 4, 1, "", "get_aux_descriptions"], [71, 4, 1, "", "iter_as_aux"], [71, 4, 1, "", "iter_auxiliary"], [71, 5, 1, "", "n_atoms"], [71, 4, 1, "", "next"], [71, 4, 1, "", "next_as_aux"], [71, 4, 1, "", "parse_n_atoms"], [71, 4, 1, "", "remove_auxiliary"], [71, 4, 1, "", "rename_aux"], [71, 4, 1, "", "rewind"], [71, 4, 1, "", "set_aux_attribute"], [71, 5, 1, "", "time"], [71, 4, 1, "", "timeseries"], [71, 5, 1, "", "totaltime"], [71, 5, 1, "", "transformations"], [71, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR": [[72, 1, 1, "", "XDRBaseReader"], [72, 1, 1, "", "XDRBaseWriter"], [72, 3, 1, "", "offsets_filename"], [72, 3, 1, "", "read_numpy_offsets"]], "MDAnalysis.coordinates.XDR.XDRBaseReader": [[72, 4, 1, "", "OtherWriter"], [72, 4, 1, "", "Writer"], [72, 4, 1, "", "add_auxiliary"], [72, 4, 1, "", "add_transformations"], [72, 5, 1, "", "aux_list"], [72, 4, 1, "", "check_slice_indices"], [72, 4, 1, "", "close"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "copy"], [72, 5, 1, "", "dt"], [72, 5, 1, "", "frame"], [72, 4, 1, "", "get_aux_attribute"], [72, 4, 1, "", "get_aux_descriptions"], [72, 4, 1, "", "iter_as_aux"], [72, 4, 1, "", "iter_auxiliary"], [72, 5, 1, "", "n_frames"], [72, 4, 1, "", "next"], [72, 4, 1, "", "next_as_aux"], [72, 4, 1, "", "parse_n_atoms"], [72, 4, 1, "", "remove_auxiliary"], [72, 4, 1, "", "rename_aux"], [72, 4, 1, "", "rewind"], [72, 4, 1, "", "set_aux_attribute"], [72, 5, 1, "", "time"], [72, 4, 1, "", "timeseries"], [72, 5, 1, "", "totaltime"], [72, 5, 1, "", "transformations"], [72, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR.XDRBaseWriter": [[72, 4, 1, "", "close"], [72, 4, 1, "", "convert_dimensions_to_unitcell"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "has_valid_coordinates"], [72, 2, 1, "", "units"], [72, 4, 1, "", "write"]], "MDAnalysis.coordinates.XTC": [[73, 1, 1, "", "XTCReader"], [73, 1, 1, "", "XTCWriter"]], "MDAnalysis.coordinates.XTC.XTCReader": [[73, 4, 1, "", "OtherWriter"], [73, 4, 1, "", "Writer"], [73, 4, 1, "", "add_auxiliary"], [73, 4, 1, "", "add_transformations"], [73, 5, 1, "", "aux_list"], [73, 4, 1, "", "check_slice_indices"], [73, 4, 1, "", "close"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "copy"], [73, 5, 1, "", "dt"], [73, 5, 1, "", "frame"], [73, 4, 1, "", "get_aux_attribute"], [73, 4, 1, "", "get_aux_descriptions"], [73, 4, 1, "", "iter_as_aux"], [73, 4, 1, "", "iter_auxiliary"], [73, 5, 1, "", "n_frames"], [73, 4, 1, "", "next"], [73, 4, 1, "", "next_as_aux"], [73, 4, 1, "", "parse_n_atoms"], [73, 4, 1, "", "remove_auxiliary"], [73, 4, 1, "", "rename_aux"], [73, 4, 1, "", "rewind"], [73, 4, 1, "", "set_aux_attribute"], [73, 5, 1, "", "time"], [73, 4, 1, "", "timeseries"], [73, 5, 1, "", "totaltime"], [73, 5, 1, "", "transformations"], [73, 2, 1, "", "units"]], "MDAnalysis.coordinates.XTC.XTCWriter": [[73, 4, 1, "", "close"], [73, 4, 1, "", "convert_dimensions_to_unitcell"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "has_valid_coordinates"], [73, 2, 1, "", "units"], [73, 4, 1, "", "write"]], "MDAnalysis.coordinates.XYZ": [[74, 1, 1, "", "XYZReader"], [74, 1, 1, "", "XYZWriter"]], "MDAnalysis.coordinates.XYZ.XYZReader": [[74, 4, 1, "", "Writer"], [74, 4, 1, "", "close"], [74, 5, 1, "", "n_atoms"], [74, 2, 1, "", "units"]], "MDAnalysis.coordinates.XYZ.XYZWriter": [[74, 4, 1, "", "close"], [74, 2, 1, "", "units"], [74, 4, 1, "", "write"]], "MDAnalysis.coordinates.base": [[75, 1, 1, "", "ConverterBase"], [75, 1, 1, "", "FrameIteratorAll"], [75, 1, 1, "", "FrameIteratorBase"], [75, 1, 1, "", "FrameIteratorIndices"], [75, 1, 1, "", "FrameIteratorSliced"], [75, 1, 1, "", "IOBase"], [75, 1, 1, "", "ProtoReader"], [75, 1, 1, "", "ReaderBase"], [75, 1, 1, "", "SingleFrameReaderBase"], [75, 1, 1, "", "WriterBase"]], "MDAnalysis.coordinates.base.ConverterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.IOBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.ProtoReader": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"]], "MDAnalysis.coordinates.base.ReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.SingleFrameReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.WriterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_dimensions_to_unitcell"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "has_valid_coordinates"], [75, 2, 1, "", "units"], [75, 4, 1, "", "write"]], "MDAnalysis.coordinates.chain": [[76, 1, 1, "", "ChainReader"]], "MDAnalysis.coordinates.chain.ChainReader": [[76, 4, 1, "", "_apply"], [76, 4, 1, "", "_get"], [76, 4, 1, "", "_get_local_frame"], [76, 4, 1, "", "_get_same"], [76, 4, 1, "", "_read_frame"], [76, 5, 1, "", "active_reader"], [76, 4, 1, "", "close"], [76, 5, 1, "", "compressed"], [76, 4, 1, "", "convert_pos_from_native"], [76, 4, 1, "", "convert_pos_to_native"], [76, 4, 1, "", "convert_time_from_native"], [76, 4, 1, "", "convert_time_to_native"], [76, 5, 1, "", "frame"], [76, 5, 1, "", "periodic"], [76, 5, 1, "", "time"], [76, 5, 1, "", "units"]], "MDAnalysis.coordinates.chemfiles": [[77, 1, 1, "", "ChemfilesPicklable"], [77, 1, 1, "", "ChemfilesReader"], [77, 1, 1, "", "ChemfilesWriter"], [77, 6, 1, "", "MAX_CHEMFILES_VERSION"], [77, 6, 1, "", "MIN_CHEMFILES_VERSION"], [77, 3, 1, "", "check_chemfiles_version"]], "MDAnalysis.coordinates.core": [[78, 3, 1, "", "get_reader_for"], [78, 3, 1, "", "get_writer_for"], [78, 3, 1, "", "reader"], [78, 3, 1, "", "writer"]], "MDAnalysis.coordinates.memory": [[80, 1, 1, "", "MemoryReader"]], "MDAnalysis.coordinates.memory.MemoryReader": [[80, 4, 1, "", "OtherWriter"], [80, 4, 1, "", "Writer"], [80, 4, 1, "", "add_auxiliary"], [80, 4, 1, "", "add_transformations"], [80, 5, 1, "", "aux_list"], [80, 4, 1, "", "check_slice_indices"], [80, 4, 1, "", "close"], [80, 4, 1, "", "convert_forces_from_native"], [80, 4, 1, "", "convert_forces_to_native"], [80, 4, 1, "", "convert_pos_from_native"], [80, 4, 1, "", "convert_pos_to_native"], [80, 4, 1, "", "convert_time_from_native"], [80, 4, 1, "", "convert_time_to_native"], [80, 4, 1, "", "convert_velocities_from_native"], [80, 4, 1, "", "convert_velocities_to_native"], [80, 4, 1, "", "copy"], [80, 5, 1, "", "dt"], [80, 5, 1, "", "frame"], [80, 4, 1, "", "get_array"], [80, 4, 1, "", "get_aux_attribute"], [80, 4, 1, "", "get_aux_descriptions"], [80, 4, 1, "", "iter_as_aux"], [80, 4, 1, "", "iter_auxiliary"], [80, 4, 1, "", "next"], [80, 4, 1, "", "next_as_aux"], [80, 4, 1, "", "parse_n_atoms"], [80, 4, 1, "", "remove_auxiliary"], [80, 4, 1, "", "rename_aux"], [80, 4, 1, "", "rewind"], [80, 4, 1, "", "set_array"], [80, 4, 1, "", "set_aux_attribute"], [80, 5, 1, "", "time"], [80, 4, 1, "", "timeseries"], [80, 5, 1, "", "totaltime"], [80, 5, 1, "", "transformations"], [80, 2, 1, "", "units"]], "MDAnalysis.coordinates.null": [[81, 1, 1, "", "NullWriter"]], "MDAnalysis.coordinates.null.NullWriter": [[81, 2, 1, "", "units"]], "MDAnalysis.coordinates.timestep": [[83, 1, 1, "", "Timestep"]], "MDAnalysis.coordinates.timestep.Timestep": [[83, 4, 1, "", "__eq__"], [83, 4, 1, "", "__getitem__"], [83, 4, 1, "", "__init__"], [83, 4, 1, "", "__iter__"], [83, 2, 1, "", "_forces"], [83, 2, 1, "", "_pos"], [83, 2, 1, "", "_velocities"], [83, 4, 1, "", "copy"], [83, 4, 1, "", "copy_slice"], [83, 2, 1, "", "data"], [83, 2, 1, "", "dimensions"], [83, 2, 1, "", "dt"], [83, 2, 1, "", "dtype"], [83, 2, 1, "", "forces"], [83, 2, 1, "", "frame"], [83, 4, 1, "", "from_coordinates"], [83, 4, 1, "", "from_timestep"], [83, 2, 1, "", "has_forces"], [83, 2, 1, "", "has_positions"], [83, 2, 1, "", "has_velocities"], [83, 2, 1, "", "n_atoms"], [83, 2, 1, "", "positions"], [83, 2, 1, "", "time"], [83, 2, 1, "", "triclinic_dimensions"], [83, 2, 1, "", "velocities"], [83, 2, 1, "", "volume"]], "MDAnalysis.core": [[87, 0, 0, "-", "__init__"], [85, 0, 0, "-", "accessors"], [86, 0, 0, "-", "groups"], [88, 0, 0, "-", "selection"], [89, 0, 0, "-", "topology"], [90, 0, 0, "-", "topologyattrs"], [91, 0, 0, "-", "topologyobjects"], [92, 0, 0, "-", "universe"]], "MDAnalysis.core.accessors": [[85, 1, 1, "", "Accessor"], [85, 1, 1, "", "ConverterWrapper"]], "MDAnalysis.core.groups": [[86, 1, 1, "", "Atom"], [86, 1, 1, "", "AtomGroup"], [86, 1, 1, "", "Residue"], [86, 1, 1, "", "ResidueGroup"], [86, 1, 1, "", "Segment"], [86, 1, 1, "", "SegmentGroup"], [86, 1, 1, "", "UpdatingAtomGroup"]], "MDAnalysis.core.groups.Atom": [[86, 5, 1, "", "bfactor"], [86, 5, 1, "", "bonded_atoms"], [86, 5, 1, "", "force"], [86, 5, 1, "", "fragindex"], [86, 5, 1, "", "fragment"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "position"], [86, 5, 1, "", "velocity"]], "MDAnalysis.core.groups.AtomGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 5, 1, "", "angle"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 5, 1, "", "bond"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 5, 1, "", "cmap"], [86, 4, 1, "", "concatenate"], [86, 2, 1, "", "convert_to"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dihedral"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 5, 1, "", "forces"], [86, 5, 1, "", "fragindices"], [86, 5, 1, "", "fragments"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "guess_bonds"], [86, 4, 1, "", "gyration_moments"], [86, 5, 1, "", "improper"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_fragments"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 5, 1, "", "positions"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "select_atoms"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "sort"], [86, 4, 1, "", "split"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 5, 1, "", "ts"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 5, 1, "", "ureybradley"], [86, 5, 1, "", "velocities"], [86, 4, 1, "", "wrap"], [86, 4, 1, "", "write"]], "MDAnalysis.core.groups.Residue": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "chi1_selection"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "omega_selection"], [86, 4, 1, "", "phi_selection"], [86, 4, 1, "", "psi_selection"], [86, 5, 1, "", "segment"]], "MDAnalysis.core.groups.ResidueGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "chi1_selections"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "omega_selections"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "phi_selections"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "psi_selections"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "sequence"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.Segment": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "residues"]], "MDAnalysis.core.groups.SegmentGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.UpdatingAtomGroup": [[86, 5, 1, "", "atoms"], [86, 4, 1, "", "copy"], [86, 5, 1, "", "is_uptodate"], [86, 4, 1, "", "update_selection"]], "MDAnalysis.core.selection": [[88, 1, 1, "", "AromaticSelection"], [88, 1, 1, "", "BackboneSelection"], [88, 1, 1, "", "BaseSelection"], [88, 1, 1, "", "BoolSelection"], [88, 1, 1, "", "ByNumSelection"], [88, 1, 1, "", "ByResSelection"], [88, 6, 1, "", "FLOAT_PATTERN"], [88, 1, 1, "", "FloatRangeSelection"], [88, 6, 1, "", "INT_PATTERN"], [88, 1, 1, "", "NucleicBackboneSelection"], [88, 1, 1, "", "NucleicSelection"], [88, 1, 1, "", "NucleicSugarSelection"], [88, 1, 1, "", "PropertySelection"], [88, 1, 1, "", "ProteinSelection"], [88, 6, 1, "", "RANGE_PATTERN"], [88, 1, 1, "", "RangeSelection"], [88, 1, 1, "", "ResidSelection"], [88, 1, 1, "", "SameSelection"], [88, 1, 1, "", "SelectionParser"], [88, 1, 1, "", "SingleCharSelection"], [88, 1, 1, "", "SmartsSelection"], [88, 3, 1, "", "gen_selection_class"], [88, 3, 1, "", "grab_not_keywords"], [88, 3, 1, "", "is_keyword"], [88, 3, 1, "", "join_separated_values"], [88, 3, 1, "", "return_empty_on_apply"]], "MDAnalysis.core.selection.FloatRangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.RangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.SelectionParser": [[88, 4, 1, "", "expect"], [88, 4, 1, "", "parse"]], "MDAnalysis.core.topology": [[89, 1, 1, "", "Topology"], [89, 1, 1, "", "TransTable"], [89, 3, 1, "", "make_downshift_arrays"]], "MDAnalysis.core.topology.Topology": [[89, 4, 1, "", "add_Residue"], [89, 4, 1, "", "add_Segment"], [89, 4, 1, "", "add_TopologyAttr"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "del_TopologyAttr"], [89, 5, 1, "", "guessed_attributes"], [89, 5, 1, "", "read_attributes"]], "MDAnalysis.core.topology.TransTable": [[89, 4, 1, "", "atoms2residues"], [89, 4, 1, "", "atoms2segments"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "move_atom"], [89, 4, 1, "", "move_residue"], [89, 2, 1, "", "n_atoms"], [89, 2, 1, "", "n_residues"], [89, 2, 1, "", "n_segments"], [89, 4, 1, "", "residues2atoms_1d"], [89, 4, 1, "", "residues2atoms_2d"], [89, 4, 1, "", "residues2segments"], [89, 4, 1, "", "segments2atoms_1d"], [89, 4, 1, "", "segments2atoms_2d"], [89, 4, 1, "", "segments2residues_1d"], [89, 4, 1, "", "segments2residues_2d"], [89, 2, 1, "", "size"]], "MDAnalysis.core.topologyattrs": [[90, 1, 1, "", "AltLocs"], [90, 1, 1, "", "Angles"], [90, 1, 1, "", "Aromaticities"], [90, 1, 1, "", "AtomAttr"], [90, 1, 1, "", "AtomStringAttr"], [90, 1, 1, "", "Atomids"], [90, 1, 1, "", "Atomindices"], [90, 1, 1, "", "Atomnames"], [90, 1, 1, "", "Atomtypes"], [90, 1, 1, "", "Bonds"], [90, 1, 1, "", "CMaps"], [90, 1, 1, "", "ChainIDs"], [90, 1, 1, "", "Charges"], [90, 1, 1, "", "Dihedrals"], [90, 1, 1, "", "Elements"], [90, 1, 1, "", "Epsilon14s"], [90, 1, 1, "", "Epsilons"], [90, 1, 1, "", "FormalCharges"], [90, 1, 1, "", "GBScreens"], [90, 1, 1, "", "ICodes"], [90, 1, 1, "", "Impropers"], [90, 1, 1, "", "Masses"], [90, 1, 1, "", "Molnums"], [90, 1, 1, "", "Moltypes"], [90, 1, 1, "", "NonbondedIndices"], [90, 1, 1, "", "Occupancies"], [90, 1, 1, "", "RMin14s"], [90, 1, 1, "", "RMins"], [90, 1, 1, "", "RSChirality"], [90, 1, 1, "", "Radii"], [90, 1, 1, "", "RecordTypes"], [90, 1, 1, "", "Resids"], [90, 1, 1, "", "ResidueAttr"], [90, 1, 1, "", "ResidueStringAttr"], [90, 1, 1, "", "Resindices"], [90, 1, 1, "", "Resnames"], [90, 1, 1, "", "Resnums"], [90, 1, 1, "", "Segids"], [90, 1, 1, "", "Segindices"], [90, 1, 1, "", "SegmentAttr"], [90, 1, 1, "", "SegmentStringAttr"], [90, 1, 1, "", "SolventRadii"], [90, 1, 1, "", "Tempfactors"], [90, 1, 1, "", "TopologyAttr"], [90, 1, 1, "", "UreyBradleys"]], "MDAnalysis.core.topologyattrs.AltLocs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Aromaticities": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.AtomAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.AtomStringAttr": [[90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Atomindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomnames": [[90, 4, 1, "", "chi1_selection"], [90, 4, 1, "", "chi1_selections"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "omega_selection"], [90, 4, 1, "", "omega_selections"], [90, 4, 1, "", "phi_selection"], [90, 4, 1, "", "phi_selections"], [90, 4, 1, "", "psi_selection"], [90, 4, 1, "", "psi_selections"]], "MDAnalysis.core.topologyattrs.Atomtypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Bonds": [[90, 4, 1, "", "bonded_atoms"], [90, 4, 1, "", "fragindex"], [90, 4, 1, "", "fragindices"], [90, 4, 1, "", "fragment"], [90, 4, 1, "", "fragments"], [90, 4, 1, "", "n_fragments"]], "MDAnalysis.core.topologyattrs.ChainIDs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Charges": [[90, 4, 1, "", "center_of_charge"], [90, 4, 1, "", "dipole_moment"], [90, 4, 1, "", "dipole_vector"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "quadrupole_moment"], [90, 4, 1, "", "quadrupole_tensor"], [90, 4, 1, "", "total_charge"]], "MDAnalysis.core.topologyattrs.Elements": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilon14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilons": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.FormalCharges": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.GBScreens": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ICodes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Masses": [[90, 4, 1, "", "align_principal_axis"], [90, 4, 1, "", "asphericity"], [90, 4, 1, "", "center_of_mass"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "gyration_moments"], [90, 4, 1, "", "moment_of_inertia"], [90, 4, 1, "", "principal_axes"], [90, 4, 1, "", "radius_of_gyration"], [90, 4, 1, "", "shape_parameter"], [90, 4, 1, "", "total_mass"]], "MDAnalysis.core.topologyattrs.Molnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Moltypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.NonbondedIndices": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Occupancies": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMin14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMins": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Radii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RecordTypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Resids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ResidueAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.ResidueStringAttr": [[90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resnames": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "sequence"]], "MDAnalysis.core.topologyattrs.Resnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentStringAttr": [[90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SolventRadii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Tempfactors": [[90, 4, 1, "", "bfactor"], [90, 4, 1, "", "bfactor_setter"], [90, 4, 1, "", "bfactors"], [90, 4, 1, "", "bfactors_setter"], [90, 2, 1, "", "dtype"], [90, 2, 1, "", "group"]], "MDAnalysis.core.topologyattrs.TopologyAttr": [[90, 2, 1, "", "attrname"], [90, 4, 1, "", "copy"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "from_blank"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 5, 1, "", "is_guessed"], [90, 2, 1, "", "per_object"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"], [90, 2, 1, "", "singular"], [90, 2, 1, "", "top"]], "MDAnalysis.core.topologyobjects": [[91, 1, 1, "", "Angle"], [91, 1, 1, "", "Bond"], [91, 1, 1, "", "CMap"], [91, 1, 1, "", "Dihedral"], [91, 1, 1, "", "ImproperDihedral"], [91, 1, 1, "", "TopologyDict"], [91, 1, 1, "", "TopologyGroup"], [91, 1, 1, "", "TopologyObject"], [91, 1, 1, "", "UreyBradley"]], "MDAnalysis.core.topologyobjects.Angle": [[91, 4, 1, "", "angle"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Bond": [[91, 4, 1, "", "length"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Dihedral": [[91, 4, 1, "", "dihedral"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.ImproperDihedral": [[91, 4, 1, "", "improper"]], "MDAnalysis.core.topologyobjects.TopologyDict": [[91, 4, 1, "", "keys"]], "MDAnalysis.core.topologyobjects.TopologyGroup": [[91, 4, 1, "", "angles"], [91, 5, 1, "", "atom1"], [91, 5, 1, "", "atom2"], [91, 5, 1, "", "atom3"], [91, 5, 1, "", "atom4"], [91, 4, 1, "", "atomgroup_intersection"], [91, 4, 1, "", "bonds"], [91, 4, 1, "", "dihedrals"], [91, 4, 1, "", "dump_contents"], [91, 5, 1, "", "indices"], [91, 4, 1, "", "selectBonds"], [91, 4, 1, "", "select_bonds"], [91, 4, 1, "", "to_indices"], [91, 5, 1, "", "topDict"], [91, 4, 1, "", "types"], [91, 5, 1, "", "universe"], [91, 4, 1, "", "values"]], "MDAnalysis.core.topologyobjects.TopologyObject": [[91, 5, 1, "", "atoms"], [91, 5, 1, "", "indices"], [91, 5, 1, "", "type"]], "MDAnalysis.core.topologyobjects.UreyBradley": [[91, 4, 1, "", "distance"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.universe": [[92, 3, 1, "", "Merge"], [92, 1, 1, "", "Universe"]], "MDAnalysis.core.universe.Universe": [[92, 4, 1, "", "add_Residue"], [92, 4, 1, "", "add_Segment"], [92, 4, 1, "", "add_TopologyAttr"], [92, 4, 1, "", "add_angles"], [92, 4, 1, "", "add_bonds"], [92, 4, 1, "", "add_dihedrals"], [92, 4, 1, "", "add_impropers"], [92, 2, 1, "", "angles"], [92, 2, 1, "", "atoms"], [92, 2, 1, "", "bonds"], [92, 5, 1, "", "coord"], [92, 4, 1, "", "copy"], [92, 4, 1, "", "del_TopologyAttr"], [92, 4, 1, "", "delete_angles"], [92, 4, 1, "", "delete_bonds"], [92, 4, 1, "", "delete_dihedrals"], [92, 4, 1, "", "delete_impropers"], [92, 2, 1, "", "dihedrals"], [92, 2, 1, "", "dimensions"], [92, 4, 1, "", "empty"], [92, 4, 1, "", "from_smiles"], [92, 2, 1, "", "impropers"], [92, 5, 1, "", "kwargs"], [92, 4, 1, "", "load_new"], [92, 5, 1, "", "models"], [92, 2, 1, "", "residues"], [92, 2, 1, "", "segments"], [92, 4, 1, "", "select_atoms"], [92, 2, 1, "", "trajectory"], [92, 4, 1, "", "transfer_to_memory"]], "MDAnalysis.exceptions": [[94, 7, 1, "", "ApplicationError"], [94, 7, 1, "", "ConversionWarning"], [94, 7, 1, "", "DuplicateWarning"], [94, 7, 1, "", "FileFormatWarning"], [94, 7, 1, "", "MissingDataWarning"], [94, 7, 1, "", "NoDataError"], [94, 7, 1, "", "SelectionError"], [94, 7, 1, "", "SelectionWarning"], [94, 7, 1, "", "StreamWarning"]], "MDAnalysis.lib": [[95, 0, 0, "-", "NeighborSearch"], [96, 0, 0, "-", "c_distances"], [97, 0, 0, "-", "c_distances_openmp"], [98, 0, 0, "-", "correlations"], [99, 0, 0, "-", "distances"], [102, 0, 0, "-", "log"], [103, 0, 0, "-", "mdamath"], [104, 0, 0, "-", "nsgrid"], [105, 0, 0, "-", "picklable_file_io"], [106, 0, 0, "-", "pkdtree"], [107, 0, 0, "-", "qcprot"], [108, 0, 0, "-", "transformations"], [109, 0, 0, "-", "util"]], "MDAnalysis.lib.NeighborSearch": [[95, 1, 1, "", "AtomNeighborSearch"]], "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch": [[95, 4, 1, "", "search"]], "MDAnalysis.lib.correlations": [[98, 3, 1, "", "autocorrelation"], [98, 3, 1, "", "correct_intermittency"]], "MDAnalysis.lib.distances": [[99, 3, 1, "", "apply_PBC"], [99, 3, 1, "", "augment_coordinates"], [99, 3, 1, "", "calc_angles"], [99, 3, 1, "", "calc_bonds"], [99, 3, 1, "", "calc_dihedrals"], [99, 3, 1, "", "capped_distance"], [99, 3, 1, "", "distance_array"], [99, 3, 1, "", "minimize_vectors"], [99, 3, 1, "", "self_capped_distance"], [99, 3, 1, "", "self_distance_array"], [99, 3, 1, "", "transform_RtoS"], [99, 3, 1, "", "transform_StoR"], [99, 3, 1, "", "undo_augment"]], "MDAnalysis.lib.formats": [[100, 0, 0, "-", "libdcd"], [101, 0, 0, "-", "libmdaxdr"]], "MDAnalysis.lib.formats.libdcd": [[100, 1, 1, "", "DCDFile"]], "MDAnalysis.lib.formats.libdcd.DCDFile": [[100, 2, 1, "", "charmm_bitfield"], [100, 4, 1, "", "close"], [100, 2, 1, "", "header"], [100, 4, 1, "", "open"], [100, 4, 1, "", "read"], [100, 4, 1, "", "readframes"], [100, 4, 1, "", "seek"], [100, 4, 1, "", "tell"], [100, 4, 1, "", "write"], [100, 4, 1, "", "write_header"]], "MDAnalysis.lib.formats.libmdaxdr": [[101, 1, 1, "", "TRRFile"], [101, 1, 1, "", "XTCFile"]], "MDAnalysis.lib.formats.libmdaxdr.TRRFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_xvf"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.formats.libmdaxdr.XTCFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_x"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.log": [[102, 1, 1, "", "NullHandler"], [102, 1, 1, "", "ProgressBar"], [102, 3, 1, "", "clear_handlers"], [102, 3, 1, "", "create"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"]], "MDAnalysis.lib.log.NullHandler": [[102, 4, 1, "", "emit"]], "MDAnalysis.lib.mdamath": [[103, 3, 1, "", "angle"], [103, 3, 1, "", "box_volume"], [103, 3, 1, "", "dihedral"], [103, 3, 1, "", "find_fragments"], [103, 3, 1, "", "make_whole"], [103, 3, 1, "", "norm"], [103, 3, 1, "", "normal"], [103, 3, 1, "", "pdot"], [103, 3, 1, "", "pnorm"], [103, 3, 1, "", "sarrus_det"], [103, 3, 1, "", "stp"], [103, 3, 1, "", "triclinic_box"], [103, 3, 1, "", "triclinic_vectors"]], "MDAnalysis.lib.nsgrid": [[104, 1, 1, "", "FastNS"], [104, 1, 1, "", "NSResults"]], "MDAnalysis.lib.nsgrid.FastNS": [[104, 4, 1, "", "search"], [104, 4, 1, "", "self_search"]], "MDAnalysis.lib.nsgrid.NSResults": [[104, 4, 1, "", "get_pair_distances"], [104, 4, 1, "", "get_pairs"]], "MDAnalysis.lib.picklable_file_io": [[105, 1, 1, "", "BZ2Picklable"], [105, 1, 1, "", "BufferIOPicklable"], [105, 1, 1, "", "FileIOPicklable"], [105, 1, 1, "", "GzipPicklable"], [105, 1, 1, "", "TextIOPicklable"], [105, 3, 1, "", "bz2_pickle_open"], [105, 3, 1, "", "gzip_pickle_open"], [105, 3, 1, "", "pickle_open"]], "MDAnalysis.lib.pkdtree": [[106, 1, 1, "", "PeriodicKDTree"]], "MDAnalysis.lib.pkdtree.PeriodicKDTree": [[106, 4, 1, "", "get_indices"], [106, 5, 1, "", "pbc"], [106, 4, 1, "", "search"], [106, 4, 1, "", "search_pairs"], [106, 4, 1, "", "search_tree"], [106, 4, 1, "", "set_coords"]], "MDAnalysis.lib.qcprot": [[107, 3, 1, "", "CalcRMSDRotationalMatrix"], [107, 3, 1, "", "FastCalcRMSDAndRotation"], [107, 3, 1, "", "InnerProduct"]], "MDAnalysis.lib.transformations": [[108, 1, 1, "", "Arcball"], [108, 3, 1, "", "arcball_nearest_axis"], [108, 3, 1, "", "compose_matrix"], [108, 3, 1, "", "concatenate_matrices"], [108, 3, 1, "", "decompose_matrix"], [108, 3, 1, "", "euler_from_quaternion"], [108, 3, 1, "", "projection_from_matrix"], [108, 3, 1, "", "quaternion_imag"], [108, 3, 1, "", "quaternion_real"], [108, 3, 1, "", "reflection_from_matrix"], [108, 3, 1, "", "rotation_from_matrix"], [108, 3, 1, "", "rotaxis"], [108, 3, 1, "", "scale_from_matrix"], [108, 3, 1, "", "shear_from_matrix"], [108, 3, 1, "", "translation_from_matrix"]], "MDAnalysis.lib.transformations.Arcball": [[108, 4, 1, "", "down"], [108, 4, 1, "", "drag"], [108, 4, 1, "", "getconstrain"], [108, 4, 1, "", "matrix"], [108, 4, 1, "", "next"], [108, 4, 1, "", "place"], [108, 4, 1, "", "setaxes"], [108, 4, 1, "", "setconstrain"]], "MDAnalysis.lib.util": [[109, 1, 1, "", "FORTRANReader"], [109, 6, 1, "", "FORTRAN_format_regex"], [109, 1, 1, "", "NamedStream"], [109, 1, 1, "", "Namespace"], [109, 1, 1, "", "_Deprecate"], [109, 3, 1, "", "anyopen"], [109, 3, 1, "", "asiterable"], [109, 3, 1, "", "blocks_of"], [109, 3, 1, "", "cached"], [109, 3, 1, "", "check_atomgroup_not_empty"], [109, 3, 1, "", "check_box"], [109, 3, 1, "", "check_compressed_format"], [109, 3, 1, "", "check_coords"], [109, 3, 1, "", "conv_float"], [109, 3, 1, "", "convert_aa_code"], [109, 3, 1, "", "dedent_docstring"], [109, 3, 1, "", "deprecate"], [109, 3, 1, "", "filename"], [109, 3, 1, "", "fixedwidth_bins"], [109, 3, 1, "", "flatten_dict"], [109, 3, 1, "", "format_from_filename_extension"], [109, 3, 1, "", "get_ext"], [109, 3, 1, "", "get_weights"], [109, 3, 1, "", "greedy_splitext"], [109, 3, 1, "", "group_same_or_consecutive_integers"], [109, 3, 1, "", "guess_format"], [109, 3, 1, "", "hasmethod"], [109, 3, 1, "", "isstream"], [109, 3, 1, "", "iterable"], [109, 3, 1, "", "ltruncate_int"], [109, 3, 1, "", "openany"], [109, 3, 1, "", "parse_residue"], [109, 3, 1, "", "realpath"], [109, 3, 1, "", "static_variables"], [109, 3, 1, "", "store_init_arguments"], [109, 3, 1, "", "unique_int_1d"], [109, 3, 1, "", "unique_rows"], [109, 3, 1, "", "warn_if_not_unique"], [109, 3, 1, "", "which"]], "MDAnalysis.lib.util.FORTRANReader": [[109, 4, 1, "", "number_of_matches"], [109, 4, 1, "", "parse_FORTRAN_format"], [109, 4, 1, "", "read"]], "MDAnalysis.lib.util.NamedStream": [[109, 4, 1, "", "close"], [109, 5, 1, "", "closed"], [109, 4, 1, "", "fileno"], [109, 4, 1, "", "flush"], [109, 4, 1, "", "readable"], [109, 4, 1, "", "readline"], [109, 4, 1, "", "reset"], [109, 4, 1, "", "seek"], [109, 4, 1, "", "seekable"], [109, 4, 1, "", "tell"], [109, 4, 1, "", "truncate"], [109, 4, 1, "", "writable"]], "MDAnalysis.selections": [[114, 0, 0, "-", "base"], [115, 0, 0, "-", "charmm"], [120, 3, 1, "", "get_writer"], [116, 0, 0, "-", "gromacs"], [117, 0, 0, "-", "jmol"], [118, 0, 0, "-", "pymol"], [119, 0, 0, "-", "vmd"]], "MDAnalysis.selections.base": [[114, 1, 1, "", "SelectionWriterBase"], [114, 3, 1, "", "join"]], "MDAnalysis.selections.base.SelectionWriterBase": [[114, 4, 1, "", "__init__"], [114, 4, 1, "", "_translate"], [114, 4, 1, "", "_write_head"], [114, 4, 1, "", "_write_tail"], [114, 4, 1, "", "comment"], [114, 4, 1, "", "write"]], "MDAnalysis.selections.charmm": [[115, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.charmm.SelectionWriter": [[115, 4, 1, "", "close"], [115, 4, 1, "", "comment"], [115, 2, 1, "", "commentfmt"], [115, 2, 1, "", "continuation"], [115, 2, 1, "", "ext"], [115, 2, 1, "", "format"], [115, 4, 1, "", "write"], [115, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.gromacs": [[116, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.gromacs.SelectionWriter": [[116, 4, 1, "", "close"], [116, 4, 1, "", "comment"], [116, 2, 1, "", "commentfmt"], [116, 2, 1, "", "continuation"], [116, 2, 1, "", "ext"], [116, 2, 1, "", "format"], [116, 4, 1, "", "write"], [116, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.jmol": [[117, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.jmol.SelectionWriter": [[117, 4, 1, "", "close"], [117, 4, 1, "", "comment"], [117, 2, 1, "", "commentfmt"], [117, 2, 1, "", "continuation"], [117, 2, 1, "", "default_numterms"], [117, 2, 1, "", "ext"], [117, 2, 1, "", "format"], [117, 4, 1, "", "write"], [117, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.pymol": [[118, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.pymol.SelectionWriter": [[118, 4, 1, "", "close"], [118, 4, 1, "", "comment"], [118, 2, 1, "", "commentfmt"], [118, 2, 1, "", "continuation"], [118, 2, 1, "", "ext"], [118, 2, 1, "", "format"], [118, 4, 1, "", "write"], [118, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.vmd": [[119, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.vmd.SelectionWriter": [[119, 4, 1, "", "close"], [119, 4, 1, "", "comment"], [119, 2, 1, "", "commentfmt"], [119, 2, 1, "", "continuation"], [119, 2, 1, "", "ext"], [119, 2, 1, "", "format"], [119, 4, 1, "", "write"], [119, 4, 1, "", "write_preamble"]], "MDAnalysis.topology": [[122, 0, 0, "-", "CRDParser"], [123, 0, 0, "-", "DLPolyParser"], [124, 0, 0, "-", "DMSParser"], [125, 0, 0, "-", "ExtendedPDBParser"], [126, 0, 0, "-", "FHIAIMSParser"], [127, 0, 0, "-", "GMSParser"], [128, 0, 0, "-", "GROParser"], [129, 0, 0, "-", "GSDParser"], [130, 0, 0, "-", "HoomdXMLParser"], [131, 0, 0, "-", "ITPParser"], [132, 0, 0, "-", "LAMMPSParser"], [133, 0, 0, "-", "MMTFParser"], [134, 0, 0, "-", "MOL2Parser"], [135, 0, 0, "-", "MinimalParser"], [136, 0, 0, "-", "PDBParser"], [137, 0, 0, "-", "PDBQTParser"], [138, 0, 0, "-", "PQRParser"], [139, 0, 0, "-", "PSFParser"], [140, 0, 0, "-", "TOPParser"], [141, 0, 0, "-", "TPRParser"], [142, 0, 0, "-", "TXYZParser"], [143, 0, 0, "-", "XYZParser"], [147, 0, 0, "-", "__init__"], [144, 0, 0, "-", "base"], [145, 0, 0, "-", "core"], [146, 0, 0, "-", "guessers"], [148, 0, 0, "-", "tables"], [149, 0, 0, "-", "tpr"]], "MDAnalysis.topology.CRDParser": [[122, 1, 1, "", "CRDParser"]], "MDAnalysis.topology.CRDParser.CRDParser": [[122, 4, 1, "", "close"], [122, 4, 1, "", "convert_forces_from_native"], [122, 4, 1, "", "convert_forces_to_native"], [122, 4, 1, "", "convert_pos_from_native"], [122, 4, 1, "", "convert_pos_to_native"], [122, 4, 1, "", "convert_time_from_native"], [122, 4, 1, "", "convert_time_to_native"], [122, 4, 1, "", "convert_velocities_from_native"], [122, 4, 1, "", "convert_velocities_to_native"], [122, 4, 1, "", "parse"], [122, 2, 1, "", "units"]], "MDAnalysis.topology.DMSParser": [[124, 1, 1, "", "DMSParser"]], "MDAnalysis.topology.DMSParser.DMSParser": [[124, 4, 1, "", "close"], [124, 4, 1, "", "convert_forces_from_native"], [124, 4, 1, "", "convert_forces_to_native"], [124, 4, 1, "", "convert_pos_from_native"], [124, 4, 1, "", "convert_pos_to_native"], [124, 4, 1, "", "convert_time_from_native"], [124, 4, 1, "", "convert_time_to_native"], [124, 4, 1, "", "convert_velocities_from_native"], [124, 4, 1, "", "convert_velocities_to_native"], [124, 4, 1, "", "parse"], [124, 2, 1, "", "units"]], "MDAnalysis.topology.ExtendedPDBParser": [[125, 1, 1, "", "ExtendedPDBParser"]], "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser": [[125, 4, 1, "", "close"], [125, 4, 1, "", "convert_forces_from_native"], [125, 4, 1, "", "convert_forces_to_native"], [125, 4, 1, "", "convert_pos_from_native"], [125, 4, 1, "", "convert_pos_to_native"], [125, 4, 1, "", "convert_time_from_native"], [125, 4, 1, "", "convert_time_to_native"], [125, 4, 1, "", "convert_velocities_from_native"], [125, 4, 1, "", "convert_velocities_to_native"], [125, 4, 1, "", "parse"], [125, 2, 1, "", "units"]], "MDAnalysis.topology.FHIAIMSParser": [[126, 1, 1, "", "FHIAIMSParser"]], "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser": [[126, 4, 1, "", "close"], [126, 4, 1, "", "convert_forces_from_native"], [126, 4, 1, "", "convert_forces_to_native"], [126, 4, 1, "", "convert_pos_from_native"], [126, 4, 1, "", "convert_pos_to_native"], [126, 4, 1, "", "convert_time_from_native"], [126, 4, 1, "", "convert_time_to_native"], [126, 4, 1, "", "convert_velocities_from_native"], [126, 4, 1, "", "convert_velocities_to_native"], [126, 4, 1, "", "parse"], [126, 2, 1, "", "units"]], "MDAnalysis.topology.GMSParser": [[127, 1, 1, "", "GMSParser"]], "MDAnalysis.topology.GMSParser.GMSParser": [[127, 4, 1, "", "close"], [127, 4, 1, "", "convert_forces_from_native"], [127, 4, 1, "", "convert_forces_to_native"], [127, 4, 1, "", "convert_pos_from_native"], [127, 4, 1, "", "convert_pos_to_native"], [127, 4, 1, "", "convert_time_from_native"], [127, 4, 1, "", "convert_time_to_native"], [127, 4, 1, "", "convert_velocities_from_native"], [127, 4, 1, "", "convert_velocities_to_native"], [127, 4, 1, "", "parse"], [127, 2, 1, "", "units"]], "MDAnalysis.topology.GROParser": [[128, 1, 1, "", "GROParser"]], "MDAnalysis.topology.GROParser.GROParser": [[128, 4, 1, "", "close"], [128, 4, 1, "", "convert_forces_from_native"], [128, 4, 1, "", "convert_forces_to_native"], [128, 4, 1, "", "convert_pos_from_native"], [128, 4, 1, "", "convert_pos_to_native"], [128, 4, 1, "", "convert_time_from_native"], [128, 4, 1, "", "convert_time_to_native"], [128, 4, 1, "", "convert_velocities_from_native"], [128, 4, 1, "", "convert_velocities_to_native"], [128, 4, 1, "", "parse"], [128, 2, 1, "", "units"]], "MDAnalysis.topology.GSDParser": [[129, 1, 1, "", "GSDParser"]], "MDAnalysis.topology.GSDParser.GSDParser": [[129, 4, 1, "", "close"], [129, 4, 1, "", "convert_forces_from_native"], [129, 4, 1, "", "convert_forces_to_native"], [129, 4, 1, "", "convert_pos_from_native"], [129, 4, 1, "", "convert_pos_to_native"], [129, 4, 1, "", "convert_time_from_native"], [129, 4, 1, "", "convert_time_to_native"], [129, 4, 1, "", "convert_velocities_from_native"], [129, 4, 1, "", "convert_velocities_to_native"], [129, 4, 1, "", "parse"], [129, 2, 1, "", "units"]], "MDAnalysis.topology.HoomdXMLParser": [[130, 1, 1, "", "HoomdXMLParser"]], "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser": [[130, 4, 1, "", "close"], [130, 4, 1, "", "convert_forces_from_native"], [130, 4, 1, "", "convert_forces_to_native"], [130, 4, 1, "", "convert_pos_from_native"], [130, 4, 1, "", "convert_pos_to_native"], [130, 4, 1, "", "convert_time_from_native"], [130, 4, 1, "", "convert_time_to_native"], [130, 4, 1, "", "convert_velocities_from_native"], [130, 4, 1, "", "convert_velocities_to_native"], [130, 4, 1, "", "parse"], [130, 2, 1, "", "units"]], "MDAnalysis.topology.ITPParser": [[131, 1, 1, "", "ITPParser"]], "MDAnalysis.topology.ITPParser.ITPParser": [[131, 4, 1, "", "close"], [131, 4, 1, "", "convert_forces_from_native"], [131, 4, 1, "", "convert_forces_to_native"], [131, 4, 1, "", "convert_pos_from_native"], [131, 4, 1, "", "convert_pos_to_native"], [131, 4, 1, "", "convert_time_from_native"], [131, 4, 1, "", "convert_time_to_native"], [131, 4, 1, "", "convert_velocities_from_native"], [131, 4, 1, "", "convert_velocities_to_native"], [131, 4, 1, "", "parse"], [131, 2, 1, "", "units"]], "MDAnalysis.topology.LAMMPSParser": [[132, 1, 1, "", "DATAParser"], [132, 1, 1, "", "LammpsDumpParser"]], "MDAnalysis.topology.LAMMPSParser.DATAParser": [[132, 4, 1, "", "close"], [132, 4, 1, "", "convert_forces_from_native"], [132, 4, 1, "", "convert_forces_to_native"], [132, 4, 1, "", "convert_pos_from_native"], [132, 4, 1, "", "convert_pos_to_native"], [132, 4, 1, "", "convert_time_from_native"], [132, 4, 1, "", "convert_time_to_native"], [132, 4, 1, "", "convert_velocities_from_native"], [132, 4, 1, "", "convert_velocities_to_native"], [132, 4, 1, "", "grab_datafile"], [132, 4, 1, "", "parse"], [132, 4, 1, "", "read_DATA_timestep"], [132, 2, 1, "", "units"]], "MDAnalysis.topology.MMTFParser": [[133, 1, 1, "", "MMTFParser"]], "MDAnalysis.topology.MOL2Parser": [[134, 1, 1, "", "MOL2Parser"]], "MDAnalysis.topology.MOL2Parser.MOL2Parser": [[134, 4, 1, "", "close"], [134, 4, 1, "", "convert_forces_from_native"], [134, 4, 1, "", "convert_forces_to_native"], [134, 4, 1, "", "convert_pos_from_native"], [134, 4, 1, "", "convert_pos_to_native"], [134, 4, 1, "", "convert_time_from_native"], [134, 4, 1, "", "convert_time_to_native"], [134, 4, 1, "", "convert_velocities_from_native"], [134, 4, 1, "", "convert_velocities_to_native"], [134, 4, 1, "", "parse"], [134, 2, 1, "", "units"]], "MDAnalysis.topology.MinimalParser": [[135, 1, 1, "", "MinimalParser"]], "MDAnalysis.topology.MinimalParser.MinimalParser": [[135, 4, 1, "", "close"], [135, 4, 1, "", "convert_forces_from_native"], [135, 4, 1, "", "convert_forces_to_native"], [135, 4, 1, "", "convert_pos_from_native"], [135, 4, 1, "", "convert_pos_to_native"], [135, 4, 1, "", "convert_time_from_native"], [135, 4, 1, "", "convert_time_to_native"], [135, 4, 1, "", "convert_velocities_from_native"], [135, 4, 1, "", "convert_velocities_to_native"], [135, 4, 1, "", "parse"], [135, 2, 1, "", "units"]], "MDAnalysis.topology.PDBParser": [[136, 1, 1, "", "PDBParser"]], "MDAnalysis.topology.PDBParser.PDBParser": [[136, 4, 1, "", "close"], [136, 4, 1, "", "convert_forces_from_native"], [136, 4, 1, "", "convert_forces_to_native"], [136, 4, 1, "", "convert_pos_from_native"], [136, 4, 1, "", "convert_pos_to_native"], [136, 4, 1, "", "convert_time_from_native"], [136, 4, 1, "", "convert_time_to_native"], [136, 4, 1, "", "convert_velocities_from_native"], [136, 4, 1, "", "convert_velocities_to_native"], [136, 4, 1, "", "parse"], [136, 2, 1, "", "units"]], "MDAnalysis.topology.PDBQTParser": [[137, 1, 1, "", "PDBQTParser"]], "MDAnalysis.topology.PDBQTParser.PDBQTParser": [[137, 4, 1, "", "close"], [137, 4, 1, "", "convert_forces_from_native"], [137, 4, 1, "", "convert_forces_to_native"], [137, 4, 1, "", "convert_pos_from_native"], [137, 4, 1, "", "convert_pos_to_native"], [137, 4, 1, "", "convert_time_from_native"], [137, 4, 1, "", "convert_time_to_native"], [137, 4, 1, "", "convert_velocities_from_native"], [137, 4, 1, "", "convert_velocities_to_native"], [137, 4, 1, "", "parse"], [137, 2, 1, "", "units"]], "MDAnalysis.topology.PQRParser": [[138, 1, 1, "", "PQRParser"]], "MDAnalysis.topology.PQRParser.PQRParser": [[138, 4, 1, "", "close"], [138, 4, 1, "", "convert_forces_from_native"], [138, 4, 1, "", "convert_forces_to_native"], [138, 4, 1, "", "convert_pos_from_native"], [138, 4, 1, "", "convert_pos_to_native"], [138, 4, 1, "", "convert_time_from_native"], [138, 4, 1, "", "convert_time_to_native"], [138, 4, 1, "", "convert_velocities_from_native"], [138, 4, 1, "", "convert_velocities_to_native"], [138, 4, 1, "", "guess_flavour"], [138, 4, 1, "", "parse"], [138, 2, 1, "", "units"]], "MDAnalysis.topology.PSFParser": [[139, 1, 1, "", "PSFParser"]], "MDAnalysis.topology.PSFParser.PSFParser": [[139, 4, 1, "", "close"], [139, 4, 1, "", "convert_forces_from_native"], [139, 4, 1, "", "convert_forces_to_native"], [139, 4, 1, "", "convert_pos_from_native"], [139, 4, 1, "", "convert_pos_to_native"], [139, 4, 1, "", "convert_time_from_native"], [139, 4, 1, "", "convert_time_to_native"], [139, 4, 1, "", "convert_velocities_from_native"], [139, 4, 1, "", "convert_velocities_to_native"], [139, 4, 1, "", "parse"], [139, 2, 1, "", "units"]], "MDAnalysis.topology.TOPParser": [[140, 1, 1, "", "TOPParser"]], "MDAnalysis.topology.TOPParser.TOPParser": [[140, 4, 1, "", "close"], [140, 4, 1, "", "convert_forces_from_native"], [140, 4, 1, "", "convert_forces_to_native"], [140, 4, 1, "", "convert_pos_from_native"], [140, 4, 1, "", "convert_pos_to_native"], [140, 4, 1, "", "convert_time_from_native"], [140, 4, 1, "", "convert_time_to_native"], [140, 4, 1, "", "convert_velocities_from_native"], [140, 4, 1, "", "convert_velocities_to_native"], [140, 4, 1, "", "parse"], [140, 4, 1, "", "parse_bonded"], [140, 4, 1, "", "parse_charges"], [140, 4, 1, "", "parse_chunks"], [140, 4, 1, "", "parse_dihedrals"], [140, 4, 1, "", "parse_elements"], [140, 4, 1, "", "parse_masses"], [140, 4, 1, "", "parse_names"], [140, 4, 1, "", "parse_residx"], [140, 4, 1, "", "parse_resnames"], [140, 4, 1, "", "parse_type_indices"], [140, 4, 1, "", "parse_types"], [140, 4, 1, "", "parsesection_mapper"], [140, 4, 1, "", "skipper"], [140, 2, 1, "", "units"]], "MDAnalysis.topology.TPRParser": [[141, 1, 1, "", "TPRParser"]], "MDAnalysis.topology.TPRParser.TPRParser": [[141, 4, 1, "", "close"], [141, 4, 1, "", "convert_forces_from_native"], [141, 4, 1, "", "convert_forces_to_native"], [141, 4, 1, "", "convert_pos_from_native"], [141, 4, 1, "", "convert_pos_to_native"], [141, 4, 1, "", "convert_time_from_native"], [141, 4, 1, "", "convert_time_to_native"], [141, 4, 1, "", "convert_velocities_from_native"], [141, 4, 1, "", "convert_velocities_to_native"], [141, 4, 1, "", "parse"], [141, 2, 1, "", "units"]], "MDAnalysis.topology.TXYZParser": [[142, 1, 1, "", "TXYZParser"]], "MDAnalysis.topology.TXYZParser.TXYZParser": [[142, 4, 1, "", "close"], [142, 4, 1, "", "convert_forces_from_native"], [142, 4, 1, "", "convert_forces_to_native"], [142, 4, 1, "", "convert_pos_from_native"], [142, 4, 1, "", "convert_pos_to_native"], [142, 4, 1, "", "convert_time_from_native"], [142, 4, 1, "", "convert_time_to_native"], [142, 4, 1, "", "convert_velocities_from_native"], [142, 4, 1, "", "convert_velocities_to_native"], [142, 4, 1, "", "parse"], [142, 2, 1, "", "units"]], "MDAnalysis.topology.XYZParser": [[143, 1, 1, "", "XYZParser"]], "MDAnalysis.topology.XYZParser.XYZParser": [[143, 4, 1, "", "parse"]], "MDAnalysis.topology.base": [[144, 1, 1, "", "TopologyReaderBase"]], "MDAnalysis.topology.base.TopologyReaderBase": [[144, 4, 1, "", "close"], [144, 4, 1, "", "convert_forces_from_native"], [144, 4, 1, "", "convert_forces_to_native"], [144, 4, 1, "", "convert_pos_from_native"], [144, 4, 1, "", "convert_pos_to_native"], [144, 4, 1, "", "convert_time_from_native"], [144, 4, 1, "", "convert_time_to_native"], [144, 4, 1, "", "convert_velocities_from_native"], [144, 4, 1, "", "convert_velocities_to_native"], [144, 2, 1, "", "units"]], "MDAnalysis.topology.guessers": [[146, 3, 1, "", "get_atom_mass"], [146, 3, 1, "", "guess_angles"], [146, 3, 1, "", "guess_aromaticities"], [146, 3, 1, "", "guess_atom_charge"], [146, 3, 1, "", "guess_atom_element"], [146, 3, 1, "", "guess_atom_mass"], [146, 3, 1, "", "guess_atom_type"], [146, 3, 1, "", "guess_bonds"], [146, 3, 1, "", "guess_dihedrals"], [146, 3, 1, "", "guess_gasteiger_charges"], [146, 3, 1, "", "guess_improper_dihedrals"], [146, 3, 1, "", "guess_masses"], [146, 3, 1, "", "guess_types"], [146, 3, 1, "", "validate_atom_types"]], "MDAnalysis.topology.tables": [[148, 6, 1, "", "TABLE_ATOMELEMENTS"], [148, 6, 1, "", "TABLE_MASSES"], [148, 6, 1, "", "TABLE_VDWRADII"], [148, 6, 1, "", "atomelements"], [148, 3, 1, "", "kv2dict"], [148, 6, 1, "", "masses"], [148, 6, 1, "", "vdwradii"]], "MDAnalysis.topology.tpr": [[149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 0, 0, "-", "obj"], [149, 0, 0, "-", "setting"], [149, 0, 0, "-", "utils"]], "MDAnalysis.topology.tpr.obj": [[149, 1, 1, "", "Atom"], [149, 1, 1, "", "AtomKind"], [149, 1, 1, "", "Atoms"], [149, 1, 1, "", "Box"], [149, 1, 1, "", "Ilist"], [149, 1, 1, "", "InteractionKind"], [149, 1, 1, "", "Molblock"], [149, 1, 1, "", "MoleculeKind"], [149, 1, 1, "", "Mtop"], [149, 1, 1, "", "Params"], [149, 1, 1, "", "TpxHeader"]], "MDAnalysis.topology.tpr.obj.Atom": [[149, 2, 1, "", "atomnumber"], [149, 2, 1, "", "m"], [149, 2, 1, "", "mB"], [149, 2, 1, "", "ptype"], [149, 2, 1, "", "q"], [149, 2, 1, "", "qB"], [149, 2, 1, "", "resind"], [149, 2, 1, "", "tp"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.AtomKind": [[149, 5, 1, "", "element_symbol"]], "MDAnalysis.topology.tpr.obj.Atoms": [[149, 2, 1, "", "atomnames"], [149, 2, 1, "", "atoms"], [149, 2, 1, "", "nr"], [149, 2, 1, "", "nres"], [149, 2, 1, "", "resnames"], [149, 2, 1, "", "type"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.Box": [[149, 2, 1, "", "rel"], [149, 2, 1, "", "size"], [149, 2, 1, "", "v"]], "MDAnalysis.topology.tpr.obj.Ilist": [[149, 2, 1, "", "iatoms"], [149, 2, 1, "", "ik"], [149, 2, 1, "", "nr"]], "MDAnalysis.topology.tpr.obj.InteractionKind": [[149, 4, 1, "", "process"]], "MDAnalysis.topology.tpr.obj.Molblock": [[149, 2, 1, "", "molb_natoms_mol"], [149, 2, 1, "", "molb_nmol"], [149, 2, 1, "", "molb_nposres_xA"], [149, 2, 1, "", "molb_nposres_xB"], [149, 2, 1, "", "molb_type"]], "MDAnalysis.topology.tpr.obj.MoleculeKind": [[149, 4, 1, "", "number_of_atoms"], [149, 4, 1, "", "number_of_residues"], [149, 4, 1, "", "remap_angles"], [149, 4, 1, "", "remap_bonds"], [149, 4, 1, "", "remap_dihe"], [149, 4, 1, "", "remap_impr"]], "MDAnalysis.topology.tpr.obj.Mtop": [[149, 2, 1, "", "moltypes"], [149, 2, 1, "", "nmolblock"], [149, 2, 1, "", "nmoltype"]], "MDAnalysis.topology.tpr.obj.Params": [[149, 2, 1, "", "atnr"], [149, 2, 1, "", "fudgeQQ"], [149, 2, 1, "", "functype"], [149, 2, 1, "", "ntypes"], [149, 2, 1, "", "reppow"]], "MDAnalysis.topology.tpr.obj.TpxHeader": [[149, 2, 1, "", "bBox"], [149, 2, 1, "", "bF"], [149, 2, 1, "", "bIr"], [149, 2, 1, "", "bTop"], [149, 2, 1, "", "bV"], [149, 2, 1, "", "bX"], [149, 2, 1, "", "fep_state"], [149, 2, 1, "", "fgen"], [149, 2, 1, "", "file_tag"], [149, 2, 1, "", "fver"], [149, 2, 1, "", "lamb"], [149, 2, 1, "", "natoms"], [149, 2, 1, "", "ngtc"], [149, 2, 1, "", "precision"], [149, 2, 1, "", "sizeOfTprBody"], [149, 2, 1, "", "ver_str"]], "MDAnalysis.topology.tpr.setting": [[149, 6, 1, "", "F_ANGLES"], [149, 6, 1, "", "F_ANGRES"], [149, 6, 1, "", "F_ANGRESZ"], [149, 6, 1, "", "F_ANHARM_POL"], [149, 6, 1, "", "F_BHAM"], [149, 6, 1, "", "F_BHAM_LR"], [149, 6, 1, "", "F_BONDS"], [149, 6, 1, "", "F_CBTDIHS"], [149, 6, 1, "", "F_CMAP"], [149, 6, 1, "", "F_COM_PULL"], [149, 6, 1, "", "F_CONNBONDS"], [149, 6, 1, "", "F_CONSTR"], [149, 6, 1, "", "F_CONSTRNC"], [149, 6, 1, "", "F_COUL14"], [149, 6, 1, "", "F_COUL_LR"], [149, 6, 1, "", "F_COUL_RECIP"], [149, 6, 1, "", "F_COUL_SR"], [149, 6, 1, "", "F_CROSS_BOND_ANGLES"], [149, 6, 1, "", "F_CROSS_BOND_BONDS"], [149, 6, 1, "", "F_CUBICBONDS"], [149, 6, 1, "", "F_DENSITYFITTING"], [149, 6, 1, "", "F_DHDL_CON"], [149, 6, 1, "", "F_DIHRES"], [149, 6, 1, "", "F_DIHRESVIOL"], [149, 6, 1, "", "F_DISPCORR"], [149, 6, 1, "", "F_DISRES"], [149, 6, 1, "", "F_DISRESVIOL"], [149, 6, 1, "", "F_DKDL"], [149, 6, 1, "", "F_DPD"], [149, 6, 1, "", "F_DVDL"], [149, 6, 1, "", "F_DVDL_BONDED"], [149, 6, 1, "", "F_DVDL_COUL"], [149, 6, 1, "", "F_DVDL_RESTRAINT"], [149, 6, 1, "", "F_DVDL_TEMPERATURE"], [149, 6, 1, "", "F_DVDL_VDW"], [149, 6, 1, "", "F_ECONSERVED"], [149, 6, 1, "", "F_EKIN"], [149, 6, 1, "", "F_EPOT"], [149, 6, 1, "", "F_EQM"], [149, 6, 1, "", "F_ETOT"], [149, 6, 1, "", "F_FBPOSRES"], [149, 6, 1, "", "F_FENEBONDS"], [149, 6, 1, "", "F_FOURDIHS"], [149, 6, 1, "", "F_G96ANGLES"], [149, 6, 1, "", "F_G96BONDS"], [149, 6, 1, "", "F_GB12"], [149, 6, 1, "", "F_GB13"], [149, 6, 1, "", "F_GB14"], [149, 6, 1, "", "F_GBPOL"], [149, 6, 1, "", "F_HARMONIC"], [149, 6, 1, "", "F_IDIHS"], [149, 6, 1, "", "F_LINEAR_ANGLES"], [149, 6, 1, "", "F_LJ"], [149, 6, 1, "", "F_LJ14"], [149, 6, 1, "", "F_LJC14_Q"], [149, 6, 1, "", "F_LJC_PAIRS_NB"], [149, 6, 1, "", "F_LJ_LR"], [149, 6, 1, "", "F_LJ_RECIP"], [149, 6, 1, "", "F_MORSE"], [149, 6, 1, "", "F_NPSOLVATION"], [149, 6, 1, "", "F_NRE"], [149, 6, 1, "", "F_ORIRES"], [149, 6, 1, "", "F_ORIRESDEV"], [149, 6, 1, "", "F_PDIHS"], [149, 6, 1, "", "F_PDISPCORR"], [149, 6, 1, "", "F_PIDIHS"], [149, 6, 1, "", "F_POLARIZATION"], [149, 6, 1, "", "F_POSRES"], [149, 6, 1, "", "F_PRES"], [149, 6, 1, "", "F_QUARTIC_ANGLES"], [149, 6, 1, "", "F_RBDIHS"], [149, 6, 1, "", "F_RESTRANGLES"], [149, 6, 1, "", "F_RESTRBONDS"], [149, 6, 1, "", "F_RESTRDIHS"], [149, 6, 1, "", "F_RF_EXCL"], [149, 6, 1, "", "F_SETTLE"], [149, 6, 1, "", "F_TABANGLES"], [149, 6, 1, "", "F_TABBONDS"], [149, 6, 1, "", "F_TABBONDSNC"], [149, 6, 1, "", "F_TABDIHS"], [149, 6, 1, "", "F_TEMP"], [149, 6, 1, "", "F_THOLE_POL"], [149, 6, 1, "", "F_UREY_BRADLEY"], [149, 6, 1, "", "F_VSITE1"], [149, 6, 1, "", "F_VSITE2"], [149, 6, 1, "", "F_VSITE2FD"], [149, 6, 1, "", "F_VSITE3"], [149, 6, 1, "", "F_VSITE3FAD"], [149, 6, 1, "", "F_VSITE3FD"], [149, 6, 1, "", "F_VSITE3OUT"], [149, 6, 1, "", "F_VSITE4FD"], [149, 6, 1, "", "F_VSITE4FDN"], [149, 6, 1, "", "F_VSITEN"], [149, 6, 1, "", "F_VTEMP_NOLONGERUSED"], [149, 6, 1, "", "F_WATER_POL"], [149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 6, 1, "", "ftupd"], [149, 6, 1, "", "interaction_types"]], "MDAnalysis.topology.tpr.utils": [[149, 1, 1, "", "TPXUnpacker"], [149, 1, 1, "", "TPXUnpacker2020"], [149, 3, 1, "", "define_unpack_real"], [149, 3, 1, "", "do_atom"], [149, 3, 1, "", "do_atoms"], [149, 3, 1, "", "do_block"], [149, 3, 1, "", "do_blocka"], [149, 3, 1, "", "do_ffparams"], [149, 3, 1, "", "do_harm"], [149, 3, 1, "", "do_ilists"], [149, 3, 1, "", "do_iparams"], [149, 3, 1, "", "do_molblock"], [149, 3, 1, "", "do_moltype"], [149, 3, 1, "", "do_mtop"], [149, 3, 1, "", "do_resinfo"], [149, 3, 1, "", "do_rvec"], [149, 3, 1, "", "do_symstr"], [149, 3, 1, "", "do_symtab"], [149, 3, 1, "", "extract_box_info"], [149, 3, 1, "", "fileVersion_err"], [149, 3, 1, "", "ndo_int"], [149, 3, 1, "", "ndo_ivec"], [149, 3, 1, "", "ndo_real"], [149, 3, 1, "", "ndo_rvec"], [149, 3, 1, "", "read_tpxheader"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "unpack_int64"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_uint64"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker2020": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "from_unpacker"], [149, 4, 1, "", "unpack_fstring"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.transformations": [[152, 0, 0, "-", "base"], [153, 0, 0, "-", "boxdimensions"], [154, 0, 0, "-", "fit"], [155, 0, 0, "-", "nojump"], [156, 0, 0, "-", "positionaveraging"], [157, 0, 0, "-", "rotate"], [158, 0, 0, "-", "translate"], [159, 0, 0, "-", "wrap"]], "MDAnalysis.transformations.base": [[152, 1, 1, "", "TransformationBase"]], "MDAnalysis.transformations.boxdimensions": [[153, 1, 1, "", "set_dimensions"]], "MDAnalysis.transformations.fit": [[154, 1, 1, "", "fit_rot_trans"], [154, 1, 1, "", "fit_translation"]], "MDAnalysis.transformations.nojump": [[155, 1, 1, "", "NoJump"]], "MDAnalysis.transformations.positionaveraging": [[156, 1, 1, "", "PositionAverager"]], "MDAnalysis.transformations.rotate": [[157, 1, 1, "", "rotateby"]], "MDAnalysis.transformations.translate": [[158, 1, 1, "", "center_in_box"], [158, 1, 1, "", "translate"]], "MDAnalysis.transformations.wrap": [[159, 1, 1, "", "unwrap"], [159, 1, 1, "", "wrap"]], "MDAnalysis.units": [[160, 6, 1, "", "MDANALYSIS_BASE_UNITS"], [160, 6, 1, "", "chargeUnit_factor"], [160, 6, 1, "", "constants"], [160, 6, 1, "", "conversion_factor"], [160, 3, 1, "", "convert"], [160, 6, 1, "", "densityUnit_factor"], [160, 6, 1, "", "forceUnit_factor"], [160, 3, 1, "", "get_conversion_factor"], [160, 6, 1, "", "lengthUnit_factor"], [160, 6, 1, "", "speedUnit_factor"], [160, 6, 1, "", "timeUnit_factor"], [160, 6, 1, "", "unit_types"], [160, 6, 1, "", "water"]], "MDAnalysis.version": [[161, 6, 1, "", "__version__"]], "MDAnalysis.visualization": [[162, 0, 0, "-", "streamlines"], [163, 0, 0, "-", "streamlines_3D"]], "MDAnalysis.visualization.streamlines": [[162, 3, 1, "", "generate_streamlines"]], "MDAnalysis.visualization.streamlines_3D": [[163, 3, 1, "", "generate_streamlines_3d"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method", "5": "py:property", "6": "py:data", "7": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "titleterms": {"coordin": [0, 3, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 134, 156], "fit": [0, 154], "align": [0, 107], "mdanalysi": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 123, 126, 134, 141, 144, 145, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "analysi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], "rm": [0, 36], "tutori": [0, 8, 32], "common": [0, 43, 78, 145], "usag": [0, 1, 40], "function": [0, 4, 17, 18, 19, 20, 23, 25, 32, 34, 35, 36, 43, 77, 78, 87, 89, 92, 98, 99, 102, 103, 107, 108, 109, 110, 145, 149, 151, 160], "class": [0, 2, 3, 4, 8, 9, 20, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 70, 71, 74, 75, 77, 79, 80, 81, 83, 85, 86, 89, 92, 102, 104, 105, 109, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 149, 151, 152], "helper": [0, 23, 34, 75, 77, 89, 103, 109], "simpl": [1, 113], "atom": [1, 38, 88, 132, 146, 147], "distanc": [1, 10, 14, 30, 31, 39, 96, 97, 99], "atomicdist": 1, "basic": 1, "build": [2, 39, 58, 145, 151], "block": [2, 39, 151], "base": [2, 42, 72, 75, 114, 144, 152, 160], "exampl": [2, 3, 4, 9, 20, 22, 24, 26, 36, 37, 58, 60, 62, 64, 111, 146], "us": [2, 22, 23, 24, 37, 38, 77, 80, 99, 111, 112, 146], "standard": 2, "tool": 2, "write": [2, 4, 56, 58, 120], "new": [2, 82], "bond": [3, 20, 21, 24, 39, 147], "angl": [3, 9, 31, 147], "torsion": 3, "bat": 3, "applic": [3, 9, 26, 36], "nativ": 4, "contact": [4, 39], "One": 4, "dimension": [4, 16, 39], "two": 4, "q1": 4, "q2": 4, "your": 4, "own": 4, "data": [5, 39, 40, 60, 109, 160, 161], "file": [5, 23, 50, 53, 54, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 82, 109, 110, 120, 124, 134], "gener": [6, 9, 26, 141], "densiti": [6, 28], "from": [6, 80, 146], "trajectori": [6, 19, 23, 26, 40, 44, 51, 55, 57, 58, 60, 61, 67, 68, 69, 70, 72, 73, 74, 77, 79, 80, 100, 101, 111, 151, 155, 156, 157, 158], "md": [6, 19], "creat": [6, 23, 80, 151], "object": [6, 86, 89, 90, 91, 92, 93], "dielectr": 7, "diffus": [8, 29], "map": 8, "diffusionmap": 8, "dihedr": [9, 31, 147], "ramachandran": 9, "janin": 9, "refer": [9, 11, 17, 112, 160], "plot": 9, "encor": [11, 13, 15, 16, 17, 18], "ensembl": [11, 12, 14, 17], "similar": [11, 17, 34, 113], "calcul": [11, 14, 15, 17, 34, 36, 96, 97], "modul": [11, 23, 27, 39, 45, 46, 84, 93, 99, 110, 112, 150, 164], "bootstrap": 12, "procedur": 12, "cluster": [13, 16], "frontend": [13, 16], "represent": [13, 80], "clustercollect": 13, "clusteringmethod": 13, "algorithm": [13, 16, 25, 104, 112], "matrix": 14, "confdistmatrix": 14, "covari": 15, "reduct": [16, 39], "dimensionality_reduct": 16, "reduce_dimension": 16, "dimensionalityreductionmethod": 16, "comparison": 17, "util": [18, 19, 23, 26, 98, 109, 149], "elast": 19, "network": [19, 38], "gnm": 19, "task": 19, "hydrogen": [20, 21, 24, 39], "autocorrel": [20, 21, 98], "hydrogenbond": [20, 24, 38], "hbond_autocorrel": [20, 21], "descript": 20, "input": [20, 24, 141], "output": [20, 24, 37, 38, 81], "work": [20, 62, 64], "polyamid": 20, "hbond": 21, "deprec": 21, "helan": 22, "protein": [22, 39], "helic": 22, "hole": 23, "hole2": 23, "pdb": [23, 64, 125, 136], "vmd": [23, 119], "analyz": 23, "full": 23, "subsampl": 23, "surfac": 23, "load": [23, 58, 60], "templat": 23, "hbond_analysi": 24, "hydrogenbondanalysi": 24, "The": [24, 121], "its": 24, "method": [24, 34, 44, 79], "leaflet": 25, "identif": 25, "x3dna": 26, "helicoid": 26, "paramet": 26, "profil": 26, "legaci": [26, 27, 39], "singl": [26, 79, 120], "structur": [26, 39, 47, 48, 50, 59, 64, 65, 107, 124], "code": [27, 104, 109, 111, 165], "linear": [28, 103], "lineardens": 28, "mean": [29, 36], "squar": [29, 36], "displac": 29, "msd": 29, "comput": [29, 99], "an": [29, 44, 58, 80], "self": 29, "combin": 29, "multipl": [29, 36, 120], "replic": [29, 44], "updat": 30, "nucleic": [30, 31, 39], "acid": [30, 31, 39], "nucleicacid": 30, "nuclinfo": 31, "phase": 31, "princip": 32, "compon": 32, "pca": 32, "polym": [33, 39], "path": 34, "psa": 34, "variabl": [34, 131], "radial": 35, "distribut": 35, "rdf": 35, "root": 36, "quantiti": 36, "rmsd": [36, 107], "domain": 36, "water": [37, 38], "dynam": [37, 113], "waterdynam": 37, "hydrogenbondlifetim": 37, "waterorientationalrelax": 37, "angulardistribut": 37, "meansquaredisplac": 37, "survivalprob": 37, "bridg": 38, "waterbridgeanalysi": 38, "theori": 38, "timeseri": 38, "detect": 38, "default": 38, "heavi": 38, "name": [38, 120, 146], "charmm27": 38, "forc": 38, "field": 38, "type": 38, "glycam06": 38, "how": [38, 80, 82, 120, 151], "perform": 38, "count_by_typ": 38, "count_by_tim": 38, "membran": 39, "macromolecul": 39, "liquid": 39, "volumetr": 39, "edr": 40, "auxiliari": [40, 41, 42, 43, 44, 45], "reader": [40, 41, 42, 44, 52, 55, 57, 61, 74, 75, 77, 79, 80, 82, 123, 144, 147], "background": 40, "standalon": 40, "edrread": 40, "ad": [40, 44], "xvg": 41, "read": [43, 77, 78, 80, 100, 101, 105, 141], "core": [43, 78, 85, 86, 87, 88, 89, 90, 91, 92, 93, 145], "support": [44, 79, 120, 147, 149], "format": [44, 52, 53, 54, 56, 60, 62, 63, 66, 71, 74, 79, 82, 100, 101, 109, 110, 123, 124, 134, 141, 147], "api": [44, 79], "iter": 44, "access": [44, 82], "attribut": [44, 79, 90], "recreat": 44, "auxstep": 44, "auxread": 44, "registri": [44, 79], "convert": [46, 47, 48, 49, 75], "openmm": 47, "topologi": [47, 48, 49, 89, 90, 91, 93, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150], "parser": [47, 48, 49, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 149], "openmmpars": 47, "i": [47, 48, 49, 51, 60, 70, 105], "o": [47, 48, 49, 51, 60, 70, 105], "parm": 48, "parmedpars": 48, "rdkit": 49, "rdkitpars": 49, "molecul": 49, "crd": [50, 122], "dcd": [51, 60, 100], "dl_poli": 52, "dlpoli": 52, "desr": [53, 124], "dm": 53, "fhi": [54, 126], "aim": [54, 126], "fhiaim": 54, "develop": [54, 56, 141, 147], "note": [54, 56, 62, 141, 147, 160], "fhiaimswrit": 54, "string": [54, 56, 109], "gamess": [55, 127], "gm": 55, "gro": [56, 128], "growrit": 56, "gsd": [57, 129], "h5md": 58, "unit": [58, 86, 160], "simul": [58, 60], "open": 58, "parallel": [58, 97], "h5py": 58, "hdf5": 58, "linux": 58, "inpcrd": 59, "lammp": 60, "dump": 60, "mmtf": [61, 133], "mol2": [62, 134], "namdbin": 63, "capabl": 64, "pdbqt": [65, 137], "pqr": [66, 138], "tng": 67, "current": [67, 82, 151], "limit": 67, "amber": [68, 140], "trj": 68, "binari": 68, "netcdf": 68, "ascii": 68, "traj": 68, "trr": 69, "trz": 70, "txyz": [71, 142], "xdr": [72, 101], "xtc": 73, "xyz": [74, 143], "frameiter": 75, "writer": [75, 79, 114, 120], "chainread": 76, "chain": 76, "chemfil": 77, "timestep": [79, 83], "tabl": [79, 120, 147, 148, 165], "privat": 79, "frame": 79, "memori": 80, "memoryread": 80, "In": 80, "arbitrari": 80, "switch": 80, "construct": 80, "numpi": 80, "arrai": [80, 99, 109], "sub": 80, "system": [80, 93, 121], "null": 81, "serial": 82, "To": 82, "seek": 82, "miscellan": 82, "test": [82, 165], "_singleframeread": 82, "basereadertest": 82, "multiframereadertest": 82, "handler": 82, "implement": [82, 151, 160], "picklabl": [82, 105], "io": 82, "atomgroup": [85, 120], "accessor": 85, "contain": [86, 109], "group": 86, "collect": 86, "chemic": 86, "level": [86, 99, 100, 101, 110], "select": [88, 93, 99, 113, 114, 115, 116, 117, 118, 119, 120], "hierarchi": 88, "topologyattr": 90, "topologyobject": 91, "univers": 92, "import": 93, "user": [93, 165], "custom": 94, "except": 94, "warn": 94, "neighbor": [95, 104], "search": [95, 104], "wrapper": 95, "lib": [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110], "neighborsearch": 95, "librari": [96, 97, 99, 104, 110, 112], "c_distanc": 96, "c_distances_openmp": 97, "correl": 98, "intermitt": 98, "fast": [99, 107], "acceler": 99, "backend": 99, "avail": 99, "distopia": 99, "low": [99, 100, 101, 110], "libdcd": 100, "gromac": [101, 116, 141], "libmdaxdr": 101, "set": [102, 149, 153], "up": 102, "log": 102, "conveni": 102, "other": 102, "purpos": 102, "mathemat": 103, "mdamath": 103, "algebra": 103, "connect": [103, 113], "nsgrid": 104, "about": 104, "onli": 105, "picklable_file_io": 105, "periodickdtre": 106, "pkdtree": 106, "qcp": 107, "qcprot": 107, "homogen": 108, "transform": [108, 151, 152, 153, 154, 155, 156, 157, 158, 159], "matric": 108, "quaternion": 108, "requir": 108, "directori": 109, "stream": 109, "list": [109, 110], "pars": [109, 141], "manipul": 109, "handl": 109, "decor": 109, "manag": 109, "check": 109, "overview": [110, 111], "libmdanalysi": 110, "over": 111, "python": 111, "includ": [111, 112], "snippet": 111, "citat": [112, 165], "whole": 112, "duecredit": 112, "command": 113, "keyword": 113, "pattern": 113, "match": 113, "boolean": 113, "geometr": 113, "index": 113, "preexist": 113, "modifi": 113, "order": 113, "charmm": 115, "jmol": 117, "pymol": 118, "export": 120, "recogn": 120, "extens": 120, "todo": [122, 140], "dl": 123, "poli": 123, "dlpolypars": 123, "molecular": 124, "extend": 125, "topolgi": 126, "fhiaimspars": 126, "hoomd": 130, "xml": 130, "itp": 131, "preprocessor": 131, "lammpspars": 132, "style": 132, "minim": 135, "psf": 139, "prmtop": 140, "portabl": 141, "run": 141, "tpr": [141, 149], "version": [141, 161], "tprparser": [141, 149], "guess": 146, "unknown": 146, "inform": [146, 161], "guesser": 146, "element": 146, "bondord": 147, "improp": 147, "definit": 149, "fly": 151, "workflow": 151, "complex": 151, "closur": 151, "box": 153, "dimens": 153, "boxdimens": 153, "No": 155, "jump": 155, "unwrap": [155, 159], "nojump": 155, "averag": 156, "positionaverag": 156, "rotat": 157, "translat": 158, "wrap": 159, "constant": 160, "convers": 160, "encod": 160, "mdanalysis_base_unit": 160, "footnot": 160, "streamplot": [162, 163], "2d": 162, "visual": [162, 163, 164], "streamlin": 162, "3d": 163, "streamlines_3d": 163, "lipid": 164, "flow": 164, "document": 165, "get": 165, "involv": 165, "guid": 165, "instal": 165, "conda": 165, "pip": 165, "sourc": 165, "indic": 165}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx.ext.todo": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align": [[0, "coordinate-fitting-and-alignment-mdanalysis-analysis-align"]], "RMS-fitting tutorial": [[0, "rms-fitting-tutorial"]], "Common usage": [[0, "common-usage"]], "Functions and Classes": [[0, "functions-and-classes"], [20, "functions-and-classes"]], "Helper functions": [[0, "helper-functions"], [77, "helper-functions"], [89, "helper-functions"]], "Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances": [[1, "simple-atomic-distance-analysis-mdanalysis-analysis-atomicdistances"]], "Basic usage": [[1, "basic-usage"]], "Analysis building blocks \u2014 MDAnalysis.analysis.base": [[2, "analysis-building-blocks-mdanalysis-analysis-base"]], "Example of using a standard analysis tool": [[2, "example-of-using-a-standard-analysis-tool"]], "Writing new analysis tools": [[2, "writing-new-analysis-tools"]], "Classes": [[2, "classes"], [4, "classes"], [8, "classes"], [29, "classes"], [37, "classes"], [38, "classes"], [40, "classes"], [47, "classes"], [47, "id5"], [48, "classes"], [48, "id2"], [49, "classes"], [49, "id1"], [51, "classes"], [54, "classes"], [56, "classes"], [57, "classes"], [58, "classes"], [59, "classes"], [60, "classes"], [61, "classes"], [62, "classes"], [63, "classes"], [64, "classes"], [70, "classes"], [71, "classes"], [74, "classes"], [77, "classes"], [80, "classes"], [81, "classes"], [85, "classes"], [86, "classes"], [89, "classes"], [92, "classes"], [104, "classes"], [122, "classes"], [124, "classes"], [125, "classes"], [126, "classes"], [127, "classes"], [128, "classes"], [129, "classes"], [130, "classes"], [131, "classes"], [132, "classes"], [133, "classes"], [134, "classes"], [135, "classes"], [136, "classes"], [137, "classes"], [138, "classes"], [139, "classes"], [140, "classes"], [141, "classes"], [142, "classes"], [143, "classes"], [144, "classes"]], "Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat": [[3, "bond-angle-torsion-coordinates-analysis-mdanalysis-analysis-bat"]], "Example applications": [[3, "example-applications"], [9, "example-applications"], [26, "example-applications"], [36, "example-applications"]], "Analysis classes": [[3, "analysis-classes"], [26, "analysis-classes"], [36, "analysis-classes"]], "Native contacts analysis \u2014 MDAnalysis.analysis.contacts": [[4, "native-contacts-analysis-mdanalysis-analysis-contacts"]], "Examples for contact analysis": [[4, "examples-for-contact-analysis"]], "One-dimensional contact analysis": [[4, "one-dimensional-contact-analysis"]], "Two-dimensional contact analysis (q1-q2)": [[4, "two-dimensional-contact-analysis-q1-q2"]], "Writing your own contact analysis": [[4, "writing-your-own-contact-analysis"]], "Functions": [[4, "functions"], [36, "functions"], [92, "functions"], [99, "functions"], [107, "functions"], [108, "functions"], [160, "functions"]], "Analysis data files": [[5, "analysis-data-files"]], "Data files": [[5, "data-files"]], "Generating densities from trajectories \u2014 MDAnalysis.analysis.density": [[6, "generating-densities-from-trajectories-mdanalysis-analysis-density"]], "Generating a density from a MD trajectory": [[6, "generating-a-density-from-a-md-trajectory"]], "Creating densities": [[6, "creating-densities"]], "Density object": [[6, "density-object"]], "Dielectric \u2014 MDAnalysis.analysis.dielectric": [[7, "dielectric-mdanalysis-analysis-dielectric"]], "Diffusion map \u2014 MDAnalysis.analysis.diffusionmap": [[8, "diffusion-map-mdanalysis-analysis-diffusionmap"]], "Diffusion Map tutorial": [[8, "diffusion-map-tutorial"]], "Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals": [[9, "dihedral-angles-analysis-mdanalysis-analysis-dihedrals"]], "General dihedral analysis": [[9, "general-dihedral-analysis"]], "Ramachandran analysis": [[9, "ramachandran-analysis"]], "Janin analysis": [[9, "janin-analysis"]], "Reference plots": [[9, "reference-plots"]], "Analysis Classes": [[9, "analysis-classes"]], "Distance analysis \u2014 MDAnalysis.analysis.distances": [[10, "distance-analysis-mdanalysis-analysis-distances"]], "ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore": [[11, "encore-ensemble-similarity-calculations-mdanalysis-analysis-encore"]], "Modules": [[11, "modules"]], "References": [[11, "references"], [112, "references"]], "bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap": [[12, "bootstrap-procedures-mdanalysis-analysis-ensemble-bootstrap"]], "Clustering": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.cluster": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-cluster"]], "Cluster representation \u2014 MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, "cluster-representation-mdanalysis-analysis-encore-clustering-clustercollection"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-clusteringmethod"]], "Clustering algorithms": [[13, "clustering-algorithms"]], "Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix": [[14, "distance-matrix-calculation-mdanalysis-analysis-ensemble-confdistmatrix"]], "Covariance calculation \u2014 encore.covariance": [[15, "covariance-calculation-encore-covariance"]], "Dimensionality reduction": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-dimensionality-reduction-reduce-dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.clustering.DimensionalityReductionMethod": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-clustering-dimensionalityreductionmethod"]], "Dimensionality reduction algorithms": [[16, "dimensionality-reduction-algorithms"]], "Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity": [[17, "ensemble-similarity-calculations-mdanalysis-analysis-encore-similarity"]], "Functions for ensemble comparisons": [[17, "functions-for-ensemble-comparisons"]], "Function reference": [[17, "function-reference"]], "Utility functions for ENCORE": [[18, "module-MDAnalysis.analysis.encore.utils"]], "Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm": [[19, "elastic-network-analysis-of-md-trajectories-mdanalysis-analysis-gnm"]], "Analysis tasks": [[19, "analysis-tasks"]], "Utility functions": [[19, "utility-functions"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hydrogenbonds-hbond-autocorrel"]], "Description": [[20, "description"]], "Input": [[20, "input"], [24, "input"]], "Output": [[20, "output"], [24, "output"], [37, "output"]], "Worked Example for Polyamide": [[20, "worked-example-for-polyamide"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)": [[21, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hbonds-hbond-autocorrel-deprecated"]], "HELANAL \u2014 analysis of protein helices": [[22, "helanal-analysis-of-protein-helices"]], "Example use": [[22, "example-use"]], "HOLE analysis \u2014 MDAnalysis.analysis.hole2": [[23, "hole-analysis-mdanalysis-analysis-hole2"]], "Module": [[23, "module-MDAnalysis.analysis.hole2"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2": [[23, "id3"]], "Using HOLE on a PDB file": [[23, "using-hole-on-a-pdb-file"]], "Using HOLE on a trajectory": [[23, "using-hole-on-a-trajectory"]], "Using HOLE with VMD": [[23, "using-hole-with-vmd"]], "Analyzing a full trajectory": [[23, "analyzing-a-full-trajectory"]], "Creating subsampled HOLE surface": [[23, "creating-subsampled-hole-surface"]], "Loading a trajectory into VMD with subsampling": [[23, "loading-a-trajectory-into-vmd-with-subsampling"]], "Creating a subsampled trajectory": [[23, "creating-a-subsampled-trajectory"]], "Functions and classes": [[23, "functions-and-classes"]], "Utility functions and templates": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.helper": [[23, "hole-analysis-mdanalysis-analysis-hole2-helper"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.templates": [[23, "hole-analysis-mdanalysis-analysis-hole2-templates"]], "Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "hydrogen-bond-analysis-mdanalysis-analysis-hydrogenbonds-hbond-analysis"]], "Example use of HydrogenBondAnalysis": [[24, "example-use-of-hydrogenbondanalysis"]], "The class and its methods": [[24, "the-class-and-its-methods"]], "Leaflet identification \u2014 MDAnalysis.analysis.leaflet": [[25, "leaflet-identification-mdanalysis-analysis-leaflet"]], "Algorithm": [[25, "algorithm"]], "Classes and Functions": [[25, "classes-and-functions"], [32, "classes-and-functions"]], "Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna": [[26, "generation-and-analysis-of-x3dna-helicoidal-parameter-profiles-mdanalysis-analysis-legacy-x3dna"]], "Single structure": [[26, "single-structure"]], "Trajectory": [[26, "trajectory"]], "Utilities": [[26, "utilities"]], "MDAnalysis.analysis.legacy \u2014 Legacy analysis code": [[27, "mdanalysis-analysis-legacy-legacy-analysis-code"]], "Legacy modules": [[27, "legacy-modules"]], "Linear Density \u2014 MDAnalysis.analysis.lineardensity": [[28, "linear-density-mdanalysis-analysis-lineardensity"]], "Mean Squared Displacement \u2014 MDAnalysis.analysis.msd": [[29, "mean-squared-displacement-mdanalysis-analysis-msd"]], "Computing an MSD": [[29, "computing-an-msd"]], "Computing Self-Diffusivity": [[29, "computing-self-diffusivity"]], "Combining Multiple Replicates": [[29, "combining-multiple-replicates"]], "Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids": [[30, "updated-nucleic-acid-analysis-mdanalysis-analysis-nucleicacids"]], "Distances": [[30, "distances"], [31, "distances"]], "Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo": [[31, "nucleic-acid-analysis-mdanalysis-analysis-nuclinfo"]], "Phases": [[31, "phases"]], "Dihedral angles": [[31, "dihedral-angles"]], "Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca": [[32, "principal-component-analysis-pca-mdanalysis-analysis-pca"]], "PCA Tutorial": [[32, "pca-tutorial"]], "Polymer analysis \u2014 MDAnalysis.analysis.polymer": [[33, "polymer-analysis-mdanalysis-analysis-polymer"]], "Calculating path similarity \u2014 MDAnalysis.analysis.psa": [[34, "calculating-path-similarity-mdanalysis-analysis-psa"]], "Helper functions and variables": [[34, "helper-functions-and-variables"]], "Classes, methods, and functions": [[34, "classes-methods-and-functions"]], "Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf": [[35, "radial-distribution-functions-mdanalysis-analysis-rdf"]], "Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms": [[36, "calculating-root-mean-square-quantities-mdanalysis-analysis-rms"]], "Calculating RMSD for multiple domains": [[36, "calculating-rmsd-for-multiple-domains"]], "Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics": [[37, "water-dynamics-analysis-mdanalysis-analysis-waterdynamics"]], "Example use of the analysis classes": [[37, "example-use-of-the-analysis-classes"]], "HydrogenBondLifetimes": [[37, "hydrogenbondlifetimes"]], "WaterOrientationalRelaxation": [[37, "waterorientationalrelaxation"], [37, "id76"]], "AngularDistribution": [[37, "angulardistribution"], [37, "id77"]], "MeanSquareDisplacement": [[37, "meansquaredisplacement"], [37, "id78"]], "SurvivalProbability": [[37, "survivalprobability"], [37, "id79"]], "Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis": [[38, "water-bridge-analysis-mdanalysis-analysis-hydrogenbonds-waterbridgeanalysis"]], "Theory": [[38, "theory"]], "Output as Network": [[38, "output-as-network"]], "Output as Timeseries": [[38, "output-as-timeseries"]], "Detection of water bridges": [[38, "detection-of-water-bridges"]], "Default heavy atom names for CHARMM27 force field.": [[38, "id69"]], "Heavy atom types for GLYCAM06 force field.": [[38, "id70"]], "How to perform WaterBridgeAnalysis": [[38, "how-to-perform-waterbridgeanalysis"]], "Use count_by_type": [[38, "use-count-by-type"]], "Use count_by_time": [[38, "use-count-by-time"]], "Analysis modules": [[39, "analysis-modules"]], "Building blocks for Analysis": [[39, "building-blocks-for-analysis"]], "Distances and contacts": [[39, "distances-and-contacts"]], "Hydrogen bonding": [[39, "hydrogen-bonding"]], "Membranes and membrane proteins": [[39, "membranes-and-membrane-proteins"]], "Nucleic acids": [[39, "nucleic-acids"]], "Polymers": [[39, "polymers"]], "Structure": [[39, "structure"]], "Macromolecules": [[39, "macromolecules"]], "Liquids": [[39, "liquids"]], "Volumetric analysis": [[39, "volumetric-analysis"]], "Dimensionality Reduction": [[39, "dimensionality-reduction"]], "Legacy analysis modules": [[39, "legacy-analysis-modules"]], "Data": [[39, "data"], [160, "data"], [161, "data"]], "EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR": [[40, "edr-auxiliary-reader-mdanalysis-auxiliary-edr"]], "Background": [[40, "background"]], "Standalone Usage of the EDRReader": [[40, "standalone-usage-of-the-edrreader"]], "Adding EDR data to trajectories": [[40, "adding-edr-data-to-trajectories"]], "XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG": [[41, "xvg-auxiliary-reader-mdanalysis-auxiliary-xvg"]], "XVG Readers": [[41, "xvg-readers"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary.base": [[42, "auxiliary-readers-mdanalysis-auxiliary-base"]], "Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core": [[43, "common-functions-for-auxiliary-reading-mdanalysis-auxiliary-core"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary": [[44, "auxiliary-readers-mdanalysis-auxiliary"]], "Supported formats": [[44, "supported-formats"]], "Auxiliary API": [[44, "auxiliary-api"]], "Auxiliaries and trajectories": [[44, "auxiliaries-and-trajectories"]], "Adding an auxiliary to a trajectory": [[44, "adding-an-auxiliary-to-a-trajectory"]], "Iterating by an auxiliary": [[44, "iterating-by-an-auxiliary"]], "Accessing auxiliary attributes": [[44, "accessing-auxiliary-attributes"]], "Recreating auxiliaries": [[44, "recreating-auxiliaries"]], "AuxStep class": [[44, "auxstep-class"]], "Attributes": [[44, "attributes"], [44, "id2"], [79, "attributes"], [79, "id19"], [79, "id21"]], "Methods": [[44, "methods"], [44, "id3"], [79, "methods"], [79, "id18"], [79, "id20"], [79, "id22"]], "AuxReader class": [[44, "auxreader-class"]], "Registry": [[44, "registry"], [79, "registry"]], "Replicating auxiliaries": [[44, "replicating-auxiliaries"]], "Auxiliary modules": [[45, "auxiliary-modules"]], "Converter modules": [[46, "converter-modules"]], "OpenMM topology parser MDAnalysis.converters.OpenMMParser": [[47, "openmm-topology-parser-mdanalysis-converters-openmmparser"]], "OpenMM structure I/O \u2014 MDAnalysis.converters.OpenMM": [[47, "openmm-structure-i-o-mdanalysis-converters-openmm"]], "ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser": [[48, "parmed-topology-parser-mdanalysis-converters-parmedparser"]], "ParmEd structure I/O \u2014 MDAnalysis.converters.ParmEd": [[48, "parmed-structure-i-o-mdanalysis-converters-parmed"]], "RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser": [[49, "rdkit-topology-parser-mdanalysis-converters-rdkitparser"]], "RDKit molecule I/O \u2014 MDAnalysis.converters.RDKit": [[49, "rdkit-molecule-i-o-mdanalysis-converters-rdkit"]], "CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD": [[50, "crd-structure-files-in-mdanalysis-mdanalysis-coordinates-crd"]], "DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD": [[51, "dcd-trajectory-i-o-mdanalysis-coordinates-dcd"]], "DL_Poly format reader MDAnalysis.coordinates.DLPoly": [[52, "dl-poly-format-reader-mdanalysis-coordinates-dlpoly"]], "DESRES file format \u2014 MDAnalysis.coordinates.DMS": [[53, "desres-file-format-mdanalysis-coordinates-dms"]], "FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS": [[54, "fhi-aims-file-format-mdanalysis-coordinates-fhiaims"]], "Developer notes: FHIAIMSWriter format strings": [[54, "developer-notes-fhiaimswriter-format-strings"]], "GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS": [[55, "gamess-trajectory-reader-mdanalysis-coordinates-gms"]], "GRO file format \u2014 MDAnalysis.coordinates.GRO": [[56, "gro-file-format-mdanalysis-coordinates-gro"]], "Writing GRO files": [[56, "writing-gro-files"]], "Developer notes: GROWriter format strings": [[56, "developer-notes-growriter-format-strings"]], "GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD": [[57, "gsd-trajectory-reader-mdanalysis-coordinates-gsd"]], "H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD": [[58, "h5md-trajectories-mdanalysis-coordinates-h5md"]], "Units": [[58, "units"]], "Example: Loading an H5MD simulation": [[58, "example-loading-an-h5md-simulation"]], "Example: Writing an H5MD file": [[58, "example-writing-an-h5md-file"]], "Example: Opening an H5MD file in parallel": [[58, "example-opening-an-h5md-file-in-parallel"]], "Building parallel h5py and HDF5 on Linux": [[58, "building-parallel-h5py-and-hdf5-on-linux"]], "INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD": [[59, "inpcrd-structure-files-in-mdanalysis-mdanalysis-coordinates-inpcrd"]], "LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS": [[60, "lammps-dcd-trajectory-and-data-i-o-mdanalysis-coordinates-lammps"]], "Data file formats": [[60, "data-file-formats"]], "Dump files": [[60, "dump-files"]], "Example: Loading a LAMMPS simulation": [[60, "example-loading-a-lammps-simulation"]], "MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF": [[61, "mmtf-trajectory-reader-mdanalysis-coordinates-mmtf"]], "MOL2 file format \u2014 MDAnalysis.coordinates.MOL2": [[62, "mol2-file-format-mdanalysis-coordinates-mol2"], [134, "mol2-file-format-mdanalysis-coordinates-mol2"]], "Example for working with mol2 files": [[62, "example-for-working-with-mol2-files"]], "MOL2 format notes": [[62, "mol2-format-notes"]], "NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN": [[63, "namdbin-files-format-mdanalysis-coordinates-namdbin"]], "PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB": [[64, "pdb-structure-files-in-mdanalysis-mdanalysis-coordinates-pdb"]], "Capabilities": [[64, "capabilities"]], "Examples for working with PDB files": [[64, "examples-for-working-with-pdb-files"]], "PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT": [[65, "pdbqt-structure-files-in-mdanalysis-mdanalysis-coordinates-pdbqt"]], "PQR file format \u2014 MDAnalysis.coordinates.PQR": [[66, "pqr-file-format-mdanalysis-coordinates-pqr"]], "TNG trajectory files \u2014 MDAnalysis.coordinates.TNG": [[67, "tng-trajectory-files-mdanalysis-coordinates-tng"]], "Current Limitations": [[67, "current-limitations"]], "AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ": [[68, "amber-trajectories-mdanalysis-coordinates-trj"]], "Binary NetCDF trajectories": [[68, "binary-netcdf-trajectories"]], "ASCII TRAJ trajectories": [[68, "ascii-traj-trajectories"]], "TRR trajectory files \u2014 MDAnalysis.coordinates.TRR": [[69, "trr-trajectory-files-mdanalysis-coordinates-trr"]], "TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ": [[70, "trz-trajectory-i-o-mdanalysis-coordinates-trz"]], "TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ": [[71, "txyz-file-format-mdanalysis-coordinates-txyz"]], "XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR": [[72, "xdr-based-trajectory-files-mdanalysis-coordinates-xdr"]], "XTC trajectory files \u2014 MDAnalysis.coordinates.XTC": [[73, "xtc-trajectory-files-mdanalysis-coordinates-xtc"]], "XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ": [[74, "xyz-trajectory-reader-mdanalysis-coordinates-xyz"]], "XYZ File format": [[74, "xyz-file-format"]], "Base classes \u2014 MDAnalysis.coordinates.base": [[75, "base-classes-mdanalysis-coordinates-base"]], "FrameIterators": [[75, "frameiterators"]], "Readers": [[75, "readers"], [79, "readers"]], "Writers": [[75, "writers"], [79, "writers"]], "Converters": [[75, "converters"]], "Helper classes": [[75, "helper-classes"]], "ChainReader \u2014 MDAnalysis.coordinates.chain": [[76, "chainreader-mdanalysis-coordinates-chain"]], "Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles": [[77, "reading-trajectories-with-chemfiles-mdanalysis-coordinates-chemfiles"]], "Using the CHEMFILES reader": [[77, "using-the-chemfiles-reader"]], "Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core": [[78, "common-functions-for-coordinate-reading-mdanalysis-coordinates-core"]], "Trajectory Readers and Writers \u2014 MDAnalysis.coordinates": [[79, "trajectory-readers-and-writers-mdanalysis-coordinates"]], "Timesteps": [[79, "timesteps"]], "Supported coordinate formats": [[79, "supported-coordinate-formats"]], "Table of supported coordinate formats": [[79, "id23"]], "Trajectory API": [[79, "trajectory-api"]], "Timestep class": [[79, "timestep-class"]], "Private attributes": [[79, "private-attributes"]], "Trajectory Reader class": [[79, "trajectory-reader-class"]], "Trajectory Writer class": [[79, "trajectory-writer-class"]], "Single Frame Writer class": [[79, "single-frame-writer-class"]], "Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory": [[80, "reading-trajectories-from-memory-mdanalysis-coordinates-memory"]], "How to use the MemoryReader": [[80, "how-to-use-the-memoryreader"]], "In-memory representation of arbitrary trajectories": [[80, "in-memory-representation-of-arbitrary-trajectories"]], "Switching a trajectory to an in-memory representation": [[80, "switching-a-trajectory-to-an-in-memory-representation"]], "Constructing a Reader from a numpy array": [[80, "constructing-a-reader-from-a-numpy-array"]], "Creating an in-memory trajectory of a sub-system": [[80, "creating-an-in-memory-trajectory-of-a-sub-system"]], "Null output \u2014 MDAnalysis.coordinates.null": [[81, "null-output-mdanalysis-coordinates-null"]], "Serialization of Coordinate Readers": [[82, "serialization-of-coordinate-readers"]], "How to serialize a new reader": [[82, "how-to-serialize-a-new-reader"]], "File Access": [[82, "file-access"]], "To seek or not to seek": [[82, "to-seek-or-not-to-seek"]], "Miscellaneous": [[82, "miscellaneous"]], "Tests": [[82, "tests"], [165, "tests"]], "_SingleFrameReader Test": [[82, "singleframereader-test"]], "BaseReaderTest and MultiframeReaderTest": [[82, "basereadertest-and-multiframereadertest"]], "File handler Test": [[82, "file-handler-test"]], "Currently implemented picklable IO Formats": [[82, "currently-implemented-picklable-io-formats"]], "Timestep Class \u2014 MDAnalysis.coordinates.timestep": [[83, "timestep-class-mdanalysis-coordinates-timestep"]], "Timestep": [[83, "timestep"]], "Coordinates modules": [[84, "coordinates-modules"]], "AtomGroup accessors \u2014 MDAnalysis.core.accessors": [[85, "atomgroup-accessors-mdanalysis-core-accessors"]], "Core objects: Containers \u2014 MDAnalysis.core.groups": [[86, "core-objects-containers-mdanalysis-core-groups"]], "Collections": [[86, "collections"]], "Chemical units": [[86, "chemical-units"]], "Levels": [[86, "levels"]], "Core functions of MDAnalysis": [[87, "core-functions-of-mdanalysis"]], "Atom selection Hierarchy \u2014 MDAnalysis.core.selection": [[88, "atom-selection-hierarchy-mdanalysis-core-selection"]], "Core Topology object \u2014 MDAnalysis.core.topology": [[89, "core-topology-object-mdanalysis-core-topology"]], "Topology attribute objects \u2014 MDAnalysis.core.topologyattrs": [[90, "topology-attribute-objects-mdanalysis-core-topologyattrs"]], "Core Topology Objects \u2014 MDAnalysis.core.topologyobjects": [[91, "core-topology-objects-mdanalysis-core-topologyobjects"]], "Core object: Universe \u2014 MDAnalysis.core.universe": [[92, "core-object-universe-mdanalysis-core-universe"]], "Core modules": [[93, "core-modules"]], "Important objects for users": [[93, "important-objects-for-users"]], "Topology system": [[93, "topology-system"]], "Selection system": [[93, "selection-system"]], "Custom exceptions and warnings \u2014 MDAnalysis.exceptions": [[94, "custom-exceptions-and-warnings-mdanalysis-exceptions"]], "Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch": [[95, "neighbor-search-wrapper-for-mdanalysis-mdanalysis-lib-neighborsearch"]], "Distance calculation library \u2014 MDAnalysis.lib.c_distances": [[96, "distance-calculation-library-mdanalysis-lib-c-distances"]], "Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp": [[97, "parallel-distance-calculation-library-mdanalysis-lib-c-distances-openmp"]], "Correlations utilities \u2014 MDAnalysis.lib.correlations": [[98, "correlations-utilities-mdanalysis-lib-correlations"]], "Autocorrelation Function": [[98, "autocorrelation-function"]], "Intermittency Function": [[98, "intermittency-function"]], "Fast distance array computation \u2014 MDAnalysis.lib.distances": [[99, "fast-distance-array-computation-mdanalysis-lib-distances"]], "Selection of acceleration (\u201cbackend\u201d)": [[99, "selection-of-acceleration-backend"]], "Available backends for accelerated distance functions.": [[99, "id1"]], "Use of the distopia library": [[99, "use-of-the-distopia-library"]], "Functions available using the distopia backend.": [[99, "id2"]], "Low-level modules for MDAnalysis.lib.distances": [[99, "low-level-modules-for-mdanalysis-lib-distances"]], "Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd": [[100, "low-level-dcd-trajectory-reading-mdanalysis-lib-formats-libdcd"]], "Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr": [[101, "low-level-gromacs-xdr-trajectory-reading-mdanalysis-lib-formats-libmdaxdr"]], "Setting up logging \u2014 MDAnalysis.lib.log": [[102, "setting-up-logging-mdanalysis-lib-log"]], "Convenience functions": [[102, "convenience-functions"]], "Other functions and classes for logging purposes": [[102, "other-functions-and-classes-for-logging-purposes"]], "Mathematical helper functions \u2014 MDAnalysis.lib.mdamath": [[103, "mathematical-helper-functions-mdanalysis-lib-mdamath"]], "Linear algebra": [[103, "linear-algebra"]], "Connectivity": [[103, "connectivity"]], "Neighbor search library \u2014 MDAnalysis.lib.nsgrid": [[104, "neighbor-search-library-mdanalysis-lib-nsgrid"]], "About the code": [[104, "about-the-code"]], "About the algorithm": [[104, "about-the-algorithm"]], "Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io": [[105, "picklable-read-only-i-o-classes-mdanalysis-lib-picklable-file-io"]], "PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree": [[106, "periodickdtree-mdanalysis-lib-pkdtree"]], "Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot": [[107, "fast-qcp-rmsd-structure-alignment-mdanalysis-lib-qcprot"]], "Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations": [[108, "homogeneous-transformation-matrices-and-quaternions-mdanalysis-lib-transformations"]], "Requirements": [[108, "requirements"]], "Helper functions \u2014 MDAnalysis.lib.util": [[109, "helper-functions-mdanalysis-lib-util"]], "Files and directories": [[109, "files-and-directories"]], "Streams": [[109, "streams"]], "Containers and lists": [[109, "containers-and-lists"]], "Arrays": [[109, "arrays"]], "File parsing": [[109, "file-parsing"]], "Data manipulation and handling": [[109, "data-manipulation-and-handling"]], "Strings": [[109, "strings"]], "Class decorators": [[109, "class-decorators"]], "Function decorators": [[109, "function-decorators"]], "Code management": [[109, "code-management"]], "Data format checks": [[109, "data-format-checks"]], "Library functions \u2014 MDAnalysis.lib": [[110, "module-MDAnalysis.lib"]], "Overview": [[110, "overview"]], "List of modules": [[110, "list-of-modules"]], "Low level file formats": [[110, "low-level-file-formats"]], "Libmdanalysis": [[110, "libmdanalysis"]], "Overview over MDAnalysis": [[111, "overview-over-mdanalysis"]], "Using MDAnalysis in python": [[111, "using-mdanalysis-in-python"]], "Examples": [[111, "examples"]], "Included trajectories": [[111, "included-trajectories"]], "Code snippets": [[111, "code-snippets"]], "Citations for the whole MDAnalysis library": [[112, "citations-for-the-whole-mdanalysis-library"]], "Citations for included algorithms and modules": [[112, "citations-for-included-algorithms-and-modules"]], "Citations using Duecredit": [[112, "citations-using-duecredit"]], "Selection commands": [[113, "selection-commands"]], "Selection Keywords": [[113, "selection-keywords"]], "Simple selections": [[113, "simple-selections"]], "Pattern matching": [[113, "pattern-matching"]], "Boolean": [[113, "boolean"]], "Geometric": [[113, "geometric"]], "Similarity and connectivity": [[113, "similarity-and-connectivity"]], "Index": [[113, "index"]], "Preexisting selections and modifiers": [[113, "preexisting-selections-and-modifiers"]], "Dynamic selections": [[113, "dynamic-selections"]], "Ordered selections": [[113, "ordered-selections"]], "Base classes for the selection writers": [[114, "base-classes-for-the-selection-writers"]], "CHARMM selections": [[115, "charmm-selections"]], "Gromacs selections": [[116, "gromacs-selections"]], "Jmol selections": [[117, "jmol-selections"]], "PyMOL selections": [[118, "pymol-selections"]], "VMD selections": [[119, "vmd-selections"]], "Selection exporters": [[120, "selection-exporters"]], "Table of supported exporters and recognized file name extensions.": [[120, "id2"]], "How to write selections": [[120, "how-to-write-selections"]], "Single AtomGroup": [[120, "single-atomgroup"]], "Multiple selections": [[120, "multiple-selections"]], "Selection writers": [[120, "selection-writers"]], "The topology system": [[121, "the-topology-system"]], "CRD topology parser": [[122, "crd-topology-parser"]], "Todo": [[122, "id1"], [140, "id1"]], "DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser": [[123, "dl-poly-format-topology-readers-mdanalysis-topology-dlpolyparser"]], "DESRES Molecular Structure file format topology parser": [[124, "desres-molecular-structure-file-format-topology-parser"]], "Extended PDB topology parser": [[125, "extended-pdb-topology-parser"]], "FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser": [[126, "fhi-aims-topology-parser-mdanalysis-topolgy-fhiaimsparser"]], "GAMESS Topology Parser": [[127, "gamess-topology-parser"]], "GRO topology parser": [[128, "gro-topology-parser"]], "GSD topology parser": [[129, "gsd-topology-parser"]], "HOOMD XML topology parser": [[130, "hoomd-xml-topology-parser"]], "ITP topology parser": [[131, "itp-topology-parser"]], "Preprocessor variables": [[131, "preprocessor-variables"]], "LAMMPSParser": [[132, "lammpsparser"]], "Atom styles": [[132, "atom-styles"]], "MMTF Topology Parser": [[133, "mmtf-topology-parser"]], "Minimal topology parser": [[135, "minimal-topology-parser"]], "PDB Topology Parser": [[136, "pdb-topology-parser"]], "PDBQT topology parser": [[137, "pdbqt-topology-parser"]], "PQR topology parser": [[138, "pqr-topology-parser"]], "PSF topology parser": [[139, "psf-topology-parser"]], "AMBER PRMTOP topology parser": [[140, "amber-prmtop-topology-parser"]], "Gromacs portable run input TPR format parser": [[141, "gromacs-portable-run-input-tpr-format-parser"]], "TPR format versions and generations read by MDAnalysis.topology.TPRParser.parse().": [[141, "id4"]], "Development notes": [[141, "development-notes"]], "TXYZ topology parser": [[142, "txyz-topology-parser"]], "XYZ Topology Parser": [[143, "xyz-topology-parser"]], "Base topology reader classes \u2014 MDAnalysis.topology.base": [[144, "base-topology-reader-classes-mdanalysis-topology-base"]], "Common functions for topology building \u2014 MDAnalysis.topology.core": [[145, "common-functions-for-topology-building-mdanalysis-topology-core"]], "Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers": [[146, "guessing-unknown-topology-information-mdanalysis-topology-guessers"]], "Example uses of guessers": [[146, "example-uses-of-guessers"]], "Guessing elements from atom names": [[146, "guessing-elements-from-atom-names"]], "Topology readers \u2014 MDAnalysis.topology": [[147, "topology-readers-mdanalysis-topology"]], "Table of Supported Topology Formats": [[147, "id19"]], "Developer Notes": [[147, "developer-notes"]], "atoms": [[147, "atoms"]], "bonds": [[147, "bonds"]], "bondorder": [[147, "bondorder"]], "angles": [[147, "angles"]], "dihedrals": [[147, "dihedrals"]], "impropers": [[147, "impropers"]], "MDAnalysis topology tables": [[148, "mdanalysis-topology-tables"]], "Utility functions for the TPR topology parser": [[149, "utility-functions-for-the-tpr-topology-parser"]], "TPR support": [[149, "tpr-support"]], "TPRParser settings": [[149, "tprparser-settings"]], "Class definitions for the TPRParser": [[149, "class-definitions-for-the-tprparser"]], "Utilities for the TPRParser": [[149, "utilities-for-the-tprparser"]], "Topology modules": [[150, "topology-modules"]], "Trajectory transformations (\u201con-the-fly\u201d transformations)": [[151, "module-MDAnalysis.transformations"]], "Workflows": [[151, "workflows"]], "Creating transformations": [[151, "creating-transformations"]], "Creating complex transformation classes": [[151, "creating-complex-transformation-classes"]], "Creating complex transformation closure functions": [[151, "creating-complex-transformation-closure-functions"]], "Transformations in MDAnalysis": [[151, "transformations-in-mdanalysis"]], "How to transformations": [[151, "how-to-transformations"]], "Building blocks for Transformation Classes": [[151, "building-blocks-for-transformation-classes"]], "Currently implemented transformations": [[151, "currently-implemented-transformations"]], "Transformations Base Class \u2014 MDAnalysis.transformations.base": [[152, "transformations-base-class-mdanalysis-transformations-base"]], "Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions": [[153, "set-box-dimensions-mdanalysis-transformations-boxdimensions"]], "Fitting transformations \u2014 MDAnalysis.transformations.fit": [[154, "fitting-transformations-mdanalysis-transformations-fit"]], "No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump": [[155, "no-jump-trajectory-unwrapping-mdanalysis-transformations-nojump"]], "Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging": [[156, "trajectory-coordinate-averaging-mdanalysis-transformations-positionaveraging"]], "Trajectory rotation \u2014 MDAnalysis.transformations.rotate": [[157, "trajectory-rotation-mdanalysis-transformations-rotate"]], "Trajectory translation \u2014 MDAnalysis.transformations.translate": [[158, "trajectory-translation-mdanalysis-transformations-translate"]], "Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap": [[159, "wrap-unwrap-transformations-mdanalysis-transformations-wrap"]], "Constants and unit conversion \u2014 MDAnalysis.units": [[160, "constants-and-unit-conversion-mdanalysis-units"]], "Base units in MDAnalysis as encoded in MDANALYSIS_BASE_UNITS": [[160, "id71"]], "Implementation notes": [[160, "implementation-notes"]], "Conversions": [[160, "conversions"]], "References and footnotes": [[160, "references-and-footnotes"]], "Version information for MDAnalysis - MDAnalysis.version": [[161, "version-information-for-mdanalysis-mdanalysis-version"]], "Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines": [[162, "streamplots-2d-mdanalysis-visualization-streamlines"]], "Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D": [[163, "streamplots-3d-mdanalysis-visualization-streamlines-3d"]], "Visualization modules": [[164, "visualization-modules"]], "Visualization of Lipid Flow": [[164, "visualization-of-lipid-flow"]], "MDAnalysis documentation": [[165, "mdanalysis-documentation"]], "Getting involved": [[165, "getting-involved"]], "User Guide": [[165, "user-guide"]], "Installing MDAnalysis": [[165, "installing-mdanalysis"]], "conda": [[165, "conda"]], "pip": [[165, "pip"]], "Source Code": [[165, "source-code"]], "Citation": [[165, "citation"]], "Indices and tables": [[165, "indices-and-tables"]]}, "indexentries": {"aligntraj (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AlignTraj"]], "averagestructure (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AverageStructure"]], "mdanalysis.analysis.align": [[0, "module-MDAnalysis.analysis.align"]], "_fit_to() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align._fit_to"]], "alignto() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.alignto"]], "fasta2select() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.fasta2select"]], "filename (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.filename"]], "filename (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.filename"]], "get_matching_atoms() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.get_matching_atoms"]], "mobile_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.mobile_atoms"]], "mobile_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.mobile_atoms"]], "module": [[0, "module-MDAnalysis.analysis.align"], [1, "module-MDAnalysis.analysis.atomicdistances"], [2, "module-MDAnalysis.analysis.base"], [3, "module-MDAnalysis.analysis.bat"], [4, "module-MDAnalysis.analysis.contacts"], [5, "module-MDAnalysis.analysis.data.filenames"], [6, "module-MDAnalysis.analysis.density"], [7, "module-MDAnalysis.analysis.dielectric"], [8, "module-MDAnalysis.analysis.diffusionmap"], [9, "module-MDAnalysis.analysis.dihedrals"], [10, "module-MDAnalysis.analysis.distances"], [12, "module-MDAnalysis.analysis.encore.bootstrap"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"], [13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"], [13, "module-MDAnalysis.analysis.encore.clustering.cluster"], [14, "module-MDAnalysis.analysis.encore.confdistmatrix"], [15, "module-MDAnalysis.analysis.encore.covariance"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"], [17, "module-MDAnalysis.analysis.encore.similarity"], [18, "module-MDAnalysis.analysis.encore.utils"], [19, "module-MDAnalysis.analysis.gnm"], [20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"], [21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"], [22, "module-MDAnalysis.analysis.helix_analysis"], [23, "module-MDAnalysis.analysis.hole2"], [23, "module-MDAnalysis.analysis.hole2.templates"], [23, "module-MDAnalysis.analysis.hole2.utils"], [24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"], [25, "module-MDAnalysis.analysis.leaflet"], [26, "module-MDAnalysis.analysis.legacy.x3dna"], [28, "module-MDAnalysis.analysis.lineardensity"], [29, "module-MDAnalysis.analysis.msd"], [30, "module-MDAnalysis.analysis.nucleicacids"], [31, "module-MDAnalysis.analysis.nuclinfo"], [32, "module-MDAnalysis.analysis.pca"], [33, "module-MDAnalysis.analysis.polymer"], [34, "module-MDAnalysis.analysis.psa"], [35, "module-MDAnalysis.analysis.rdf"], [36, "module-MDAnalysis.analysis.rms"], [37, "module-MDAnalysis.analysis.waterdynamics"], [38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"], [40, "module-MDAnalysis.auxiliary.EDR"], [41, "module-MDAnalysis.auxiliary.XVG"], [42, "module-MDAnalysis.auxiliary.base"], [43, "module-MDAnalysis.auxiliary.core"], [44, "module-MDAnalysis.auxiliary.__init__"], [46, "module-MDAnalysis.converters"], [47, "module-MDAnalysis.converters.OpenMM"], [47, "module-MDAnalysis.converters.OpenMMParser"], [48, "module-MDAnalysis.converters.ParmEd"], [48, "module-MDAnalysis.converters.ParmEdParser"], [49, "module-MDAnalysis.converters.RDKit"], [49, "module-MDAnalysis.converters.RDKitParser"], [50, "module-MDAnalysis.coordinates.CRD"], [51, "module-MDAnalysis.coordinates.DCD"], [52, "module-MDAnalysis.coordinates.DLPoly"], [53, "module-MDAnalysis.coordinates.DMS"], [54, "module-MDAnalysis.coordinates.FHIAIMS"], [55, "module-MDAnalysis.coordinates.GMS"], [56, "module-MDAnalysis.coordinates.GRO"], [57, "module-MDAnalysis.coordinates.GSD"], [58, "module-MDAnalysis.coordinates.H5MD"], [59, "module-MDAnalysis.coordinates.INPCRD"], [60, "module-MDAnalysis.coordinates.LAMMPS"], [61, "module-MDAnalysis.coordinates.MMTF"], [62, "module-MDAnalysis.coordinates.MOL2"], [63, "module-MDAnalysis.coordinates.NAMDBIN"], [64, "module-MDAnalysis.coordinates.PDB"], [65, "module-MDAnalysis.coordinates.PDBQT"], [66, "module-MDAnalysis.coordinates.PQR"], [67, "module-MDAnalysis.coordinates.TNG"], [68, "module-MDAnalysis.coordinates.TRJ"], [69, "module-MDAnalysis.coordinates.TRR"], [70, "module-MDAnalysis.coordinates.TRZ"], [71, "module-MDAnalysis.coordinates.TXYZ"], [72, "module-MDAnalysis.coordinates.XDR"], [73, "module-MDAnalysis.coordinates.XTC"], [74, "module-MDAnalysis.coordinates.XYZ"], [75, "module-MDAnalysis.coordinates.base"], [76, "module-MDAnalysis.coordinates.chain"], [77, "module-MDAnalysis.coordinates.chemfiles"], [78, "module-MDAnalysis.coordinates.core"], [79, "module-MDAnalysis.coordinates.__init__"], [80, "module-MDAnalysis.coordinates.memory"], [81, "module-MDAnalysis.coordinates.null"], [83, "module-MDAnalysis.coordinates.timestep"], [85, "module-MDAnalysis.core.accessors"], [86, "module-MDAnalysis.core.groups"], [87, "module-MDAnalysis.core.__init__"], [88, "module-MDAnalysis.core.selection"], [89, "module-MDAnalysis.core.topology"], [90, "module-MDAnalysis.core.topologyattrs"], [91, "module-MDAnalysis.core.topologyobjects"], [92, "module-MDAnalysis.core.universe"], [94, "module-MDAnalysis.exceptions"], [95, "module-MDAnalysis.lib.NeighborSearch"], [96, "module-MDAnalysis.lib.c_distances"], [97, "module-MDAnalysis.lib.c_distances_openmp"], [98, "module-MDAnalysis.lib.correlations"], [99, "module-MDAnalysis.lib.distances"], [100, "module-MDAnalysis.lib.formats.libdcd"], [101, "module-MDAnalysis.lib.formats.libmdaxdr"], [102, "module-MDAnalysis.lib.log"], [103, "module-MDAnalysis.lib.mdamath"], [104, "module-MDAnalysis.lib.nsgrid"], [105, "module-MDAnalysis.lib.picklable_file_io"], [106, "module-MDAnalysis.lib.pkdtree"], [107, "module-MDAnalysis.lib.qcprot"], [108, "module-MDAnalysis.lib.transformations"], [109, "module-MDAnalysis.lib.util"], [110, "module-MDAnalysis.lib"], [114, "module-MDAnalysis.selections.base"], [115, "module-MDAnalysis.selections.charmm"], [116, "module-MDAnalysis.selections.gromacs"], [117, "module-MDAnalysis.selections.jmol"], [118, "module-MDAnalysis.selections.pymol"], [119, "module-MDAnalysis.selections.vmd"], [122, "module-MDAnalysis.topology.CRDParser"], [123, "module-MDAnalysis.topology.DLPolyParser"], [124, "module-MDAnalysis.topology.DMSParser"], [125, "module-MDAnalysis.topology.ExtendedPDBParser"], [126, "module-MDAnalysis.topology.FHIAIMSParser"], [127, "module-MDAnalysis.topology.GMSParser"], [128, "module-MDAnalysis.topology.GROParser"], [129, "module-MDAnalysis.topology.GSDParser"], [130, "module-MDAnalysis.topology.HoomdXMLParser"], [131, "module-MDAnalysis.topology.ITPParser"], [132, "module-MDAnalysis.topology.LAMMPSParser"], [133, "module-MDAnalysis.topology.MMTFParser"], [134, "module-MDAnalysis.topology.MOL2Parser"], [135, "module-MDAnalysis.topology.MinimalParser"], [136, "module-MDAnalysis.topology.PDBParser"], [137, "module-MDAnalysis.topology.PDBQTParser"], [138, "module-MDAnalysis.topology.PQRParser"], [139, "module-MDAnalysis.topology.PSFParser"], [140, "module-MDAnalysis.topology.TOPParser"], [141, "module-MDAnalysis.topology.TPRParser"], [142, "module-MDAnalysis.topology.TXYZParser"], [143, "module-MDAnalysis.topology.XYZParser"], [144, "module-MDAnalysis.topology.base"], [145, "module-MDAnalysis.topology.core"], [146, "module-MDAnalysis.topology.guessers"], [147, "module-MDAnalysis.topology.__init__"], [148, "module-MDAnalysis.topology.tables"], [149, "module-MDAnalysis.topology.tpr"], [149, "module-MDAnalysis.topology.tpr.obj"], [149, "module-MDAnalysis.topology.tpr.setting"], [149, "module-MDAnalysis.topology.tpr.utils"], [151, "module-MDAnalysis.transformations"], [152, "module-MDAnalysis.transformations.base"], [153, "module-MDAnalysis.transformations.boxdimensions"], [154, "module-MDAnalysis.transformations.fit"], [155, "module-MDAnalysis.transformations.nojump"], [156, "module-MDAnalysis.transformations.positionaveraging"], [157, "module-MDAnalysis.transformations.rotate"], [158, "module-MDAnalysis.transformations.translate"], [159, "module-MDAnalysis.transformations.wrap"], [160, "module-MDAnalysis.units"], [161, "module-MDAnalysis.version"], [162, "module-MDAnalysis.visualization.streamlines"], [163, "module-MDAnalysis.visualization.streamlines_3D"]], "positions (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.positions"]], "positions (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.positions"]], "reference_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.reference_atoms"]], "reference_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.reference_atoms"]], "rmsd (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.rmsd"]], "rmsd (mdanalysis.analysis.align.aligntraj.results attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.results.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.rmsd"]], "rotation_matrix() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.rotation_matrix"]], "sequence_alignment() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.sequence_alignment"]], "universe (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.universe"]], "universe (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.universe"]], "atomicdistances (class in mdanalysis.analysis.atomicdistances)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances"]], "mdanalysis.analysis.atomicdistances": [[1, "module-MDAnalysis.analysis.atomicdistances"]], "n_atoms (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_atoms"]], "n_frames (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_frames"]], "results (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.results"]], "analysisbase (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisBase"]], "analysisfromfunction (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction"]], "mdanalysis.analysis.base": [[2, "module-MDAnalysis.analysis.base"]], "results (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.Results"]], "analysis_class() (in module mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.analysis_class"]], "frames (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.frames"]], "frames (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.frames"]], "frames (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.frames"]], "results (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.results"]], "run() (mdanalysis.analysis.base.analysisbase method)": [[2, "MDAnalysis.analysis.base.AnalysisBase.run"]], "times (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.times"]], "times (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.times"]], "times (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.times"]], "timeseries (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.timeseries"]], "timeseries (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.timeseries"]], "bat (class in mdanalysis.analysis.bat)": [[3, "MDAnalysis.analysis.bat.BAT"]], "cartesian() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.Cartesian"]], "mdanalysis.analysis.bat": [[3, "module-MDAnalysis.analysis.bat"]], "atoms (mdanalysis.analysis.bat.bat property)": [[3, "MDAnalysis.analysis.bat.BAT.atoms"]], "bat (mdanalysis.analysis.bat.bat.results attribute)": [[3, "MDAnalysis.analysis.bat.BAT.results.bat"]], "load() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.load"]], "run() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.run"]], "save() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.save"]], "contacts (class in mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.Contacts"]], "mdanalysis.analysis.contacts": [[4, "module-MDAnalysis.analysis.contacts"]], "contact_matrix() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.contact_matrix"]], "hard_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.hard_cut_q"]], "q1q2() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.q1q2"]], "radius_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.radius_cut_q"]], "soft_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.soft_cut_q"]], "timeseries (mdanalysis.analysis.contacts.contacts attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.timeseries"]], "timeseries (mdanalysis.analysis.contacts.contacts.results attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.results.timeseries"]], "janin_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Janin_ref"]], "mdanalysis.analysis.data.filenames": [[5, "module-MDAnalysis.analysis.data.filenames"]], "rama_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Rama_ref"]], "density (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.Density"]], "densityanalysis (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.DensityAnalysis"]], "mdanalysis.analysis.density": [[6, "module-MDAnalysis.analysis.density"]], "_set_user_grid() (mdanalysis.analysis.density.densityanalysis static method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis._set_user_grid"]], "centers() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.centers"]], "check_compatible() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.check_compatible"]], "convert_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_density"]], "convert_length() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_length"]], "default_format (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.default_format"]], "delta (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.delta"]], "density (mdanalysis.analysis.density.densityanalysis attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.density"]], "density (mdanalysis.analysis.density.densityanalysis.results attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.results.density"]], "edges (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.edges"]], "export() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.export"]], "grid (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.grid"]], "interpolated (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolated"]], "interpolation_spline_order (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolation_spline_order"]], "load() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.load"]], "make_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.make_density"]], "origin (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.origin"]], "resample() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample"]], "resample_factor() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample_factor"]], "run() (mdanalysis.analysis.density.densityanalysis method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.run"]], "save() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.save"]], "units (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.units"]], "dielectricconstant (class in mdanalysis.analysis.dielectric)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant"]], "m (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M"]], "m2 (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M2"]], "mdanalysis.analysis.dielectric": [[7, "module-MDAnalysis.analysis.dielectric"]], "eps (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps"]], "eps_mean (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps_mean"]], "fluct (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.fluct"]], "diffusionmap (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap"]], "distancematrix (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix"]], "mdanalysis.analysis.diffusionmap": [[8, "module-MDAnalysis.analysis.diffusionmap"]], "atoms (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.atoms"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.dist_matrix"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix.results attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results.dist_matrix"]], "eigenvalues (mdanalysis.analysis.diffusionmap.diffusionmap attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.eigenvalues"]], "run() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.run"]], "transform() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.transform"]], "dihedral (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral"]], "janin (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Janin"]], "mdanalysis.analysis.dihedrals": [[9, "module-MDAnalysis.analysis.dihedrals"]], "ramachandran (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran"]], "angles (mdanalysis.analysis.dihedrals.dihedral attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.angles"]], "angles (mdanalysis.analysis.dihedrals.dihedral.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.results.angles"]], "angles (mdanalysis.analysis.dihedrals.janin attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.angles"]], "angles (mdanalysis.analysis.dihedrals.janin.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.results.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.results.angles"]], "plot() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.plot"]], "plot() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.plot"]], "run() (mdanalysis.analysis.dihedrals.dihedral method)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.run"]], "run() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.run"]], "run() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.run"]], "mdanalysis.analysis.distances": [[10, "module-MDAnalysis.analysis.distances"]], "between() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.between"]], "contact_matrix() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.contact_matrix"]], "dist() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.dist"]], "distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.distance_array"]], "self_distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.self_distance_array"]], "mdanalysis.analysis.encore.bootstrap": [[12, "module-MDAnalysis.analysis.encore.bootstrap"]], "bootstrapped_matrix() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.bootstrapped_matrix"]], "get_distance_matrix_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_distance_matrix_bootstrap_samples"]], "get_ensemble_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_ensemble_bootstrap_samples"]], "affinitypropagation (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagation"]], "affinitypropagation() (in module mdanalysis.analysis.encore.clustering.affinityprop)": [[13, "MDAnalysis.analysis.encore.clustering.affinityprop.AffinityPropagation"]], "affinitypropagationnative (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative"]], "cluster (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster"]], "clustercollection (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection"]], "clusteringmethod (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.ClusteringMethod"]], "dbscan (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.DBSCAN"]], "kmeans (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans"]], "mdanalysis.analysis.encore.clustering.clustercollection": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"]], "mdanalysis.analysis.encore.clustering.clusteringmethod": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"]], "mdanalysis.analysis.encore.clustering.affinityprop": [[13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"]], "mdanalysis.analysis.encore.clustering.cluster": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "accepts_distance_matrix (mdanalysis.analysis.encore.clustering.clusteringmethod.kmeans attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans.accepts_distance_matrix"]], "centroid (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.centroid"]], "cluster() (in module mdanalysis.analysis.encore.clustering.cluster)": [[13, "MDAnalysis.analysis.encore.clustering.cluster.cluster"]], "clusters (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.clusters"]], "elements (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.elements"]], "encode_centroid_info() (in module mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.encode_centroid_info"]], "get_centroids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_centroids"]], "get_ids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_ids"]], "id (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.id"]], "metadata (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.metadata"]], "size (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.size"]], "mdanalysis.analysis.encore.confdistmatrix": [[14, "module-MDAnalysis.analysis.encore.confdistmatrix"]], "conformational_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.conformational_distance_matrix"]], "get_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.get_distance_matrix"]], "set_rmsd_matrix_elements() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.set_rmsd_matrix_elements"]], "mdanalysis.analysis.encore.covariance": [[15, "module-MDAnalysis.analysis.encore.covariance"]], "covariance_matrix() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.covariance_matrix"]], "ml_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.ml_covariance_estimator"]], "shrinkage_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.shrinkage_covariance_estimator"]], "dimensionalityreductionmethod (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"]], "principalcomponentanalysis (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.PrincipalComponentAnalysis"]], "stochasticproximityembedding() (in module mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed.StochasticProximityEmbedding"]], "stochasticproximityembeddingnative (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative"]], "reduce_dimensionality() (in module mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality.reduce_dimensionality"]], "mdanalysis.analysis.encore.similarity": [[17, "module-MDAnalysis.analysis.encore.similarity"]], "ces() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces"]], "ces_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces_convergence"]], "clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.clustering_ensemble_similarity"]], "cumulative_clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_clustering_ensemble_similarity"]], "cumulative_gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_gen_kde_pdfs"]], "dimred_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dimred_ensemble_similarity"]], "discrete_jensen_shannon_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_jensen_shannon_divergence"]], "discrete_kullback_leibler_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_kullback_leibler_divergence"]], "dres() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres"]], "dres_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres_convergence"]], "gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.gen_kde_pdfs"]], "harmonic_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.harmonic_ensemble_similarity"]], "hes() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.hes"]], "prepare_ensembles_for_convergence_increasing_window() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.prepare_ensembles_for_convergence_increasing_window"]], "write_output() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.write_output"]], "mdanalysis.analysis.encore.utils": [[18, "module-MDAnalysis.analysis.encore.utils"]], "parallelcalculation (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation"]], "purermsd() (in module mdanalysis.analysis.encore.cutils)": [[18, "MDAnalysis.analysis.encore.cutils.PureRMSD"]], "triangularmatrix (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix"]], "args (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.args"]], "as_array() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.as_array"]], "function (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.function"]], "kwargs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.kwargs"]], "loadz() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.loadz"]], "merge_universes() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.merge_universes"]], "n_jobs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.n_jobs"]], "nruns (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.nruns"]], "run() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.run"]], "savez() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.savez"]], "trm_indices() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices"]], "trm_indices_diag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_diag"]], "trm_indices_nodiag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_nodiag"]], "worker() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.worker"]], "gnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis"]], "mdanalysis.analysis.gnm": [[19, "module-MDAnalysis.analysis.gnm"]], "closecontactgnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis"]], "eigenvalues (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvalues"]], "eigenvalues (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvalues"]], "eigenvectors (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvectors"]], "eigenvectors (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvectors"]], "generate_grid() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.generate_grid"]], "generate_kirchoff() (mdanalysis.analysis.gnm.gnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.generate_kirchoff"]], "generate_kirchoff() (mdanalysis.analysis.gnm.closecontactgnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.generate_kirchoff"]], "order_list() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.order_list"]], "times (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.times"]], "times (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.times"]], "hydrogenbondautocorrel (class in mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel"]], "mdanalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"]], "find_hydrogen_donors() (in module mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.find_hydrogen_donors"]], "run() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.run"]], "solve() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.solve"]], "mdanalysis.analysis.hbonds.hbond_autocorrel": [[21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"]], "mdanalysis.analysis.helix_analysis": [[22, "module-MDAnalysis.analysis.helix_analysis"]], "holeanalysis (class in mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis"]], "mdanalysis.analysis.hole2": [[23, "module-MDAnalysis.analysis.hole2"]], "mdanalysis.analysis.hole2.templates": [[23, "module-MDAnalysis.analysis.hole2.templates"]], "mdanalysis.analysis.hole2.utils": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "path": [[23, "index-0"], [23, "index-1"], [109, "index-0"]], "simple2_rad (in module mdanalysis.analysis.hole2.templates)": [[23, "MDAnalysis.analysis.hole2.templates.SIMPLE2_RAD"]], "bin_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.bin_radii"]], "check_and_fix_long_filename() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.check_and_fix_long_filename"]], "collect_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.collect_hole"]], "create_vmd_surface() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.create_vmd_surface"]], "create_vmd_surface() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.create_vmd_surface"]], "delete_temporary_files() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.delete_temporary_files"]], "environment variable": [[23, "index-0"], [23, "index-1"], [68, "index-0"], [68, "index-1"], [109, "index-0"], [109, "index-1"], [112, "index-0"], [152, "index-0"]], "gather() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.gather"]], "guess_cpoint() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.guess_cpoint"]], "histogram_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.histogram_radii"]], "hole() (in module mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.hole"]], "min_radius() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.min_radius"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.outfiles"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.outfiles"]], "over_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.over_order_parameters"]], "plot() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot"]], "plot3d() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D"]], "plot3d_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D_order_parameters"]], "plot_mean_profile() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_mean_profile"]], "plot_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_order_parameters"]], "profiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.profiles"]], "profiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.profiles"]], "run() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.run"]], "run_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.run_hole"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.sphpdbs"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.sphpdbs"]], "write_simplerad2() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.write_simplerad2"]], "hydrogenbondanalysis (class in mdanalysis.analysis.hydrogenbonds.hbond_analysis)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis"]], "mdanalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"]], "count_by_ids() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_ids"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_type"]], "guess_acceptors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_acceptors"]], "guess_donors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_donors"]], "guess_hydrogens() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_hydrogens"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.hbonds"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis.results attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results.hbonds"]], "lifetime() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.lifetime"]], "leafletfinder (class in mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder"]], "mdanalysis.analysis.leaflet": [[25, "module-MDAnalysis.analysis.leaflet"]], "group() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.group"]], "groups() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups"]], "groups_iter() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups_iter"]], "optimize_cutoff() (in module mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.optimize_cutoff"]], "sizes() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.sizes"]], "update() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.update"]], "write_selection() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.write_selection"]], "applicationerror": [[26, "MDAnalysis.analysis.legacy.x3dna.ApplicationError"], [94, "MDAnalysis.exceptions.ApplicationError"]], "mdanalysis.analysis.legacy.x3dna": [[26, "module-MDAnalysis.analysis.legacy.x3dna"]], "x3dna (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA"]], "x3dnatraj (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj"]], "collect() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.collect"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean_std"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean_std"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.plot"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.plot"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dna attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.profiles"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dnatraj attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.profiles"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.run"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run"]], "run_x3dna() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run_x3dna"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.save"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.save"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.sorted_profiles_iter"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.sorted_profiles_iter"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.std"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.std"]], "lineardensity (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity"]], "mdanalysis.analysis.lineardensity": [[28, "module-MDAnalysis.analysis.lineardensity"]], "note (mdanalysis.analysis.lineardensity.lineardensity attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.Note"]], "results (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.Results"]], "char (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char"]], "char_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char_std"]], "charge_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density"]], "charge_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density_stddev"]], "dim (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.dim"]], "hist_bin_edges (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.hist_bin_edges"]], "mass_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density"]], "mass_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density_stddev"]], "pos (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos"]], "pos_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos_std"]], "slice_volume (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.slice_volume"]], "einsteinmsd (class in mdanalysis.analysis.msd)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD"]], "mdanalysis.analysis.msd": [[29, "module-MDAnalysis.analysis.msd"]], "ag (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.ag"]], "dim_fac (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.dim_fac"]], "msds_by_particle (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.msds_by_particle"]], "n_frames (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_frames"]], "n_particles (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_particles"]], "run() (mdanalysis.analysis.msd.einsteinmsd method)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.run"]], "timeseries (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.timeseries"]], "mdanalysis.analysis.nucleicacids": [[30, "module-MDAnalysis.analysis.nucleicacids"]], "nucpairdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist"]], "watsoncrickdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist"]], "pair_distances (mdanalysis.analysis.nucleicacids.nucpairdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.results.pair_distances"]], "pair_distances (mdanalysis.analysis.nucleicacids.watsoncrickdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results.pair_distances"]], "run() (mdanalysis.analysis.nucleicacids.nucpairdist method)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.run"]], "run() (mdanalysis.analysis.nucleicacids.watsoncrickdist method)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.run"]], "times (mdanalysis.analysis.nucleicacids.nucpairdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.times"]], "times (mdanalysis.analysis.nucleicacids.watsoncrickdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.times"]], "mdanalysis.analysis.nuclinfo": [[31, "module-MDAnalysis.analysis.nuclinfo"]], "hydroxyl() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.hydroxyl"]], "major_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.major_pair"]], "minor_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.minor_pair"]], "phase_as() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_as"]], "phase_cp() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_cp"]], "pseudo_dihe_baseflip() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.pseudo_dihe_baseflip"]], "tors() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors"]], "tors_alpha() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_alpha"]], "tors_beta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_beta"]], "tors_chi() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_chi"]], "tors_delta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_delta"]], "tors_eps() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_eps"]], "tors_gamma() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_gamma"]], "tors_zeta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_zeta"]], "wc_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.wc_pair"]], "mdanalysis.analysis.pca": [[32, "module-MDAnalysis.analysis.pca"]], "pca (class in mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.PCA"]], "cosine_content() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cosine_content"]], "cumulated_variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.cumulated_variance"]], "cumulated_variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.cumulated_variance"]], "cumulative_overlap() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.cumulative_overlap"]], "cumulative_overlap() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cumulative_overlap"]], "p_components (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.p_components"]], "p_components (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.p_components"]], "project_single_frame() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.project_single_frame"]], "rmsip() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.rmsip"]], "rmsip() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.rmsip"]], "run() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.run"]], "transform() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.transform"]], "variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.variance"]], "variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.variance"]], "mdanalysis.analysis.polymer": [[33, "module-MDAnalysis.analysis.polymer"]], "persistencelength (class in mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength"]], "bond_autocorrelation (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.bond_autocorrelation"]], "fit (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.fit"]], "fit (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.fit"]], "fit_exponential_decay() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.fit_exponential_decay"]], "lb (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lb"]], "lb (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lb"]], "lp (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lp"]], "lp (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lp"]], "plot() (mdanalysis.analysis.polymer.persistencelength method)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.plot"]], "sort_backbone() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.sort_backbone"]], "x (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.x"]], "d (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.D"]], "mdanalysis.analysis.psa": [[34, "module-MDAnalysis.analysis.psa"]], "psapair (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAPair"]], "psanalysis (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAnalysis"]], "path (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.Path"]], "cluster() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.cluster"]], "discrete_frechet() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.discrete_frechet"]], "dist_mat_to_vec() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.dist_mat_to_vec"]], "fit_to_reference() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.fit_to_reference"]], "generate_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.generate_paths"]], "get_coord_axes() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_coord_axes"]], "get_msd_matrix() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_msd_matrix"]], "get_num_atoms() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_atoms"]], "get_num_atoms() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.get_num_atoms"]], "get_num_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_paths"]], "get_pairwise_distances() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_pairwise_distances"]], "get_path_metric_func() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_path_metric_func"]], "get_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_paths"]], "hausdorff() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff"]], "hausdorff_avg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_avg"]], "hausdorff_neighbors() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_neighbors"]], "hausdorff_pair (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.hausdorff_pair"]], "hausdorff_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.hausdorff_pairs"]], "hausdorff_wavg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_wavg"]], "load() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.load"]], "matrix_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.matrix_id"]], "nearest_neighbors (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.nearest_neighbors"]], "nearest_neighbors (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.nearest_neighbors"]], "npaths (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.npaths"]], "pair_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.pair_id"]], "path (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path"]], "path_select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.path_select"]], "path_select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path_select"]], "paths (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.paths"]], "plot() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot"]], "plot_annotated_heatmap() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_annotated_heatmap"]], "plot_nearest_neighbors() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_nearest_neighbors"]], "psa_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.psa_pairs"]], "ref_frame (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.ref_frame"]], "ref_frame (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.ref_frame"]], "run() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run"]], "run() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.run"]], "run_pairs_analysis() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run_pairs_analysis"]], "save_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.save_paths"]], "select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.select"]], "select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.select"]], "sqnorm() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.sqnorm"]], "to_path() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.to_path"]], "u_fitted (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_fitted"]], "u_original (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_original"]], "u_reference (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.u_reference"]], "u_reference (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_reference"]], "universes (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.universes"]], "interrdf (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF"]], "interrdf_s (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s"]], "mdanalysis.analysis.rdf": [[35, "module-MDAnalysis.analysis.rdf"]], "bins (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.bins"]], "bins (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.bins"]], "cdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.cdf"]], "cdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.cdf"]], "count (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.count"]], "count (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.count"]], "count (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.count"]], "count (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.count"]], "edges (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.edges"]], "edges (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.edges"]], "get_cdf() (mdanalysis.analysis.rdf.interrdf_s method)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.get_cdf"]], "rdf (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.rdf"]], "mdanalysis.analysis.rms": [[36, "module-MDAnalysis.analysis.rms"]], "rmsd (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSD"]], "rmsf (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSF"]], "rmsd (mdanalysis.analysis.rms.rmsd attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.rmsd"]], "rmsd (mdanalysis.analysis.rms.rmsd.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.results.rmsd"]], "rmsd() (in module mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.rmsd"]], "rmsf (mdanalysis.analysis.rms.rmsf attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.rmsf"]], "rmsf (mdanalysis.analysis.rms.rmsf.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.results.rmsf"]], "run() (mdanalysis.analysis.rms.rmsd method)": [[36, "MDAnalysis.analysis.rms.RMSD.run"]], "run() (mdanalysis.analysis.rms.rmsf method)": [[36, "MDAnalysis.analysis.rms.RMSF.run"]], "angulardistribution (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution"]], "mdanalysis.analysis.waterdynamics": [[37, "module-MDAnalysis.analysis.waterdynamics"]], "meansquaredisplacement (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement"]], "survivalprobability (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability"]], "waterorientationalrelaxation (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation"]], "lg2() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation static method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.lg2"]], "run() (mdanalysis.analysis.waterdynamics.angulardistribution method)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution.run"]], "run() (mdanalysis.analysis.waterdynamics.meansquaredisplacement method)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement.run"]], "run() (mdanalysis.analysis.waterdynamics.survivalprobability method)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability.run"]], "run() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.run"]], "default_acceptors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_ACCEPTORS"]], "default_donors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_DONORS"]], "mdanalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"]], "waterbridgeanalysis (class in mdanalysis.analysis.hydrogenbonds.wbridge_analysis)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_type"]], "generate_table() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.generate_table"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.network"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.network"]], "r_cov (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.r_cov"]], "table (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.table"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timeseries"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.timeseries"]], "timesteps (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps"]], "timesteps_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps_by_type"]], "edrreader (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader"]], "edrstep (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRStep"]], "mdanalysis.auxiliary.edr": [[40, "module-MDAnalysis.auxiliary.EDR"]], "_auxdata (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._auxdata"]], "_n_steps (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._n_steps"]], "data_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.data_dict"]], "get_data() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.get_data"]], "read_all_times() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.read_all_times"]], "terms (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.terms"]], "unit_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.unit_dict"]], "mdanalysis.auxiliary.xvg": [[41, "module-MDAnalysis.auxiliary.XVG"]], "xvgfilereader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader"]], "xvgreader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader"]], "xvgstep (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGStep"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgfilereader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader.read_all_times"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgreader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader.read_all_times"]], "uncomment() (in module mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.uncomment"]], "auxfilereader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader"]], "auxreader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxReader"]], "auxstep (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxStep"]], "mdanalysis.auxiliary.base": [[42, "module-MDAnalysis.auxiliary.base"]], "attach_auxiliary() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.attach_auxiliary"]], "auxfile (mdanalysis.auxiliary.base.auxfilereader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.auxfile"]], "auxstep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.auxstep"]], "calc_representative() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.calc_representative"]], "close() (mdanalysis.auxiliary.base.auxfilereader method)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.close"]], "constant_dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.constant_dt"]], "copy() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.copy"]], "data (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.data"]], "data_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.data_selector"]], "dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.dt"]], "frame_data (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_data"]], "frame_rep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_rep"]], "get_description() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.get_description"]], "initial_time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.initial_time"]], "move_to_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.move_to_ts"]], "n_steps (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.n_steps"]], "next() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next"]], "next_nonempty_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next_nonempty_frame"]], "read_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.read_ts"]], "represent_ts_as (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.represent_ts_as"]], "rewind() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.rewind"]], "step (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step"]], "step (mdanalysis.auxiliary.base.auxstep attribute)": [[42, "MDAnalysis.auxiliary.base.AuxStep.step"]], "step_to_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_frame"]], "step_to_time() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_time"]], "time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time"]], "time (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.time"]], "time_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time_selector"]], "update_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.update_ts"]], "mdanalysis.auxiliary.core": [[43, "module-MDAnalysis.auxiliary.core"]], "auxreader() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.auxreader"]], "get_auxreader_for() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.get_auxreader_for"]], "mdanalysis.auxiliary.__init__": [[44, "module-MDAnalysis.auxiliary.__init__"]], "mdanalysis.converters": [[46, "module-MDAnalysis.converters"]], "mdanalysis.converters.openmm": [[47, "module-MDAnalysis.converters.OpenMM"]], "mdanalysis.converters.openmmparser": [[47, "module-MDAnalysis.converters.OpenMMParser"]], "openmmappreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader"]], "openmmapptopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser"]], "openmmsimulationreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader"]], "openmmtopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser"]], "close() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.close"]], "close() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.close"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_to_native"]], "units (mdanalysis.converters.openmm.openmmappreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader.units"]], "units (mdanalysis.converters.openmm.openmmsimulationreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader.units"]], "units (mdanalysis.converters.openmmparser.openmmapptopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.units"]], "units (mdanalysis.converters.openmmparser.openmmtopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.units"]], "mdanalysis.converters.parmed": [[48, "module-MDAnalysis.converters.ParmEd"]], "mdanalysis.converters.parmedparser": [[48, "module-MDAnalysis.converters.ParmEdParser"]], "parmedconverter (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter"]], "parmedparser (class in mdanalysis.converters.parmedparser)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser"]], "parmedreader (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader"]], "close() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.close"]], "convert() (mdanalysis.converters.parmed.parmedconverter method)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.parse"]], "units (mdanalysis.converters.parmed.parmedconverter attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.units"]], "units (mdanalysis.converters.parmed.parmedreader attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader.units"]], "units (mdanalysis.converters.parmedparser.parmedparser attribute)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.units"]], "mdanalysis.converters.rdkit": [[49, "module-MDAnalysis.converters.RDKit"]], "mdanalysis.converters.rdkitparser": [[49, "module-MDAnalysis.converters.RDKitParser"]], "rdkitconverter (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter"]], "rdkitparser (class in mdanalysis.converters.rdkitparser)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser"]], "rdkitreader (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitReader"]], "_infer_bo_and_charges() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._infer_bo_and_charges"]], "_rebuild_conjugated_bonds() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._rebuild_conjugated_bonds"]], "_standardize_patterns() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._standardize_patterns"]], "close() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.close"]], "convert() (mdanalysis.converters.rdkit.rdkitconverter method)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.parse"]], "units (mdanalysis.converters.rdkit.rdkitconverter attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.units"]], "units (mdanalysis.converters.rdkit.rdkitreader attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitReader.units"]], "units (mdanalysis.converters.rdkitparser.rdkitparser attribute)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.units"]], "crdreader (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDReader"]], "crdwriter (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter"]], "mdanalysis.coordinates.crd": [[50, "module-MDAnalysis.coordinates.CRD"]], "writer() (mdanalysis.coordinates.crd.crdreader method)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.Writer"]], "units (mdanalysis.coordinates.crd.crdreader attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.units"]], "units (mdanalysis.coordinates.crd.crdwriter attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.units"]], "write() (mdanalysis.coordinates.crd.crdwriter method)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.write"]], "dcdreader (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter"]], "mdanalysis.coordinates.dcd": [[51, "module-MDAnalysis.coordinates.DCD"]], "otherwriter() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.close"]], "close() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.copy"]], "dimensions (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dt"]], "frame (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next"]], "next_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.dcd.dcdreader static method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.time"]], "timeseries() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.timeseries"]], "totaltime (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.totaltime"]], "transformations (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.transformations"]], "units (mdanalysis.coordinates.dcd.dcdreader attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.units"]], "units (mdanalysis.coordinates.dcd.dcdwriter attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.units"]], "write() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.write"]], "configreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader"]], "historyreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader"]], "mdanalysis.coordinates.dlpoly": [[52, "module-MDAnalysis.coordinates.DLPoly"]], "close() (mdanalysis.coordinates.dlpoly.historyreader method)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.close"]], "units (mdanalysis.coordinates.dlpoly.configreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader.units"]], "units (mdanalysis.coordinates.dlpoly.historyreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.units"]], "dmsreader (class in mdanalysis.coordinates.dms)": [[53, "MDAnalysis.coordinates.DMS.DMSReader"]], "mdanalysis.coordinates.dms": [[53, "module-MDAnalysis.coordinates.DMS"]], "units (mdanalysis.coordinates.dms.dmsreader attribute)": [[53, "MDAnalysis.coordinates.DMS.DMSReader.units"]], "fhiaimsreader (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader"]], "fhiaimswriter (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter"]], "mdanalysis.coordinates.fhiaims": [[54, "module-MDAnalysis.coordinates.FHIAIMS"]], "otherwriter() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.OtherWriter"]], "writer() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_transformations"]], "aux_list (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.check_slice_indices"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.close"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.copy"]], "dt (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.dt"]], "fmt (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.fmt"]], "frame (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next"]], "next_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.fhiaims.fhiaimsreader class method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rename_aux"]], "rewind() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.set_aux_attribute"]], "time (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.time"]], "timeseries() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.timeseries"]], "totaltime (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.totaltime"]], "transformations (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.transformations"]], "units (mdanalysis.coordinates.fhiaims.fhiaimsreader attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.units"]], "units (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.units"]], "write() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.write"]], "gmsreader (class in mdanalysis.coordinates.gms)": [[55, "MDAnalysis.coordinates.GMS.GMSReader"]], "mdanalysis.coordinates.gms": [[55, "module-MDAnalysis.coordinates.GMS"]], "close() (mdanalysis.coordinates.gms.gmsreader method)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.close"]], "n_atoms (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.n_atoms"]], "runtyp (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.runtyp"]], "units (mdanalysis.coordinates.gms.gmsreader attribute)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.units"]], "groreader (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROReader"]], "growriter (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROWriter"]], "mdanalysis.coordinates.gro": [[56, "module-MDAnalysis.coordinates.GRO"]], "writer() (mdanalysis.coordinates.gro.groreader method)": [[56, "MDAnalysis.coordinates.GRO.GROReader.Writer"]], "fmt (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.fmt"]], "units (mdanalysis.coordinates.gro.groreader attribute)": [[56, "MDAnalysis.coordinates.GRO.GROReader.units"]], "units (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.units"]], "write() (mdanalysis.coordinates.gro.growriter method)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.write"]], "gsdpicklable (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDPicklable"]], "gsdreader (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDReader"]], "mdanalysis.coordinates.gsd": [[57, "module-MDAnalysis.coordinates.GSD"]], "otherwriter() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.copy"]], "dt (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.dt"]], "frame (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_descriptions"]], "gsd_pickle_open() (in module mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.gsd_pickle_open"]], "iter_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.n_frames"]], "next() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next"]], "next_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.gsd.gsdreader class method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.time"]], "timeseries() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.timeseries"]], "totaltime (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.totaltime"]], "transformations (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.transformations"]], "units (mdanalysis.coordinates.gsd.gsdreader attribute)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.units"]], "h5mdreader (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader"]], "h5mdwriter (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter"]], "h5md_version (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.H5MD_VERSION"]], "h5pypicklable (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5PYPicklable"]], "mdanalysis.coordinates.h5md": [[58, "module-MDAnalysis.coordinates.H5MD"]], "otherwriter() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.Writer"]], "_reopen() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader._reopen"]], "add_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.close"]], "close() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.copy"]], "data_blacklist (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.data_blacklist"]], "dt (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.dt"]], "frame (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_descriptions"]], "has_forces (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_forces"]], "has_forces (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_forces"]], "has_positions (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_positions"]], "has_positions (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_positions"]], "has_valid_coordinates() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_valid_coordinates"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_velocities"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_velocities"]], "iter_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.n_frames"]], "next() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next"]], "next_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.h5md.h5mdreader static method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.time"]], "timeseries() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.timeseries"]], "totaltime (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.totaltime"]], "transformations (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.transformations"]], "units (mdanalysis.coordinates.h5md.h5mdreader attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.units"]], "units (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.units"]], "write() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.write"]], "inpreader (class in mdanalysis.coordinates.inpcrd)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader"]], "mdanalysis.coordinates.inpcrd": [[59, "module-MDAnalysis.coordinates.INPCRD"]], "parse_n_atoms() (mdanalysis.coordinates.inpcrd.inpreader static method)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.parse_n_atoms"]], "units (mdanalysis.coordinates.inpcrd.inpreader attribute)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.units"]], "datareader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader"]], "datawriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter"]], "dcdreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter"]], "dumpreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader"]], "mdanalysis.coordinates.lammps": [[60, "module-MDAnalysis.coordinates.LAMMPS"]], "otherwriter() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.OtherWriter"]], "writer() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_transformations"]], "aux_list (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.check_slice_indices"]], "close() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.close"]], "close() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.close"]], "close() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.close"]], "close() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.close"]], "close() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_dimensions_to_unitcell"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.copy"]], "dimensions (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.dt"]], "dt (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dt"]], "dt (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.dt"]], "frame (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.frame"]], "frame (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.frame"]], "frame (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.has_valid_coordinates"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next"]], "next() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next"]], "next() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next"]], "next_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.datareader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dcdreader static method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dumpreader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rename_aux"]], "rewind() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.set_aux_attribute"]], "time (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.time"]], "time (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.time"]], "time (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.time"]], "timeseries() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.timeseries"]], "totaltime (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.totaltime"]], "transformations (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.transformations"]], "units (mdanalysis.coordinates.lammps.datareader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.units"]], "units (mdanalysis.coordinates.lammps.datawriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.units"]], "units (mdanalysis.coordinates.lammps.dcdreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.units"]], "units (mdanalysis.coordinates.lammps.dcdwriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.units"]], "units (mdanalysis.coordinates.lammps.dumpreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.units"]], "write() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.write"]], "write() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.write"]], "mdanalysis.coordinates.mmtf": [[61, "module-MDAnalysis.coordinates.MMTF"]], "mmtfreader (class in mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.MMTFReader"]], "fetch_mmtf() (in module mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.fetch_mmtf"]], "mdanalysis.coordinates.mol2": [[62, "module-MDAnalysis.coordinates.MOL2"]], "mol2reader (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader"]], "mol2writer (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer"]], "close() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.close"]], "encode_block() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.encode_block"]], "units (mdanalysis.coordinates.mol2.mol2reader attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader.units"]], "units (mdanalysis.coordinates.mol2.mol2writer attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.units"]], "mdanalysis.coordinates.namdbin": [[63, "module-MDAnalysis.coordinates.NAMDBIN"]], "namdbinreader (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader"]], "namdbinwriter (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter"]], "writer() (mdanalysis.coordinates.namdbin.namdbinreader method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.Writer"]], "parse_n_atoms() (mdanalysis.coordinates.namdbin.namdbinreader static method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.parse_n_atoms"]], "units (mdanalysis.coordinates.namdbin.namdbinreader attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.units"]], "units (mdanalysis.coordinates.namdbin.namdbinwriter attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter.units"]], "conect() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CONECT"]], "cryst1() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CRYST1"]], "end() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.END"]], "endmdl() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.ENDMDL"]], "extendedpdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader"]], "header() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.HEADER"]], "mdanalysis.coordinates.pdb": [[64, "module-MDAnalysis.coordinates.PDB"]], "model() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.MODEL"]], "multipdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.MultiPDBWriter"]], "otherwriter() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.OtherWriter"]], "pdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBReader"]], "pdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter"]], "remark() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.REMARK"]], "title() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.TITLE"]], "writer() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.Writer"]], "writer() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.Writer"]], "_check_pdb_coordinates() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._check_pdb_coordinates"]], "_update_frame() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._update_frame"]], "_write_pdb_bonds() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_pdb_bonds"]], "_write_timestep() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_timestep"]], "add_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_transformations"]], "aux_list (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.check_slice_indices"]], "close() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.close"]], "convert_forces_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.copy"]], "dt (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.dt"]], "frame (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next"]], "next_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.pdb.extendedpdbreader class method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rename_aux"]], "rewind() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.set_aux_attribute"]], "time (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.time"]], "timeseries() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.timeseries"]], "totaltime (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.totaltime"]], "transformations (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.transformations"]], "units (mdanalysis.coordinates.pdb.extendedpdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbwriter attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.units"]], "write() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write"]], "write_all_timesteps() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write_all_timesteps"]], "mdanalysis.coordinates.pdbqt": [[65, "module-MDAnalysis.coordinates.PDBQT"]], "pdbqtreader (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader"]], "pdbqtwriter (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter"]], "writer() (mdanalysis.coordinates.pdbqt.pdbqtreader method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.Writer"]], "close() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.close"]], "units (mdanalysis.coordinates.pdbqt.pdbqtreader attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.units"]], "units (mdanalysis.coordinates.pdbqt.pdbqtwriter attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.units"]], "write() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.write"]], "mdanalysis.coordinates.pqr": [[66, "module-MDAnalysis.coordinates.PQR"]], "pqrreader (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRReader"]], "pqrwriter (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter"]], "writer() (mdanalysis.coordinates.pqr.pqrreader method)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.Writer"]], "units (mdanalysis.coordinates.pqr.pqrreader attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.units"]], "units (mdanalysis.coordinates.pqr.pqrwriter attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.units"]], "write() (mdanalysis.coordinates.pqr.pqrwriter method)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.write"]], "mdanalysis.coordinates.tng": [[67, "module-MDAnalysis.coordinates.TNG"]], "tngreader (class in mdanalysis.coordinates.tng)": [[67, "MDAnalysis.coordinates.TNG.TNGReader"]], "writer() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.Writer"]], "additional_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.additional_blocks"]], "blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.blocks"]], "close() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.close"]], "n_frames (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.n_frames"]], "parse_n_atoms() (mdanalysis.coordinates.tng.tngreader static method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.parse_n_atoms"]], "special_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.special_blocks"]], "units (mdanalysis.coordinates.tng.tngreader attribute)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.units"]], "ld_library_path": [[68, "index-0"], [68, "index-1"]], "mdanalysis.coordinates.trj": [[68, "module-MDAnalysis.coordinates.TRJ"]], "ncdfpicklable (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFPicklable"]], "ncdfreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader"]], "ncdfwriter (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter"]], "trjreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader"]], "writer() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.Writer"]], "close() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.close"]], "close() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.close"]], "close() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.close"]], "is_periodic() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.is_periodic"]], "n_frames (mdanalysis.coordinates.trj.trjreader property)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.trj.ncdfreader static method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.parse_n_atoms"]], "units (mdanalysis.coordinates.trj.ncdfreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.units"]], "units (mdanalysis.coordinates.trj.ncdfwriter attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.units"]], "units (mdanalysis.coordinates.trj.trjreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.units"]], "mdanalysis.coordinates.trr": [[69, "module-MDAnalysis.coordinates.TRR"]], "otherwriter() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.OtherWriter"]], "trrreader (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRReader"]], "trrwriter (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter"]], "writer() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_transformations"]], "aux_list (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.check_slice_indices"]], "close() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.close"]], "close() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.copy"]], "dt (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.dt"]], "frame (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.n_frames"]], "next() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next"]], "next_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.trr.trrreader class method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rename_aux"]], "rewind() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.set_aux_attribute"]], "time (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.time"]], "timeseries() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.timeseries"]], "totaltime (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.totaltime"]], "transformations (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.transformations"]], "units (mdanalysis.coordinates.trr.trrreader attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.units"]], "units (mdanalysis.coordinates.trr.trrwriter attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.units"]], "write() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.write"]], "mdanalysis.coordinates.trz": [[70, "module-MDAnalysis.coordinates.TRZ"]], "trzreader (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader"]], "trzwriter (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter"]], "writer() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.Writer"]], "close() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.close"]], "close() (mdanalysis.coordinates.trz.trzwriter method)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.close"]], "delta (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.delta"]], "n_atoms (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_atoms"]], "n_frames (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.open_trajectory"]], "skip_timestep (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.skip_timestep"]], "ts (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.ts"]], "units (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.units"]], "units (mdanalysis.coordinates.trz.trzwriter attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.units"]], "mdanalysis.coordinates.txyz": [[71, "module-MDAnalysis.coordinates.TXYZ"]], "otherwriter() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.OtherWriter"]], "txyzreader (class in mdanalysis.coordinates.txyz)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader"]], "writer() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_transformations"]], "aux_list (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.check_slice_indices"]], "close() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.copy"]], "dt (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.dt"]], "frame (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_auxiliary"]], "n_atoms (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.n_atoms"]], "next() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next"]], "next_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.txyz.txyzreader class method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rename_aux"]], "rewind() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.set_aux_attribute"]], "time (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.time"]], "timeseries() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.timeseries"]], "totaltime (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.totaltime"]], "transformations (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.transformations"]], "units (mdanalysis.coordinates.txyz.txyzreader attribute)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.units"]], "mdanalysis.coordinates.xdr": [[72, "module-MDAnalysis.coordinates.XDR"]], "otherwriter() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.Writer"]], "xdrbasereader (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader"]], "xdrbasewriter (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter"]], "add_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.close"]], "close() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.copy"]], "dt (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.dt"]], "frame (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.n_frames"]], "next() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next"]], "next_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next_as_aux"]], "offsets_filename() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.offsets_filename"]], "parse_n_atoms() (mdanalysis.coordinates.xdr.xdrbasereader class method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.parse_n_atoms"]], "read_numpy_offsets() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.read_numpy_offsets"]], "remove_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.time"]], "timeseries() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.timeseries"]], "totaltime (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.totaltime"]], "transformations (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.transformations"]], "units (mdanalysis.coordinates.xdr.xdrbasereader attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.units"]], "units (mdanalysis.coordinates.xdr.xdrbasewriter attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.units"]], "write() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.write"]], "mdanalysis.coordinates.xtc": [[73, "module-MDAnalysis.coordinates.XTC"]], "otherwriter() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.Writer"]], "xtcreader (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCReader"]], "xtcwriter (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter"]], "add_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.close"]], "close() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.copy"]], "dt (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.dt"]], "frame (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.n_frames"]], "next() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next"]], "next_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.xtc.xtcreader class method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.time"]], "timeseries() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.timeseries"]], "totaltime (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.totaltime"]], "transformations (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.transformations"]], "units (mdanalysis.coordinates.xtc.xtcreader attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.units"]], "units (mdanalysis.coordinates.xtc.xtcwriter attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.units"]], "write() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.write"]], "mdanalysis.coordinates.xyz": [[74, "module-MDAnalysis.coordinates.XYZ"]], "writer() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.Writer"]], "xyzreader (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader"]], "xyzwriter (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter"]], "close() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.close"]], "close() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.close"]], "n_atoms (mdanalysis.coordinates.xyz.xyzreader property)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.n_atoms"]], "units (mdanalysis.coordinates.xyz.xyzreader attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.units"]], "units (mdanalysis.coordinates.xyz.xyzwriter attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.units"]], "write() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.write"]], "converterbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ConverterBase"]], "frameiteratorall (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorAll"]], "frameiteratorbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorBase"]], "frameiteratorindices (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorIndices"]], "frameiteratorsliced (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorSliced"]], "iobase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.IOBase"]], "mdanalysis.coordinates.base": [[75, "module-MDAnalysis.coordinates.base"]], "otherwriter() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.OtherWriter"]], "protoreader (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ProtoReader"]], "readerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ReaderBase"]], "singleframereaderbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase"]], "writer() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.Writer"]], "writer() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.Writer"]], "writer() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.Writer"]], "writerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.WriterBase"]], "add_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_transformations"]], "aux_list (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.aux_list"]], "aux_list (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.aux_list"]], "aux_list (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.check_slice_indices"]], "close() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.close"]], "close() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.close"]], "close() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.close"]], "close() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.close"]], "close() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.copy"]], "copy() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.copy"]], "dt (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.dt"]], "dt (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.dt"]], "dt (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.dt"]], "frame (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.frame"]], "frame (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.frame"]], "frame (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.frame"]], "get_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_auxiliary"]], "next() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next"]], "next() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next"]], "next() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next"]], "next_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.base.protoreader class method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.readerbase class method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.singleframereaderbase class method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rename_aux"]], "rewind() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rewind"]], "rewind() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rewind"]], "rewind() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.set_aux_attribute"]], "time (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.time"]], "time (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.time"]], "time (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.time"]], "timeseries() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.timeseries"]], "timeseries() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.timeseries"]], "timeseries() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.timeseries"]], "totaltime (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.totaltime"]], "totaltime (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.totaltime"]], "totaltime (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.totaltime"]], "transformations (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.transformations"]], "transformations (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.transformations"]], "transformations (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.transformations"]], "units (mdanalysis.coordinates.base.converterbase attribute)": [[75, "MDAnalysis.coordinates.base.ConverterBase.units"]], "units (mdanalysis.coordinates.base.iobase attribute)": [[75, "MDAnalysis.coordinates.base.IOBase.units"]], "units (mdanalysis.coordinates.base.readerbase attribute)": [[75, "MDAnalysis.coordinates.base.ReaderBase.units"]], "units (mdanalysis.coordinates.base.singleframereaderbase attribute)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.units"]], "units (mdanalysis.coordinates.base.writerbase attribute)": [[75, "MDAnalysis.coordinates.base.WriterBase.units"]], "write() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.write"]], "chainreader (class in mdanalysis.coordinates.chain)": [[76, "MDAnalysis.coordinates.chain.ChainReader"]], "mdanalysis.coordinates.chain": [[76, "module-MDAnalysis.coordinates.chain"]], "_apply() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._apply"]], "_get() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get"]], "_get_local_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_local_frame"]], "_get_same() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_same"]], "_read_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._read_frame"]], "active_reader (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.active_reader"]], "close() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.close"]], "compressed (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.compressed"]], "convert_pos_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_to_native"]], "frame (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.frame"]], "periodic (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.periodic"]], "time (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.time"]], "units (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.units"]], "chemfilespicklable (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesPicklable"]], "chemfilesreader (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesReader"]], "chemfileswriter (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesWriter"]], "max_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MAX_CHEMFILES_VERSION"]], "mdanalysis.coordinates.chemfiles": [[77, "module-MDAnalysis.coordinates.chemfiles"]], "min_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MIN_CHEMFILES_VERSION"]], "check_chemfiles_version() (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.check_chemfiles_version"]], "mdanalysis.coordinates.core": [[78, "module-MDAnalysis.coordinates.core"]], "get_reader_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_reader_for"]], "get_writer_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_writer_for"]], "reader() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.reader"]], "writer() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.writer"]], "mdanalysis.coordinates.__init__": [[79, "module-MDAnalysis.coordinates.__init__"]], "mdanalysis.coordinates.memory": [[80, "module-MDAnalysis.coordinates.memory"]], "memoryreader (class in mdanalysis.coordinates.memory)": [[80, "MDAnalysis.coordinates.memory.MemoryReader"]], "otherwriter() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.OtherWriter"]], "writer() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_transformations"]], "aux_list (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.check_slice_indices"]], "close() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.copy"]], "dt (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.dt"]], "frame (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.frame"]], "get_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_array"]], "get_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next"]], "next_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.memory.memoryreader static method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rename_aux"]], "rewind() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rewind"]], "set_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_array"]], "set_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_aux_attribute"]], "time (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.time"]], "timeseries() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.timeseries"]], "totaltime (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.totaltime"]], "transformations (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.transformations"]], "units (mdanalysis.coordinates.memory.memoryreader attribute)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.units"]], "mdanalysis.coordinates.null": [[81, "module-MDAnalysis.coordinates.null"]], "nullwriter (class in mdanalysis.coordinates.null)": [[81, "MDAnalysis.coordinates.null.NullWriter"]], "units (mdanalysis.coordinates.null.nullwriter attribute)": [[81, "MDAnalysis.coordinates.null.NullWriter.units"]], "mdanalysis.coordinates.timestep": [[83, "module-MDAnalysis.coordinates.timestep"]], "timestep (class in mdanalysis.coordinates.timestep)": [[83, "MDAnalysis.coordinates.timestep.Timestep"]], "__eq__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__eq__"]], "__getitem__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__getitem__"]], "__init__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__init__"]], "__iter__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__iter__"]], "_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._forces"]], "_pos (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._pos"]], "_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._velocities"]], "copy() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy"]], "copy_slice() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy_slice"]], "data (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.data"]], "dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dimensions"]], "dt (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dt"]], "dtype (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dtype"]], "forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.forces"]], "frame (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.frame"]], "from_coordinates() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_coordinates"]], "from_timestep() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_timestep"]], "has_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_forces"]], "has_positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_positions"]], "has_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_velocities"]], "n_atoms (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.n_atoms"]], "positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.positions"]], "time (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.time"]], "triclinic_dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.triclinic_dimensions"]], "velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.velocities"]], "volume (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.volume"]], "accessor (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.Accessor"]], "converterwrapper (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.ConverterWrapper"]], "mdanalysis.core.accessors": [[85, "module-MDAnalysis.core.accessors"]], "atom (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Atom"]], "atomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.AtomGroup"]], "mdanalysis.core.groups": [[86, "module-MDAnalysis.core.groups"]], "residue (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Residue"]], "residuegroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.ResidueGroup"]], "segment (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Segment"]], "segmentgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.SegmentGroup"]], "updatingatomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup"]], "accumulate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.accumulate"]], "align_principal_axis() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.align_principal_axis"]], "angle (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.angle"]], "asphericity() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asphericity"]], "asunique() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asunique"]], "asunique() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asunique"]], "asunique() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asunique"]], "atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.atoms"]], "atoms (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.atoms"]], "atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.atoms"]], "atoms (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.atoms"]], "atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.atoms"]], "atoms (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.atoms"]], "bbox() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bbox"]], "bbox() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bbox"]], "bbox() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bbox"]], "bfactor (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bfactor"]], "bfactors (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bfactors"]], "bfactors (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.bfactors"]], "bfactors (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.bfactors"]], "bfactors (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.bfactors"]], "bfactors (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.bfactors"]], "bond (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bond"]], "bonded_atoms (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bonded_atoms"]], "bsphere() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bsphere"]], "center() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center"]], "center() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center"]], "center() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center"]], "center_of_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_charge"]], "center_of_geometry() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_geometry"]], "center_of_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_mass"]], "centroid() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.centroid"]], "centroid() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.centroid"]], "centroid() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.centroid"]], "chi1_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.chi1_selection"]], "chi1_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.chi1_selections"]], "cmap (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.cmap"]], "concatenate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.concatenate"]], "convert_to (mdanalysis.core.groups.atomgroup attribute)": [[86, "MDAnalysis.core.groups.AtomGroup.convert_to"]], "copy() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.copy"]], "copy() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.copy"]], "copy() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.copy"]], "copy() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.copy"]], "difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.difference"]], "difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.difference"]], "difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.difference"]], "dihedral (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dihedral"]], "dimensions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dimensions"]], "dimensions (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.dimensions"]], "dimensions (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.dimensions"]], "dipole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_moment"]], "dipole_vector() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_vector"]], "force (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.force"]], "forces (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.forces"]], "fragindex (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragindex"]], "fragindices (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragindices"]], "fragment (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragment"]], "fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragments"]], "get_connections() (mdanalysis.core.groups.atom method)": [[86, "MDAnalysis.core.groups.Atom.get_connections"]], "get_connections() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.get_connections"]], "get_connections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.segment method)": [[86, "MDAnalysis.core.groups.Segment.get_connections"]], "get_connections() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.get_connections"]], "groupby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.groupby"]], "groupby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.groupby"]], "groupby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.groupby"]], "guess_bonds() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.guess_bonds"]], "gyration_moments() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.gyration_moments"]], "improper (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.improper"]], "intersection() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.intersection"]], "intersection() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.intersection"]], "intersection() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.intersection"]], "is_strict_subset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_subset"]], "is_strict_superset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_superset"]], "is_uptodate (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.is_uptodate"]], "isdisjoint() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.isdisjoint"]], "issubset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issubset"]], "issubset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issubset"]], "issubset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issubset"]], "issuperset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issuperset"]], "isunique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.isunique"]], "isunique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.isunique"]], "isunique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.isunique"]], "ix (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix"]], "ix (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix"]], "ix (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix"]], "ix (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix"]], "ix (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix"]], "ix (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix"]], "ix_array (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix_array"]], "ix_array (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix_array"]], "ix_array (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix_array"]], "ix_array (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix_array"]], "ix_array (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix_array"]], "ix_array (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix_array"]], "moment_of_inertia() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.moment_of_inertia"]], "n_atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_atoms"]], "n_fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_fragments"]], "n_residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_residues"]], "n_residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_residues"]], "n_residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_residues"]], "n_segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_segments"]], "n_segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_segments"]], "n_segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_segments"]], "omega_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.omega_selection"]], "omega_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.omega_selections"]], "pack_into_box() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.pack_into_box"]], "phi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.phi_selection"]], "phi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.phi_selections"]], "position (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.position"]], "positions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.positions"]], "principal_axes() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.principal_axes"]], "psi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.psi_selection"]], "psi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.psi_selections"]], "quadrupole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.radius_of_gyration"]], "residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.residues"]], "residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.residues"]], "residues (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.residues"]], "residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.residues"]], "rotate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotate"]], "rotate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotate"]], "rotate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotate"]], "rotateby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotateby"]], "segment (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.segment"]], "segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.segments"]], "segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.segments"]], "segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.segments"]], "select_atoms() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.select_atoms"]], "sequence() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.sequence"]], "shape_parameter() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.shape_parameter"]], "sort() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.sort"]], "split() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.split"]], "subtract() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.subtract"]], "subtract() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.subtract"]], "subtract() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.subtract"]], "symmetric_difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.symmetric_difference"]], "total_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_charge"]], "total_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_mass"]], "transform() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.transform"]], "transform() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.transform"]], "transform() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.transform"]], "translate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.translate"]], "translate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.translate"]], "translate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.translate"]], "ts (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ts"]], "union() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.union"]], "union() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.union"]], "union() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.union"]], "unique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.unique"]], "unique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.unique"]], "unique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.unique"]], "universe (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.universe"]], "universe (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.universe"]], "universe (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.universe"]], "unwrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.unwrap"]], "update_selection() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.update_selection"]], "ureybradley (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ureybradley"]], "velocities (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.velocities"]], "velocity (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.velocity"]], "wrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.wrap"]], "wrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.wrap"]], "wrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.wrap"]], "write() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.write"]], "mdanalysis.core.__init__": [[87, "module-MDAnalysis.core.__init__"]], "aromaticselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.AromaticSelection"]], "backboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BackboneSelection"]], "baseselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BaseSelection"]], "boolselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BoolSelection"]], "bynumselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByNumSelection"]], "byresselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByResSelection"]], "float_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FLOAT_PATTERN"]], "floatrangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FloatRangeSelection"]], "int_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.INT_PATTERN"]], "mdanalysis.core.selection": [[88, "module-MDAnalysis.core.selection"]], "nucleicbackboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicBackboneSelection"]], "nucleicselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSelection"]], "nucleicsugarselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSugarSelection"]], "propertyselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.PropertySelection"]], "proteinselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ProteinSelection"]], "range_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RANGE_PATTERN"]], "rangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RangeSelection"]], "residselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ResidSelection"]], "sameselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SameSelection"]], "selectionparser (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SelectionParser"]], "singlecharselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SingleCharSelection"]], "smartsselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SmartsSelection"]], "dtype (mdanalysis.core.selection.floatrangeselection attribute)": [[88, "MDAnalysis.core.selection.FloatRangeSelection.dtype"]], "dtype (mdanalysis.core.selection.rangeselection attribute)": [[88, "MDAnalysis.core.selection.RangeSelection.dtype"]], "expect() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.expect"]], "gen_selection_class() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.gen_selection_class"]], "grab_not_keywords() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.grab_not_keywords"]], "is_keyword() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.is_keyword"]], "join_separated_values() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.join_separated_values"]], "parse() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.parse"]], "return_empty_on_apply() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.return_empty_on_apply"]], "mdanalysis.core.topology": [[89, "module-MDAnalysis.core.topology"]], "topology (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.Topology"]], "transtable (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.TransTable"]], "add_residue() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Residue"]], "add_segment() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Segment"]], "add_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_TopologyAttr"]], "atoms2residues() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2residues"]], "atoms2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2segments"]], "copy() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.copy"]], "copy() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.copy"]], "del_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.del_TopologyAttr"]], "guessed_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.guessed_attributes"]], "make_downshift_arrays() (in module mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.make_downshift_arrays"]], "move_atom() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_atom"]], "move_residue() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_residue"]], "n_atoms (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_atoms"]], "n_residues (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_residues"]], "n_segments (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_segments"]], "read_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.read_attributes"]], "residues2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_1d"]], "residues2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_2d"]], "residues2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2segments"]], "segments2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_1d"]], "segments2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_2d"]], "segments2residues_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_1d"]], "segments2residues_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_2d"]], "size (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.size"]], "altlocs (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AltLocs"]], "angles (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Angles"]], "aromaticities (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities"]], "atomattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr"]], "atomstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr"]], "atomids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomids"]], "atomindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomindices"]], "atomnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomnames"]], "atomtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes"]], "bonds (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Bonds"]], "cmaps (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.CMaps"]], "chainids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs"]], "charges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Charges"]], "dihedrals (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Dihedrals"]], "elements (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Elements"]], "epsilon14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s"]], "epsilons (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilons"]], "formalcharges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges"]], "gbscreens (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.GBScreens"]], "icodes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ICodes"]], "impropers (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Impropers"]], "mdanalysis.core.topologyattrs": [[90, "module-MDAnalysis.core.topologyattrs"]], "masses (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Masses"]], "molnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Molnums"]], "moltypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Moltypes"]], "nonbondedindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices"]], "occupancies (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Occupancies"]], "rmin14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMin14s"]], "rmins (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMins"]], "rschirality (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RSChirality"]], "radii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Radii"]], "recordtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes"]], "resids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resids"]], "residueattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr"]], "residuestringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr"]], "resindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resindices"]], "resnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnames"]], "resnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnums"]], "segids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segids"]], "segindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segindices"]], "segmentattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr"]], "segmentstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr"]], "solventradii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii"]], "tempfactors (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors"]], "topologyattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr"]], "ureybradleys (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.UreyBradleys"]], "align_principal_axis() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.align_principal_axis"]], "asphericity() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.asphericity"]], "attrname (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.attrname"]], "bfactor() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor"]], "bfactor_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor_setter"]], "bfactors() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors"]], "bfactors_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors_setter"]], "bonded_atoms() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.bonded_atoms"]], "center_of_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.center_of_charge"]], "center_of_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.center_of_mass"]], "chi1_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selection"]], "chi1_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selections"]], "copy() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.copy"]], "dipole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_moment"]], "dipole_vector() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_vector"]], "dtype (mdanalysis.core.topologyattrs.altlocs attribute)": [[90, "MDAnalysis.core.topologyattrs.AltLocs.dtype"]], "dtype (mdanalysis.core.topologyattrs.aromaticities attribute)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomids attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomids.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.chainids attribute)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs.dtype"]], "dtype (mdanalysis.core.topologyattrs.charges attribute)": [[90, "MDAnalysis.core.topologyattrs.Charges.dtype"]], "dtype (mdanalysis.core.topologyattrs.elements attribute)": [[90, "MDAnalysis.core.topologyattrs.Elements.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilon14s attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilons attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilons.dtype"]], "dtype (mdanalysis.core.topologyattrs.formalcharges attribute)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges.dtype"]], "dtype (mdanalysis.core.topologyattrs.gbscreens attribute)": [[90, "MDAnalysis.core.topologyattrs.GBScreens.dtype"]], "dtype (mdanalysis.core.topologyattrs.icodes attribute)": [[90, "MDAnalysis.core.topologyattrs.ICodes.dtype"]], "dtype (mdanalysis.core.topologyattrs.masses attribute)": [[90, "MDAnalysis.core.topologyattrs.Masses.dtype"]], "dtype (mdanalysis.core.topologyattrs.molnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Molnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.moltypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Moltypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.nonbondedindices attribute)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices.dtype"]], "dtype (mdanalysis.core.topologyattrs.occupancies attribute)": [[90, "MDAnalysis.core.topologyattrs.Occupancies.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmin14s attribute)": [[90, "MDAnalysis.core.topologyattrs.RMin14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmins attribute)": [[90, "MDAnalysis.core.topologyattrs.RMins.dtype"]], "dtype (mdanalysis.core.topologyattrs.radii attribute)": [[90, "MDAnalysis.core.topologyattrs.Radii.dtype"]], "dtype (mdanalysis.core.topologyattrs.recordtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.resids attribute)": [[90, "MDAnalysis.core.topologyattrs.Resids.dtype"]], "dtype (mdanalysis.core.topologyattrs.resindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Resindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.segids attribute)": [[90, "MDAnalysis.core.topologyattrs.Segids.dtype"]], "dtype (mdanalysis.core.topologyattrs.segindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Segindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.solventradii attribute)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii.dtype"]], "dtype (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.dtype"]], "dtype (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.dtype"]], "fragindex() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindex"]], "fragindices() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindices"]], "fragment() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragment"]], "fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragments"]], "from_blank() (mdanalysis.core.topologyattrs.topologyattr class method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.from_blank"]], "get_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_atoms"]], "get_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_residues"]], "get_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_segments"]], "group (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.group"]], "gyration_moments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.gyration_moments"]], "is_guessed (mdanalysis.core.topologyattrs.topologyattr property)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.is_guessed"]], "moment_of_inertia() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.moment_of_inertia"]], "n_fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.n_fragments"]], "omega_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selection"]], "omega_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selections"]], "per_object (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.per_object"]], "phi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selection"]], "phi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selections"]], "principal_axes() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.principal_axes"]], "psi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selection"]], "psi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selections"]], "quadrupole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.radius_of_gyration"]], "sequence() (mdanalysis.core.topologyattrs.resnames method)": [[90, "MDAnalysis.core.topologyattrs.Resnames.sequence"]], "set_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomstringattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_atoms"]], "set_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residuestringattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_residues"]], "set_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentstringattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_segments"]], "shape_parameter() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.shape_parameter"]], "singular (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.singular"]], "top (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.top"]], "total_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.total_charge"]], "total_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.total_mass"]], "angle (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Angle"]], "bond (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Bond"]], "cmap (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.CMap"]], "dihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Dihedral"]], "improperdihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral"]], "mdanalysis.core.topologyobjects": [[91, "module-MDAnalysis.core.topologyobjects"]], "topologydict (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict"]], "topologygroup (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup"]], "topologyobject (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject"]], "ureybradley (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley"]], "angle() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.angle"]], "angles() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.angles"]], "atom1 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom1"]], "atom2 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom2"]], "atom3 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom3"]], "atom4 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom4"]], "atomgroup_intersection() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atomgroup_intersection"]], "atoms (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.atoms"]], "bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.bonds"]], "dihedral() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.dihedral"]], "dihedrals() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dihedrals"]], "distance() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.distance"]], "dump_contents() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dump_contents"]], "improper() (mdanalysis.core.topologyobjects.improperdihedral method)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral.improper"]], "indices (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.indices"]], "indices (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.indices"]], "keys() (mdanalysis.core.topologyobjects.topologydict method)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict.keys"]], "length() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.length"]], "partner() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.partner"]], "partner() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.partner"]], "selectbonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.selectBonds"]], "select_bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.select_bonds"]], "to_indices() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.to_indices"]], "topdict (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.topDict"]], "type (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.type"]], "types() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.types"]], "universe (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.universe"]], "value() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.value"]], "value() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.value"]], "value() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.value"]], "value() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.value"]], "values() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.values"]], "mdanalysis.core.universe": [[92, "module-MDAnalysis.core.universe"]], "merge() (in module mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Merge"]], "universe (class in mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Universe"]], "add_residue() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Residue"]], "add_segment() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Segment"]], "add_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_TopologyAttr"]], "add_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_angles"]], "add_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_bonds"]], "add_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_dihedrals"]], "add_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_impropers"]], "angles (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.angles"]], "atoms (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.atoms"]], "bonds (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.bonds"]], "coord (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.coord"]], "copy() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.copy"]], "del_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.del_TopologyAttr"]], "delete_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_angles"]], "delete_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_bonds"]], "delete_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_dihedrals"]], "delete_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_impropers"]], "dihedrals (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dihedrals"]], "dimensions (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dimensions"]], "empty() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.empty"]], "from_smiles() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.from_smiles"]], "impropers (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.impropers"]], "kwargs (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.kwargs"]], "load_new() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.load_new"]], "models (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.models"]], "residues (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.residues"]], "segments (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.segments"]], "select_atoms() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.select_atoms"]], "trajectory (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.trajectory"]], "transfer_to_memory() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.transfer_to_memory"]], "conversionwarning": [[94, "MDAnalysis.exceptions.ConversionWarning"]], "duplicatewarning": [[94, "MDAnalysis.exceptions.DuplicateWarning"]], "fileformatwarning": [[94, "MDAnalysis.exceptions.FileFormatWarning"]], "mdanalysis.exceptions": [[94, "module-MDAnalysis.exceptions"]], "missingdatawarning": [[94, "MDAnalysis.exceptions.MissingDataWarning"]], "nodataerror": [[94, "MDAnalysis.exceptions.NoDataError"]], "selectionerror": [[94, "MDAnalysis.exceptions.SelectionError"]], "selectionwarning": [[94, "MDAnalysis.exceptions.SelectionWarning"]], "streamwarning": [[94, "MDAnalysis.exceptions.StreamWarning"]], "atomneighborsearch (class in mdanalysis.lib.neighborsearch)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch"]], "mdanalysis.lib.neighborsearch": [[95, "module-MDAnalysis.lib.NeighborSearch"]], "search() (mdanalysis.lib.neighborsearch.atomneighborsearch method)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch.search"]], "mdanalysis.lib.c_distances": [[96, "module-MDAnalysis.lib.c_distances"]], "mdanalysis.lib.c_distances_openmp": [[97, "module-MDAnalysis.lib.c_distances_openmp"]], "mdanalysis.lib.correlations": [[98, "module-MDAnalysis.lib.correlations"]], "autocorrelation() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.autocorrelation"]], "correct_intermittency() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.correct_intermittency"]], "mdanalysis.lib.distances": [[99, "module-MDAnalysis.lib.distances"]], "apply_pbc() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.apply_PBC"]], "augment_coordinates() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.augment_coordinates"]], "calc_angles() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_angles"]], "calc_bonds() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_bonds"]], "calc_dihedrals() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_dihedrals"]], "capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.capped_distance"]], "distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.distance_array"]], "minimize_vectors() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.minimize_vectors"]], "self_capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_capped_distance"]], "self_distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_distance_array"]], "transform_rtos() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_RtoS"]], "transform_stor() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_StoR"]], "undo_augment() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.undo_augment"]], "dcdfile (class in mdanalysis.lib.formats.libdcd)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile"]], "mdanalysis.lib.formats.libdcd": [[100, "module-MDAnalysis.lib.formats.libdcd"]], "charmm_bitfield (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.charmm_bitfield"]], "close() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.close"]], "header (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.header"]], "open() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.open"]], "read() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.read"]], "readframes() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.readframes"]], "seek() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.seek"]], "tell() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.tell"]], "write() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write"]], "write_header() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write_header"]], "mdanalysis.lib.formats.libmdaxdr": [[101, "module-MDAnalysis.lib.formats.libmdaxdr"]], "trrfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile"]], "xtcfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.calc_offsets"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.calc_offsets"]], "close() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.close"]], "close() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.close"]], "offsets (mdanalysis.lib.formats.libmdaxdr.trrfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.offsets"]], "offsets (mdanalysis.lib.formats.libmdaxdr.xtcfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.offsets"]], "open() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.open"]], "open() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.open"]], "read() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read"]], "read() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read"]], "read_direct_x() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read_direct_x"]], "read_direct_xvf() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read_direct_xvf"]], "seek() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.seek"]], "seek() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.seek"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.set_offsets"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.set_offsets"]], "tell() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.tell"]], "tell() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.tell"]], "write() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.write"]], "write() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.write"]], "mdanalysis.lib.log": [[102, "module-MDAnalysis.lib.log"]], "nullhandler (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.NullHandler"]], "progressbar (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.ProgressBar"]], "clear_handlers() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.clear_handlers"]], "create() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.create"]], "emit() (mdanalysis.lib.log.nullhandler method)": [[102, "MDAnalysis.lib.log.NullHandler.emit"]], "start_logging() (in module mdanalysis)": [[102, "MDAnalysis.start_logging"]], "start_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.start_logging"]], "stop_logging() (in module mdanalysis)": [[102, "MDAnalysis.stop_logging"]], "stop_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.stop_logging"]], "mdanalysis.lib.mdamath": [[103, "module-MDAnalysis.lib.mdamath"]], "angle() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.angle"]], "box_volume() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.box_volume"]], "dihedral() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.dihedral"]], "find_fragments() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.find_fragments"]], "make_whole() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.make_whole"]], "norm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.norm"]], "normal() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.normal"]], "pdot() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pdot"]], "pnorm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pnorm"]], "sarrus_det() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.sarrus_det"]], "stp() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.stp"]], "triclinic_box() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_box"]], "triclinic_vectors() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_vectors"]], "fastns (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.FastNS"]], "mdanalysis.lib.nsgrid": [[104, "module-MDAnalysis.lib.nsgrid"]], "nsresults (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.NSResults"]], "get_pair_distances() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pair_distances"]], "get_pairs() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pairs"]], "search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.search"]], "self_search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.self_search"]], "bz2picklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BZ2Picklable"]], "bufferiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BufferIOPicklable"]], "fileiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.FileIOPicklable"]], "gzippicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.GzipPicklable"]], "mdanalysis.lib.picklable_file_io": [[105, "module-MDAnalysis.lib.picklable_file_io"]], "textiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.TextIOPicklable"]], "bz2_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.bz2_pickle_open"]], "gzip_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.gzip_pickle_open"]], "pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.pickle_open"]], "mdanalysis.lib.pkdtree": [[106, "module-MDAnalysis.lib.pkdtree"]], "periodickdtree (class in mdanalysis.lib.pkdtree)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree"]], "get_indices() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.get_indices"]], "pbc (mdanalysis.lib.pkdtree.periodickdtree property)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.pbc"]], "search() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search"]], "search_pairs() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_pairs"]], "search_tree() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_tree"]], "set_coords() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.set_coords"]], "calcrmsdrotationalmatrix() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix"]], "fastcalcrmsdandrotation() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.FastCalcRMSDAndRotation"]], "innerproduct() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.InnerProduct"]], "mdanalysis.lib.qcprot": [[107, "module-MDAnalysis.lib.qcprot"]], "arcball (class in mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.Arcball"]], "mdanalysis.lib.transformations": [[108, "module-MDAnalysis.lib.transformations"]], "arcball_nearest_axis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.arcball_nearest_axis"]], "compose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.compose_matrix"]], "concatenate_matrices() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.concatenate_matrices"]], "decompose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.decompose_matrix"]], "down() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.down"]], "drag() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.drag"]], "euler_from_quaternion() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.euler_from_quaternion"]], "getconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.getconstrain"]], "matrix() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.matrix"]], "next() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.next"]], "place() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.place"]], "projection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.projection_from_matrix"]], "quaternion_imag() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_imag"]], "quaternion_real() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_real"]], "reflection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.reflection_from_matrix"]], "rotation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotation_from_matrix"]], "rotaxis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotaxis"]], "scale_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.scale_from_matrix"]], "setaxes() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setaxes"]], "setconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setconstrain"]], "shear_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.shear_from_matrix"]], "translation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.translation_from_matrix"]], "$home": [[109, "index-1"]], "fortranreader (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRANReader"]], "fortran_format_regex (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRAN_format_regex"]], "mdanalysis.lib.util": [[109, "module-MDAnalysis.lib.util"]], "namedstream (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.NamedStream"]], "namespace (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.Namespace"]], "_deprecate (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util._Deprecate"]], "anyopen() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.anyopen"]], "asiterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.asiterable"]], "blocks_of() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.blocks_of"]], "cached() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.cached"]], "check_atomgroup_not_empty() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_atomgroup_not_empty"]], "check_box() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_box"]], "check_compressed_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_compressed_format"]], "check_coords() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_coords"]], "close() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.close"]], "closed (mdanalysis.lib.util.namedstream property)": [[109, "MDAnalysis.lib.util.NamedStream.closed"]], "conv_float() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.conv_float"]], "convert_aa_code() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.convert_aa_code"]], "dedent_docstring() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.dedent_docstring"]], "deprecate() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.deprecate"]], "filename() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.filename"]], "fileno() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.fileno"]], "fixedwidth_bins() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.fixedwidth_bins"]], "flatten_dict() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.flatten_dict"]], "flush() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.flush"]], "format_from_filename_extension() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.format_from_filename_extension"]], "get_ext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_ext"]], "get_weights() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_weights"]], "greedy_splitext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.greedy_splitext"]], "group_same_or_consecutive_integers() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.group_same_or_consecutive_integers"]], "guess_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.guess_format"]], "hasmethod() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.hasmethod"]], "isstream() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.isstream"]], "iterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.iterable"]], "ltruncate_int() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.ltruncate_int"]], "number_of_matches() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.number_of_matches"]], "openany() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.openany"]], "parse_fortran_format() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.parse_FORTRAN_format"]], "parse_residue() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.parse_residue"]], "read() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.read"]], "readable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readable"]], "readline() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readline"]], "realpath() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.realpath"]], "reset() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.reset"]], "seek() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seek"]], "seekable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seekable"]], "static_variables() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.static_variables"]], "store_init_arguments() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.store_init_arguments"]], "tell() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.tell"]], "truncate() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.truncate"]], "unique_int_1d() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_int_1d"]], "unique_rows() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_rows"]], "warn_if_not_unique() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.warn_if_not_unique"]], "which() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.which"]], "writable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.writable"]], "mdanalysis.lib": [[110, "module-MDAnalysis.lib"]], "duecredit_enable": [[112, "index-0"]], "mdanalysis.selections.base": [[114, "module-MDAnalysis.selections.base"]], "selectionwriterbase (class in mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.SelectionWriterBase"]], "__init__() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.__init__"]], "_translate() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._translate"]], "_write_head() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_head"]], "_write_tail() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_tail"]], "comment() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.comment"]], "join() (in module mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.join"]], "write() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.write"]], "mdanalysis.selections.charmm": [[115, "module-MDAnalysis.selections.charmm"]], "selectionwriter (class in mdanalysis.selections.charmm)": [[115, "MDAnalysis.selections.charmm.SelectionWriter"]], "close() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.close"]], "comment() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.continuation"]], "ext (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.ext"]], "format (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.format"]], "write() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write_preamble"]], "mdanalysis.selections.gromacs": [[116, "module-MDAnalysis.selections.gromacs"]], "selectionwriter (class in mdanalysis.selections.gromacs)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter"]], "close() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.close"]], "comment() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.continuation"]], "ext (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.ext"]], "format (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.format"]], "write() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write_preamble"]], "mdanalysis.selections.jmol": [[117, "module-MDAnalysis.selections.jmol"]], "selectionwriter (class in mdanalysis.selections.jmol)": [[117, "MDAnalysis.selections.jmol.SelectionWriter"]], "close() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.close"]], "comment() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.continuation"]], "default_numterms (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.default_numterms"]], "ext (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.ext"]], "format (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.format"]], "write() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write_preamble"]], "mdanalysis.selections.pymol": [[118, "module-MDAnalysis.selections.pymol"]], "selectionwriter (class in mdanalysis.selections.pymol)": [[118, "MDAnalysis.selections.pymol.SelectionWriter"]], "close() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.close"]], "comment() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.continuation"]], "ext (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.ext"]], "format (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.format"]], "write() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write_preamble"]], "mdanalysis.selections.vmd": [[119, "module-MDAnalysis.selections.vmd"]], "selectionwriter (class in mdanalysis.selections.vmd)": [[119, "MDAnalysis.selections.vmd.SelectionWriter"]], "close() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.close"]], "comment() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.continuation"]], "ext (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.ext"]], "format (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.format"]], "write() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write_preamble"]], "get_writer() (in module mdanalysis.selections)": [[120, "MDAnalysis.selections.get_writer"]], "crdparser (class in mdanalysis.topology.crdparser)": [[122, "MDAnalysis.topology.CRDParser.CRDParser"]], "mdanalysis.topology.crdparser": [[122, "module-MDAnalysis.topology.CRDParser"]], "close() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.parse"]], "units (mdanalysis.topology.crdparser.crdparser attribute)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.units"]], "mdanalysis.topology.dlpolyparser": [[123, "module-MDAnalysis.topology.DLPolyParser"]], "dmsparser (class in mdanalysis.topology.dmsparser)": [[124, "MDAnalysis.topology.DMSParser.DMSParser"]], "mdanalysis.topology.dmsparser": [[124, "module-MDAnalysis.topology.DMSParser"]], "close() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.parse"]], "units (mdanalysis.topology.dmsparser.dmsparser attribute)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.units"]], "extendedpdbparser (class in mdanalysis.topology.extendedpdbparser)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser"]], "mdanalysis.topology.extendedpdbparser": [[125, "module-MDAnalysis.topology.ExtendedPDBParser"]], "close() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.parse"]], "units (mdanalysis.topology.extendedpdbparser.extendedpdbparser attribute)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.units"]], "fhiaimsparser (class in mdanalysis.topology.fhiaimsparser)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser"]], "mdanalysis.topology.fhiaimsparser": [[126, "module-MDAnalysis.topology.FHIAIMSParser"]], "close() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.parse"]], "units (mdanalysis.topology.fhiaimsparser.fhiaimsparser attribute)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.units"]], "gmsparser (class in mdanalysis.topology.gmsparser)": [[127, "MDAnalysis.topology.GMSParser.GMSParser"]], "mdanalysis.topology.gmsparser": [[127, "module-MDAnalysis.topology.GMSParser"]], "close() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.parse"]], "units (mdanalysis.topology.gmsparser.gmsparser attribute)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.units"]], "groparser (class in mdanalysis.topology.groparser)": [[128, "MDAnalysis.topology.GROParser.GROParser"]], "mdanalysis.topology.groparser": [[128, "module-MDAnalysis.topology.GROParser"]], "close() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.close"]], "convert_forces_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.parse"]], "units (mdanalysis.topology.groparser.groparser attribute)": [[128, "MDAnalysis.topology.GROParser.GROParser.units"]], "gsdparser (class in mdanalysis.topology.gsdparser)": [[129, "MDAnalysis.topology.GSDParser.GSDParser"]], "mdanalysis.topology.gsdparser": [[129, "module-MDAnalysis.topology.GSDParser"]], "close() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.parse"]], "units (mdanalysis.topology.gsdparser.gsdparser attribute)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.units"]], "hoomdxmlparser (class in mdanalysis.topology.hoomdxmlparser)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser"]], "mdanalysis.topology.hoomdxmlparser": [[130, "module-MDAnalysis.topology.HoomdXMLParser"]], "close() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.close"]], "convert_forces_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.parse"]], "units (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser attribute)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.units"]], "itpparser (class in mdanalysis.topology.itpparser)": [[131, "MDAnalysis.topology.ITPParser.ITPParser"]], "mdanalysis.topology.itpparser": [[131, "module-MDAnalysis.topology.ITPParser"]], "close() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.parse"]], "units (mdanalysis.topology.itpparser.itpparser attribute)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.units"]], "dataparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser"]], "lammpsdumpparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.LammpsDumpParser"]], "mdanalysis.topology.lammpsparser": [[132, "module-MDAnalysis.topology.LAMMPSParser"]], "close() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.close"]], "convert_forces_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_to_native"]], "grab_datafile() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.grab_datafile"]], "parse() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.parse"]], "read_data_timestep() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.read_DATA_timestep"]], "units (mdanalysis.topology.lammpsparser.dataparser attribute)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.units"]], "mdanalysis.topology.mmtfparser": [[133, "module-MDAnalysis.topology.MMTFParser"]], "mmtfparser (class in mdanalysis.topology.mmtfparser)": [[133, "MDAnalysis.topology.MMTFParser.MMTFParser"]], "mdanalysis.topology.mol2parser": [[134, "module-MDAnalysis.topology.MOL2Parser"]], "mol2parser (class in mdanalysis.topology.mol2parser)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser"]], "close() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.close"]], "convert_forces_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.parse"]], "units (mdanalysis.topology.mol2parser.mol2parser attribute)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.units"]], "mdanalysis.topology.minimalparser": [[135, "module-MDAnalysis.topology.MinimalParser"]], "minimalparser (class in mdanalysis.topology.minimalparser)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser"]], "close() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.close"]], "convert_forces_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.parse"]], "units (mdanalysis.topology.minimalparser.minimalparser attribute)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.units"]], "mdanalysis.topology.pdbparser": [[136, "module-MDAnalysis.topology.PDBParser"]], "pdbparser (class in mdanalysis.topology.pdbparser)": [[136, "MDAnalysis.topology.PDBParser.PDBParser"]], "close() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.parse"]], "units (mdanalysis.topology.pdbparser.pdbparser attribute)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.units"]], "mdanalysis.topology.pdbqtparser": [[137, "module-MDAnalysis.topology.PDBQTParser"]], "pdbqtparser (class in mdanalysis.topology.pdbqtparser)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser"]], "close() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.parse"]], "units (mdanalysis.topology.pdbqtparser.pdbqtparser attribute)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.units"]], "mdanalysis.topology.pqrparser": [[138, "module-MDAnalysis.topology.PQRParser"]], "pqrparser (class in mdanalysis.topology.pqrparser)": [[138, "MDAnalysis.topology.PQRParser.PQRParser"]], "close() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_to_native"]], "guess_flavour() (mdanalysis.topology.pqrparser.pqrparser static method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.guess_flavour"]], "parse() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.parse"]], "units (mdanalysis.topology.pqrparser.pqrparser attribute)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.units"]], "mdanalysis.topology.psfparser": [[139, "module-MDAnalysis.topology.PSFParser"]], "psfparser (class in mdanalysis.topology.psfparser)": [[139, "MDAnalysis.topology.PSFParser.PSFParser"]], "close() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.close"]], "convert_forces_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.parse"]], "units (mdanalysis.topology.psfparser.psfparser attribute)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.units"]], "mdanalysis.topology.topparser": [[140, "module-MDAnalysis.topology.TOPParser"]], "topparser (class in mdanalysis.topology.topparser)": [[140, "MDAnalysis.topology.TOPParser.TOPParser"]], "close() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse"]], "parse_bonded() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_bonded"]], "parse_charges() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_charges"]], "parse_chunks() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_chunks"]], "parse_dihedrals() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_dihedrals"]], "parse_elements() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_elements"]], "parse_masses() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_masses"]], "parse_names() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_names"]], "parse_residx() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_residx"]], "parse_resnames() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_resnames"]], "parse_type_indices() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_type_indices"]], "parse_types() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_types"]], "parsesection_mapper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parsesection_mapper"]], "skipper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.skipper"]], "units (mdanalysis.topology.topparser.topparser attribute)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.units"]], "mdanalysis.topology.tprparser": [[141, "module-MDAnalysis.topology.TPRParser"]], "tprparser (class in mdanalysis.topology.tprparser)": [[141, "MDAnalysis.topology.TPRParser.TPRParser"]], "close() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.parse"]], "units (mdanalysis.topology.tprparser.tprparser attribute)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.units"]], "mdanalysis.topology.txyzparser": [[142, "module-MDAnalysis.topology.TXYZParser"]], "txyzparser (class in mdanalysis.topology.txyzparser)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser"]], "close() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.close"]], "convert_forces_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.parse"]], "units (mdanalysis.topology.txyzparser.txyzparser attribute)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.units"]], "mdanalysis.topology.xyzparser": [[143, "module-MDAnalysis.topology.XYZParser"]], "xyzparser (class in mdanalysis.topology.xyzparser)": [[143, "MDAnalysis.topology.XYZParser.XYZParser"]], "parse() (mdanalysis.topology.xyzparser.xyzparser method)": [[143, "MDAnalysis.topology.XYZParser.XYZParser.parse"]], "mdanalysis.topology.base": [[144, "module-MDAnalysis.topology.base"]], "topologyreaderbase (class in mdanalysis.topology.base)": [[144, "MDAnalysis.topology.base.TopologyReaderBase"]], "close() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.close"]], "convert_forces_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_to_native"]], "units (mdanalysis.topology.base.topologyreaderbase attribute)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.units"]], "mdanalysis.topology.core": [[145, "module-MDAnalysis.topology.core"]], "mdanalysis.topology.guessers": [[146, "module-MDAnalysis.topology.guessers"]], "get_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.get_atom_mass"]], "guess_angles() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_angles"]], "guess_aromaticities() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_aromaticities"]], "guess_atom_charge() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_charge"]], "guess_atom_element() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_element"]], "guess_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_mass"]], "guess_atom_type() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_type"]], "guess_bonds() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_bonds"]], "guess_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_dihedrals"]], "guess_gasteiger_charges() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_gasteiger_charges"]], "guess_improper_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_improper_dihedrals"]], "guess_masses() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_masses"]], "guess_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_types"]], "validate_atom_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.validate_atom_types"]], "mdanalysis.topology.__init__": [[147, "module-MDAnalysis.topology.__init__"]], "mdanalysis.topology.tables": [[148, "module-MDAnalysis.topology.tables"]], "table_atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_ATOMELEMENTS"]], "table_masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_MASSES"]], "table_vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_VDWRADII"]], "atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.atomelements"]], "kv2dict() (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.kv2dict"]], "masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.masses"]], "vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.vdwradii"]], "atom (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atom"]], "atomkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind"]], "atoms (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atoms"]], "box (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Box"]], "f_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGLES"]], "f_angres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRES"]], "f_angresz (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRESZ"]], "f_anharm_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANHARM_POL"]], "f_bham (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM"]], "f_bham_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM_LR"]], "f_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BONDS"]], "f_cbtdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CBTDIHS"]], "f_cmap (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CMAP"]], "f_com_pull (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COM_PULL"]], "f_connbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONNBONDS"]], "f_constr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTR"]], "f_constrnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTRNC"]], "f_coul14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL14"]], "f_coul_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_LR"]], "f_coul_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_RECIP"]], "f_coul_sr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_SR"]], "f_cross_bond_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_ANGLES"]], "f_cross_bond_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_BONDS"]], "f_cubicbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CUBICBONDS"]], "f_densityfitting (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DENSITYFITTING"]], "f_dhdl_con (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DHDL_CON"]], "f_dihres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRES"]], "f_dihresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRESVIOL"]], "f_dispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISPCORR"]], "f_disres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRES"]], "f_disresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRESVIOL"]], "f_dkdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DKDL"]], "f_dpd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DPD"]], "f_dvdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL"]], "f_dvdl_bonded (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_BONDED"]], "f_dvdl_coul (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_COUL"]], "f_dvdl_restraint (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_RESTRAINT"]], "f_dvdl_temperature (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_TEMPERATURE"]], "f_dvdl_vdw (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_VDW"]], "f_econserved (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ECONSERVED"]], "f_ekin (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EKIN"]], "f_epot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EPOT"]], "f_eqm (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EQM"]], "f_etot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ETOT"]], "f_fbposres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FBPOSRES"]], "f_fenebonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FENEBONDS"]], "f_fourdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FOURDIHS"]], "f_g96angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96ANGLES"]], "f_g96bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96BONDS"]], "f_gb12 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB12"]], "f_gb13 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB13"]], "f_gb14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB14"]], "f_gbpol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GBPOL"]], "f_harmonic (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_HARMONIC"]], "f_idihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_IDIHS"]], "f_linear_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LINEAR_ANGLES"]], "f_lj (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ"]], "f_lj14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ14"]], "f_ljc14_q (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC14_Q"]], "f_ljc_pairs_nb (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC_PAIRS_NB"]], "f_lj_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_LR"]], "f_lj_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_RECIP"]], "f_morse (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_MORSE"]], "f_npsolvation (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NPSOLVATION"]], "f_nre (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NRE"]], "f_orires (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRES"]], "f_oriresdev (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRESDEV"]], "f_pdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDIHS"]], "f_pdispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDISPCORR"]], "f_pidihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PIDIHS"]], "f_polarization (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POLARIZATION"]], "f_posres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POSRES"]], "f_pres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PRES"]], "f_quartic_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_QUARTIC_ANGLES"]], "f_rbdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RBDIHS"]], "f_restrangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRANGLES"]], "f_restrbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRBONDS"]], "f_restrdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRDIHS"]], "f_rf_excl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RF_EXCL"]], "f_settle (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_SETTLE"]], "f_tabangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABANGLES"]], "f_tabbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDS"]], "f_tabbondsnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDSNC"]], "f_tabdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABDIHS"]], "f_temp (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TEMP"]], "f_thole_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_THOLE_POL"]], "f_urey_bradley (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_UREY_BRADLEY"]], "f_vsite1 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE1"]], "f_vsite2 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2"]], "f_vsite2fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2FD"]], "f_vsite3 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3"]], "f_vsite3fad (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FAD"]], "f_vsite3fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FD"]], "f_vsite3out (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3OUT"]], "f_vsite4fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FD"]], "f_vsite4fdn (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FDN"]], "f_vsiten (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITEN"]], "f_vtemp_nolongerused (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VTEMP_NOLONGERUSED"]], "f_water_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_WATER_POL"]], "ilist (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Ilist"]], "interactionkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind"]], "mdanalysis.topology.tpr": [[149, "module-MDAnalysis.topology.tpr"]], "mdanalysis.topology.tpr.obj": [[149, "module-MDAnalysis.topology.tpr.obj"]], "mdanalysis.topology.tpr.setting": [[149, "module-MDAnalysis.topology.tpr.setting"]], "mdanalysis.topology.tpr.utils": [[149, "module-MDAnalysis.topology.tpr.utils"]], "molblock (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Molblock"]], "moleculekind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind"]], "mtop (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Mtop"]], "params (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Params"]], "supported_versions (in module mdanalysis.topology.tpr)": [[149, "MDAnalysis.topology.tpr.SUPPORTED_VERSIONS"]], "supported_versions (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.SUPPORTED_VERSIONS"]], "tpxunpacker (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker"]], "tpxunpacker2020 (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020"]], "tpxheader (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader"]], "atnr (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.atnr"]], "atomnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atomnames"]], "atomnumber (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.atomnumber"]], "atoms (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atoms"]], "bbox (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bBox"]], "bf (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bF"]], "bir (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bIr"]], "btop (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bTop"]], "bv (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bV"]], "bx (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bX"]], "define_unpack_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.define_unpack_real"]], "do_atom() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atom"]], "do_atoms() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atoms"]], "do_block() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_block"]], "do_blocka() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_blocka"]], "do_ffparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ffparams"]], "do_harm() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_harm"]], "do_ilists() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ilists"]], "do_iparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_iparams"]], "do_molblock() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_molblock"]], "do_moltype() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_moltype"]], "do_mtop() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_mtop"]], "do_resinfo() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_resinfo"]], "do_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_rvec"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.do_string"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.do_string"]], "do_symstr() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symstr"]], "do_symtab() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symtab"]], "element_symbol (mdanalysis.topology.tpr.obj.atomkind property)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind.element_symbol"]], "extract_box_info() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.extract_box_info"]], "fep_state (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fep_state"]], "fgen (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fgen"]], "fileversion_err() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.fileVersion_err"]], "file_tag (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.file_tag"]], "from_unpacker() (mdanalysis.topology.tpr.utils.tpxunpacker2020 class method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.from_unpacker"]], "ftupd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.ftupd"]], "fudgeqq (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.fudgeQQ"]], "functype (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.functype"]], "fver (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fver"]], "iatoms (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.iatoms"]], "ik (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.ik"]], "interaction_types (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.interaction_types"]], "lamb (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.lamb"]], "m (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.m"]], "mb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.mB"]], "molb_natoms_mol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_natoms_mol"]], "molb_nmol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nmol"]], "molb_nposres_xa (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xA"]], "molb_nposres_xb (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xB"]], "molb_type (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_type"]], "moltypes (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.moltypes"]], "natoms (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.natoms"]], "ndo_int() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_int"]], "ndo_ivec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_ivec"]], "ndo_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_real"]], "ndo_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_rvec"]], "ngtc (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ngtc"]], "nmolblock (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmolblock"]], "nmoltype (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmoltype"]], "nr (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nr"]], "nr (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.nr"]], "nres (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nres"]], "ntypes (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.ntypes"]], "number_of_atoms() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_atoms"]], "number_of_residues() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_residues"]], "precision (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.precision"]], "process() (mdanalysis.topology.tpr.obj.interactionkind method)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind.process"]], "ptype (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.ptype"]], "q (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.q"]], "qb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.qB"]], "read_tpxheader() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.read_tpxheader"]], "rel (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.rel"]], "remap_angles() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_angles"]], "remap_bonds() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_bonds"]], "remap_dihe() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_dihe"]], "remap_impr() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_impr"]], "reppow (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.reppow"]], "resind (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.resind"]], "resnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.resnames"]], "size (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.size"]], "sizeoftprbody (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.sizeOfTprBody"]], "tp (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.tp"]], "type (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.type"]], "typeb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.typeB"]], "typeb (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.typeB"]], "unpack_fstring() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_fstring"]], "unpack_int64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_int64"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uchar"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_uchar"]], "unpack_uint64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uint64"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_ushort"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_ushort"]], "v (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.v"]], "ver_str (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ver_str"]], "mdanalysis.transformations": [[151, "module-MDAnalysis.transformations"]], "mdanalysis.transformations.base": [[152, "module-MDAnalysis.transformations.base"]], "omp_num_threads": [[152, "index-0"]], "transformationbase (class in mdanalysis.transformations.base)": [[152, "MDAnalysis.transformations.base.TransformationBase"]], "mdanalysis.transformations.boxdimensions": [[153, "module-MDAnalysis.transformations.boxdimensions"]], "set_dimensions (class in mdanalysis.transformations.boxdimensions)": [[153, "MDAnalysis.transformations.boxdimensions.set_dimensions"]], "mdanalysis.transformations.fit": [[154, "module-MDAnalysis.transformations.fit"]], "fit_rot_trans (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_rot_trans"]], "fit_translation (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_translation"]], "mdanalysis.transformations.nojump": [[155, "module-MDAnalysis.transformations.nojump"]], "nojump (class in mdanalysis.transformations.nojump)": [[155, "MDAnalysis.transformations.nojump.NoJump"]], "mdanalysis.transformations.positionaveraging": [[156, "module-MDAnalysis.transformations.positionaveraging"]], "positionaverager (class in mdanalysis.transformations.positionaveraging)": [[156, "MDAnalysis.transformations.positionaveraging.PositionAverager"]], "mdanalysis.transformations.rotate": [[157, "module-MDAnalysis.transformations.rotate"]], "rotateby (class in mdanalysis.transformations.rotate)": [[157, "MDAnalysis.transformations.rotate.rotateby"]], "mdanalysis.transformations.translate": [[158, "module-MDAnalysis.transformations.translate"]], "center_in_box (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.center_in_box"]], "translate (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.translate"]], "mdanalysis.transformations.wrap": [[159, "module-MDAnalysis.transformations.wrap"]], "unwrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.unwrap"]], "wrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.wrap"]], "mdanalysis_base_units (in module mdanalysis.units)": [[160, "MDAnalysis.units.MDANALYSIS_BASE_UNITS"]], "mdanalysis.units": [[160, "module-MDAnalysis.units"]], "chargeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.chargeUnit_factor"]], "constants (in module mdanalysis.units)": [[160, "MDAnalysis.units.constants"]], "conversion_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.conversion_factor"]], "convert() (in module mdanalysis.units)": [[160, "MDAnalysis.units.convert"]], "densityunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.densityUnit_factor"]], "forceunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.forceUnit_factor"]], "get_conversion_factor() (in module mdanalysis.units)": [[160, "MDAnalysis.units.get_conversion_factor"]], "lengthunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.lengthUnit_factor"]], "speedunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.speedUnit_factor"]], "timeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.timeUnit_factor"]], "unit_types (in module mdanalysis.units)": [[160, "MDAnalysis.units.unit_types"]], "water (in module mdanalysis.units)": [[160, "MDAnalysis.units.water"]], "mdanalysis.version": [[161, "module-MDAnalysis.version"]], "__version__ (in module mdanalysis.version)": [[161, "MDAnalysis.version.__version__"]], "mdanalysis.visualization.streamlines": [[162, "module-MDAnalysis.visualization.streamlines"]], "generate_streamlines() (in module mdanalysis.visualization.streamlines)": [[162, "MDAnalysis.visualization.streamlines.generate_streamlines"]], "mdanalysis.visualization.streamlines_3d": [[163, "module-MDAnalysis.visualization.streamlines_3D"]], "generate_streamlines_3d() (in module mdanalysis.visualization.streamlines_3d)": [[163, "MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d"]]}}) \ No newline at end of file diff --git a/2.7.0-dev0/sitemap.xml b/2.7.0-dev0/sitemap.xml new file mode 100644 index 0000000000..e6d7c08268 --- /dev/null +++ b/2.7.0-dev0/sitemap.xml @@ -0,0 +1,2 @@ + +https://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/data.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/clustering.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/helix_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hole2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hydrogenbonds.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/legacy_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/pickle_readers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/timestep.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/groups.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/selection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/universe.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/exceptions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/c_distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/c_distances_openmp.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/formats/libdcd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/formats/libmdaxdr.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/log.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/nsgrid.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/qcprot.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/overview.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/references.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/DLPolyParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/tpr_util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/trajectory_transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/units.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/version.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/index.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/genindex.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/py-modindex.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/RDKitParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/_get_readers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/groups.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/selection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/universe.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/exceptions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/log.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/obj.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/units.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/index.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/search.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/opensearch.html \ No newline at end of file diff --git a/dev/_modules/MDAnalysis/analysis/align.html b/dev/_modules/MDAnalysis/analysis/align.html index 87098dd5db..ae7fe612f6 100644 --- a/dev/_modules/MDAnalysis/analysis/align.html +++ b/dev/_modules/MDAnalysis/analysis/align.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.align — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.align — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1640,7 +1640,7 @@

Source code for MDAnalysis.analysis.align

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/atomicdistances.html b/dev/_modules/MDAnalysis/analysis/atomicdistances.html
index 1712457652..23688563c0 100644
--- a/dev/_modules/MDAnalysis/analysis/atomicdistances.html
+++ b/dev/_modules/MDAnalysis/analysis/atomicdistances.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.atomicdistances — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.atomicdistances — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -308,7 +308,7 @@

Source code for MDAnalysis.analysis.atomicdistances

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/base.html b/dev/_modules/MDAnalysis/analysis/base.html index 9773212d42..374dd6362d 100644 --- a/dev/_modules/MDAnalysis/analysis/base.html +++ b/dev/_modules/MDAnalysis/analysis/base.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.base — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.base — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -784,7 +784,7 @@

Source code for MDAnalysis.analysis.base

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/bat.html b/dev/_modules/MDAnalysis/analysis/bat.html
index 542fa6ad50..c727b70577 100644
--- a/dev/_modules/MDAnalysis/analysis/bat.html
+++ b/dev/_modules/MDAnalysis/analysis/bat.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.bat — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.bat — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -696,7 +696,7 @@

Source code for MDAnalysis.analysis.bat

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/contacts.html b/dev/_modules/MDAnalysis/analysis/contacts.html
index eb1acb64b7..9ac83f500c 100644
--- a/dev/_modules/MDAnalysis/analysis/contacts.html
+++ b/dev/_modules/MDAnalysis/analysis/contacts.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.contacts — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.contacts — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -681,7 +681,7 @@

Source code for MDAnalysis.analysis.contacts

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/density.html b/dev/_modules/MDAnalysis/analysis/density.html
index e21675c7bc..59920d3da1 100644
--- a/dev/_modules/MDAnalysis/analysis/density.html
+++ b/dev/_modules/MDAnalysis/analysis/density.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.density — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.density — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1018,7 +1018,7 @@

Source code for MDAnalysis.analysis.density

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/dielectric.html b/dev/_modules/MDAnalysis/analysis/dielectric.html
index 249fcb4a0e..d81316879f 100644
--- a/dev/_modules/MDAnalysis/analysis/dielectric.html
+++ b/dev/_modules/MDAnalysis/analysis/dielectric.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.dielectric — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.dielectric — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -298,7 +298,7 @@

Source code for MDAnalysis.analysis.dielectric

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/diffusionmap.html b/dev/_modules/MDAnalysis/analysis/diffusionmap.html index 43ea186144..0db2cb5bc5 100644 --- a/dev/_modules/MDAnalysis/analysis/diffusionmap.html +++ b/dev/_modules/MDAnalysis/analysis/diffusionmap.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.diffusionmap — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.diffusionmap — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -531,7 +531,7 @@

Source code for MDAnalysis.analysis.diffusionmap

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/dihedrals.html b/dev/_modules/MDAnalysis/analysis/dihedrals.html index 3cc47d9732..46c990915f 100644 --- a/dev/_modules/MDAnalysis/analysis/dihedrals.html +++ b/dev/_modules/MDAnalysis/analysis/dihedrals.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.dihedrals — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.dihedrals — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -786,7 +786,7 @@

Source code for MDAnalysis.analysis.dihedrals

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/distances.html b/dev/_modules/MDAnalysis/analysis/distances.html index 271b3798b1..57d3b13908 100644 --- a/dev/_modules/MDAnalysis/analysis/distances.html +++ b/dev/_modules/MDAnalysis/analysis/distances.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.distances — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.distances — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -334,7 +334,7 @@

Source code for MDAnalysis.analysis.distances

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/bootstrap.html b/dev/_modules/MDAnalysis/analysis/encore/bootstrap.html index f23acf5349..511e5745c0 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/bootstrap.html +++ b/dev/_modules/MDAnalysis/analysis/encore/bootstrap.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.bootstrap — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.bootstrap — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -285,7 +285,7 @@

Source code for MDAnalysis.analysis.encore.bootstrap

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html b/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html index 86c7fce7e2..885ce932cf 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html +++ b/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.clustering.ClusterCollection — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.clustering.ClusterCollection — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -387,7 +387,7 @@

Source code for MDAnalysis.analysis.encore.clustering.ClusterCollection

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html b/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html index 708c34c2b1..355fa06c73 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html +++ b/dev/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.clustering.ClusteringMethod — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.clustering.ClusteringMethod — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -551,7 +551,7 @@

Source code for MDAnalysis.analysis.encore.clustering.ClusteringMethod

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/clustering/cluster.html b/dev/_modules/MDAnalysis/analysis/encore/clustering/cluster.html index 2d6a48826f..793fb10ee0 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/clustering/cluster.html +++ b/dev/_modules/MDAnalysis/analysis/encore/clustering/cluster.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.clustering.cluster — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.clustering.cluster — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -368,7 +368,7 @@

Source code for MDAnalysis.analysis.encore.clustering.cluster

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/confdistmatrix.html b/dev/_modules/MDAnalysis/analysis/encore/confdistmatrix.html index 69740b8768..b725c4c9d5 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/confdistmatrix.html +++ b/dev/_modules/MDAnalysis/analysis/encore/confdistmatrix.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.confdistmatrix — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.confdistmatrix — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -509,7 +509,7 @@

Source code for MDAnalysis.analysis.encore.confdistmatrix

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/covariance.html b/dev/_modules/MDAnalysis/analysis/encore/covariance.html index f900d59181..ee9eb819cb 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/covariance.html +++ b/dev/_modules/MDAnalysis/analysis/encore/covariance.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.covariance — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.covariance — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -377,7 +377,7 @@

Source code for MDAnalysis.analysis.encore.covariance

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html b/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html index f247eac3a4..64c76989e1 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html +++ b/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -323,7 +323,7 @@

Source code for MDAnalysis.analysis.encore.dimensionality_reduction.Dimensio aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html b/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html index 879cc12691..bfdf803382 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html +++ b/dev/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -368,7 +368,7 @@

Source code for MDAnalysis.analysis.encore.dimensionality_reduction.reduce_d aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/similarity.html b/dev/_modules/MDAnalysis/analysis/encore/similarity.html index 4e87886683..f9945bdc7c 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/similarity.html +++ b/dev/_modules/MDAnalysis/analysis/encore/similarity.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.similarity — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.similarity — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1831,7 +1831,7 @@

Source code for MDAnalysis.analysis.encore.similarity

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/encore/utils.html b/dev/_modules/MDAnalysis/analysis/encore/utils.html index 76958bfbcd..773d4c2273 100644 --- a/dev/_modules/MDAnalysis/analysis/encore/utils.html +++ b/dev/_modules/MDAnalysis/analysis/encore/utils.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.encore.utils — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.encore.utils — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -538,7 +538,7 @@

Source code for MDAnalysis.analysis.encore.utils

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/gnm.html b/dev/_modules/MDAnalysis/analysis/gnm.html index 5d4f271212..bb36e2b34c 100644 --- a/dev/_modules/MDAnalysis/analysis/gnm.html +++ b/dev/_modules/MDAnalysis/analysis/gnm.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.gnm — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.gnm — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -585,7 +585,7 @@

Source code for MDAnalysis.analysis.gnm

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/hole2/hole.html b/dev/_modules/MDAnalysis/analysis/hole2/hole.html
index c08aa005e3..ce279e5b90 100644
--- a/dev/_modules/MDAnalysis/analysis/hole2/hole.html
+++ b/dev/_modules/MDAnalysis/analysis/hole2/hole.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.hole2.hole — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.hole2.hole — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1547,7 +1547,7 @@

Source code for MDAnalysis.analysis.hole2.hole

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/hole2/utils.html b/dev/_modules/MDAnalysis/analysis/hole2/utils.html index 257bbf3a66..3cfc7525cf 100644 --- a/dev/_modules/MDAnalysis/analysis/hole2/utils.html +++ b/dev/_modules/MDAnalysis/analysis/hole2/utils.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.hole2.utils — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.hole2.utils — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -689,7 +689,7 @@

Source code for MDAnalysis.analysis.hole2.utils

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html index d2f7d2f5e1..1e65d49515 100644 --- a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html +++ b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1099,7 +1099,7 @@

Source code for MDAnalysis.analysis.hydrogenbonds.hbond_analysis

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html index 04e0bb38e5..f8316a06d8 100644 --- a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html +++ b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -740,7 +740,7 @@

Source code for MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html index a4513d4ad3..f13560f572 100644 --- a/dev/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html +++ b/dev/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.hydrogenbonds.wbridge_analysis — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.hydrogenbonds.wbridge_analysis — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1990,7 +1990,7 @@

Source code for MDAnalysis.analysis.hydrogenbonds.wbridge_analysis

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/leaflet.html b/dev/_modules/MDAnalysis/analysis/leaflet.html index ec4f50e35a..d2ec3c4764 100644 --- a/dev/_modules/MDAnalysis/analysis/leaflet.html +++ b/dev/_modules/MDAnalysis/analysis/leaflet.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.leaflet — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.leaflet — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -457,7 +457,7 @@

Source code for MDAnalysis.analysis.leaflet

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/legacy/x3dna.html b/dev/_modules/MDAnalysis/analysis/legacy/x3dna.html
index b273360fce..d565aef0de 100644
--- a/dev/_modules/MDAnalysis/analysis/legacy/x3dna.html
+++ b/dev/_modules/MDAnalysis/analysis/legacy/x3dna.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -948,7 +948,7 @@

Source code for MDAnalysis.analysis.legacy.x3dna

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/lineardensity.html b/dev/_modules/MDAnalysis/analysis/lineardensity.html index e3a6d07aa5..3cd3c86836 100644 --- a/dev/_modules/MDAnalysis/analysis/lineardensity.html +++ b/dev/_modules/MDAnalysis/analysis/lineardensity.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.lineardensity — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.lineardensity — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -464,7 +464,7 @@

Source code for MDAnalysis.analysis.lineardensity

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/msd.html b/dev/_modules/MDAnalysis/analysis/msd.html index e3eabc4baf..3b9e009a83 100644 --- a/dev/_modules/MDAnalysis/analysis/msd.html +++ b/dev/_modules/MDAnalysis/analysis/msd.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.msd — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.msd — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -548,7 +548,7 @@

Source code for MDAnalysis.analysis.msd

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/nucleicacids.html b/dev/_modules/MDAnalysis/analysis/nucleicacids.html
index ca9b02b6a1..e146d4b10b 100644
--- a/dev/_modules/MDAnalysis/analysis/nucleicacids.html
+++ b/dev/_modules/MDAnalysis/analysis/nucleicacids.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.nucleicacids — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.nucleicacids — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -362,7 +362,7 @@

Source code for MDAnalysis.analysis.nucleicacids

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/analysis/nuclinfo.html b/dev/_modules/MDAnalysis/analysis/nuclinfo.html index 784f48f933..f4e9a63f9c 100644 --- a/dev/_modules/MDAnalysis/analysis/nuclinfo.html +++ b/dev/_modules/MDAnalysis/analysis/nuclinfo.html @@ -3,7 +3,7 @@ - MDAnalysis.analysis.nuclinfo — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.analysis.nuclinfo — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -891,7 +891,7 @@

Source code for MDAnalysis.analysis.nuclinfo

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/pca.html b/dev/_modules/MDAnalysis/analysis/pca.html
index cb2b0819d8..580ddf36dc 100644
--- a/dev/_modules/MDAnalysis/analysis/pca.html
+++ b/dev/_modules/MDAnalysis/analysis/pca.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.pca — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.pca — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1024,7 +1024,7 @@

Source code for MDAnalysis.analysis.pca

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/polymer.html b/dev/_modules/MDAnalysis/analysis/polymer.html
index 5edc241812..5abde1e49f 100644
--- a/dev/_modules/MDAnalysis/analysis/polymer.html
+++ b/dev/_modules/MDAnalysis/analysis/polymer.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.polymer — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.polymer — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -506,7 +506,7 @@

Source code for MDAnalysis.analysis.polymer

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/psa.html b/dev/_modules/MDAnalysis/analysis/psa.html
index 0f2b8c80ce..7762e482e2 100644
--- a/dev/_modules/MDAnalysis/analysis/psa.html
+++ b/dev/_modules/MDAnalysis/analysis/psa.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.psa — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.psa — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -2362,7 +2362,7 @@

Source code for MDAnalysis.analysis.psa

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/rdf.html b/dev/_modules/MDAnalysis/analysis/rdf.html
index 39e3918043..600cebdc7e 100644
--- a/dev/_modules/MDAnalysis/analysis/rdf.html
+++ b/dev/_modules/MDAnalysis/analysis/rdf.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.rdf — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.rdf — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -808,7 +808,7 @@

Source code for MDAnalysis.analysis.rdf

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/rms.html b/dev/_modules/MDAnalysis/analysis/rms.html
index 450493d9aa..34f945e792 100644
--- a/dev/_modules/MDAnalysis/analysis/rms.html
+++ b/dev/_modules/MDAnalysis/analysis/rms.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.rms — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.rms — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1022,7 +1022,7 @@

Source code for MDAnalysis.analysis.rms

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/analysis/waterdynamics.html b/dev/_modules/MDAnalysis/analysis/waterdynamics.html
index 0f4695d4ec..274248eac7 100644
--- a/dev/_modules/MDAnalysis/analysis/waterdynamics.html
+++ b/dev/_modules/MDAnalysis/analysis/waterdynamics.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.analysis.waterdynamics — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.analysis.waterdynamics — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1192,7 +1192,7 @@

Source code for MDAnalysis.analysis.waterdynamics

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/auxiliary/EDR.html b/dev/_modules/MDAnalysis/auxiliary/EDR.html index 4db1451595..baeb9b17fa 100644 --- a/dev/_modules/MDAnalysis/auxiliary/EDR.html +++ b/dev/_modules/MDAnalysis/auxiliary/EDR.html @@ -3,7 +3,7 @@ - MDAnalysis.auxiliary.EDR — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.auxiliary.EDR — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -583,7 +583,7 @@

Source code for MDAnalysis.auxiliary.EDR

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/auxiliary/XVG.html b/dev/_modules/MDAnalysis/auxiliary/XVG.html
index 7d6cbae431..ce6ad8bec7 100644
--- a/dev/_modules/MDAnalysis/auxiliary/XVG.html
+++ b/dev/_modules/MDAnalysis/auxiliary/XVG.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.auxiliary.XVG — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.auxiliary.XVG — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -502,7 +502,7 @@

Source code for MDAnalysis.auxiliary.XVG

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/auxiliary/base.html b/dev/_modules/MDAnalysis/auxiliary/base.html
index 8de1d43bd2..575fac024d 100644
--- a/dev/_modules/MDAnalysis/auxiliary/base.html
+++ b/dev/_modules/MDAnalysis/auxiliary/base.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.auxiliary.base — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.auxiliary.base — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1204,7 +1204,7 @@

Source code for MDAnalysis.auxiliary.base

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/auxiliary/core.html b/dev/_modules/MDAnalysis/auxiliary/core.html
index 11351299f7..8eeb78f21b 100644
--- a/dev/_modules/MDAnalysis/auxiliary/core.html
+++ b/dev/_modules/MDAnalysis/auxiliary/core.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.auxiliary.core — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.auxiliary.core — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -236,7 +236,7 @@

Source code for MDAnalysis.auxiliary.core

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/converters/OpenMM.html b/dev/_modules/MDAnalysis/converters/OpenMM.html
index 568ee89699..64a638ed5b 100644
--- a/dev/_modules/MDAnalysis/converters/OpenMM.html
+++ b/dev/_modules/MDAnalysis/converters/OpenMM.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.converters.OpenMM — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.converters.OpenMM — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -337,7 +337,7 @@

Source code for MDAnalysis.converters.OpenMM

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/converters/OpenMMParser.html b/dev/_modules/MDAnalysis/converters/OpenMMParser.html
index aba788de93..880d924529 100644
--- a/dev/_modules/MDAnalysis/converters/OpenMMParser.html
+++ b/dev/_modules/MDAnalysis/converters/OpenMMParser.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.converters.OpenMMParser — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.converters.OpenMMParser — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -390,7 +390,7 @@

Source code for MDAnalysis.converters.OpenMMParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/converters/ParmEd.html b/dev/_modules/MDAnalysis/converters/ParmEd.html index 1f9be8875f..5f72a92908 100644 --- a/dev/_modules/MDAnalysis/converters/ParmEd.html +++ b/dev/_modules/MDAnalysis/converters/ParmEd.html @@ -3,7 +3,7 @@ - MDAnalysis.converters.ParmEd — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.converters.ParmEd — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -491,7 +491,7 @@

Source code for MDAnalysis.converters.ParmEd

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/converters/ParmEdParser.html b/dev/_modules/MDAnalysis/converters/ParmEdParser.html
index 07f5696e98..3be820ccb4 100644
--- a/dev/_modules/MDAnalysis/converters/ParmEdParser.html
+++ b/dev/_modules/MDAnalysis/converters/ParmEdParser.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.converters.ParmEdParser — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.converters.ParmEdParser — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -483,7 +483,7 @@

Source code for MDAnalysis.converters.ParmEdParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/converters/RDKit.html b/dev/_modules/MDAnalysis/converters/RDKit.html index 2ee64faebb..4f57adfe3b 100644 --- a/dev/_modules/MDAnalysis/converters/RDKit.html +++ b/dev/_modules/MDAnalysis/converters/RDKit.html @@ -3,7 +3,7 @@ - MDAnalysis.converters.RDKit — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.converters.RDKit — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1108,7 +1108,7 @@

Source code for MDAnalysis.converters.RDKit

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/converters/RDKitParser.html b/dev/_modules/MDAnalysis/converters/RDKitParser.html
index d0dada1ee3..38b589f6bd 100644
--- a/dev/_modules/MDAnalysis/converters/RDKitParser.html
+++ b/dev/_modules/MDAnalysis/converters/RDKitParser.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.converters.RDKitParser — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.converters.RDKitParser — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -494,7 +494,7 @@

Source code for MDAnalysis.converters.RDKitParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/CRD.html b/dev/_modules/MDAnalysis/coordinates/CRD.html index 3128345178..5472433def 100644 --- a/dev/_modules/MDAnalysis/coordinates/CRD.html +++ b/dev/_modules/MDAnalysis/coordinates/CRD.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.CRD — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.CRD — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -413,7 +413,7 @@

Source code for MDAnalysis.coordinates.CRD

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/DCD.html b/dev/_modules/MDAnalysis/coordinates/DCD.html
index e73988bc55..cd97c73dd7 100644
--- a/dev/_modules/MDAnalysis/coordinates/DCD.html
+++ b/dev/_modules/MDAnalysis/coordinates/DCD.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.DCD — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.DCD — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -597,7 +597,7 @@

Source code for MDAnalysis.coordinates.DCD

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/DLPoly.html b/dev/_modules/MDAnalysis/coordinates/DLPoly.html
index 54df46a3b1..7537b64452 100644
--- a/dev/_modules/MDAnalysis/coordinates/DLPoly.html
+++ b/dev/_modules/MDAnalysis/coordinates/DLPoly.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.DLPoly — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.DLPoly — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -390,7 +390,7 @@

Source code for MDAnalysis.coordinates.DLPoly

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/DMS.html b/dev/_modules/MDAnalysis/coordinates/DMS.html index 1ddedb68cb..48b8037b7e 100644 --- a/dev/_modules/MDAnalysis/coordinates/DMS.html +++ b/dev/_modules/MDAnalysis/coordinates/DMS.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.DMS — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.DMS — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -243,7 +243,7 @@

Source code for MDAnalysis.coordinates.DMS

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/FHIAIMS.html b/dev/_modules/MDAnalysis/coordinates/FHIAIMS.html
index 2aa4931505..09f44aa21a 100644
--- a/dev/_modules/MDAnalysis/coordinates/FHIAIMS.html
+++ b/dev/_modules/MDAnalysis/coordinates/FHIAIMS.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -444,7 +444,7 @@

Source code for MDAnalysis.coordinates.FHIAIMS

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/GMS.html b/dev/_modules/MDAnalysis/coordinates/GMS.html index d866d7155f..163b67680b 100644 --- a/dev/_modules/MDAnalysis/coordinates/GMS.html +++ b/dev/_modules/MDAnalysis/coordinates/GMS.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.GMS — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.GMS — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -397,7 +397,7 @@

Source code for MDAnalysis.coordinates.GMS

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/GRO.html b/dev/_modules/MDAnalysis/coordinates/GRO.html
index 3ee0ccd23a..27134d53d5 100644
--- a/dev/_modules/MDAnalysis/coordinates/GRO.html
+++ b/dev/_modules/MDAnalysis/coordinates/GRO.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.GRO — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.GRO — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -625,7 +625,7 @@

Source code for MDAnalysis.coordinates.GRO

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/GSD.html b/dev/_modules/MDAnalysis/coordinates/GSD.html
index ab560d114f..ec38eef6e8 100644
--- a/dev/_modules/MDAnalysis/coordinates/GSD.html
+++ b/dev/_modules/MDAnalysis/coordinates/GSD.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.GSD — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.GSD — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -419,7 +419,7 @@

Source code for MDAnalysis.coordinates.GSD

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/H5MD.html b/dev/_modules/MDAnalysis/coordinates/H5MD.html
index 7728c28884..3ca113d3a2 100644
--- a/dev/_modules/MDAnalysis/coordinates/H5MD.html
+++ b/dev/_modules/MDAnalysis/coordinates/H5MD.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.H5MD — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.H5MD — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1671,7 +1671,7 @@

Source code for MDAnalysis.coordinates.H5MD

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/INPCRD.html b/dev/_modules/MDAnalysis/coordinates/INPCRD.html
index af238f8c53..d1b495e3c5 100644
--- a/dev/_modules/MDAnalysis/coordinates/INPCRD.html
+++ b/dev/_modules/MDAnalysis/coordinates/INPCRD.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.INPCRD — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.INPCRD — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -212,7 +212,7 @@

Source code for MDAnalysis.coordinates.INPCRD

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/LAMMPS.html b/dev/_modules/MDAnalysis/coordinates/LAMMPS.html index bf78027357..fb521ce43a 100644 --- a/dev/_modules/MDAnalysis/coordinates/LAMMPS.html +++ b/dev/_modules/MDAnalysis/coordinates/LAMMPS.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -847,7 +847,7 @@

Source code for MDAnalysis.coordinates.LAMMPS

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/MMTF.html b/dev/_modules/MDAnalysis/coordinates/MMTF.html index 810bed18cb..184ec04d0f 100644 --- a/dev/_modules/MDAnalysis/coordinates/MMTF.html +++ b/dev/_modules/MDAnalysis/coordinates/MMTF.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.MMTF — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.MMTF — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -247,7 +247,7 @@

Source code for MDAnalysis.coordinates.MMTF

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/MOL2.html b/dev/_modules/MDAnalysis/coordinates/MOL2.html
index f86aa64630..dbb0d239d1 100644
--- a/dev/_modules/MDAnalysis/coordinates/MOL2.html
+++ b/dev/_modules/MDAnalysis/coordinates/MOL2.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.MOL2 — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -535,7 +535,7 @@

Source code for MDAnalysis.coordinates.MOL2

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/NAMDBIN.html b/dev/_modules/MDAnalysis/coordinates/NAMDBIN.html
index e43881065f..b2e69d16d6 100644
--- a/dev/_modules/MDAnalysis/coordinates/NAMDBIN.html
+++ b/dev/_modules/MDAnalysis/coordinates/NAMDBIN.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -279,7 +279,7 @@

Source code for MDAnalysis.coordinates.NAMDBIN

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/PDB.html b/dev/_modules/MDAnalysis/coordinates/PDB.html index b988a2f29c..474dca88b5 100644 --- a/dev/_modules/MDAnalysis/coordinates/PDB.html +++ b/dev/_modules/MDAnalysis/coordinates/PDB.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.PDB — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.PDB — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -1514,7 +1514,7 @@

Source code for MDAnalysis.coordinates.PDB

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/PDBQT.html b/dev/_modules/MDAnalysis/coordinates/PDBQT.html
index 5dfae2cbdd..55a610f907 100644
--- a/dev/_modules/MDAnalysis/coordinates/PDBQT.html
+++ b/dev/_modules/MDAnalysis/coordinates/PDBQT.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.PDBQT — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.PDBQT — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -485,7 +485,7 @@

Source code for MDAnalysis.coordinates.PDBQT

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/PQR.html b/dev/_modules/MDAnalysis/coordinates/PQR.html
index 1c8396552a..a231e33c98 100644
--- a/dev/_modules/MDAnalysis/coordinates/PQR.html
+++ b/dev/_modules/MDAnalysis/coordinates/PQR.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.PQR — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.PQR — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -458,7 +458,7 @@

Source code for MDAnalysis.coordinates.PQR

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/TNG.html b/dev/_modules/MDAnalysis/coordinates/TNG.html
index 943d262752..621f5d1794 100644
--- a/dev/_modules/MDAnalysis/coordinates/TNG.html
+++ b/dev/_modules/MDAnalysis/coordinates/TNG.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.TNG — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.TNG — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -649,7 +649,7 @@

Source code for MDAnalysis.coordinates.TNG

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/TRJ.html b/dev/_modules/MDAnalysis/coordinates/TRJ.html
index 4fd96be7aa..2236ab4bed 100644
--- a/dev/_modules/MDAnalysis/coordinates/TRJ.html
+++ b/dev/_modules/MDAnalysis/coordinates/TRJ.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.TRJ — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.TRJ — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1386,7 +1386,7 @@

Source code for MDAnalysis.coordinates.TRJ

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/TRR.html b/dev/_modules/MDAnalysis/coordinates/TRR.html
index b0869cc25c..dd381a6bee 100644
--- a/dev/_modules/MDAnalysis/coordinates/TRR.html
+++ b/dev/_modules/MDAnalysis/coordinates/TRR.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.TRR — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.TRR — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -348,7 +348,7 @@

Source code for MDAnalysis.coordinates.TRR

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/TRZ.html b/dev/_modules/MDAnalysis/coordinates/TRZ.html
index a6da2d8d63..e6dcaee90f 100644
--- a/dev/_modules/MDAnalysis/coordinates/TRZ.html
+++ b/dev/_modules/MDAnalysis/coordinates/TRZ.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.TRZ — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.TRZ — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -723,7 +723,7 @@

Source code for MDAnalysis.coordinates.TRZ

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/TXYZ.html b/dev/_modules/MDAnalysis/coordinates/TXYZ.html
index 2f2ba9daa6..fa551860d2 100644
--- a/dev/_modules/MDAnalysis/coordinates/TXYZ.html
+++ b/dev/_modules/MDAnalysis/coordinates/TXYZ.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.TXYZ — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.TXYZ — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -309,7 +309,7 @@

Source code for MDAnalysis.coordinates.TXYZ

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/XDR.html b/dev/_modules/MDAnalysis/coordinates/XDR.html
index 301f35a4de..07cd66245f 100644
--- a/dev/_modules/MDAnalysis/coordinates/XDR.html
+++ b/dev/_modules/MDAnalysis/coordinates/XDR.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.XDR — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.XDR — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -454,7 +454,7 @@

Source code for MDAnalysis.coordinates.XDR

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/XTC.html b/dev/_modules/MDAnalysis/coordinates/XTC.html
index 0b6b320e87..96f7090a3d 100644
--- a/dev/_modules/MDAnalysis/coordinates/XTC.html
+++ b/dev/_modules/MDAnalysis/coordinates/XTC.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.XTC — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.XTC — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -310,7 +310,7 @@

Source code for MDAnalysis.coordinates.XTC

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/XYZ.html b/dev/_modules/MDAnalysis/coordinates/XYZ.html
index d2b6e31e8b..87d7bbdca4 100644
--- a/dev/_modules/MDAnalysis/coordinates/XYZ.html
+++ b/dev/_modules/MDAnalysis/coordinates/XYZ.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.XYZ — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.XYZ — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -600,7 +600,7 @@

Source code for MDAnalysis.coordinates.XYZ

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/base.html b/dev/_modules/MDAnalysis/coordinates/base.html
index db8e08788c..b530aba2db 100644
--- a/dev/_modules/MDAnalysis/coordinates/base.html
+++ b/dev/_modules/MDAnalysis/coordinates/base.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.base — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.base — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1942,7 +1942,7 @@

Source code for MDAnalysis.coordinates.base

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/chain.html b/dev/_modules/MDAnalysis/coordinates/chain.html
index 3381235943..3d3434f632 100644
--- a/dev/_modules/MDAnalysis/coordinates/chain.html
+++ b/dev/_modules/MDAnalysis/coordinates/chain.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.chain — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.chain — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -740,7 +740,7 @@

Source code for MDAnalysis.coordinates.chain

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/chemfiles.html b/dev/_modules/MDAnalysis/coordinates/chemfiles.html
index 8c8538000a..da6c51f407 100644
--- a/dev/_modules/MDAnalysis/coordinates/chemfiles.html
+++ b/dev/_modules/MDAnalysis/coordinates/chemfiles.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.chemfiles — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.chemfiles — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -649,7 +649,7 @@

Source code for MDAnalysis.coordinates.chemfiles

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/core.html b/dev/_modules/MDAnalysis/coordinates/core.html index 093a2edfc8..2ed2d41457 100644 --- a/dev/_modules/MDAnalysis/coordinates/core.html +++ b/dev/_modules/MDAnalysis/coordinates/core.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.core — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.core — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -256,7 +256,7 @@

Source code for MDAnalysis.coordinates.core

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/coordinates/memory.html b/dev/_modules/MDAnalysis/coordinates/memory.html
index 63b685a3f8..1bccd5b98c 100644
--- a/dev/_modules/MDAnalysis/coordinates/memory.html
+++ b/dev/_modules/MDAnalysis/coordinates/memory.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.coordinates.memory — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.coordinates.memory — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -780,7 +780,7 @@

Source code for MDAnalysis.coordinates.memory

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/coordinates/null.html b/dev/_modules/MDAnalysis/coordinates/null.html index da57844e10..914f3b8bfb 100644 --- a/dev/_modules/MDAnalysis/coordinates/null.html +++ b/dev/_modules/MDAnalysis/coordinates/null.html @@ -3,7 +3,7 @@ - MDAnalysis.coordinates.null — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.coordinates.null — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -192,7 +192,7 @@

Source code for MDAnalysis.coordinates.null

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/_get_readers.html b/dev/_modules/MDAnalysis/core/_get_readers.html
index ea802a953e..d2bd53d1a1 100644
--- a/dev/_modules/MDAnalysis/core/_get_readers.html
+++ b/dev/_modules/MDAnalysis/core/_get_readers.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core._get_readers — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core._get_readers — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -411,7 +411,7 @@

Source code for MDAnalysis.core._get_readers

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/accessors.html b/dev/_modules/MDAnalysis/core/accessors.html
index 6ae217bf44..bcfd790a36 100644
--- a/dev/_modules/MDAnalysis/core/accessors.html
+++ b/dev/_modules/MDAnalysis/core/accessors.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core.accessors — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core.accessors — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -334,7 +334,7 @@

Source code for MDAnalysis.core.accessors

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/groups.html b/dev/_modules/MDAnalysis/core/groups.html
index 635d97eec4..10ea154f65 100644
--- a/dev/_modules/MDAnalysis/core/groups.html
+++ b/dev/_modules/MDAnalysis/core/groups.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core.groups — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core.groups — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -4780,7 +4780,7 @@

Source code for MDAnalysis.core.groups

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/selection.html b/dev/_modules/MDAnalysis/core/selection.html
index 01dce943a0..d1929cf455 100644
--- a/dev/_modules/MDAnalysis/core/selection.html
+++ b/dev/_modules/MDAnalysis/core/selection.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core.selection — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core.selection — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1793,7 +1793,7 @@

Source code for MDAnalysis.core.selection

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/topology.html b/dev/_modules/MDAnalysis/core/topology.html
index 1f3a711e75..65a6307ae7 100644
--- a/dev/_modules/MDAnalysis/core/topology.html
+++ b/dev/_modules/MDAnalysis/core/topology.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core.topology — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core.topology — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -764,7 +764,7 @@

Source code for MDAnalysis.core.topology

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/core/topologyattrs.html b/dev/_modules/MDAnalysis/core/topologyattrs.html
index f660edcc6b..3af5bc99b1 100644
--- a/dev/_modules/MDAnalysis/core/topologyattrs.html
+++ b/dev/_modules/MDAnalysis/core/topologyattrs.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.core.topologyattrs — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.core.topologyattrs — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -3439,7 +3439,7 @@

Source code for MDAnalysis.core.topologyattrs

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/core/topologyobjects.html b/dev/_modules/MDAnalysis/core/topologyobjects.html index 8f9beb90f3..13fd73abfa 100644 --- a/dev/_modules/MDAnalysis/core/topologyobjects.html +++ b/dev/_modules/MDAnalysis/core/topologyobjects.html @@ -3,7 +3,7 @@ - MDAnalysis.core.topologyobjects — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.core.topologyobjects — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1118,7 +1118,7 @@

Source code for MDAnalysis.core.topologyobjects

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/core/universe.html b/dev/_modules/MDAnalysis/core/universe.html index 61e7fd3862..c748b2384d 100644 --- a/dev/_modules/MDAnalysis/core/universe.html +++ b/dev/_modules/MDAnalysis/core/universe.html @@ -3,7 +3,7 @@ - MDAnalysis.core.universe — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.core.universe — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1788,7 +1788,7 @@

Source code for MDAnalysis.core.universe

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/exceptions.html b/dev/_modules/MDAnalysis/exceptions.html
index ad9447e824..8bdccd664c 100644
--- a/dev/_modules/MDAnalysis/exceptions.html
+++ b/dev/_modules/MDAnalysis/exceptions.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.exceptions — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.exceptions — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -219,7 +219,7 @@

Source code for MDAnalysis.exceptions

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/NeighborSearch.html b/dev/_modules/MDAnalysis/lib/NeighborSearch.html
index cad7711421..6653de6af9 100644
--- a/dev/_modules/MDAnalysis/lib/NeighborSearch.html
+++ b/dev/_modules/MDAnalysis/lib/NeighborSearch.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.NeighborSearch — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.NeighborSearch — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -265,7 +265,7 @@

Source code for MDAnalysis.lib.NeighborSearch

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/lib/correlations.html b/dev/_modules/MDAnalysis/lib/correlations.html index 1189c1f2a7..0478ba6c0f 100644 --- a/dev/_modules/MDAnalysis/lib/correlations.html +++ b/dev/_modules/MDAnalysis/lib/correlations.html @@ -3,7 +3,7 @@ - MDAnalysis.lib.correlations — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.lib.correlations — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -396,7 +396,7 @@

Source code for MDAnalysis.lib.correlations

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/distances.html b/dev/_modules/MDAnalysis/lib/distances.html
index b6d840146b..c8ea6ce2e9 100644
--- a/dev/_modules/MDAnalysis/lib/distances.html
+++ b/dev/_modules/MDAnalysis/lib/distances.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.distances — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.distances — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1960,7 +1960,7 @@

Source code for MDAnalysis.lib.distances

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/log.html b/dev/_modules/MDAnalysis/lib/log.html
index be31ca26ee..a337825a83 100644
--- a/dev/_modules/MDAnalysis/lib/log.html
+++ b/dev/_modules/MDAnalysis/lib/log.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.log — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.log — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -471,7 +471,7 @@

Source code for MDAnalysis.lib.log

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/mdamath.html b/dev/_modules/MDAnalysis/lib/mdamath.html
index eae9388e3d..b9996c56dc 100644
--- a/dev/_modules/MDAnalysis/lib/mdamath.html
+++ b/dev/_modules/MDAnalysis/lib/mdamath.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.mdamath — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.mdamath — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -574,7 +574,7 @@

Source code for MDAnalysis.lib.mdamath

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/picklable_file_io.html b/dev/_modules/MDAnalysis/lib/picklable_file_io.html
index 3b6864bb8c..6c1dfe6c36 100644
--- a/dev/_modules/MDAnalysis/lib/picklable_file_io.html
+++ b/dev/_modules/MDAnalysis/lib/picklable_file_io.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.picklable_file_io — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.picklable_file_io — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -684,7 +684,7 @@

Source code for MDAnalysis.lib.picklable_file_io

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/lib/pkdtree.html b/dev/_modules/MDAnalysis/lib/pkdtree.html index b134c748e8..56bb9972ef 100644 --- a/dev/_modules/MDAnalysis/lib/pkdtree.html +++ b/dev/_modules/MDAnalysis/lib/pkdtree.html @@ -3,7 +3,7 @@ - MDAnalysis.lib.pkdtree — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.lib.pkdtree — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -450,7 +450,7 @@

Source code for MDAnalysis.lib.pkdtree

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/lib/transformations.html b/dev/_modules/MDAnalysis/lib/transformations.html
index d0e24f1e47..4774319eff 100644
--- a/dev/_modules/MDAnalysis/lib/transformations.html
+++ b/dev/_modules/MDAnalysis/lib/transformations.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.lib.transformations — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.lib.transformations — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -2073,7 +2073,7 @@

Source code for MDAnalysis.lib.transformations

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/lib/util.html b/dev/_modules/MDAnalysis/lib/util.html index 1bebd99a4a..41de5f25c3 100644 --- a/dev/_modules/MDAnalysis/lib/util.html +++ b/dev/_modules/MDAnalysis/lib/util.html @@ -3,7 +3,7 @@ - MDAnalysis.lib.util — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.lib.util — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -2675,7 +2675,7 @@

Source code for MDAnalysis.lib.util

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections.html b/dev/_modules/MDAnalysis/selections.html
index 857753c21b..c700e3ad83 100644
--- a/dev/_modules/MDAnalysis/selections.html
+++ b/dev/_modules/MDAnalysis/selections.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -219,7 +219,7 @@

Source code for MDAnalysis.selections

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections/base.html b/dev/_modules/MDAnalysis/selections/base.html
index 8f9ac8f205..a9f6ec3afd 100644
--- a/dev/_modules/MDAnalysis/selections/base.html
+++ b/dev/_modules/MDAnalysis/selections/base.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections.base — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections.base — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -380,7 +380,7 @@

Source code for MDAnalysis.selections.base

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections/charmm.html b/dev/_modules/MDAnalysis/selections/charmm.html
index 862324cf51..67bbbdaa68 100644
--- a/dev/_modules/MDAnalysis/selections/charmm.html
+++ b/dev/_modules/MDAnalysis/selections/charmm.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections.charmm — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections.charmm — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -195,7 +195,7 @@

Source code for MDAnalysis.selections.charmm

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections/gromacs.html b/dev/_modules/MDAnalysis/selections/gromacs.html
index bfbdb2c8fe..0311ef7efd 100644
--- a/dev/_modules/MDAnalysis/selections/gromacs.html
+++ b/dev/_modules/MDAnalysis/selections/gromacs.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections.gromacs — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections.gromacs — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -186,7 +186,7 @@

Source code for MDAnalysis.selections.gromacs

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/selections/jmol.html b/dev/_modules/MDAnalysis/selections/jmol.html index 5fa8bb08b7..e11d5f5a4d 100644 --- a/dev/_modules/MDAnalysis/selections/jmol.html +++ b/dev/_modules/MDAnalysis/selections/jmol.html @@ -3,7 +3,7 @@ - MDAnalysis.selections.jmol — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.selections.jmol — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -193,7 +193,7 @@

Source code for MDAnalysis.selections.jmol

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections/pymol.html b/dev/_modules/MDAnalysis/selections/pymol.html
index 90950ec7de..6b8451c5cd 100644
--- a/dev/_modules/MDAnalysis/selections/pymol.html
+++ b/dev/_modules/MDAnalysis/selections/pymol.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections.pymol — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections.pymol — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -193,7 +193,7 @@

Source code for MDAnalysis.selections.pymol

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/selections/vmd.html b/dev/_modules/MDAnalysis/selections/vmd.html
index ca7c11a394..ee9073ad45 100644
--- a/dev/_modules/MDAnalysis/selections/vmd.html
+++ b/dev/_modules/MDAnalysis/selections/vmd.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.selections.vmd — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.selections.vmd — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -199,7 +199,7 @@

Source code for MDAnalysis.selections.vmd

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/topology/CRDParser.html b/dev/_modules/MDAnalysis/topology/CRDParser.html
index 271ac05488..c615cd792f 100644
--- a/dev/_modules/MDAnalysis/topology/CRDParser.html
+++ b/dev/_modules/MDAnalysis/topology/CRDParser.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.topology.CRDParser — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.topology.CRDParser — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -298,7 +298,7 @@

Source code for MDAnalysis.topology.CRDParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/DMSParser.html b/dev/_modules/MDAnalysis/topology/DMSParser.html index 27f6015b95..d002c377e6 100644 --- a/dev/_modules/MDAnalysis/topology/DMSParser.html +++ b/dev/_modules/MDAnalysis/topology/DMSParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.DMSParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.DMSParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -350,7 +350,7 @@

Source code for MDAnalysis.topology.DMSParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/ExtendedPDBParser.html b/dev/_modules/MDAnalysis/topology/ExtendedPDBParser.html index e3f52195f1..787054342d 100644 --- a/dev/_modules/MDAnalysis/topology/ExtendedPDBParser.html +++ b/dev/_modules/MDAnalysis/topology/ExtendedPDBParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.ExtendedPDBParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.ExtendedPDBParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -220,7 +220,7 @@

Source code for MDAnalysis.topology.ExtendedPDBParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/FHIAIMSParser.html b/dev/_modules/MDAnalysis/topology/FHIAIMSParser.html index b90c307b5d..02c8ecbf1b 100644 --- a/dev/_modules/MDAnalysis/topology/FHIAIMSParser.html +++ b/dev/_modules/MDAnalysis/topology/FHIAIMSParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.FHIAIMSParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.FHIAIMSParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -249,7 +249,7 @@

Source code for MDAnalysis.topology.FHIAIMSParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/GMSParser.html b/dev/_modules/MDAnalysis/topology/GMSParser.html index 5fddad0d59..1238c08cb0 100644 --- a/dev/_modules/MDAnalysis/topology/GMSParser.html +++ b/dev/_modules/MDAnalysis/topology/GMSParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.GMSParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.GMSParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -261,7 +261,7 @@

Source code for MDAnalysis.topology.GMSParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/GROParser.html b/dev/_modules/MDAnalysis/topology/GROParser.html index 903080bdf7..9daf6c2cd3 100644 --- a/dev/_modules/MDAnalysis/topology/GROParser.html +++ b/dev/_modules/MDAnalysis/topology/GROParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.GROParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.GROParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -287,7 +287,7 @@

Source code for MDAnalysis.topology.GROParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/GSDParser.html b/dev/_modules/MDAnalysis/topology/GSDParser.html index cfd79dbbae..ee8d35e772 100644 --- a/dev/_modules/MDAnalysis/topology/GSDParser.html +++ b/dev/_modules/MDAnalysis/topology/GSDParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.GSDParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.GSDParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -311,7 +311,7 @@

Source code for MDAnalysis.topology.GSDParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/HoomdXMLParser.html b/dev/_modules/MDAnalysis/topology/HoomdXMLParser.html index 88d570a6d7..bf3a2d755d 100644 --- a/dev/_modules/MDAnalysis/topology/HoomdXMLParser.html +++ b/dev/_modules/MDAnalysis/topology/HoomdXMLParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.HoomdXMLParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.HoomdXMLParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -289,7 +289,7 @@

Source code for MDAnalysis.topology.HoomdXMLParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/ITPParser.html b/dev/_modules/MDAnalysis/topology/ITPParser.html index 0e39900f0b..2d3f576f33 100644 --- a/dev/_modules/MDAnalysis/topology/ITPParser.html +++ b/dev/_modules/MDAnalysis/topology/ITPParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.ITPParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.ITPParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -827,7 +827,7 @@

Source code for MDAnalysis.topology.ITPParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/LAMMPSParser.html b/dev/_modules/MDAnalysis/topology/LAMMPSParser.html index 25b3a5a279..b45c444823 100644 --- a/dev/_modules/MDAnalysis/topology/LAMMPSParser.html +++ b/dev/_modules/MDAnalysis/topology/LAMMPSParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.LAMMPSParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.LAMMPSParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -804,7 +804,7 @@

Source code for MDAnalysis.topology.LAMMPSParser

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/MMTFParser.html b/dev/_modules/MDAnalysis/topology/MMTFParser.html index 2c700b6f5d..0631968ce3 100644 --- a/dev/_modules/MDAnalysis/topology/MMTFParser.html +++ b/dev/_modules/MDAnalysis/topology/MMTFParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.MMTFParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.MMTFParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -410,7 +410,7 @@

Source code for MDAnalysis.topology.MMTFParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/MOL2Parser.html b/dev/_modules/MDAnalysis/topology/MOL2Parser.html index 1d8262bf0d..20ae9b88ee 100644 --- a/dev/_modules/MDAnalysis/topology/MOL2Parser.html +++ b/dev/_modules/MDAnalysis/topology/MOL2Parser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.MOL2Parser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.MOL2Parser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -420,7 +420,7 @@

Source code for MDAnalysis.topology.MOL2Parser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/MinimalParser.html b/dev/_modules/MDAnalysis/topology/MinimalParser.html index bfcda05334..6428deca32 100644 --- a/dev/_modules/MDAnalysis/topology/MinimalParser.html +++ b/dev/_modules/MDAnalysis/topology/MinimalParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.MinimalParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.MinimalParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -199,7 +199,7 @@

Source code for MDAnalysis.topology.MinimalParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/PDBParser.html b/dev/_modules/MDAnalysis/topology/PDBParser.html index ffbfd44728..9cda7a06fa 100644 --- a/dev/_modules/MDAnalysis/topology/PDBParser.html +++ b/dev/_modules/MDAnalysis/topology/PDBParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.PDBParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.PDBParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -617,7 +617,7 @@

Source code for MDAnalysis.topology.PDBParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/PDBQTParser.html b/dev/_modules/MDAnalysis/topology/PDBQTParser.html index 6c27e57411..4a99138369 100644 --- a/dev/_modules/MDAnalysis/topology/PDBQTParser.html +++ b/dev/_modules/MDAnalysis/topology/PDBQTParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.PDBQTParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.PDBQTParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -316,7 +316,7 @@

Source code for MDAnalysis.topology.PDBQTParser

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/PQRParser.html b/dev/_modules/MDAnalysis/topology/PQRParser.html index 487c3b2d3d..bda2602e19 100644 --- a/dev/_modules/MDAnalysis/topology/PQRParser.html +++ b/dev/_modules/MDAnalysis/topology/PQRParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.PQRParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.PQRParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -366,7 +366,7 @@

Source code for MDAnalysis.topology.PQRParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/PSFParser.html b/dev/_modules/MDAnalysis/topology/PSFParser.html index 3b140aa599..a683fe2571 100644 --- a/dev/_modules/MDAnalysis/topology/PSFParser.html +++ b/dev/_modules/MDAnalysis/topology/PSFParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.PSFParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.PSFParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -473,7 +473,7 @@

Source code for MDAnalysis.topology.PSFParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/TOPParser.html b/dev/_modules/MDAnalysis/topology/TOPParser.html index a3cea011f5..8787dad5ae 100644 --- a/dev/_modules/MDAnalysis/topology/TOPParser.html +++ b/dev/_modules/MDAnalysis/topology/TOPParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.TOPParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.TOPParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -752,7 +752,7 @@

Source code for MDAnalysis.topology.TOPParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/TPRParser.html b/dev/_modules/MDAnalysis/topology/TPRParser.html index 8752ec8fb2..77a3fe137b 100644 --- a/dev/_modules/MDAnalysis/topology/TPRParser.html +++ b/dev/_modules/MDAnalysis/topology/TPRParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.TPRParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.TPRParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -396,7 +396,7 @@

Source code for MDAnalysis.topology.TPRParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/TXYZParser.html b/dev/_modules/MDAnalysis/topology/TXYZParser.html index 0badd3b310..cd6f2dae62 100644 --- a/dev/_modules/MDAnalysis/topology/TXYZParser.html +++ b/dev/_modules/MDAnalysis/topology/TXYZParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.TXYZParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.TXYZParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -276,7 +276,7 @@

Source code for MDAnalysis.topology.TXYZParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/XYZParser.html b/dev/_modules/MDAnalysis/topology/XYZParser.html index a877f6994a..1e204838b9 100644 --- a/dev/_modules/MDAnalysis/topology/XYZParser.html +++ b/dev/_modules/MDAnalysis/topology/XYZParser.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.XYZParser — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.XYZParser — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -240,7 +240,7 @@

Source code for MDAnalysis.topology.XYZParser

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/topology/base.html b/dev/_modules/MDAnalysis/topology/base.html index 2d00466eb5..f397ebf78d 100644 --- a/dev/_modules/MDAnalysis/topology/base.html +++ b/dev/_modules/MDAnalysis/topology/base.html @@ -3,7 +3,7 @@ - MDAnalysis.topology.base — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.topology.base — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -359,7 +359,7 @@

Source code for MDAnalysis.topology.base

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/topology/guessers.html b/dev/_modules/MDAnalysis/topology/guessers.html
index f703353662..23261f6c77 100644
--- a/dev/_modules/MDAnalysis/topology/guessers.html
+++ b/dev/_modules/MDAnalysis/topology/guessers.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.topology.guessers — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.topology.guessers — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -651,7 +651,7 @@

Source code for MDAnalysis.topology.guessers

     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/topology/tables.html b/dev/_modules/MDAnalysis/topology/tables.html
index b6828edb1b..5ec9484fe1 100644
--- a/dev/_modules/MDAnalysis/topology/tables.html
+++ b/dev/_modules/MDAnalysis/topology/tables.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.topology.tables — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.topology.tables — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -561,7 +561,7 @@

Source code for MDAnalysis.topology.tables

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/topology/tpr/obj.html b/dev/_modules/MDAnalysis/topology/tpr/obj.html
index 6957fb1a47..bbe2c0f0d0 100644
--- a/dev/_modules/MDAnalysis/topology/tpr/obj.html
+++ b/dev/_modules/MDAnalysis/topology/tpr/obj.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.topology.tpr.obj — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.topology.tpr.obj — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -285,7 +285,7 @@

Source code for MDAnalysis.topology.tpr.obj

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/topology/tpr/utils.html b/dev/_modules/MDAnalysis/topology/tpr/utils.html
index 6af7e22320..d92254c3a1 100644
--- a/dev/_modules/MDAnalysis/topology/tpr/utils.html
+++ b/dev/_modules/MDAnalysis/topology/tpr/utils.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.topology.tpr.utils — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.topology.tpr.utils — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1000,7 +1000,7 @@

Source code for MDAnalysis.topology.tpr.utils

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/base.html b/dev/_modules/MDAnalysis/transformations/base.html index 3b1cdb6d0c..274276aab8 100644 --- a/dev/_modules/MDAnalysis/transformations/base.html +++ b/dev/_modules/MDAnalysis/transformations/base.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.base — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.base — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -254,7 +254,7 @@

Source code for MDAnalysis.transformations.base

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/boxdimensions.html b/dev/_modules/MDAnalysis/transformations/boxdimensions.html index 6e3f6f1207..e1004c73b8 100644 --- a/dev/_modules/MDAnalysis/transformations/boxdimensions.html +++ b/dev/_modules/MDAnalysis/transformations/boxdimensions.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.boxdimensions — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.boxdimensions — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -224,7 +224,7 @@

Source code for MDAnalysis.transformations.boxdimensions

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/fit.html b/dev/_modules/MDAnalysis/transformations/fit.html index 2a8d5bab68..a166b438ef 100644 --- a/dev/_modules/MDAnalysis/transformations/fit.html +++ b/dev/_modules/MDAnalysis/transformations/fit.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.fit — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.fit — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -389,7 +389,7 @@

Source code for MDAnalysis.transformations.fit

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/nojump.html b/dev/_modules/MDAnalysis/transformations/nojump.html index f9eb450883..8243f3941f 100644 --- a/dev/_modules/MDAnalysis/transformations/nojump.html +++ b/dev/_modules/MDAnalysis/transformations/nojump.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.nojump — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.nojump — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@

- 2.6.0-dev0 + 2.7.0-dev0
@@ -298,7 +298,7 @@

Source code for MDAnalysis.transformations.nojump

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/positionaveraging.html b/dev/_modules/MDAnalysis/transformations/positionaveraging.html index 51da532797..5625e7e718 100644 --- a/dev/_modules/MDAnalysis/transformations/positionaveraging.html +++ b/dev/_modules/MDAnalysis/transformations/positionaveraging.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.positionaveraging — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.positionaveraging — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -332,7 +332,7 @@

Source code for MDAnalysis.transformations.positionaveraging

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/rotate.html b/dev/_modules/MDAnalysis/transformations/rotate.html index ee11e27b7b..d2c26f40bc 100644 --- a/dev/_modules/MDAnalysis/transformations/rotate.html +++ b/dev/_modules/MDAnalysis/transformations/rotate.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.rotate — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.rotate — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -320,7 +320,7 @@

Source code for MDAnalysis.transformations.rotate

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/translate.html b/dev/_modules/MDAnalysis/transformations/translate.html index 616a980f05..e758aaf5de 100644 --- a/dev/_modules/MDAnalysis/transformations/translate.html +++ b/dev/_modules/MDAnalysis/transformations/translate.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.translate — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.translate — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -308,7 +308,7 @@

Source code for MDAnalysis.transformations.translate

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/transformations/wrap.html b/dev/_modules/MDAnalysis/transformations/wrap.html index 82f92af181..052e24c1f6 100644 --- a/dev/_modules/MDAnalysis/transformations/wrap.html +++ b/dev/_modules/MDAnalysis/transformations/wrap.html @@ -3,7 +3,7 @@ - MDAnalysis.transformations.wrap — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.transformations.wrap — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -298,7 +298,7 @@

Source code for MDAnalysis.transformations.wrap

< aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/units.html b/dev/_modules/MDAnalysis/units.html index ce486df8e2..a71485e3ea 100644 --- a/dev/_modules/MDAnalysis/units.html +++ b/dev/_modules/MDAnalysis/units.html @@ -3,7 +3,7 @@ - MDAnalysis.units — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.units — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -547,7 +547,7 @@

Source code for MDAnalysis.units

      aria-label="versions">
     
       
-        2.6.0-dev0
+        2.7.0-dev0
       
     
 
diff --git a/dev/_modules/MDAnalysis/visualization/streamlines.html b/dev/_modules/MDAnalysis/visualization/streamlines.html
index 9abbf47d3c..edbec0df11 100644
--- a/dev/_modules/MDAnalysis/visualization/streamlines.html
+++ b/dev/_modules/MDAnalysis/visualization/streamlines.html
@@ -3,7 +3,7 @@
 
   
   
-  MDAnalysis.visualization.streamlines — MDAnalysis 2.6.0-dev0 documentation
+  MDAnalysis.visualization.streamlines — MDAnalysis 2.7.0-dev0 documentation
       
       
       
@@ -21,7 +21,7 @@
         
     
     
     
      
@@ -40,7 +40,7 @@
               
           
               
- 2.6.0-dev0 + 2.7.0-dev0
@@ -496,7 +496,7 @@

Source code for MDAnalysis.visualization.streamlines

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/MDAnalysis/visualization/streamlines_3D.html b/dev/_modules/MDAnalysis/visualization/streamlines_3D.html index 9608f30b11..fa827d75b0 100644 --- a/dev/_modules/MDAnalysis/visualization/streamlines_3D.html +++ b/dev/_modules/MDAnalysis/visualization/streamlines_3D.html @@ -3,7 +3,7 @@ - MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -649,7 +649,7 @@

Source code for MDAnalysis.visualization.streamlines_3D

- 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_modules/index.html b/dev/_modules/index.html index 31ca1309d5..fbd0f62ed6 100644 --- a/dev/_modules/index.html +++ b/dev/_modules/index.html @@ -3,7 +3,7 @@ - Overview: module code — MDAnalysis 2.6.0-dev0 documentation + Overview: module code — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -281,7 +281,7 @@

All modules for which code is available

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/_static/documentation_options.js b/dev/_static/documentation_options.js index b30fecaea0..8e4a626664 100644 --- a/dev/_static/documentation_options.js +++ b/dev/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2.6.0-dev0', + VERSION: '2.7.0-dev0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/dev/_static/opensearch.xml b/dev/_static/opensearch.xml index 3f8ee7f9e6..da686bd63f 100644 --- a/dev/_static/opensearch.xml +++ b/dev/_static/opensearch.xml @@ -1,11 +1,11 @@ MDAnalysis - Search MDAnalysis 2.6.0-dev0 documentation + Search MDAnalysis 2.7.0-dev0 documentation utf-8 - MDAnalysis 2.6.0-dev0 documentation + MDAnalysis 2.7.0-dev0 documentation https://docs.mdanalysis.org/_static/mdanalysis-logo.ico \ No newline at end of file diff --git a/dev/documentation_pages/analysis/align.html b/dev/documentation_pages/analysis/align.html index 389b7ec81c..a15bd771c7 100644 --- a/dev/documentation_pages/analysis/align.html +++ b/dev/documentation_pages/analysis/align.html @@ -4,7 +4,7 @@ - 4.2.1. Coordinate fitting and alignment — MDAnalysis.analysis.align — MDAnalysis 2.6.0-dev0 documentation + 4.2.1. Coordinate fitting and alignment — MDAnalysis.analysis.align — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1105,7 +1105,7 @@

4.2.1.4. Helper functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/atomicdistances.html b/dev/documentation_pages/analysis/atomicdistances.html index d527802b97..83dca7a129 100644 --- a/dev/documentation_pages/analysis/atomicdistances.html +++ b/dev/documentation_pages/analysis/atomicdistances.html @@ -4,7 +4,7 @@ - 4.2.4. Simple atomic distance analysis — MDAnalysis.analysis.atomicdistances — MDAnalysis 2.6.0-dev0 documentation + 4.2.4. Simple atomic distance analysis — MDAnalysis.analysis.atomicdistances — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -304,7 +304,7 @@

4.2.4.1. Basic usage - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/base.html b/dev/documentation_pages/analysis/base.html index 711546bceb..caa102c234 100644 --- a/dev/documentation_pages/analysis/base.html +++ b/dev/documentation_pages/analysis/base.html @@ -4,7 +4,7 @@ - 4.1.1. Analysis building blocks — MDAnalysis.analysis.base — MDAnalysis 2.6.0-dev0 documentation + 4.1.1. Analysis building blocks — MDAnalysis.analysis.base — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -570,7 +570,7 @@

4.1.1.3. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/bat.html b/dev/documentation_pages/analysis/bat.html index d791f2a3bf..399c63dc2c 100644 --- a/dev/documentation_pages/analysis/bat.html +++ b/dev/documentation_pages/analysis/bat.html @@ -4,7 +4,7 @@ - 4.2.8. Bond-Angle-Torsion coordinates analysis — MDAnalysis.analysis.bat — MDAnalysis 2.6.0-dev0 documentation + 4.2.8. Bond-Angle-Torsion coordinates analysis — MDAnalysis.analysis.bat — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -443,7 +443,7 @@

4.2.8.2. Analysis classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/contacts.html b/dev/documentation_pages/analysis/contacts.html index feb883f868..b17160e23e 100644 --- a/dev/documentation_pages/analysis/contacts.html +++ b/dev/documentation_pages/analysis/contacts.html @@ -4,7 +4,7 @@ - 4.2.2. Native contacts analysis — MDAnalysis.analysis.contacts — MDAnalysis 2.6.0-dev0 documentation + 4.2.2. Native contacts analysis — MDAnalysis.analysis.contacts — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -536,7 +536,7 @@

4.2.2.3. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/data.html b/dev/documentation_pages/analysis/data.html index 6cbd136658..ac09e8e5ec 100644 --- a/dev/documentation_pages/analysis/data.html +++ b/dev/documentation_pages/analysis/data.html @@ -4,7 +4,7 @@ - 4.11.1. Analysis data files — MDAnalysis 2.6.0-dev0 documentation + 4.11.1. Analysis data files — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -231,7 +231,7 @@

4.11.1.1. Data files - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/density.html b/dev/documentation_pages/analysis/density.html index 2fedce5e1c..f4cb1f0f2b 100644 --- a/dev/documentation_pages/analysis/density.html +++ b/dev/documentation_pages/analysis/density.html @@ -4,7 +4,7 @@ - 4.8.1. Generating densities from trajectories — MDAnalysis.analysis.density — MDAnalysis 2.6.0-dev0 documentation + 4.8.1. Generating densities from trajectories — MDAnalysis.analysis.density — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1029,7 +1029,7 @@

4.8.1.3. Density object - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/dielectric.html b/dev/documentation_pages/analysis/dielectric.html index 1a0a298502..8cb7574859 100644 --- a/dev/documentation_pages/analysis/dielectric.html +++ b/dev/documentation_pages/analysis/dielectric.html @@ -4,7 +4,7 @@ - 4.8.4. Dielectric — MDAnalysis.analysis.dielectric — MDAnalysis 2.6.0-dev0 documentation + 4.8.4. Dielectric — MDAnalysis.analysis.dielectric — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -278,7 +278,7 @@

4.8.4. Dielectric — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/diffusionmap.html b/dev/documentation_pages/analysis/diffusionmap.html index 4a0477a6e9..cf25787d43 100644 --- a/dev/documentation_pages/analysis/diffusionmap.html +++ b/dev/documentation_pages/analysis/diffusionmap.html @@ -4,7 +4,7 @@ - 4.9.1. Diffusion map — MDAnalysis.analysis.diffusionmap — MDAnalysis 2.6.0-dev0 documentation + 4.9.1. Diffusion map — MDAnalysis.analysis.diffusionmap — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -428,7 +428,7 @@

4.9.1.2. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/dihedrals.html b/dev/documentation_pages/analysis/dihedrals.html index c8578a2847..73520299e2 100644 --- a/dev/documentation_pages/analysis/dihedrals.html +++ b/dev/documentation_pages/analysis/dihedrals.html @@ -4,7 +4,7 @@ - 4.7.1.3. Dihedral angles analysis — MDAnalysis.analysis.dihedrals — MDAnalysis 2.6.0-dev0 documentation + 4.7.1.3. Dihedral angles analysis — MDAnalysis.analysis.dihedrals — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -671,7 +671,7 @@

4.7.1.3.2. Analysis Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/distances.html b/dev/documentation_pages/analysis/distances.html index 913d2f27e3..490d6884d6 100644 --- a/dev/documentation_pages/analysis/distances.html +++ b/dev/documentation_pages/analysis/distances.html @@ -4,7 +4,7 @@ - 4.2.3. Distance analysis — MDAnalysis.analysis.distances — MDAnalysis 2.6.0-dev0 documentation + 4.2.3. Distance analysis — MDAnalysis.analysis.distances — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -382,7 +382,7 @@

4.2.3. Distance analysis — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore.html b/dev/documentation_pages/analysis/encore.html index 66a79eb837..4da8c909be 100644 --- a/dev/documentation_pages/analysis/encore.html +++ b/dev/documentation_pages/analysis/encore.html @@ -4,7 +4,7 @@ - 4.2.7. ENCORE Ensemble Similarity Calculations — MDAnalysis.analysis.encore — MDAnalysis 2.6.0-dev0 documentation + 4.2.7. ENCORE Ensemble Similarity Calculations — MDAnalysis.analysis.encore — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -232,7 +232,7 @@

4.2.7.2. References - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/bootstrap.html b/dev/documentation_pages/analysis/encore/bootstrap.html index 359775de2a..49972998bb 100644 --- a/dev/documentation_pages/analysis/encore/bootstrap.html +++ b/dev/documentation_pages/analysis/encore/bootstrap.html @@ -4,7 +4,7 @@ - 4.2.7.1.6. bootstrap procedures — MDAnalysis.analysis.ensemble.bootstrap — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.6. bootstrap procedures — MDAnalysis.analysis.ensemble.bootstrap — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -240,7 +240,7 @@

4.2.7.1.6. bootstrap procedures — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/clustering.html b/dev/documentation_pages/analysis/encore/clustering.html index 2d7b160d10..aec1505bf3 100644 --- a/dev/documentation_pages/analysis/encore/clustering.html +++ b/dev/documentation_pages/analysis/encore/clustering.html @@ -4,7 +4,7 @@ - 4.2.7.1.2. Clustering — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.2. Clustering — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -636,7 +636,7 @@

4.2.7.1.2.4. Clustering algorithms - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/confdistmatrix.html b/dev/documentation_pages/analysis/encore/confdistmatrix.html index e3751bb5db..b9856c5dc9 100644 --- a/dev/documentation_pages/analysis/encore/confdistmatrix.html +++ b/dev/documentation_pages/analysis/encore/confdistmatrix.html @@ -4,7 +4,7 @@ - 4.2.7.1.4. Distance Matrix calculation — MDAnalysis.analysis.ensemble.confdistmatrix — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.4. Distance Matrix calculation — MDAnalysis.analysis.ensemble.confdistmatrix — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -289,7 +289,7 @@

4.2.7.1.4. Distance Matrix calculation aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/covariance.html b/dev/documentation_pages/analysis/encore/covariance.html index f8bf95cbbf..a84ffcce4a 100644 --- a/dev/documentation_pages/analysis/encore/covariance.html +++ b/dev/documentation_pages/analysis/encore/covariance.html @@ -4,7 +4,7 @@ - 4.2.7.1.5. Covariance calculation — encore.covariance — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.5. Covariance calculation — encore.covariance — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -251,7 +251,7 @@

4.2.7.1.5. Covariance calculation — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/dimensionality_reduction.html b/dev/documentation_pages/analysis/encore/dimensionality_reduction.html index b94b206690..f47983ea13 100644 --- a/dev/documentation_pages/analysis/encore/dimensionality_reduction.html +++ b/dev/documentation_pages/analysis/encore/dimensionality_reduction.html @@ -4,7 +4,7 @@ - 4.2.7.1.3. Dimensionality reduction — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.3. Dimensionality reduction — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -368,7 +368,7 @@

4.2.7.1.3.3. Dimensionality reduction al aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/similarity.html b/dev/documentation_pages/analysis/encore/similarity.html index d952797e25..1d9cb64885 100644 --- a/dev/documentation_pages/analysis/encore/similarity.html +++ b/dev/documentation_pages/analysis/encore/similarity.html @@ -4,7 +4,7 @@ - 4.2.7.1.1. Ensemble Similarity Calculations — MDAnalysis.analysis.encore.similarity — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.1. Ensemble Similarity Calculations — MDAnalysis.analysis.encore.similarity — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1272,7 +1272,7 @@

4.2.7.1.1.2. Function reference - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/encore/utils.html b/dev/documentation_pages/analysis/encore/utils.html index fe16541297..a1034a652e 100644 --- a/dev/documentation_pages/analysis/encore/utils.html +++ b/dev/documentation_pages/analysis/encore/utils.html @@ -4,7 +4,7 @@ - 4.2.7.1.7. Utility functions for ENCORE — MDAnalysis 2.6.0-dev0 documentation + 4.2.7.1.7. Utility functions for ENCORE — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -396,7 +396,7 @@ aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/gnm.html b/dev/documentation_pages/analysis/gnm.html index 5230108f53..3fca83d22b 100644 --- a/dev/documentation_pages/analysis/gnm.html +++ b/dev/documentation_pages/analysis/gnm.html @@ -4,7 +4,7 @@ - 4.7.1.1. Elastic network analysis of MD trajectories — MDAnalysis.analysis.gnm — MDAnalysis 2.6.0-dev0 documentation + 4.7.1.1. Elastic network analysis of MD trajectories — MDAnalysis.analysis.gnm — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -423,7 +423,7 @@

4.7.1.1.2. Utility functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/hbond_autocorrel.html b/dev/documentation_pages/analysis/hbond_autocorrel.html index 9a6a9d6803..ed86077c06 100644 --- a/dev/documentation_pages/analysis/hbond_autocorrel.html +++ b/dev/documentation_pages/analysis/hbond_autocorrel.html @@ -4,7 +4,7 @@ - 4.3.2. Hydrogen bond autocorrelation — MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.6.0-dev0 documentation + 4.3.2. Hydrogen bond autocorrelation — MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -433,7 +433,7 @@

4.3.2.5. Functions and Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/hbond_autocorrel_deprecated.html b/dev/documentation_pages/analysis/hbond_autocorrel_deprecated.html index d644b10ebb..258d920545 100644 --- a/dev/documentation_pages/analysis/hbond_autocorrel_deprecated.html +++ b/dev/documentation_pages/analysis/hbond_autocorrel_deprecated.html @@ -4,7 +4,7 @@ - 4.3.4. Hydrogen bond autocorrelation — MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated) — MDAnalysis 2.6.0-dev0 documentation + 4.3.4. Hydrogen bond autocorrelation — MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated) — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -182,7 +182,7 @@

4.3.4. Hydrogen bond autocorrelation — aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/helix_analysis.html b/dev/documentation_pages/analysis/helix_analysis.html index eab29bb9db..4cc9506e7b 100644 --- a/dev/documentation_pages/analysis/helix_analysis.html +++ b/dev/documentation_pages/analysis/helix_analysis.html @@ -4,7 +4,7 @@ - 4.7.1.2. HELANAL — analysis of protein helices — MDAnalysis 2.6.0-dev0 documentation + 4.7.1.2. HELANAL — analysis of protein helices — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -222,7 +222,7 @@

4.7.1.2.1. Example use - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/hole2.html b/dev/documentation_pages/analysis/hole2.html index 4fb29389de..7936d5f1a1 100644 --- a/dev/documentation_pages/analysis/hole2.html +++ b/dev/documentation_pages/analysis/hole2.html @@ -4,7 +4,7 @@ - 4.4.1. HOLE analysis — MDAnalysis.analysis.hole2 — MDAnalysis 2.6.0-dev0 documentation + 4.4.1. HOLE analysis — MDAnalysis.analysis.hole2 — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1346,7 +1346,7 @@

4.4.1.2.2. HOLE Analysis — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/hydrogenbonds.html b/dev/documentation_pages/analysis/hydrogenbonds.html index 9269b371eb..3dbc73bd69 100644 --- a/dev/documentation_pages/analysis/hydrogenbonds.html +++ b/dev/documentation_pages/analysis/hydrogenbonds.html @@ -4,7 +4,7 @@ - 4.3.1. Hydrogen Bond Analysis — MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.6.0-dev0 documentation + 4.3.1. Hydrogen Bond Analysis — MDAnalysis.analysis.hydrogenbonds.hbond_analysis — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -672,7 +672,7 @@

4.3.1.4. The class and its methods - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/leaflet.html b/dev/documentation_pages/analysis/leaflet.html index ea1fed4b17..99ba80cff7 100644 --- a/dev/documentation_pages/analysis/leaflet.html +++ b/dev/documentation_pages/analysis/leaflet.html @@ -4,7 +4,7 @@ - 4.4.2. Leaflet identification — MDAnalysis.analysis.leaflet — MDAnalysis 2.6.0-dev0 documentation + 4.4.2. Leaflet identification — MDAnalysis.analysis.leaflet — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -332,7 +332,7 @@

4.4.2.2. Classes and Functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/legacy/x3dna.html b/dev/documentation_pages/analysis/legacy/x3dna.html index db9b912357..1475d05d26 100644 --- a/dev/documentation_pages/analysis/legacy/x3dna.html +++ b/dev/documentation_pages/analysis/legacy/x3dna.html @@ -4,7 +4,7 @@ - 4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles — MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.6.0-dev0 documentation + 4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles — MDAnalysis.analysis.legacy.x3dna — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -599,7 +599,7 @@

4.10.1.1.1.3. Utilities - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/legacy_modules.html b/dev/documentation_pages/analysis/legacy_modules.html index 44a9602397..17bd8fe9c4 100644 --- a/dev/documentation_pages/analysis/legacy_modules.html +++ b/dev/documentation_pages/analysis/legacy_modules.html @@ -4,7 +4,7 @@ - 4.10.1. MDAnalysis.analysis.legacy — Legacy analysis code — MDAnalysis 2.6.0-dev0 documentation + 4.10.1. MDAnalysis.analysis.legacy — Legacy analysis code — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -184,7 +184,7 @@

4.10.1.1. Legacy modules - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/lineardensity.html b/dev/documentation_pages/analysis/lineardensity.html index 806b904ddb..cf8d3b6567 100644 --- a/dev/documentation_pages/analysis/lineardensity.html +++ b/dev/documentation_pages/analysis/lineardensity.html @@ -4,7 +4,7 @@ - 4.8.2. Linear Density — MDAnalysis.analysis.lineardensity — MDAnalysis 2.6.0-dev0 documentation + 4.8.2. Linear Density — MDAnalysis.analysis.lineardensity — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -395,7 +395,7 @@

4.8.2. Linear Density — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/msd.html b/dev/documentation_pages/analysis/msd.html index 32c2c6359b..e0e692dd2a 100644 --- a/dev/documentation_pages/analysis/msd.html +++ b/dev/documentation_pages/analysis/msd.html @@ -4,7 +4,7 @@ - 4.7.2.2. Mean Squared Displacement — MDAnalysis.analysis.msd — MDAnalysis 2.6.0-dev0 documentation + 4.7.2.2. Mean Squared Displacement — MDAnalysis.analysis.msd — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -491,7 +491,7 @@

4.7.2.2.4. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/nucleicacids.html b/dev/documentation_pages/analysis/nucleicacids.html index 459e4beee1..ecff8efab2 100644 --- a/dev/documentation_pages/analysis/nucleicacids.html +++ b/dev/documentation_pages/analysis/nucleicacids.html @@ -4,7 +4,7 @@ - 4.5.2. Updated nucleic acid analysis — MDAnalysis.analysis.nucleicacids — MDAnalysis 2.6.0-dev0 documentation + 4.5.2. Updated nucleic acid analysis — MDAnalysis.analysis.nucleicacids — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -383,7 +383,7 @@

4.5.2.1. Distances - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/nuclinfo.html b/dev/documentation_pages/analysis/nuclinfo.html index dfb05c3b25..dad61e447d 100644 --- a/dev/documentation_pages/analysis/nuclinfo.html +++ b/dev/documentation_pages/analysis/nuclinfo.html @@ -4,7 +4,7 @@ - 4.5.1. Nucleic acid analysis — MDAnalysis.analysis.nuclinfo — MDAnalysis 2.6.0-dev0 documentation + 4.5.1. Nucleic acid analysis — MDAnalysis.analysis.nuclinfo — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -618,7 +618,7 @@

4.5.1.3. Dihedral angles - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/pca.html b/dev/documentation_pages/analysis/pca.html index 1b7b1f34bf..f213f1a17d 100644 --- a/dev/documentation_pages/analysis/pca.html +++ b/dev/documentation_pages/analysis/pca.html @@ -4,7 +4,7 @@ - 4.9.2. Principal Component Analysis (PCA) — MDAnalysis.analysis.pca — MDAnalysis 2.6.0-dev0 documentation + 4.9.2. Principal Component Analysis (PCA) — MDAnalysis.analysis.pca — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -757,7 +757,7 @@

4.9.2.2. Classes and Functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/polymer.html b/dev/documentation_pages/analysis/polymer.html index 244b2bbdd1..d4a7f7431a 100644 --- a/dev/documentation_pages/analysis/polymer.html +++ b/dev/documentation_pages/analysis/polymer.html @@ -4,7 +4,7 @@ - 4.6.1. Polymer analysis — MDAnalysis.analysis.polymer — MDAnalysis 2.6.0-dev0 documentation + 4.6.1. Polymer analysis — MDAnalysis.analysis.polymer — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -420,7 +420,7 @@

4.6.1. Polymer analysis — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/psa.html b/dev/documentation_pages/analysis/psa.html index 820b4e8675..2d6f33c252 100644 --- a/dev/documentation_pages/analysis/psa.html +++ b/dev/documentation_pages/analysis/psa.html @@ -4,7 +4,7 @@ - 4.2.6. Calculating path similarity — MDAnalysis.analysis.psa — MDAnalysis 2.6.0-dev0 documentation + 4.2.6. Calculating path similarity — MDAnalysis.analysis.psa — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1493,7 +1493,7 @@

4.2.6.2. Classes, methods, and functions aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/rdf.html b/dev/documentation_pages/analysis/rdf.html index 147b65b39c..39e34653fc 100644 --- a/dev/documentation_pages/analysis/rdf.html +++ b/dev/documentation_pages/analysis/rdf.html @@ -4,7 +4,7 @@ - 4.7.2.1. Radial Distribution Functions — MDAnalysis.analysis.rdf — MDAnalysis 2.6.0-dev0 documentation + 4.7.2.1. Radial Distribution Functions — MDAnalysis.analysis.rdf — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -673,7 +673,7 @@

4.7.2.1. Radial Distribution Functions aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/rms.html b/dev/documentation_pages/analysis/rms.html index 4e421afbef..be7425943a 100644 --- a/dev/documentation_pages/analysis/rms.html +++ b/dev/documentation_pages/analysis/rms.html @@ -4,7 +4,7 @@ - 4.2.5. Calculating root mean square quantities — MDAnalysis.analysis.rms — MDAnalysis 2.6.0-dev0 documentation + 4.2.5. Calculating root mean square quantities — MDAnalysis.analysis.rms — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -719,7 +719,7 @@

4.2.5.3. Analysis classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/waterdynamics.html b/dev/documentation_pages/analysis/waterdynamics.html index 1943dd4fb4..152315c283 100644 --- a/dev/documentation_pages/analysis/waterdynamics.html +++ b/dev/documentation_pages/analysis/waterdynamics.html @@ -4,7 +4,7 @@ - 4.8.3. Water dynamics analysis — MDAnalysis.analysis.waterdynamics — MDAnalysis 2.6.0-dev0 documentation + 4.8.3. Water dynamics analysis — MDAnalysis.analysis.waterdynamics — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -700,7 +700,7 @@

4.8.3.3. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis/wbridge_analysis.html b/dev/documentation_pages/analysis/wbridge_analysis.html index b7edcdc8d6..3f2165b7ed 100644 --- a/dev/documentation_pages/analysis/wbridge_analysis.html +++ b/dev/documentation_pages/analysis/wbridge_analysis.html @@ -4,7 +4,7 @@ - 4.3.3. Water Bridge analysis — MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis — MDAnalysis 2.6.0-dev0 documentation + 4.3.3. Water Bridge analysis — MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1017,7 +1017,7 @@

4.3.3.8. Classes
-DEFAULT_ACCEPTORS = {'CHARMM27': ('OG1', 'OD1', 'OE1', 'OH', 'ND1', 'O', 'SG', 'OE2', 'SD', 'NE2', 'OH2', 'OC1', 'OW', 'OG', 'OD2', 'OC2'), 'GLYCAM06': ('N', 'NT', 'SM', 'OH', 'OS', 'O', 'OW', 'O2', 'OY'), 'other': ()}
+DEFAULT_ACCEPTORS = {'CHARMM27': ('NE2', 'OE2', 'OG', 'O', 'ND1', 'OE1', 'OD1', 'OH2', 'OC2', 'OG1', 'OH', 'OC1', 'OD2', 'SG', 'OW', 'SD'), 'GLYCAM06': ('OH', 'OW', 'O', 'NT', 'OY', 'N', 'OS', 'SM', 'O2'), 'other': ()}

default atom names that are treated as hydrogen acceptors (see Default heavy atom names for CHARMM27 force field.); use the keyword acceptors to add a list of additional acceptor names.

@@ -1025,7 +1025,7 @@

4.3.3.8. Classes
-DEFAULT_DONORS = {'CHARMM27': ('ND2', 'NE1', 'OG1', 'N', 'NZ', 'NE', 'NE2', 'OH2', 'OH', 'NH2', 'ND1', 'OW', 'SG', 'OG', 'NH1'), 'GLYCAM06': ('N3', 'OH', 'N', 'NT', 'OW'), 'other': ()}
+DEFAULT_DONORS = {'CHARMM27': ('NE2', 'NE1', 'OH2', 'NH2', 'OG', 'OG1', 'NE', 'OH', 'NZ', 'ND1', 'ND2', 'N', 'SG', 'NH1', 'OW'), 'GLYCAM06': ('NT', 'N', 'OW', 'OH', 'N3'), 'other': ()}

default heavy atom names whose hydrogens are treated as donors (see Default heavy atom names for CHARMM27 force field.); use the keyword donors to add a list of additional donor names.

@@ -1171,7 +1171,7 @@

4.3.3.8. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/analysis_modules.html b/dev/documentation_pages/analysis_modules.html index 998df00610..56e011a6f2 100644 --- a/dev/documentation_pages/analysis_modules.html +++ b/dev/documentation_pages/analysis_modules.html @@ -4,7 +4,7 @@ - 4. Analysis modules — MDAnalysis 2.6.0-dev0 documentation + 4. Analysis modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -379,7 +379,7 @@

4.11. Data - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary/EDR.html b/dev/documentation_pages/auxiliary/EDR.html index 08cb2b4bf9..2bcd7c9510 100644 --- a/dev/documentation_pages/auxiliary/EDR.html +++ b/dev/documentation_pages/auxiliary/EDR.html @@ -4,7 +4,7 @@ - 10.5. EDR auxiliary reader — MDAnalysis.auxiliary.EDR — MDAnalysis 2.6.0-dev0 documentation + 10.5. EDR auxiliary reader — MDAnalysis.auxiliary.EDR — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -446,7 +446,7 @@

10.5.4. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary/XVG.html b/dev/documentation_pages/auxiliary/XVG.html index 023572f862..2a4bae32d9 100644 --- a/dev/documentation_pages/auxiliary/XVG.html +++ b/dev/documentation_pages/auxiliary/XVG.html @@ -4,7 +4,7 @@ - 10.4. XVG auxiliary reader — MDAnalysis.auxiliary.XVG — MDAnalysis 2.6.0-dev0 documentation + 10.4. XVG auxiliary reader — MDAnalysis.auxiliary.XVG — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -287,7 +287,7 @@

10.4.1. XVG Readers - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary/base.html b/dev/documentation_pages/auxiliary/base.html index c117093a81..dbe5f00320 100644 --- a/dev/documentation_pages/auxiliary/base.html +++ b/dev/documentation_pages/auxiliary/base.html @@ -4,7 +4,7 @@ - 10.2. Auxiliary Readers — MDAnalysis.auxiliary.base — MDAnalysis 2.6.0-dev0 documentation + 10.2. Auxiliary Readers — MDAnalysis.auxiliary.base — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -658,7 +658,7 @@

10.2. Auxiliary Readers — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary/core.html b/dev/documentation_pages/auxiliary/core.html index 3a079a2d3f..95b306242e 100644 --- a/dev/documentation_pages/auxiliary/core.html +++ b/dev/documentation_pages/auxiliary/core.html @@ -4,7 +4,7 @@ - 10.3. Common functions for auxiliary reading — MDAnalysis.auxiliary.core — MDAnalysis 2.6.0-dev0 documentation + 10.3. Common functions for auxiliary reading — MDAnalysis.auxiliary.core — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -197,7 +197,7 @@

10.3. Common functions for auxiliary rea aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary/init.html b/dev/documentation_pages/auxiliary/init.html index a2d6f1233d..97228c0524 100644 --- a/dev/documentation_pages/auxiliary/init.html +++ b/dev/documentation_pages/auxiliary/init.html @@ -4,7 +4,7 @@ - 10.1. Auxiliary Readers — MDAnalysis.auxiliary — MDAnalysis 2.6.0-dev0 documentation + 10.1. Auxiliary Readers — MDAnalysis.auxiliary — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -646,7 +646,7 @@

10.1.2.4.4. Methods - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/auxiliary_modules.html b/dev/documentation_pages/auxiliary_modules.html index 99c331f13d..8f13f39c8f 100644 --- a/dev/documentation_pages/auxiliary_modules.html +++ b/dev/documentation_pages/auxiliary_modules.html @@ -4,7 +4,7 @@ - 10. Auxiliary modules — MDAnalysis 2.6.0-dev0 documentation + 10. Auxiliary modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -156,7 +156,7 @@

10. Auxiliary modules - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/converters.html b/dev/documentation_pages/converters.html index f9b86dfc6d..7666b739a8 100644 --- a/dev/documentation_pages/converters.html +++ b/dev/documentation_pages/converters.html @@ -4,7 +4,7 @@ - 7. Converter modules — MDAnalysis 2.6.0-dev0 documentation + 7. Converter modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -192,7 +192,7 @@ aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/converters/OpenMM.html b/dev/documentation_pages/converters/OpenMM.html index 0fdd23f8a9..ea47194c37 100644 --- a/dev/documentation_pages/converters/OpenMM.html +++ b/dev/documentation_pages/converters/OpenMM.html @@ -4,7 +4,7 @@ - 7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser — MDAnalysis 2.6.0-dev0 documentation + 7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -671,7 +671,7 @@

7.6.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/converters/ParmEd.html b/dev/documentation_pages/converters/ParmEd.html index 7edff8be47..e69f9a2562 100644 --- a/dev/documentation_pages/converters/ParmEd.html +++ b/dev/documentation_pages/converters/ParmEd.html @@ -4,7 +4,7 @@ - 7.1. ParmEd topology parser — MDAnalysis.converters.ParmEdParser — MDAnalysis 2.6.0-dev0 documentation + 7.1. ParmEd topology parser — MDAnalysis.converters.ParmEdParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -526,7 +526,7 @@

7.2.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/converters/RDKit.html b/dev/documentation_pages/converters/RDKit.html index 9dd131cdc3..70beb17514 100644 --- a/dev/documentation_pages/converters/RDKit.html +++ b/dev/documentation_pages/converters/RDKit.html @@ -4,7 +4,7 @@ - 7.3. RDKit topology parser — MDAnalysis.converters.RDKitParser — MDAnalysis 2.6.0-dev0 documentation + 7.3. RDKit topology parser — MDAnalysis.converters.RDKitParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -849,7 +849,7 @@

7.4.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/CRD.html b/dev/documentation_pages/coordinates/CRD.html index 40b4a8788a..ae4644e14e 100644 --- a/dev/documentation_pages/coordinates/CRD.html +++ b/dev/documentation_pages/coordinates/CRD.html @@ -4,7 +4,7 @@ - 6.2. CRD structure files in MDAnalysis — MDAnalysis.coordinates.CRD — MDAnalysis 2.6.0-dev0 documentation + 6.2. CRD structure files in MDAnalysis — MDAnalysis.coordinates.CRD — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -271,7 +271,7 @@

6.2. CRD structure files in MDAnalysis aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/DCD.html b/dev/documentation_pages/coordinates/DCD.html index 2e7d31dc7a..3b693feede 100644 --- a/dev/documentation_pages/coordinates/DCD.html +++ b/dev/documentation_pages/coordinates/DCD.html @@ -4,7 +4,7 @@ - 6.3. DCD trajectory I/O — MDAnalysis.coordinates.DCD — MDAnalysis 2.6.0-dev0 documentation + 6.3. DCD trajectory I/O — MDAnalysis.coordinates.DCD — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1222,7 +1222,7 @@

6.3.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/DLPoly.html b/dev/documentation_pages/coordinates/DLPoly.html index 2e469ce61a..e2c4b1bc9a 100644 --- a/dev/documentation_pages/coordinates/DLPoly.html +++ b/dev/documentation_pages/coordinates/DLPoly.html @@ -4,7 +4,7 @@ - 6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly — MDAnalysis 2.6.0-dev0 documentation + 6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -218,7 +218,7 @@

6.4. DL_Poly format reader - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/DMS.html b/dev/documentation_pages/coordinates/DMS.html index 3743248953..6ba0ff1633 100644 --- a/dev/documentation_pages/coordinates/DMS.html +++ b/dev/documentation_pages/coordinates/DMS.html @@ -4,7 +4,7 @@ - 6.5. DESRES file format — MDAnalysis.coordinates.DMS — MDAnalysis 2.6.0-dev0 documentation + 6.5. DESRES file format — MDAnalysis.coordinates.DMS — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -193,7 +193,7 @@

6.5. DESRES file format — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/FHIAIMS.html b/dev/documentation_pages/coordinates/FHIAIMS.html index e435e39f57..52e9e55042 100644 --- a/dev/documentation_pages/coordinates/FHIAIMS.html +++ b/dev/documentation_pages/coordinates/FHIAIMS.html @@ -4,7 +4,7 @@ - 6.25. FHI-AIMS file format — MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.6.0-dev0 documentation + 6.25. FHI-AIMS file format — MDAnalysis.coordinates.FHIAIMS — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1186,7 +1186,7 @@

6.25.2. Developer notes: - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/GMS.html b/dev/documentation_pages/coordinates/GMS.html index 3b7c8e76e8..5fd8677988 100644 --- a/dev/documentation_pages/coordinates/GMS.html +++ b/dev/documentation_pages/coordinates/GMS.html @@ -4,7 +4,7 @@ - 6.6. GAMESS trajectory reader — MDAnalysis.coordinates.GMS — MDAnalysis 2.6.0-dev0 documentation + 6.6. GAMESS trajectory reader — MDAnalysis.coordinates.GMS — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -237,7 +237,7 @@

6.6. GAMESS trajectory reader — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/GRO.html b/dev/documentation_pages/coordinates/GRO.html index d8f4f30674..0d66606bd0 100644 --- a/dev/documentation_pages/coordinates/GRO.html +++ b/dev/documentation_pages/coordinates/GRO.html @@ -4,7 +4,7 @@ - 6.8. GRO file format — MDAnalysis.coordinates.GRO — MDAnalysis 2.6.0-dev0 documentation + 6.8. GRO file format — MDAnalysis.coordinates.GRO — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -395,7 +395,7 @@

6.8.3. Developer notes: - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/GSD.html b/dev/documentation_pages/coordinates/GSD.html index 6319c1b9be..9e5d6a80ed 100644 --- a/dev/documentation_pages/coordinates/GSD.html +++ b/dev/documentation_pages/coordinates/GSD.html @@ -4,7 +4,7 @@ - 6.7. GSD trajectory reader — MDAnalysis.coordinates.GSD — MDAnalysis 2.6.0-dev0 documentation + 6.7. GSD trajectory reader — MDAnalysis.coordinates.GSD — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -979,7 +979,7 @@

6.7.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/H5MD.html b/dev/documentation_pages/coordinates/H5MD.html index 2d790fed3f..a56c633286 100644 --- a/dev/documentation_pages/coordinates/H5MD.html +++ b/dev/documentation_pages/coordinates/H5MD.html @@ -4,7 +4,7 @@ - 6.9. H5MD trajectories — MDAnalysis.coordinates.H5MD — MDAnalysis 2.6.0-dev0 documentation + 6.9. H5MD trajectories — MDAnalysis.coordinates.H5MD — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1134,7 +1134,7 @@

6.9.5. Classes
-class MDAnalysis.coordinates.H5MD.H5MDWriter(filename, n_atoms, n_frames=None, driver=None, convert_units=True, chunks=None, compression=None, compression_opts=None, positions=True, velocities=True, forces=True, timeunit=None, lengthunit=None, velocityunit=None, forceunit=None, author='N/A', author_email=None, creator='MDAnalysis', creator_version='2.6.0-dev0', **kwargs)[source]
+class MDAnalysis.coordinates.H5MD.H5MDWriter(filename, n_atoms, n_frames=None, driver=None, convert_units=True, chunks=None, compression=None, compression_opts=None, positions=True, velocities=True, forces=True, timeunit=None, lengthunit=None, velocityunit=None, forceunit=None, author='N/A', author_email=None, creator='MDAnalysis', creator_version='2.7.0-dev0', **kwargs)[source]

Writer for H5MD format (version 1.1).

H5MD trajectories are automatically recognised by the file extension “.h5md”.

@@ -1765,7 +1765,7 @@

6.9.5. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/INPCRD.html b/dev/documentation_pages/coordinates/INPCRD.html index d573af9f5d..70573d6b36 100644 --- a/dev/documentation_pages/coordinates/INPCRD.html +++ b/dev/documentation_pages/coordinates/INPCRD.html @@ -4,7 +4,7 @@ - 6.10. INPCRD structure files in MDAnalysis — MDAnalysis.coordinates.INPCRD — MDAnalysis 2.6.0-dev0 documentation + 6.10. INPCRD structure files in MDAnalysis — MDAnalysis.coordinates.INPCRD — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -212,7 +212,7 @@

6.10.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/LAMMPS.html b/dev/documentation_pages/coordinates/LAMMPS.html index f799d3281b..29e4216eaa 100644 --- a/dev/documentation_pages/coordinates/LAMMPS.html +++ b/dev/documentation_pages/coordinates/LAMMPS.html @@ -4,7 +4,7 @@ - 6.11. LAMMPS DCD trajectory and DATA I/O — MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.6.0-dev0 documentation + 6.11. LAMMPS DCD trajectory and DATA I/O — MDAnalysis.coordinates.LAMMPS — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -2898,7 +2898,7 @@

6.11.4. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/MMTF.html b/dev/documentation_pages/coordinates/MMTF.html index a8dc5800d5..230460b8c3 100644 --- a/dev/documentation_pages/coordinates/MMTF.html +++ b/dev/documentation_pages/coordinates/MMTF.html @@ -4,7 +4,7 @@ - 6.12. MMTF trajectory reader — MDAnalysis.coordinates.MMTF — MDAnalysis 2.6.0-dev0 documentation + 6.12. MMTF trajectory reader — MDAnalysis.coordinates.MMTF — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -222,7 +222,7 @@

6.12.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/MOL2.html b/dev/documentation_pages/coordinates/MOL2.html index f490e07b9a..12d9810e7f 100644 --- a/dev/documentation_pages/coordinates/MOL2.html +++ b/dev/documentation_pages/coordinates/MOL2.html @@ -4,7 +4,7 @@ - 6.13. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.6.0-dev0 documentation + 6.13. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -355,7 +355,7 @@

6.13.3. MOL2 format notes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/NAMDBIN.html b/dev/documentation_pages/coordinates/NAMDBIN.html index d8821f23ea..456c029d66 100644 --- a/dev/documentation_pages/coordinates/NAMDBIN.html +++ b/dev/documentation_pages/coordinates/NAMDBIN.html @@ -4,7 +4,7 @@ - 6.14. NAMDBIN files format — MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.6.0-dev0 documentation + 6.14. NAMDBIN files format — MDAnalysis.coordinates.NAMDBIN — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -259,7 +259,7 @@

6.14.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/PDB.html b/dev/documentation_pages/coordinates/PDB.html index 189804633f..1303d4f1c0 100644 --- a/dev/documentation_pages/coordinates/PDB.html +++ b/dev/documentation_pages/coordinates/PDB.html @@ -4,7 +4,7 @@ - 6.15. PDB structure files in MDAnalysis — MDAnalysis.coordinates.PDB — MDAnalysis 2.6.0-dev0 documentation + 6.15. PDB structure files in MDAnalysis — MDAnalysis.coordinates.PDB — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1502,7 +1502,7 @@

6.15.3. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/PDBQT.html b/dev/documentation_pages/coordinates/PDBQT.html index febb349e58..8037fa7cc0 100644 --- a/dev/documentation_pages/coordinates/PDBQT.html +++ b/dev/documentation_pages/coordinates/PDBQT.html @@ -4,7 +4,7 @@ - 6.16. PDBQT structure files in MDAnalysis — MDAnalysis.coordinates.PDBQT — MDAnalysis 2.6.0-dev0 documentation + 6.16. PDBQT structure files in MDAnalysis — MDAnalysis.coordinates.PDBQT — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -438,7 +438,7 @@

6.16. PDBQT structure files in MDAnalysi aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/PQR.html b/dev/documentation_pages/coordinates/PQR.html index e2e0640948..cdae1908fa 100644 --- a/dev/documentation_pages/coordinates/PQR.html +++ b/dev/documentation_pages/coordinates/PQR.html @@ -4,7 +4,7 @@ - 6.17. PQR file format — MDAnalysis.coordinates.PQR — MDAnalysis 2.6.0-dev0 documentation + 6.17. PQR file format — MDAnalysis.coordinates.PQR — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -332,7 +332,7 @@

6.17. PQR file format — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/TNG.html b/dev/documentation_pages/coordinates/TNG.html index 37ea41f56e..81598dcbd4 100644 --- a/dev/documentation_pages/coordinates/TNG.html +++ b/dev/documentation_pages/coordinates/TNG.html @@ -4,7 +4,7 @@ - 6.18. TNG trajectory files — MDAnalysis.coordinates.TNG — MDAnalysis 2.6.0-dev0 documentation + 6.18. TNG trajectory files — MDAnalysis.coordinates.TNG — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -350,7 +350,7 @@

6.18.1. Current Limitations - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/TRJ.html b/dev/documentation_pages/coordinates/TRJ.html index 2564e60bc3..f3bf556b62 100644 --- a/dev/documentation_pages/coordinates/TRJ.html +++ b/dev/documentation_pages/coordinates/TRJ.html @@ -4,7 +4,7 @@ - 6.19. AMBER trajectories — MDAnalysis.coordinates.TRJ — MDAnalysis 2.6.0-dev0 documentation + 6.19. AMBER trajectories — MDAnalysis.coordinates.TRJ — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -604,7 +604,7 @@

6.19. AMBER trajectories — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/TRR.html b/dev/documentation_pages/coordinates/TRR.html index 416551da96..c933ba0e8e 100644 --- a/dev/documentation_pages/coordinates/TRR.html +++ b/dev/documentation_pages/coordinates/TRR.html @@ -4,7 +4,7 @@ - 6.20. TRR trajectory files — MDAnalysis.coordinates.TRR — MDAnalysis 2.6.0-dev0 documentation + 6.20. TRR trajectory files — MDAnalysis.coordinates.TRR — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1162,7 +1162,7 @@

6.20. TRR trajectory files — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/TRZ.html b/dev/documentation_pages/coordinates/TRZ.html index 3e5c429d3d..5a7a61dd13 100644 --- a/dev/documentation_pages/coordinates/TRZ.html +++ b/dev/documentation_pages/coordinates/TRZ.html @@ -4,7 +4,7 @@ - 6.21. TRZ trajectory I/O — MDAnalysis.coordinates.TRZ — MDAnalysis 2.6.0-dev0 documentation + 6.21. TRZ trajectory I/O — MDAnalysis.coordinates.TRZ — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -324,7 +324,7 @@

6.21.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/TXYZ.html b/dev/documentation_pages/coordinates/TXYZ.html index 62cc066274..bedd64443f 100644 --- a/dev/documentation_pages/coordinates/TXYZ.html +++ b/dev/documentation_pages/coordinates/TXYZ.html @@ -4,7 +4,7 @@ - 6.22. TXYZ file format — MDAnalysis.coordinates.TXYZ — MDAnalysis 2.6.0-dev0 documentation + 6.22. TXYZ file format — MDAnalysis.coordinates.TXYZ — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -857,7 +857,7 @@

6.22.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/XDR.html b/dev/documentation_pages/coordinates/XDR.html index ee290d47ff..c50af663f2 100644 --- a/dev/documentation_pages/coordinates/XDR.html +++ b/dev/documentation_pages/coordinates/XDR.html @@ -4,7 +4,7 @@ - 6.34. XDR based trajectory files — MDAnalysis.coordinates.XDR — MDAnalysis 2.6.0-dev0 documentation + 6.34. XDR based trajectory files — MDAnalysis.coordinates.XDR — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1211,7 +1211,7 @@

6.34. XDR based trajectory files — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/XTC.html b/dev/documentation_pages/coordinates/XTC.html index 5cbb9beeb4..4131c1d515 100644 --- a/dev/documentation_pages/coordinates/XTC.html +++ b/dev/documentation_pages/coordinates/XTC.html @@ -4,7 +4,7 @@ - 6.23. XTC trajectory files — MDAnalysis.coordinates.XTC — MDAnalysis 2.6.0-dev0 documentation + 6.23. XTC trajectory files — MDAnalysis.coordinates.XTC — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1155,7 +1155,7 @@

6.23. XTC trajectory files — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/XYZ.html b/dev/documentation_pages/coordinates/XYZ.html index 87682101e9..493cf9771e 100644 --- a/dev/documentation_pages/coordinates/XYZ.html +++ b/dev/documentation_pages/coordinates/XYZ.html @@ -4,7 +4,7 @@ - 6.24. XYZ trajectory reader — MDAnalysis.coordinates.XYZ — MDAnalysis 2.6.0-dev0 documentation + 6.24. XYZ trajectory reader — MDAnalysis.coordinates.XYZ — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -385,7 +385,7 @@

6.24.2. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/base.html b/dev/documentation_pages/coordinates/base.html index 08e56f5118..f17d929c12 100644 --- a/dev/documentation_pages/coordinates/base.html +++ b/dev/documentation_pages/coordinates/base.html @@ -4,7 +4,7 @@ - 6.30. Base classes — MDAnalysis.coordinates.base — MDAnalysis 2.6.0-dev0 documentation + 6.30. Base classes — MDAnalysis.coordinates.base — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -2807,7 +2807,7 @@

6.30.5. Helper classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/chain.html b/dev/documentation_pages/coordinates/chain.html index 527f2abe2a..e182820e84 100644 --- a/dev/documentation_pages/coordinates/chain.html +++ b/dev/documentation_pages/coordinates/chain.html @@ -4,7 +4,7 @@ - 6.33. ChainReader — MDAnalysis.coordinates.chain — MDAnalysis 2.6.0-dev0 documentation + 6.33. ChainReader — MDAnalysis.coordinates.chain — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -494,7 +494,7 @@

6.33. ChainReader — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/chemfiles.html b/dev/documentation_pages/coordinates/chemfiles.html index bcc6aba283..e149a725e0 100644 --- a/dev/documentation_pages/coordinates/chemfiles.html +++ b/dev/documentation_pages/coordinates/chemfiles.html @@ -4,7 +4,7 @@ - 6.27. Reading trajectories with chemfiles — MDAnalysis.coordinates.chemfiles — MDAnalysis 2.6.0-dev0 documentation + 6.27. Reading trajectories with chemfiles — MDAnalysis.coordinates.chemfiles — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -351,7 +351,7 @@

6.27.3. Helper functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/core.html b/dev/documentation_pages/coordinates/core.html index 519705b790..1d44f4ba8d 100644 --- a/dev/documentation_pages/coordinates/core.html +++ b/dev/documentation_pages/coordinates/core.html @@ -4,7 +4,7 @@ - 6.31. Common functions for coordinate reading — MDAnalysis.coordinates.core — MDAnalysis 2.6.0-dev0 documentation + 6.31. Common functions for coordinate reading — MDAnalysis.coordinates.core — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -340,7 +340,7 @@

6.31. Common functions for coordinate re aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/init.html b/dev/documentation_pages/coordinates/init.html index a80d17c7ac..6abccbeabc 100644 --- a/dev/documentation_pages/coordinates/init.html +++ b/dev/documentation_pages/coordinates/init.html @@ -4,7 +4,7 @@ - 6.1. Trajectory Readers and Writers — MDAnalysis.coordinates — MDAnalysis 2.6.0-dev0 documentation + 6.1. Trajectory Readers and Writers — MDAnalysis.coordinates — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -980,7 +980,7 @@

6.1.5.5.1. Methods - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/memory.html b/dev/documentation_pages/coordinates/memory.html index 79e110c43a..37b0b951f7 100644 --- a/dev/documentation_pages/coordinates/memory.html +++ b/dev/documentation_pages/coordinates/memory.html @@ -4,7 +4,7 @@ - 6.26. Reading trajectories from memory — MDAnalysis.coordinates.memory — MDAnalysis 2.6.0-dev0 documentation + 6.26. Reading trajectories from memory — MDAnalysis.coordinates.memory — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1054,7 +1054,7 @@

6.26.2. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/null.html b/dev/documentation_pages/coordinates/null.html index c17ff8cbb3..65cf5be070 100644 --- a/dev/documentation_pages/coordinates/null.html +++ b/dev/documentation_pages/coordinates/null.html @@ -4,7 +4,7 @@ - 6.28. Null output — MDAnalysis.coordinates.null — MDAnalysis 2.6.0-dev0 documentation + 6.28. Null output — MDAnalysis.coordinates.null — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -201,7 +201,7 @@

6.28.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/pickle_readers.html b/dev/documentation_pages/coordinates/pickle_readers.html index cf43fec533..74b3ee4d96 100644 --- a/dev/documentation_pages/coordinates/pickle_readers.html +++ b/dev/documentation_pages/coordinates/pickle_readers.html @@ -4,7 +4,7 @@ - 6.32. Serialization of Coordinate Readers — MDAnalysis 2.6.0-dev0 documentation + 6.32. Serialization of Coordinate Readers — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -276,7 +276,7 @@

6.32.2.3. File handler Test - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates/timestep.html b/dev/documentation_pages/coordinates/timestep.html index 7cd14f91fd..a516d02143 100644 --- a/dev/documentation_pages/coordinates/timestep.html +++ b/dev/documentation_pages/coordinates/timestep.html @@ -4,7 +4,7 @@ - 6.29. Timestep Class — MDAnalysis.coordinates.timestep — MDAnalysis 2.6.0-dev0 documentation + 6.29. Timestep Class — MDAnalysis.coordinates.timestep — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -594,7 +594,7 @@

6.29.1. Timestep - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/coordinates_modules.html b/dev/documentation_pages/coordinates_modules.html index 7a908844a3..2c9f6ad13b 100644 --- a/dev/documentation_pages/coordinates_modules.html +++ b/dev/documentation_pages/coordinates_modules.html @@ -4,7 +4,7 @@ - 6. Coordinates modules — MDAnalysis 2.6.0-dev0 documentation + 6. Coordinates modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -231,7 +231,7 @@ aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/accessors.html b/dev/documentation_pages/core/accessors.html index 3cb51802cd..d017946ca3 100644 --- a/dev/documentation_pages/core/accessors.html +++ b/dev/documentation_pages/core/accessors.html @@ -4,7 +4,7 @@ - 7.7. AtomGroup accessors — MDAnalysis.core.accessors — MDAnalysis 2.6.0-dev0 documentation + 7.7. AtomGroup accessors — MDAnalysis.core.accessors — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -263,7 +263,7 @@

7.7.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/groups.html b/dev/documentation_pages/core/groups.html index b939972ef8..f156036eeb 100644 --- a/dev/documentation_pages/core/groups.html +++ b/dev/documentation_pages/core/groups.html @@ -4,7 +4,7 @@ - 11.2.2. Core objects: Containers — MDAnalysis.core.groups — MDAnalysis 2.6.0-dev0 documentation + 11.2.2. Core objects: Containers — MDAnalysis.core.groups — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -8093,7 +8093,7 @@

11.2.2.1.3. Levels - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/init.html b/dev/documentation_pages/core/init.html index 7f6689a255..d6454e4704 100644 --- a/dev/documentation_pages/core/init.html +++ b/dev/documentation_pages/core/init.html @@ -4,7 +4,7 @@ - 11.1. Core functions of MDAnalysis — MDAnalysis 2.6.0-dev0 documentation + 11.1. Core functions of MDAnalysis — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -167,7 +167,7 @@

11.1. Core functions of MDAnalysis - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/selection.html b/dev/documentation_pages/core/selection.html index 406dd0cb27..48424d1e4d 100644 --- a/dev/documentation_pages/core/selection.html +++ b/dev/documentation_pages/core/selection.html @@ -4,7 +4,7 @@ - 11.4.1. Atom selection Hierarchy — MDAnalysis.core.selection — MDAnalysis 2.6.0-dev0 documentation + 11.4.1. Atom selection Hierarchy — MDAnalysis.core.selection — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -591,7 +591,7 @@

11.4.1. Atom selection Hierarchy — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/topology.html b/dev/documentation_pages/core/topology.html index 35a9af1dfb..ea9e0da31c 100644 --- a/dev/documentation_pages/core/topology.html +++ b/dev/documentation_pages/core/topology.html @@ -4,7 +4,7 @@ - 11.3.1. Core Topology object — MDAnalysis.core.topology — MDAnalysis 2.6.0-dev0 documentation + 11.3.1. Core Topology object — MDAnalysis.core.topology — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -574,7 +574,7 @@

11.3.1.2. Helper functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/topologyattrs.html b/dev/documentation_pages/core/topologyattrs.html index eb8881d61a..e16947653b 100644 --- a/dev/documentation_pages/core/topologyattrs.html +++ b/dev/documentation_pages/core/topologyattrs.html @@ -4,7 +4,7 @@ - 11.3.3. Topology attribute objects — MDAnalysis.core.topologyattrs — MDAnalysis 2.6.0-dev0 documentation + 11.3.3. Topology attribute objects — MDAnalysis.core.topologyattrs — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -2088,7 +2088,7 @@

11.3.3. Topology attribute objects — < aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/topologyobjects.html b/dev/documentation_pages/core/topologyobjects.html index 812a1cc9d5..ddbb1e4d8a 100644 --- a/dev/documentation_pages/core/topologyobjects.html +++ b/dev/documentation_pages/core/topologyobjects.html @@ -4,7 +4,7 @@ - 11.3.2. Core Topology Objects — MDAnalysis.core.topologyobjects — MDAnalysis 2.6.0-dev0 documentation + 11.3.2. Core Topology Objects — MDAnalysis.core.topologyobjects — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -899,7 +899,7 @@

11.3.2. Core Topology Objects — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core/universe.html b/dev/documentation_pages/core/universe.html index cc9618525e..076549cc68 100644 --- a/dev/documentation_pages/core/universe.html +++ b/dev/documentation_pages/core/universe.html @@ -4,7 +4,7 @@ - 11.2.1. Core object: Universe — MDAnalysis.core.universe — MDAnalysis 2.6.0-dev0 documentation + 11.2.1. Core object: Universe — MDAnalysis.core.universe — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1020,7 +1020,7 @@

11.2.1.2. Functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/core_modules.html b/dev/documentation_pages/core_modules.html index 3671cb54e5..5e01bedb97 100644 --- a/dev/documentation_pages/core_modules.html +++ b/dev/documentation_pages/core_modules.html @@ -4,7 +4,7 @@ - 11. Core modules — MDAnalysis 2.6.0-dev0 documentation + 11. Core modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -204,7 +204,7 @@

11.4. Selection system - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/exceptions.html b/dev/documentation_pages/exceptions.html index 54dc180c01..2020c57837 100644 --- a/dev/documentation_pages/exceptions.html +++ b/dev/documentation_pages/exceptions.html @@ -4,7 +4,7 @@ - 16. Custom exceptions and warnings — MDAnalysis.exceptions — MDAnalysis 2.6.0-dev0 documentation + 16. Custom exceptions and warnings — MDAnalysis.exceptions — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -212,7 +212,7 @@

16. Custom exceptions and warnings — < aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/NeighborSearch.html b/dev/documentation_pages/lib/NeighborSearch.html index fd6c806e99..23dffad820 100644 --- a/dev/documentation_pages/lib/NeighborSearch.html +++ b/dev/documentation_pages/lib/NeighborSearch.html @@ -4,7 +4,7 @@ - 13.2.3. Neighbor Search wrapper for MDAnalysis — MDAnalysis.lib.NeighborSearch — MDAnalysis 2.6.0-dev0 documentation + 13.2.3. Neighbor Search wrapper for MDAnalysis — MDAnalysis.lib.NeighborSearch — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -213,7 +213,7 @@

13.2.3. Neighbor Search wrapper for MDAn aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/c_distances.html b/dev/documentation_pages/lib/c_distances.html index 93ea65d7b5..9de92cd2a9 100644 --- a/dev/documentation_pages/lib/c_distances.html +++ b/dev/documentation_pages/lib/c_distances.html @@ -4,7 +4,7 @@ - 13.2.2.1. Distance calculation library — MDAnalysis.lib.c_distances — MDAnalysis 2.6.0-dev0 documentation + 13.2.2.1. Distance calculation library — MDAnalysis.lib.c_distances — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -167,7 +167,7 @@

13.2.2.1. Distance calculation library aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/c_distances_openmp.html b/dev/documentation_pages/lib/c_distances_openmp.html index 97207cc3a7..a616246dc0 100644 --- a/dev/documentation_pages/lib/c_distances_openmp.html +++ b/dev/documentation_pages/lib/c_distances_openmp.html @@ -4,7 +4,7 @@ - 13.2.2.2. Parallel distance calculation library — MDAnalysis.lib.c_distances_openmp — MDAnalysis 2.6.0-dev0 documentation + 13.2.2.2. Parallel distance calculation library — MDAnalysis.lib.c_distances_openmp — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -167,7 +167,7 @@

13.2.2.2. Parallel distance calculation aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/correlations.html b/dev/documentation_pages/lib/correlations.html index 9b1be2d67f..a37429d44a 100644 --- a/dev/documentation_pages/lib/correlations.html +++ b/dev/documentation_pages/lib/correlations.html @@ -4,7 +4,7 @@ - 13.2.11. Correlations utilities — MDAnalysis.lib.correlations — MDAnalysis 2.6.0-dev0 documentation + 13.2.11. Correlations utilities — MDAnalysis.lib.correlations — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -335,7 +335,7 @@

13.2.13. Intermittency Function - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/distances.html b/dev/documentation_pages/lib/distances.html index 2688204d15..09d7ab4873 100644 --- a/dev/documentation_pages/lib/distances.html +++ b/dev/documentation_pages/lib/distances.html @@ -4,7 +4,7 @@ - 13.2.1. Fast distance array computation — MDAnalysis.lib.distances — MDAnalysis 2.6.0-dev0 documentation + 13.2.1. Fast distance array computation — MDAnalysis.lib.distances — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1035,7 +1035,7 @@

13.2.2. Low-level modules for - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/formats/libdcd.html b/dev/documentation_pages/lib/formats/libdcd.html index 9ceead9359..94b4896392 100644 --- a/dev/documentation_pages/lib/formats/libdcd.html +++ b/dev/documentation_pages/lib/formats/libdcd.html @@ -4,7 +4,7 @@ - 13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd — MDAnalysis 2.6.0-dev0 documentation + 13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -361,7 +361,7 @@

13.3.2. Low level DCD trajectory readin aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/formats/libmdaxdr.html b/dev/documentation_pages/lib/formats/libmdaxdr.html index c0274003de..e54aa055f5 100644 --- a/dev/documentation_pages/lib/formats/libmdaxdr.html +++ b/dev/documentation_pages/lib/formats/libmdaxdr.html @@ -4,7 +4,7 @@ - 13.3.1. Low-level Gromacs XDR trajectory reading — MDAnalysis.lib.formats.libmdaxdr — MDAnalysis 2.6.0-dev0 documentation + 13.3.1. Low-level Gromacs XDR trajectory reading — MDAnalysis.lib.formats.libmdaxdr — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -535,7 +535,7 @@

13.3.1. Low-level Gromacs XDR trajectory aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/log.html b/dev/documentation_pages/lib/log.html index b5ba74a7bd..0fa6dfbb84 100644 --- a/dev/documentation_pages/lib/log.html +++ b/dev/documentation_pages/lib/log.html @@ -4,7 +4,7 @@ - 13.2.6. Setting up logging — MDAnalysis.lib.log — MDAnalysis 2.6.0-dev0 documentation + 13.2.6. Setting up logging — MDAnalysis.lib.log — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -163,7 +163,7 @@

13.2.6.1. Convenience functionsMDAnalysis logger.

-MDAnalysis.start_logging(logfile='MDAnalysis.log', version='2.6.0-dev0')[source]
+MDAnalysis.start_logging(logfile='MDAnalysis.log', version='2.7.0-dev0')[source]

Start logging of messages to file and console.

The default logfile is named MDAnalysis.log and messages are logged with the tag MDAnalysis.

@@ -355,7 +355,7 @@

13.2.6.2. Other functions and classes fo
-MDAnalysis.lib.log.start_logging(logfile='MDAnalysis.log', version='2.6.0-dev0')[source]
+MDAnalysis.lib.log.start_logging(logfile='MDAnalysis.log', version='2.7.0-dev0')[source]

Start logging of messages to file and console.

The default logfile is named MDAnalysis.log and messages are logged with the tag MDAnalysis.

@@ -405,7 +405,7 @@

13.2.6.2. Other functions and classes fo aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/mdamath.html b/dev/documentation_pages/lib/mdamath.html index e53337b0c8..1c81e7121f 100644 --- a/dev/documentation_pages/lib/mdamath.html +++ b/dev/documentation_pages/lib/mdamath.html @@ -4,7 +4,7 @@ - 13.2.7. Mathematical helper functions — MDAnalysis.lib.mdamath — MDAnalysis 2.6.0-dev0 documentation + 13.2.7. Mathematical helper functions — MDAnalysis.lib.mdamath — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -555,7 +555,7 @@

13.2.7.2. Connectivity - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/nsgrid.html b/dev/documentation_pages/lib/nsgrid.html index a760cc4773..4140e407c5 100644 --- a/dev/documentation_pages/lib/nsgrid.html +++ b/dev/documentation_pages/lib/nsgrid.html @@ -4,7 +4,7 @@ - 13.2.4. Neighbor search library — MDAnalysis.lib.nsgrid — MDAnalysis 2.6.0-dev0 documentation + 13.2.4. Neighbor search library — MDAnalysis.lib.nsgrid — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -378,7 +378,7 @@

13.2.4.3. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/picklable_file_io.html b/dev/documentation_pages/lib/picklable_file_io.html index 1de10d7eac..66d6e0d219 100644 --- a/dev/documentation_pages/lib/picklable_file_io.html +++ b/dev/documentation_pages/lib/picklable_file_io.html @@ -4,7 +4,7 @@ - 13.2.14. Picklable read-only I/O classes — MDAnalysis.lib.picklable_file_io — MDAnalysis 2.6.0-dev0 documentation + 13.2.14. Picklable read-only I/O classes — MDAnalysis.lib.picklable_file_io — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -569,7 +569,7 @@

13.2.14. Picklable read-only I/O classes aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/pkdtree.html b/dev/documentation_pages/lib/pkdtree.html index 65bdb07b3b..88cad405ec 100644 --- a/dev/documentation_pages/lib/pkdtree.html +++ b/dev/documentation_pages/lib/pkdtree.html @@ -4,7 +4,7 @@ - 13.2.5. PeriodicKDTree — MDAnalysis.lib.pkdtree — MDAnalysis 2.6.0-dev0 documentation + 13.2.5. PeriodicKDTree — MDAnalysis.lib.pkdtree — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -318,7 +318,7 @@

13.2.5. PeriodicKDTree — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/qcprot.html b/dev/documentation_pages/lib/qcprot.html index fee889402a..e743e8c093 100644 --- a/dev/documentation_pages/lib/qcprot.html +++ b/dev/documentation_pages/lib/qcprot.html @@ -4,7 +4,7 @@ - 13.2.9. Fast QCP RMSD structure alignment — MDAnalysis.lib.qcprot — MDAnalysis 2.6.0-dev0 documentation + 13.2.9. Fast QCP RMSD structure alignment — MDAnalysis.lib.qcprot — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -301,7 +301,7 @@

13.2.9.1. Functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/transformations.html b/dev/documentation_pages/lib/transformations.html index 38da553820..347b8ba3df 100644 --- a/dev/documentation_pages/lib/transformations.html +++ b/dev/documentation_pages/lib/transformations.html @@ -4,7 +4,7 @@ - 13.2.8. Homogeneous Transformation Matrices and Quaternions — MDAnalysis.lib.transformations — MDAnalysis 2.6.0-dev0 documentation + 13.2.8. Homogeneous Transformation Matrices and Quaternions — MDAnalysis.lib.transformations — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -667,7 +667,7 @@

13.2.8.2. Functions - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib/util.html b/dev/documentation_pages/lib/util.html index ec57178a17..71c705ca0f 100644 --- a/dev/documentation_pages/lib/util.html +++ b/dev/documentation_pages/lib/util.html @@ -4,7 +4,7 @@ - 13.2.10. Helper functions — MDAnalysis.lib.util — MDAnalysis 2.6.0-dev0 documentation + 13.2.10. Helper functions — MDAnalysis.lib.util — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1585,7 +1585,7 @@

13.2.10.11. Data format checks - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/lib_modules.html b/dev/documentation_pages/lib_modules.html index ba40d6d916..f25b7ead6f 100644 --- a/dev/documentation_pages/lib_modules.html +++ b/dev/documentation_pages/lib_modules.html @@ -4,7 +4,7 @@ - 13. Library functions — MDAnalysis.lib — MDAnalysis 2.6.0-dev0 documentation + 13. Library functions — MDAnalysis.lib — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -252,7 +252,7 @@

13.4. Libmdanalysis - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/overview.html b/dev/documentation_pages/overview.html index b358f67e04..d28499cd3e 100644 --- a/dev/documentation_pages/overview.html +++ b/dev/documentation_pages/overview.html @@ -4,7 +4,7 @@ - 1. Overview over MDAnalysis — MDAnalysis 2.6.0-dev0 documentation + 1. Overview over MDAnalysis — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -303,7 +303,7 @@

1.2.2. Code snippets - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/references.html b/dev/documentation_pages/references.html index f7b8aeceae..98ca78c3b9 100644 --- a/dev/documentation_pages/references.html +++ b/dev/documentation_pages/references.html @@ -4,7 +4,7 @@ - 17. References — MDAnalysis 2.6.0-dev0 documentation + 17. References — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -42,7 +42,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -385,7 +385,7 @@

17.1. Citations for the whole MDAnalysis aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections.html b/dev/documentation_pages/selections.html index ba9989f565..77d8eb31ef 100644 --- a/dev/documentation_pages/selections.html +++ b/dev/documentation_pages/selections.html @@ -4,7 +4,7 @@ - 3. Selection commands — MDAnalysis 2.6.0-dev0 documentation + 3. Selection commands — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -577,7 +577,7 @@

3.2. Dynamic selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/base.html b/dev/documentation_pages/selections/base.html index b190e9582b..5481de7182 100644 --- a/dev/documentation_pages/selections/base.html +++ b/dev/documentation_pages/selections/base.html @@ -4,7 +4,7 @@ - 9.2.6. Base classes for the selection writers — MDAnalysis 2.6.0-dev0 documentation + 9.2.6. Base classes for the selection writers — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -277,7 +277,7 @@

9.2.6. Base classes for the selection wr aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/charmm.html b/dev/documentation_pages/selections/charmm.html index f23d3be30b..e9d05eeef6 100644 --- a/dev/documentation_pages/selections/charmm.html +++ b/dev/documentation_pages/selections/charmm.html @@ -4,7 +4,7 @@ - 9.2.4. CHARMM selections — MDAnalysis 2.6.0-dev0 documentation + 9.2.4. CHARMM selections — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -244,7 +244,7 @@

9.2.4. CHARMM selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/gromacs.html b/dev/documentation_pages/selections/gromacs.html index 1c83e5bb04..7d44679fec 100644 --- a/dev/documentation_pages/selections/gromacs.html +++ b/dev/documentation_pages/selections/gromacs.html @@ -4,7 +4,7 @@ - 9.2.3. Gromacs selections — MDAnalysis 2.6.0-dev0 documentation + 9.2.3. Gromacs selections — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -244,7 +244,7 @@

9.2.3. Gromacs selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/jmol.html b/dev/documentation_pages/selections/jmol.html index 940e3ef74b..9be5f7e409 100644 --- a/dev/documentation_pages/selections/jmol.html +++ b/dev/documentation_pages/selections/jmol.html @@ -4,7 +4,7 @@ - 9.2.5. Jmol selections — MDAnalysis 2.6.0-dev0 documentation + 9.2.5. Jmol selections — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -250,7 +250,7 @@

9.2.5. Jmol selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/pymol.html b/dev/documentation_pages/selections/pymol.html index 54eed9990c..a4f4572f15 100644 --- a/dev/documentation_pages/selections/pymol.html +++ b/dev/documentation_pages/selections/pymol.html @@ -4,7 +4,7 @@ - 9.2.2. PyMOL selections — MDAnalysis 2.6.0-dev0 documentation + 9.2.2. PyMOL selections — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -245,7 +245,7 @@

9.2.2. PyMOL selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections/vmd.html b/dev/documentation_pages/selections/vmd.html index a3a70b87cd..cabbefabe7 100644 --- a/dev/documentation_pages/selections/vmd.html +++ b/dev/documentation_pages/selections/vmd.html @@ -4,7 +4,7 @@ - 9.2.1. VMD selections — MDAnalysis 2.6.0-dev0 documentation + 9.2.1. VMD selections — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -248,7 +248,7 @@

9.2.1. VMD selections - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/selections_modules.html b/dev/documentation_pages/selections_modules.html index 3d879b937a..716e380014 100644 --- a/dev/documentation_pages/selections_modules.html +++ b/dev/documentation_pages/selections_modules.html @@ -4,7 +4,7 @@ - 9. Selection exporters — MDAnalysis 2.6.0-dev0 documentation + 9. Selection exporters — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -297,7 +297,7 @@

9.2. Selection writers - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology.html b/dev/documentation_pages/topology.html index 59d284eadc..c124dcfc22 100644 --- a/dev/documentation_pages/topology.html +++ b/dev/documentation_pages/topology.html @@ -4,7 +4,7 @@ - 2. The topology system — MDAnalysis 2.6.0-dev0 documentation + 2. The topology system — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -146,7 +146,7 @@ aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/CRDParser.html b/dev/documentation_pages/topology/CRDParser.html index 5a1739ce96..ec8dd40f83 100644 --- a/dev/documentation_pages/topology/CRDParser.html +++ b/dev/documentation_pages/topology/CRDParser.html @@ -4,7 +4,7 @@ - 5.2. CRD topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.2. CRD topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -428,7 +428,7 @@

5.2.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/DLPolyParser.html b/dev/documentation_pages/topology/DLPolyParser.html index 450db2cc88..629243a0a7 100644 --- a/dev/documentation_pages/topology/DLPolyParser.html +++ b/dev/documentation_pages/topology/DLPolyParser.html @@ -4,7 +4,7 @@ - 5.3. DL Poly format Topology Readers — MDAnalysis.topology.DLPolyParser — MDAnalysis 2.6.0-dev0 documentation + 5.3. DL Poly format Topology Readers — MDAnalysis.topology.DLPolyParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -182,7 +182,7 @@

5.3. DL Poly format Topology Readers — aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/DMSParser.html b/dev/documentation_pages/topology/DMSParser.html index b43a2d5664..5a596374ea 100644 --- a/dev/documentation_pages/topology/DMSParser.html +++ b/dev/documentation_pages/topology/DMSParser.html @@ -4,7 +4,7 @@ - 5.4. DESRES Molecular Structure file format topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.4. DESRES Molecular Structure file format topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -429,7 +429,7 @@

5.4.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/ExtendedPDBParser.html b/dev/documentation_pages/topology/ExtendedPDBParser.html index faa71469cd..6e13f83fab 100644 --- a/dev/documentation_pages/topology/ExtendedPDBParser.html +++ b/dev/documentation_pages/topology/ExtendedPDBParser.html @@ -4,7 +4,7 @@ - 5.16. Extended PDB topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.16. Extended PDB topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -452,7 +452,7 @@

5.16.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/FHIAIMSParser.html b/dev/documentation_pages/topology/FHIAIMSParser.html index 2e1273a39c..8babda4cbf 100644 --- a/dev/documentation_pages/topology/FHIAIMSParser.html +++ b/dev/documentation_pages/topology/FHIAIMSParser.html @@ -4,7 +4,7 @@ - 5.5. FHI-AIMS Topology Parser — MDAnalysis.topolgy.FHIAIMSParser — MDAnalysis 2.6.0-dev0 documentation + 5.5. FHI-AIMS Topology Parser — MDAnalysis.topolgy.FHIAIMSParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -422,7 +422,7 @@

5.5.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/GMSParser.html b/dev/documentation_pages/topology/GMSParser.html index d41308f3a4..87621ec4db 100644 --- a/dev/documentation_pages/topology/GMSParser.html +++ b/dev/documentation_pages/topology/GMSParser.html @@ -4,7 +4,7 @@ - 5.6. GAMESS Topology Parser — MDAnalysis 2.6.0-dev0 documentation + 5.6. GAMESS Topology Parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -421,7 +421,7 @@

5.6.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/GROParser.html b/dev/documentation_pages/topology/GROParser.html index dd005667c0..6052981b37 100644 --- a/dev/documentation_pages/topology/GROParser.html +++ b/dev/documentation_pages/topology/GROParser.html @@ -4,7 +4,7 @@ - 5.7. GRO topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.7. GRO topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -420,7 +420,7 @@

5.7.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/GSDParser.html b/dev/documentation_pages/topology/GSDParser.html index 41cbd724d3..19d1a1112e 100644 --- a/dev/documentation_pages/topology/GSDParser.html +++ b/dev/documentation_pages/topology/GSDParser.html @@ -4,7 +4,7 @@ - 5.8. GSD topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.8. GSD topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -436,7 +436,7 @@

5.8.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/HoomdXMLParser.html b/dev/documentation_pages/topology/HoomdXMLParser.html index f47066d488..f3e92b64ce 100644 --- a/dev/documentation_pages/topology/HoomdXMLParser.html +++ b/dev/documentation_pages/topology/HoomdXMLParser.html @@ -4,7 +4,7 @@ - 5.9. HOOMD XML topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.9. HOOMD XML topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -431,7 +431,7 @@

5.9.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/ITPParser.html b/dev/documentation_pages/topology/ITPParser.html index 0e18803ab2..99a59fbd97 100644 --- a/dev/documentation_pages/topology/ITPParser.html +++ b/dev/documentation_pages/topology/ITPParser.html @@ -4,7 +4,7 @@ - 5.10. ITP topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.10. ITP topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -512,7 +512,7 @@

5.10.2. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/LAMMPSParser.html b/dev/documentation_pages/topology/LAMMPSParser.html index 3c2599cecb..900d4fa114 100644 --- a/dev/documentation_pages/topology/LAMMPSParser.html +++ b/dev/documentation_pages/topology/LAMMPSParser.html @@ -4,7 +4,7 @@ - 5.11. LAMMPSParser — MDAnalysis 2.6.0-dev0 documentation + 5.11. LAMMPSParser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -486,7 +486,7 @@

5.11.2. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/MMTFParser.html b/dev/documentation_pages/topology/MMTFParser.html index 177cd68074..a936a63bf6 100644 --- a/dev/documentation_pages/topology/MMTFParser.html +++ b/dev/documentation_pages/topology/MMTFParser.html @@ -4,7 +4,7 @@ - 5.13. MMTF Topology Parser — MDAnalysis 2.6.0-dev0 documentation + 5.13. MMTF Topology Parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -221,7 +221,7 @@

5.13.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/MOL2Parser.html b/dev/documentation_pages/topology/MOL2Parser.html index be043f1606..0e0f428550 100644 --- a/dev/documentation_pages/topology/MOL2Parser.html +++ b/dev/documentation_pages/topology/MOL2Parser.html @@ -4,7 +4,7 @@ - 5.14. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.6.0-dev0 documentation + 5.14. MOL2 file format — MDAnalysis.coordinates.MOL2 — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -470,7 +470,7 @@

5.14.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/MinimalParser.html b/dev/documentation_pages/topology/MinimalParser.html index 5e9745bf3b..d42acf8ff6 100644 --- a/dev/documentation_pages/topology/MinimalParser.html +++ b/dev/documentation_pages/topology/MinimalParser.html @@ -4,7 +4,7 @@ - 5.12. Minimal topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.12. Minimal topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -412,7 +412,7 @@

5.12.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/PDBParser.html b/dev/documentation_pages/topology/PDBParser.html index c0ac18ea9e..48c9284ab1 100644 --- a/dev/documentation_pages/topology/PDBParser.html +++ b/dev/documentation_pages/topology/PDBParser.html @@ -4,7 +4,7 @@ - 5.15. PDB Topology Parser — MDAnalysis 2.6.0-dev0 documentation + 5.15. PDB Topology Parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -477,7 +477,7 @@

5.15.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/PDBQTParser.html b/dev/documentation_pages/topology/PDBQTParser.html index d92f07fd70..269526300a 100644 --- a/dev/documentation_pages/topology/PDBQTParser.html +++ b/dev/documentation_pages/topology/PDBQTParser.html @@ -4,7 +4,7 @@ - 5.17. PDBQT topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.17. PDBQT topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -443,7 +443,7 @@

5.17.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/PQRParser.html b/dev/documentation_pages/topology/PQRParser.html index af35f85968..4e5024d0c1 100644 --- a/dev/documentation_pages/topology/PQRParser.html +++ b/dev/documentation_pages/topology/PQRParser.html @@ -4,7 +4,7 @@ - 5.18. PQR topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.18. PQR topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -458,7 +458,7 @@

5.18.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/PSFParser.html b/dev/documentation_pages/topology/PSFParser.html index e9b92f9510..9b908bbdfc 100644 --- a/dev/documentation_pages/topology/PSFParser.html +++ b/dev/documentation_pages/topology/PSFParser.html @@ -4,7 +4,7 @@ - 5.19. PSF topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.19. PSF topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -423,7 +423,7 @@

5.19.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/TOPParser.html b/dev/documentation_pages/topology/TOPParser.html index ddb4f201d6..b178e8df25 100644 --- a/dev/documentation_pages/topology/TOPParser.html +++ b/dev/documentation_pages/topology/TOPParser.html @@ -4,7 +4,7 @@ - 5.20. AMBER PRMTOP topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.20. AMBER PRMTOP topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -798,7 +798,7 @@

5.20.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/TPRParser.html b/dev/documentation_pages/topology/TPRParser.html index a6dfbfe761..ec323a8c8a 100644 --- a/dev/documentation_pages/topology/TPRParser.html +++ b/dev/documentation_pages/topology/TPRParser.html @@ -4,7 +4,7 @@ - 5.21. Gromacs portable run input TPR format parser — MDAnalysis 2.6.0-dev0 documentation + 5.21. Gromacs portable run input TPR format parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -579,7 +579,7 @@

5.21.2. Development notes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/TXYZParser.html b/dev/documentation_pages/topology/TXYZParser.html index a752485df0..ed54381e25 100644 --- a/dev/documentation_pages/topology/TXYZParser.html +++ b/dev/documentation_pages/topology/TXYZParser.html @@ -4,7 +4,7 @@ - 5.22. TXYZ topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.22. TXYZ topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -426,7 +426,7 @@

5.22.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/XYZParser.html b/dev/documentation_pages/topology/XYZParser.html index bf3da2f2af..e4831296a1 100644 --- a/dev/documentation_pages/topology/XYZParser.html +++ b/dev/documentation_pages/topology/XYZParser.html @@ -4,7 +4,7 @@ - 5.23. XYZ Topology Parser — MDAnalysis 2.6.0-dev0 documentation + 5.23. XYZ Topology Parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -212,7 +212,7 @@

5.23.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/base.html b/dev/documentation_pages/topology/base.html index c5088746d9..3c0db7b012 100644 --- a/dev/documentation_pages/topology/base.html +++ b/dev/documentation_pages/topology/base.html @@ -4,7 +4,7 @@ - 5.24. Base topology reader classes — MDAnalysis.topology.base — MDAnalysis 2.6.0-dev0 documentation + 5.24. Base topology reader classes — MDAnalysis.topology.base — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -411,7 +411,7 @@

5.24.1. Classes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/core.html b/dev/documentation_pages/topology/core.html index d3748995dc..c9f3d8bd70 100644 --- a/dev/documentation_pages/topology/core.html +++ b/dev/documentation_pages/topology/core.html @@ -4,7 +4,7 @@ - 5.25. Common functions for topology building — MDAnalysis.topology.core — MDAnalysis 2.6.0-dev0 documentation + 5.25. Common functions for topology building — MDAnalysis.topology.core — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -178,7 +178,7 @@

5.25. Common functions for topology buil aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/guessers.html b/dev/documentation_pages/topology/guessers.html index 619d15fc7d..64fded8f15 100644 --- a/dev/documentation_pages/topology/guessers.html +++ b/dev/documentation_pages/topology/guessers.html @@ -4,7 +4,7 @@ - 5.26. Guessing unknown Topology information — MDAnalysis.topology.guessers — MDAnalysis 2.6.0-dev0 documentation + 5.26. Guessing unknown Topology information — MDAnalysis.topology.guessers — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -510,7 +510,7 @@

5.26.1.1. Guessing elements from atom na aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/init.html b/dev/documentation_pages/topology/init.html index 763949828a..bb15559d7d 100644 --- a/dev/documentation_pages/topology/init.html +++ b/dev/documentation_pages/topology/init.html @@ -4,7 +4,7 @@ - 5.1. Topology readers — MDAnalysis.topology — MDAnalysis 2.6.0-dev0 documentation + 5.1. Topology readers — MDAnalysis.topology — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -537,7 +537,7 @@

5.1.1.6. impropers - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/tables.html b/dev/documentation_pages/topology/tables.html index 22f102d4b1..83bfa1e7c7 100644 --- a/dev/documentation_pages/topology/tables.html +++ b/dev/documentation_pages/topology/tables.html @@ -4,7 +4,7 @@ - 5.27. MDAnalysis topology tables — MDAnalysis 2.6.0-dev0 documentation + 5.27. MDAnalysis topology tables — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -235,7 +235,7 @@

5.27. MDAnalysis topology tables - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology/tpr_util.html b/dev/documentation_pages/topology/tpr_util.html index 35b0b9158a..ba79c3c5c0 100644 --- a/dev/documentation_pages/topology/tpr_util.html +++ b/dev/documentation_pages/topology/tpr_util.html @@ -4,7 +4,7 @@ - 5.28. Utility functions for the TPR topology parser — MDAnalysis 2.6.0-dev0 documentation + 5.28. Utility functions for the TPR topology parser — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -1418,7 +1418,7 @@

5.28.4. Utilities for the TPRParser - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/topology_modules.html b/dev/documentation_pages/topology_modules.html index d0bc03d9f3..462ca41fb0 100644 --- a/dev/documentation_pages/topology_modules.html +++ b/dev/documentation_pages/topology_modules.html @@ -4,7 +4,7 @@ - 5. Topology modules — MDAnalysis 2.6.0-dev0 documentation + 5. Topology modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -221,7 +221,7 @@

5. Topology modules - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/trajectory_transformations.html b/dev/documentation_pages/trajectory_transformations.html index 3974e7ab13..4735fe5ef6 100644 --- a/dev/documentation_pages/trajectory_transformations.html +++ b/dev/documentation_pages/trajectory_transformations.html @@ -4,7 +4,7 @@ - 8. Trajectory transformations (“on-the-fly” transformations) — MDAnalysis 2.6.0-dev0 documentation + 8. Trajectory transformations (“on-the-fly” transformations) — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -368,7 +368,7 @@

8.4. How to transformations - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/base.html b/dev/documentation_pages/transformations/base.html index 4b8e26d17a..521d4dc5f5 100644 --- a/dev/documentation_pages/transformations/base.html +++ b/dev/documentation_pages/transformations/base.html @@ -4,7 +4,7 @@ - 8.5.1. Transformations Base Class — MDAnalysis.transformations.base — MDAnalysis 2.6.0-dev0 documentation + 8.5.1. Transformations Base Class — MDAnalysis.transformations.base — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -216,7 +216,7 @@

8.5.1. Transformations Base Class — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/boxdimensions.html b/dev/documentation_pages/transformations/boxdimensions.html index 4ac732fc41..fef0f4406e 100644 --- a/dev/documentation_pages/transformations/boxdimensions.html +++ b/dev/documentation_pages/transformations/boxdimensions.html @@ -4,7 +4,7 @@ - 8.6.7. Set box dimensions — MDAnalysis.transformations.boxdimensions — MDAnalysis 2.6.0-dev0 documentation + 8.6.7. Set box dimensions — MDAnalysis.transformations.boxdimensions — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -189,7 +189,7 @@

8.6.7. Set box dimensions — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/fit.html b/dev/documentation_pages/transformations/fit.html index 55cf059157..5ee5310f39 100644 --- a/dev/documentation_pages/transformations/fit.html +++ b/dev/documentation_pages/transformations/fit.html @@ -4,7 +4,7 @@ - 8.6.4. Fitting transformations — MDAnalysis.transformations.fit — MDAnalysis 2.6.0-dev0 documentation + 8.6.4. Fitting transformations — MDAnalysis.transformations.fit — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -284,7 +284,7 @@

8.6.4. Fitting transformations — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/nojump.html b/dev/documentation_pages/transformations/nojump.html index d219ff220b..89f6962eeb 100644 --- a/dev/documentation_pages/transformations/nojump.html +++ b/dev/documentation_pages/transformations/nojump.html @@ -4,7 +4,7 @@ - 8.6.6. No Jump Trajectory Unwrapping — MDAnalysis.transformations.nojump — MDAnalysis 2.6.0-dev0 documentation + 8.6.6. No Jump Trajectory Unwrapping — MDAnalysis.transformations.nojump — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -218,7 +218,7 @@

8.6.6. No Jump Trajectory Unwrapping — aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/positionaveraging.html b/dev/documentation_pages/transformations/positionaveraging.html index 183d572ce1..feefc2a000 100644 --- a/dev/documentation_pages/transformations/positionaveraging.html +++ b/dev/documentation_pages/transformations/positionaveraging.html @@ -4,7 +4,7 @@ - 8.6.3. Trajectory Coordinate Averaging — MDAnalysis.transformations.positionaveraging — MDAnalysis 2.6.0-dev0 documentation + 8.6.3. Trajectory Coordinate Averaging — MDAnalysis.transformations.positionaveraging — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -257,7 +257,7 @@

8.6.3. Trajectory Coordinate Averaging aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/rotate.html b/dev/documentation_pages/transformations/rotate.html index 9f5d02dd45..9542d3a0b1 100644 --- a/dev/documentation_pages/transformations/rotate.html +++ b/dev/documentation_pages/transformations/rotate.html @@ -4,7 +4,7 @@ - 8.6.2. Trajectory rotation — MDAnalysis.transformations.rotate — MDAnalysis 2.6.0-dev0 documentation + 8.6.2. Trajectory rotation — MDAnalysis.transformations.rotate — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -243,7 +243,7 @@

8.6.2. Trajectory rotation — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/translate.html b/dev/documentation_pages/transformations/translate.html index ad526bfeda..3c131d01c1 100644 --- a/dev/documentation_pages/transformations/translate.html +++ b/dev/documentation_pages/transformations/translate.html @@ -4,7 +4,7 @@ - 8.6.1. Trajectory translation — MDAnalysis.transformations.translate — MDAnalysis 2.6.0-dev0 documentation + 8.6.1. Trajectory translation — MDAnalysis.transformations.translate — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -249,7 +249,7 @@

8.6.1. Trajectory translation — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/transformations/wrap.html b/dev/documentation_pages/transformations/wrap.html index 956df334d9..2cd3cdcddd 100644 --- a/dev/documentation_pages/transformations/wrap.html +++ b/dev/documentation_pages/transformations/wrap.html @@ -4,7 +4,7 @@ - 8.6.5. Wrap/unwrap transformations — MDAnalysis.transformations.wrap — MDAnalysis 2.6.0-dev0 documentation + 8.6.5. Wrap/unwrap transformations — MDAnalysis.transformations.wrap — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -276,7 +276,7 @@

8.6.5. Wrap/unwrap transformations — < aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/units.html b/dev/documentation_pages/units.html index f0f700fde1..292e9428ea 100644 --- a/dev/documentation_pages/units.html +++ b/dev/documentation_pages/units.html @@ -4,7 +4,7 @@ - 15. Constants and unit conversion — MDAnalysis.units — MDAnalysis 2.6.0-dev0 documentation + 15. Constants and unit conversion — MDAnalysis.units — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -432,7 +432,7 @@

15.4. References and footnotes - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/version.html b/dev/documentation_pages/version.html index 755c0f4368..cbe2daeb11 100644 --- a/dev/documentation_pages/version.html +++ b/dev/documentation_pages/version.html @@ -4,7 +4,7 @@ - 14. Version information for MDAnalysis - MDAnalysis.version — MDAnalysis 2.6.0-dev0 documentation + 14. Version information for MDAnalysis - MDAnalysis.version — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -130,7 +130,7 @@

14. Version information for MDAnalysis -

14.1. Data

-MDAnalysis.version.__version__ = '2.6.0-dev0'
+MDAnalysis.version.__version__ = '2.7.0-dev0'

Release of MDAnalysis as a string, using semantic versioning.

@@ -174,7 +174,7 @@

14.1. Data - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/visualization/streamlines.html b/dev/documentation_pages/visualization/streamlines.html index 84488a1720..6c6abf4609 100644 --- a/dev/documentation_pages/visualization/streamlines.html +++ b/dev/documentation_pages/visualization/streamlines.html @@ -4,7 +4,7 @@ - 12.1.1. Streamplots (2D) — MDAnalysis.visualization.streamlines — MDAnalysis 2.6.0-dev0 documentation + 12.1.1. Streamplots (2D) — MDAnalysis.visualization.streamlines — MDAnalysis 2.7.0-dev0 documentation @@ -23,7 +23,7 @@ @@ -44,7 +44,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -243,7 +243,7 @@

12.1.1. Streamplots (2D) — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/visualization/streamlines_3D.html b/dev/documentation_pages/visualization/streamlines_3D.html index 5e99034f09..47403dfaae 100644 --- a/dev/documentation_pages/visualization/streamlines_3D.html +++ b/dev/documentation_pages/visualization/streamlines_3D.html @@ -4,7 +4,7 @@ - 12.1.2. Streamplots (3D) — MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.6.0-dev0 documentation + 12.1.2. Streamplots (3D) — MDAnalysis.visualization.streamlines_3D — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -263,7 +263,7 @@

12.1.2. Streamplots (3D) — - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/documentation_pages/visualization_modules.html b/dev/documentation_pages/visualization_modules.html index 673b6b6c5b..c7abf4196c 100644 --- a/dev/documentation_pages/visualization_modules.html +++ b/dev/documentation_pages/visualization_modules.html @@ -4,7 +4,7 @@ - 12. Visualization modules — MDAnalysis 2.6.0-dev0 documentation + 12. Visualization modules — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -168,7 +168,7 @@

12.1. Visualization of Lipid Flow - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/genindex.html b/dev/genindex.html index f9f04e4f75..2bd6811ed6 100644 --- a/dev/genindex.html +++ b/dev/genindex.html @@ -3,7 +3,7 @@ - Index — MDAnalysis 2.6.0-dev0 documentation + Index — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -40,7 +40,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -7774,7 +7774,7 @@

X

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/index.html b/dev/index.html index 77f4d82ed2..c908a6cafb 100644 --- a/dev/index.html +++ b/dev/index.html @@ -4,7 +4,7 @@ - MDAnalysis documentation — MDAnalysis 2.6.0-dev0 documentation + MDAnalysis documentation — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -42,7 +42,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -100,10 +100,10 @@

MDAnalysis documentation

Release
-

2.6.0-dev0

+

2.7.0-dev0

Date
-

Aug 15, 2023

+

Aug 16, 2023

MDAnalysis (www.mdanalysis.org) is an object-oriented python @@ -246,7 +246,7 @@

Indices and tables - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/objects.inv b/dev/objects.inv index 483ab910b8..ef25f66987 100644 Binary files a/dev/objects.inv and b/dev/objects.inv differ diff --git a/dev/py-modindex.html b/dev/py-modindex.html index ed6dd2b528..bbe277eace 100644 --- a/dev/py-modindex.html +++ b/dev/py-modindex.html @@ -3,7 +3,7 @@ - Python Module Index — MDAnalysis 2.6.0-dev0 documentation + Python Module Index — MDAnalysis 2.7.0-dev0 documentation @@ -21,7 +21,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -969,7 +969,7 @@

Python Module Index

aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/search.html b/dev/search.html index 8aeda58e60..52ed84523b 100644 --- a/dev/search.html +++ b/dev/search.html @@ -3,7 +3,7 @@ - Search — MDAnalysis 2.6.0-dev0 documentation + Search — MDAnalysis 2.7.0-dev0 documentation @@ -22,7 +22,7 @@ @@ -43,7 +43,7 @@
- 2.6.0-dev0 + 2.7.0-dev0
@@ -142,7 +142,7 @@ aria-label="versions"> - 2.6.0-dev0 + 2.7.0-dev0 diff --git a/dev/searchindex.js b/dev/searchindex.js index e8a73812f5..5282ded170 100644 --- a/dev/searchindex.js +++ b/dev/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["documentation_pages/analysis/align", "documentation_pages/analysis/atomicdistances", "documentation_pages/analysis/base", "documentation_pages/analysis/bat", "documentation_pages/analysis/contacts", "documentation_pages/analysis/data", "documentation_pages/analysis/density", "documentation_pages/analysis/dielectric", "documentation_pages/analysis/diffusionmap", "documentation_pages/analysis/dihedrals", "documentation_pages/analysis/distances", "documentation_pages/analysis/encore", "documentation_pages/analysis/encore/bootstrap", "documentation_pages/analysis/encore/clustering", "documentation_pages/analysis/encore/confdistmatrix", "documentation_pages/analysis/encore/covariance", "documentation_pages/analysis/encore/dimensionality_reduction", "documentation_pages/analysis/encore/similarity", "documentation_pages/analysis/encore/utils", "documentation_pages/analysis/gnm", "documentation_pages/analysis/hbond_autocorrel", "documentation_pages/analysis/hbond_autocorrel_deprecated", "documentation_pages/analysis/helix_analysis", "documentation_pages/analysis/hole2", "documentation_pages/analysis/hydrogenbonds", "documentation_pages/analysis/leaflet", "documentation_pages/analysis/legacy/x3dna", "documentation_pages/analysis/legacy_modules", "documentation_pages/analysis/lineardensity", "documentation_pages/analysis/msd", "documentation_pages/analysis/nucleicacids", "documentation_pages/analysis/nuclinfo", "documentation_pages/analysis/pca", "documentation_pages/analysis/polymer", "documentation_pages/analysis/psa", "documentation_pages/analysis/rdf", "documentation_pages/analysis/rms", "documentation_pages/analysis/waterdynamics", "documentation_pages/analysis/wbridge_analysis", "documentation_pages/analysis_modules", "documentation_pages/auxiliary/EDR", "documentation_pages/auxiliary/XVG", "documentation_pages/auxiliary/base", "documentation_pages/auxiliary/core", "documentation_pages/auxiliary/init", "documentation_pages/auxiliary_modules", "documentation_pages/converters", "documentation_pages/converters/OpenMM", "documentation_pages/converters/ParmEd", "documentation_pages/converters/RDKit", "documentation_pages/coordinates/CRD", "documentation_pages/coordinates/DCD", "documentation_pages/coordinates/DLPoly", "documentation_pages/coordinates/DMS", "documentation_pages/coordinates/FHIAIMS", "documentation_pages/coordinates/GMS", "documentation_pages/coordinates/GRO", "documentation_pages/coordinates/GSD", "documentation_pages/coordinates/H5MD", "documentation_pages/coordinates/INPCRD", "documentation_pages/coordinates/LAMMPS", "documentation_pages/coordinates/MMTF", "documentation_pages/coordinates/MOL2", "documentation_pages/coordinates/NAMDBIN", "documentation_pages/coordinates/PDB", "documentation_pages/coordinates/PDBQT", "documentation_pages/coordinates/PQR", "documentation_pages/coordinates/TNG", "documentation_pages/coordinates/TRJ", "documentation_pages/coordinates/TRR", "documentation_pages/coordinates/TRZ", "documentation_pages/coordinates/TXYZ", "documentation_pages/coordinates/XDR", "documentation_pages/coordinates/XTC", "documentation_pages/coordinates/XYZ", "documentation_pages/coordinates/base", "documentation_pages/coordinates/chain", "documentation_pages/coordinates/chemfiles", "documentation_pages/coordinates/core", "documentation_pages/coordinates/init", "documentation_pages/coordinates/memory", "documentation_pages/coordinates/null", "documentation_pages/coordinates/pickle_readers", "documentation_pages/coordinates/timestep", "documentation_pages/coordinates_modules", "documentation_pages/core/accessors", "documentation_pages/core/groups", "documentation_pages/core/init", "documentation_pages/core/selection", "documentation_pages/core/topology", "documentation_pages/core/topologyattrs", "documentation_pages/core/topologyobjects", "documentation_pages/core/universe", "documentation_pages/core_modules", "documentation_pages/exceptions", "documentation_pages/lib/NeighborSearch", "documentation_pages/lib/c_distances", "documentation_pages/lib/c_distances_openmp", "documentation_pages/lib/correlations", "documentation_pages/lib/distances", "documentation_pages/lib/formats/libdcd", "documentation_pages/lib/formats/libmdaxdr", "documentation_pages/lib/log", "documentation_pages/lib/mdamath", "documentation_pages/lib/nsgrid", "documentation_pages/lib/picklable_file_io", "documentation_pages/lib/pkdtree", "documentation_pages/lib/qcprot", "documentation_pages/lib/transformations", "documentation_pages/lib/util", "documentation_pages/lib_modules", "documentation_pages/overview", "documentation_pages/references", "documentation_pages/selections", "documentation_pages/selections/base", "documentation_pages/selections/charmm", "documentation_pages/selections/gromacs", "documentation_pages/selections/jmol", "documentation_pages/selections/pymol", "documentation_pages/selections/vmd", "documentation_pages/selections_modules", "documentation_pages/topology", "documentation_pages/topology/CRDParser", "documentation_pages/topology/DLPolyParser", "documentation_pages/topology/DMSParser", "documentation_pages/topology/ExtendedPDBParser", "documentation_pages/topology/FHIAIMSParser", "documentation_pages/topology/GMSParser", "documentation_pages/topology/GROParser", "documentation_pages/topology/GSDParser", "documentation_pages/topology/HoomdXMLParser", "documentation_pages/topology/ITPParser", "documentation_pages/topology/LAMMPSParser", "documentation_pages/topology/MMTFParser", "documentation_pages/topology/MOL2Parser", "documentation_pages/topology/MinimalParser", "documentation_pages/topology/PDBParser", "documentation_pages/topology/PDBQTParser", "documentation_pages/topology/PQRParser", "documentation_pages/topology/PSFParser", "documentation_pages/topology/TOPParser", "documentation_pages/topology/TPRParser", "documentation_pages/topology/TXYZParser", "documentation_pages/topology/XYZParser", "documentation_pages/topology/base", "documentation_pages/topology/core", "documentation_pages/topology/guessers", "documentation_pages/topology/init", "documentation_pages/topology/tables", "documentation_pages/topology/tpr_util", "documentation_pages/topology_modules", "documentation_pages/trajectory_transformations", "documentation_pages/transformations/base", "documentation_pages/transformations/boxdimensions", "documentation_pages/transformations/fit", "documentation_pages/transformations/nojump", "documentation_pages/transformations/positionaveraging", "documentation_pages/transformations/rotate", "documentation_pages/transformations/translate", "documentation_pages/transformations/wrap", "documentation_pages/units", "documentation_pages/version", "documentation_pages/visualization/streamlines", "documentation_pages/visualization/streamlines_3D", "documentation_pages/visualization_modules", "index"], "filenames": ["documentation_pages/analysis/align.rst", "documentation_pages/analysis/atomicdistances.rst", "documentation_pages/analysis/base.rst", "documentation_pages/analysis/bat.rst", "documentation_pages/analysis/contacts.rst", "documentation_pages/analysis/data.rst", "documentation_pages/analysis/density.rst", "documentation_pages/analysis/dielectric.rst", "documentation_pages/analysis/diffusionmap.rst", "documentation_pages/analysis/dihedrals.rst", "documentation_pages/analysis/distances.rst", "documentation_pages/analysis/encore.rst", "documentation_pages/analysis/encore/bootstrap.rst", "documentation_pages/analysis/encore/clustering.rst", "documentation_pages/analysis/encore/confdistmatrix.rst", "documentation_pages/analysis/encore/covariance.rst", "documentation_pages/analysis/encore/dimensionality_reduction.rst", "documentation_pages/analysis/encore/similarity.rst", "documentation_pages/analysis/encore/utils.rst", "documentation_pages/analysis/gnm.rst", "documentation_pages/analysis/hbond_autocorrel.rst", "documentation_pages/analysis/hbond_autocorrel_deprecated.rst", "documentation_pages/analysis/helix_analysis.rst", "documentation_pages/analysis/hole2.rst", "documentation_pages/analysis/hydrogenbonds.rst", "documentation_pages/analysis/leaflet.rst", "documentation_pages/analysis/legacy/x3dna.rst", "documentation_pages/analysis/legacy_modules.rst", "documentation_pages/analysis/lineardensity.rst", "documentation_pages/analysis/msd.rst", "documentation_pages/analysis/nucleicacids.rst", "documentation_pages/analysis/nuclinfo.rst", "documentation_pages/analysis/pca.rst", "documentation_pages/analysis/polymer.rst", "documentation_pages/analysis/psa.rst", "documentation_pages/analysis/rdf.rst", "documentation_pages/analysis/rms.rst", "documentation_pages/analysis/waterdynamics.rst", "documentation_pages/analysis/wbridge_analysis.rst", "documentation_pages/analysis_modules.rst", "documentation_pages/auxiliary/EDR.rst", "documentation_pages/auxiliary/XVG.rst", "documentation_pages/auxiliary/base.rst", "documentation_pages/auxiliary/core.rst", "documentation_pages/auxiliary/init.rst", "documentation_pages/auxiliary_modules.rst", "documentation_pages/converters.rst", "documentation_pages/converters/OpenMM.rst", "documentation_pages/converters/ParmEd.rst", "documentation_pages/converters/RDKit.rst", "documentation_pages/coordinates/CRD.rst", "documentation_pages/coordinates/DCD.rst", "documentation_pages/coordinates/DLPoly.rst", "documentation_pages/coordinates/DMS.rst", "documentation_pages/coordinates/FHIAIMS.rst", "documentation_pages/coordinates/GMS.rst", "documentation_pages/coordinates/GRO.rst", "documentation_pages/coordinates/GSD.rst", "documentation_pages/coordinates/H5MD.rst", "documentation_pages/coordinates/INPCRD.rst", "documentation_pages/coordinates/LAMMPS.rst", "documentation_pages/coordinates/MMTF.rst", "documentation_pages/coordinates/MOL2.rst", "documentation_pages/coordinates/NAMDBIN.rst", "documentation_pages/coordinates/PDB.rst", "documentation_pages/coordinates/PDBQT.rst", "documentation_pages/coordinates/PQR.rst", "documentation_pages/coordinates/TNG.rst", "documentation_pages/coordinates/TRJ.rst", "documentation_pages/coordinates/TRR.rst", "documentation_pages/coordinates/TRZ.rst", "documentation_pages/coordinates/TXYZ.rst", "documentation_pages/coordinates/XDR.rst", "documentation_pages/coordinates/XTC.rst", "documentation_pages/coordinates/XYZ.rst", "documentation_pages/coordinates/base.rst", "documentation_pages/coordinates/chain.rst", "documentation_pages/coordinates/chemfiles.rst", "documentation_pages/coordinates/core.rst", "documentation_pages/coordinates/init.rst", "documentation_pages/coordinates/memory.rst", "documentation_pages/coordinates/null.rst", "documentation_pages/coordinates/pickle_readers.rst", "documentation_pages/coordinates/timestep.rst", "documentation_pages/coordinates_modules.rst", "documentation_pages/core/accessors.rst", "documentation_pages/core/groups.rst", "documentation_pages/core/init.rst", "documentation_pages/core/selection.rst", "documentation_pages/core/topology.rst", "documentation_pages/core/topologyattrs.rst", "documentation_pages/core/topologyobjects.rst", "documentation_pages/core/universe.rst", "documentation_pages/core_modules.rst", "documentation_pages/exceptions.rst", "documentation_pages/lib/NeighborSearch.rst", "documentation_pages/lib/c_distances.rst", "documentation_pages/lib/c_distances_openmp.rst", "documentation_pages/lib/correlations.rst", "documentation_pages/lib/distances.rst", "documentation_pages/lib/formats/libdcd.rst", "documentation_pages/lib/formats/libmdaxdr.rst", "documentation_pages/lib/log.rst", "documentation_pages/lib/mdamath.rst", "documentation_pages/lib/nsgrid.rst", "documentation_pages/lib/picklable_file_io.rst", "documentation_pages/lib/pkdtree.rst", "documentation_pages/lib/qcprot.rst", "documentation_pages/lib/transformations.rst", "documentation_pages/lib/util.rst", "documentation_pages/lib_modules.rst", "documentation_pages/overview.rst", "documentation_pages/references.rst", "documentation_pages/selections.rst", "documentation_pages/selections/base.rst", "documentation_pages/selections/charmm.rst", "documentation_pages/selections/gromacs.rst", "documentation_pages/selections/jmol.rst", "documentation_pages/selections/pymol.rst", "documentation_pages/selections/vmd.rst", "documentation_pages/selections_modules.rst", "documentation_pages/topology.rst", "documentation_pages/topology/CRDParser.rst", "documentation_pages/topology/DLPolyParser.rst", "documentation_pages/topology/DMSParser.rst", "documentation_pages/topology/ExtendedPDBParser.rst", "documentation_pages/topology/FHIAIMSParser.rst", "documentation_pages/topology/GMSParser.rst", "documentation_pages/topology/GROParser.rst", "documentation_pages/topology/GSDParser.rst", "documentation_pages/topology/HoomdXMLParser.rst", "documentation_pages/topology/ITPParser.rst", "documentation_pages/topology/LAMMPSParser.rst", "documentation_pages/topology/MMTFParser.rst", "documentation_pages/topology/MOL2Parser.rst", "documentation_pages/topology/MinimalParser.rst", "documentation_pages/topology/PDBParser.rst", "documentation_pages/topology/PDBQTParser.rst", "documentation_pages/topology/PQRParser.rst", "documentation_pages/topology/PSFParser.rst", "documentation_pages/topology/TOPParser.rst", "documentation_pages/topology/TPRParser.rst", "documentation_pages/topology/TXYZParser.rst", "documentation_pages/topology/XYZParser.rst", "documentation_pages/topology/base.rst", "documentation_pages/topology/core.rst", "documentation_pages/topology/guessers.rst", "documentation_pages/topology/init.rst", "documentation_pages/topology/tables.rst", "documentation_pages/topology/tpr_util.rst", "documentation_pages/topology_modules.rst", "documentation_pages/trajectory_transformations.rst", "documentation_pages/transformations/base.rst", "documentation_pages/transformations/boxdimensions.rst", "documentation_pages/transformations/fit.rst", "documentation_pages/transformations/nojump.rst", "documentation_pages/transformations/positionaveraging.rst", "documentation_pages/transformations/rotate.rst", "documentation_pages/transformations/translate.rst", "documentation_pages/transformations/wrap.rst", "documentation_pages/units.rst", "documentation_pages/version.rst", "documentation_pages/visualization/streamlines.rst", "documentation_pages/visualization/streamlines_3D.rst", "documentation_pages/visualization_modules.rst", "index.rst"], "titles": ["4.2.1. Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align", "4.2.4. Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances", "4.1.1. Analysis building blocks \u2014 MDAnalysis.analysis.base", "4.2.8. Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat", "4.2.2. Native contacts analysis \u2014 MDAnalysis.analysis.contacts", "4.11.1. Analysis data files", "4.8.1. Generating densities from trajectories \u2014 MDAnalysis.analysis.density", "4.8.4. Dielectric \u2014 MDAnalysis.analysis.dielectric", "4.9.1. Diffusion map \u2014 MDAnalysis.analysis.diffusionmap", "4.7.1.3. Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals", "4.2.3. Distance analysis \u2014 MDAnalysis.analysis.distances", "4.2.7. ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore", "4.2.7.1.6. bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap", "4.2.7.1.2. Clustering", "4.2.7.1.4. Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix", "4.2.7.1.5. Covariance calculation \u2014 encore.covariance", "4.2.7.1.3. Dimensionality reduction", "4.2.7.1.1. Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity", "4.2.7.1.7. Utility functions for ENCORE", "4.7.1.1. Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm", "4.3.2. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel", "4.3.4. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)", "4.7.1.2. HELANAL \u2014 analysis of protein helices", "4.4.1. HOLE analysis \u2014 MDAnalysis.analysis.hole2", "4.3.1. Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis", "4.4.2. Leaflet identification \u2014 MDAnalysis.analysis.leaflet", "4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna", "4.10.1. MDAnalysis.analysis.legacy \u2014 Legacy analysis code", "4.8.2. Linear Density \u2014 MDAnalysis.analysis.lineardensity", "4.7.2.2. Mean Squared Displacement \u2014 MDAnalysis.analysis.msd", "4.5.2. Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids", "4.5.1. Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo", "4.9.2. Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca", "4.6.1. Polymer analysis \u2014 MDAnalysis.analysis.polymer", "4.2.6. Calculating path similarity \u2014 MDAnalysis.analysis.psa", "4.7.2.1. Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf", "4.2.5. Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms", "4.8.3. Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics", "4.3.3. Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis", "4. Analysis modules", "10.5. EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR", "10.4. XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG", "10.2. Auxiliary Readers \u2014 MDAnalysis.auxiliary.base", "10.3. Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core", "10.1. Auxiliary Readers \u2014 MDAnalysis.auxiliary", "10. Auxiliary modules", "7. Converter modules", "7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser", "7.1. ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser", "7.3. RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser", "6.2. CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD", "6.3. DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD", "6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly", "6.5. DESRES file format \u2014 MDAnalysis.coordinates.DMS", "6.25. FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS", "6.6. GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS", "6.8. GRO file format \u2014 MDAnalysis.coordinates.GRO", "6.7. GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD", "6.9. H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD", "6.10. INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD", "6.11. LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS", "6.12. MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF", "6.13. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "6.14. NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN", "6.15. PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB", "6.16. PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT", "6.17. PQR file format \u2014 MDAnalysis.coordinates.PQR", "6.18. TNG trajectory files \u2014 MDAnalysis.coordinates.TNG", "6.19. AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ", "6.20. TRR trajectory files \u2014 MDAnalysis.coordinates.TRR", "6.21. TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ", "6.22. TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ", "6.34. XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR", "6.23. XTC trajectory files \u2014 MDAnalysis.coordinates.XTC", "6.24. XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ", "6.30. Base classes \u2014 MDAnalysis.coordinates.base", "6.33. ChainReader \u2014 MDAnalysis.coordinates.chain", "6.27. Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles", "6.31. Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core", "6.1. Trajectory Readers and Writers \u2014 MDAnalysis.coordinates", "6.26. Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory", "6.28. Null output \u2014 MDAnalysis.coordinates.null", "6.32. Serialization of Coordinate Readers", "6.29. Timestep Class \u2014 MDAnalysis.coordinates.timestep", "6. Coordinates modules", "7.7. AtomGroup accessors \u2014 MDAnalysis.core.accessors", "11.2.2. Core objects: Containers \u2014 MDAnalysis.core.groups", "11.1. Core functions of MDAnalysis", "11.4.1. Atom selection Hierarchy \u2014 MDAnalysis.core.selection", "11.3.1. Core Topology object \u2014 MDAnalysis.core.topology", "11.3.3. Topology attribute objects \u2014 MDAnalysis.core.topologyattrs", "11.3.2. Core Topology Objects \u2014 MDAnalysis.core.topologyobjects", "11.2.1. Core object: Universe \u2014 MDAnalysis.core.universe", "11. Core modules", "16. Custom exceptions and warnings \u2014 MDAnalysis.exceptions", "13.2.3. Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch", "13.2.2.1. Distance calculation library \u2014 MDAnalysis.lib.c_distances", "13.2.2.2. Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp", "13.2.11. Correlations utilities \u2014 MDAnalysis.lib.correlations", "13.2.1. Fast distance array computation \u2014 MDAnalysis.lib.distances", "13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd", "13.3.1. Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr", "13.2.6. Setting up logging \u2014 MDAnalysis.lib.log", "13.2.7. Mathematical helper functions \u2014 MDAnalysis.lib.mdamath", "13.2.4. Neighbor search library \u2014 MDAnalysis.lib.nsgrid", "13.2.14. Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io", "13.2.5. PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree", "13.2.9. Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot", "13.2.8. Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations", "13.2.10. Helper functions \u2014 MDAnalysis.lib.util", "13. Library functions \u2014 MDAnalysis.lib", "1. Overview over MDAnalysis", "17. References", "3. Selection commands", "9.2.6. Base classes for the selection writers", "9.2.4. CHARMM selections", "9.2.3. Gromacs selections", "9.2.5. Jmol selections", "9.2.2. PyMOL selections", "9.2.1. VMD selections", "9. Selection exporters", "2. The topology system", "5.2. CRD topology parser", "5.3. DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser", "5.4. DESRES Molecular Structure file format topology parser", "5.16. Extended PDB topology parser", "5.5. FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser", "5.6. GAMESS Topology Parser", "5.7. GRO topology parser", "5.8. GSD topology parser", "5.9. HOOMD XML topology parser", "5.10. ITP topology parser", "5.11. LAMMPSParser", "5.13. MMTF Topology Parser", "5.14. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "5.12. Minimal topology parser", "5.15. PDB Topology Parser", "5.17. PDBQT topology parser", "5.18. PQR topology parser", "5.19. PSF topology parser", "5.20. AMBER PRMTOP topology parser", "5.21. Gromacs portable run input TPR format parser", "5.22. TXYZ topology parser", "5.23. XYZ Topology Parser", "5.24. Base topology reader classes \u2014 MDAnalysis.topology.base", "5.25. Common functions for topology building \u2014 MDAnalysis.topology.core", "5.26. Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers", "5.1. Topology readers \u2014 MDAnalysis.topology", "5.27. MDAnalysis topology tables", "5.28. Utility functions for the TPR topology parser", "5. Topology modules", "8. Trajectory transformations (\u201con-the-fly\u201d transformations)", "8.5.1. Transformations Base Class \u2014 MDAnalysis.transformations.base", "8.6.7. Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions", "8.6.4. Fitting transformations \u2014 MDAnalysis.transformations.fit", "8.6.6. No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump", "8.6.3. Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging", "8.6.2. Trajectory rotation \u2014 MDAnalysis.transformations.rotate", "8.6.1. Trajectory translation \u2014 MDAnalysis.transformations.translate", "8.6.5. Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap", "15. Constants and unit conversion \u2014 MDAnalysis.units", "14. Version information for MDAnalysis - MDAnalysis.version", "12.1.1. Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines", "12.1.2. Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D", "12. Visualization modules", "MDAnalysis documentation"], "terms": {"author": [0, 1, 3, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 58, 80, 98, 107, 108, 162, 163], "oliv": [0, 6, 9, 23, 34, 36], "beckstein": [0, 6, 9, 23, 34, 36, 111, 112], "joshua": [0, 107], "adelman": [0, 107], "year": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 107, 162, 163], "2010": [0, 107, 108, 112, 160], "2013": [0, 4, 23, 26, 51, 112], "copyright": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163], "gnu": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 68, 80, 98, 104, 162, 163, 165], "public": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 104, 107, 110, 112, 161, 162, 163, 165], "licens": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163, 165], "v3": [0, 1, 6, 7, 11, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 37, 38, 49, 162, 163], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 120, 125, 129, 130, 131, 132, 135, 136, 138, 139, 140, 141, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "modul": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 20, 21, 22, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 88, 92, 95, 98, 102, 104, 106, 108, 111, 120, 141, 144, 145, 147, 148, 149, 151, 165], "contain": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 49, 51, 54, 55, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 84, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 125, 130, 131, 136, 139, 140, 147, 148, 149, 150, 151, 153, 162, 163, 164, 165], "target": [0, 6], "structur": [0, 2, 4, 5, 6, 8, 9, 14, 15, 19, 22, 23, 25, 30, 31, 32, 34, 35, 36, 37, 38, 46, 49, 53, 56, 62, 67, 78, 79, 83, 84, 85, 86, 91, 92, 93, 98, 100, 110, 111, 112, 113, 125, 126, 134, 136, 137, 140, 141, 142, 143, 146, 147, 148, 150, 154, 165], "refer": [0, 3, 4, 5, 6, 8, 10, 15, 19, 20, 23, 24, 26, 29, 30, 31, 32, 34, 36, 37, 38, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 83, 86, 88, 89, 90, 92, 98, 99, 103, 104, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 154, 155, 162, 164, 165], "thei": [0, 2, 4, 5, 6, 9, 12, 20, 27, 28, 29, 32, 34, 37, 38, 40, 44, 48, 49, 58, 60, 64, 67, 68, 72, 73, 75, 76, 79, 83, 84, 86, 88, 90, 91, 92, 100, 101, 109, 110, 111, 113, 130, 131, 134, 136, 145, 146, 147, 150, 151, 155], "us": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 129, 130, 131, 132, 134, 135, 136, 137, 138, 140, 141, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "fast": [0, 8, 10, 25, 29, 36, 37, 68, 72, 80, 101, 102, 110, 112, 165], "qcp": [0, 8, 36, 110, 111], "algorithm": [0, 8, 17, 22, 23, 29, 34, 36, 38, 39, 49, 58, 67, 92, 99, 103, 110, 146, 155, 165], "calcul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 87, 90, 91, 95, 98, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 155, 156, 157, 158, 159, 160], "root": [0, 2, 3, 8, 29, 32, 34, 39, 58, 62, 65, 102, 109], "mean": [0, 2, 3, 4, 6, 8, 13, 15, 17, 18, 20, 23, 24, 26, 32, 34, 35, 37, 39, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 82, 86, 89, 91, 98, 99, 100, 101, 103, 105, 112, 113, 129, 149, 152, 153, 154, 155, 156, 157, 158, 159], "squar": [0, 2, 7, 8, 12, 17, 18, 32, 34, 37, 39, 58, 107, 112], "distanc": [0, 2, 3, 4, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20, 23, 24, 25, 32, 34, 35, 36, 37, 38, 86, 88, 91, 98, 104, 106, 109, 110, 111, 113, 146, 148, 151], "rmsd": [0, 2, 8, 14, 16, 17, 34, 39, 40, 110, 111, 112, 149, 154], "between": [0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 22, 23, 24, 29, 30, 32, 34, 35, 36, 38, 40, 42, 44, 45, 49, 51, 54, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 76, 78, 79, 80, 83, 85, 86, 90, 91, 92, 94, 99, 100, 103, 104, 105, 106, 107, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 146, 147, 150, 151, 155, 160, 162, 163], "two": [0, 1, 2, 8, 10, 11, 13, 16, 17, 23, 24, 25, 26, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 78, 80, 85, 86, 89, 90, 91, 93, 98, 99, 102, 103, 104, 107, 108, 112, 113, 135, 146, 147, 151, 155], "set": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 101, 104, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 150, 151, 152, 154, 155, 156, 157, 158, 159, 162, 163, 165], "theobald2005": [0, 8, 36, 107], "rotat": [0, 3, 6, 14, 22, 34, 36, 37, 86, 92, 103, 107, 108, 112, 151, 154], "matrix": [0, 4, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 25, 32, 34, 86, 103, 107, 108, 109, 110, 112], "r": [0, 3, 4, 8, 9, 22, 23, 29, 32, 35, 36, 37, 38, 49, 57, 58, 68, 77, 79, 86, 90, 95, 99, 100, 101, 105, 107, 108, 109, 111, 112, 113, 149], "minim": [0, 3, 25, 36, 48, 79, 99, 110, 147, 150, 154, 165], "liu2010": [0, 107], "pleas": [0, 1, 4, 6, 8, 9, 11, 14, 17, 23, 24, 25, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 49, 58, 68, 74, 75, 99, 101, 107, 109, 112, 113, 140, 141, 151, 164, 165], "cite": [0, 8, 11, 17, 29, 32, 36, 39, 112, 165], "when": [0, 2, 4, 6, 8, 10, 11, 13, 17, 23, 24, 26, 29, 32, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 99, 100, 102, 103, 104, 105, 106, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 121, 134, 136, 141, 147, 151, 152, 155, 156, 157, 159, 160, 161, 165], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 128, 129, 131, 132, 133, 135, 136, 138, 140, 141, 144, 145, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "typic": [0, 6, 9, 10, 19, 23, 25, 26, 34, 35, 39, 46, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 86, 90, 91, 92, 99, 100, 106, 107, 109, 111, 113, 120, 147, 150, 155, 156], "one": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 92, 98, 99, 100, 101, 104, 105, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 130, 131, 135, 140, 141, 146, 147, 151, 155, 156, 160, 164, 165], "select": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 78, 79, 80, 83, 86, 87, 90, 91, 92, 94, 100, 109, 110, 111, 162, 163, 165], "group": [0, 1, 3, 4, 6, 7, 8, 10, 13, 14, 17, 19, 20, 24, 25, 28, 32, 34, 35, 36, 37, 38, 49, 50, 58, 64, 66, 79, 80, 83, 88, 90, 91, 92, 93, 95, 98, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 146, 148, 151, 154, 158, 159, 162, 163], "atom": [0, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 103, 104, 106, 109, 111, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 148, 149, 150, 154, 155, 157, 158, 159, 165], "c": [0, 2, 3, 9, 13, 16, 19, 23, 30, 33, 35, 36, 37, 38, 40, 49, 51, 52, 54, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 83, 86, 88, 90, 91, 98, 99, 100, 103, 104, 107, 108, 109, 111, 112, 113, 141, 148, 149, 153, 160], "alpha": [0, 9, 10, 22, 23, 31, 36, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 113, 153], "transform": [0, 2, 6, 8, 29, 32, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 88, 92, 99, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "appli": [0, 2, 6, 8, 10, 13, 19, 23, 25, 32, 36, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 91, 92, 99, 103, 108, 109, 113, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159], "current": [0, 6, 8, 9, 13, 17, 23, 29, 32, 36, 37, 38, 40, 41, 42, 44, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 86, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 131, 140, 141, 146, 147, 149, 156], "frame": [0, 1, 2, 3, 4, 6, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 82, 83, 86, 92, 98, 100, 101, 102, 105, 108, 109, 111, 113, 114, 115, 116, 117, 118, 119, 150, 151, 155, 156, 162, 163], "trajectori": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 20, 24, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 42, 45, 47, 48, 49, 50, 52, 54, 56, 62, 64, 65, 66, 71, 75, 76, 78, 81, 82, 83, 84, 86, 92, 95, 102, 105, 106, 109, 110, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 152, 153, 154, 159, 160, 162, 163, 165], "obtain": [0, 2, 6, 9, 13, 16, 17, 23, 25, 32, 36, 43, 44, 58, 64, 66, 68, 70, 79, 86, 87, 90, 103, 104, 112, 134, 136, 140, 165], "alignto": 0, "aligntraj": [0, 6, 17, 34, 36], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "do": [0, 1, 4, 6, 9, 10, 14, 17, 23, 34, 36, 38, 40, 44, 58, 64, 67, 70, 74, 75, 76, 79, 81, 82, 84, 86, 102, 109, 110, 111, 134, 147, 150, 152, 154, 155], "individu": [0, 10, 11, 17, 19, 23, 26, 29, 34, 35, 39, 42, 44, 58, 76, 79, 86, 92, 109, 111, 114, 115, 116, 117, 118, 119, 120, 133, 164, 165], "respect": [0, 4, 6, 29, 34, 36, 37, 83, 86, 88, 99, 108, 154], "show": [0, 2, 4, 6, 7, 8, 9, 17, 19, 20, 23, 26, 28, 29, 32, 33, 35, 36, 37, 102, 111, 113, 134], "how": [0, 2, 8, 10, 12, 13, 16, 17, 23, 25, 32, 37, 39, 42, 49, 51, 58, 60, 62, 67, 68, 74, 75, 79, 86, 87, 100, 101, 102, 109, 111, 113, 160, 165], "step": [0, 1, 2, 3, 4, 6, 8, 9, 16, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44, 48, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 92, 98, 99, 100, 101, 147, 151, 155, 160], "manual": [0, 6, 17, 23, 68, 77, 88, 102, 111, 141, 151, 156], "explain": [0, 32, 40], "intermedi": [0, 23, 36, 102, 109, 160], "comput": [0, 1, 2, 3, 6, 7, 8, 10, 11, 13, 14, 17, 22, 24, 28, 30, 31, 32, 34, 35, 36, 37, 38, 54, 58, 67, 79, 86, 87, 90, 98, 103, 104, 107, 109, 110, 112, 155, 156, 160], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 50, 54, 55, 56, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "requir": [0, 2, 3, 8, 13, 14, 15, 17, 20, 23, 24, 29, 32, 33, 34, 36, 39, 41, 44, 49, 50, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 74, 75, 78, 79, 80, 83, 85, 86, 91, 92, 94, 98, 99, 103, 106, 109, 113, 135, 137, 140, 149, 151, 152, 164], "lib": [0, 1, 2, 3, 6, 8, 9, 10, 24, 29, 30, 32, 36, 37, 57, 58, 68, 72, 77, 82, 83, 86, 88, 91], "qcprot": [0, 8, 36, 110, 111, 112], "implement": [0, 2, 4, 6, 8, 11, 13, 15, 16, 17, 25, 28, 29, 34, 36, 42, 50, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 84, 86, 91, 98, 99, 102, 104, 105, 106, 107, 108, 109, 110, 112, 120, 141, 146, 147, 149, 150, 165], "exampl": [0, 1, 5, 6, 7, 8, 11, 13, 14, 16, 17, 19, 23, 25, 27, 28, 29, 32, 33, 34, 35, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 66, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 100, 101, 102, 103, 105, 108, 109, 110, 112, 113, 119, 120, 129, 131, 132, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "file": [0, 1, 3, 6, 8, 9, 13, 14, 16, 17, 18, 20, 24, 26, 29, 32, 34, 36, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 55, 57, 68, 70, 75, 76, 77, 78, 79, 80, 81, 84, 86, 90, 92, 94, 100, 101, 102, 104, 105, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 162, 163, 165], "provid": [0, 1, 2, 4, 6, 7, 8, 9, 10, 13, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 88, 89, 92, 98, 99, 101, 103, 104, 105, 106, 109, 110, 111, 112, 113, 120, 134, 138, 147, 154, 157, 165], "part": [0, 5, 8, 13, 20, 23, 26, 29, 32, 34, 38, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 108, 111, 113, 120, 140], "test": [0, 1, 3, 4, 8, 9, 13, 16, 17, 20, 22, 23, 26, 27, 29, 32, 33, 34, 36, 38, 39, 47, 48, 49, 51, 54, 58, 60, 68, 69, 72, 73, 75, 77, 79, 80, 81, 84, 85, 86, 91, 92, 99, 109, 111, 121, 131, 140, 162, 163], "suit": [0, 1, 8, 13, 16, 17, 23, 29, 32, 39, 111], "variabl": [0, 1, 5, 8, 13, 16, 29, 32, 40, 58, 67, 68, 74, 79, 98, 109, 112, 152], "psf": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 24, 26, 32, 34, 36, 49, 64, 65, 80, 86, 92, 109, 111, 113, 121, 147, 150], "dcd": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 26, 32, 34, 36, 49, 58, 73, 79, 80, 84, 86, 92, 109, 110, 111], "pdb_small": [0, 86], "For": [0, 1, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 82, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 104, 106, 109, 110, 111, 112, 113, 120, 131, 132, 140, 141, 146, 147, 151, 152, 156, 160], "all": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 109, 111, 112, 113, 114, 129, 130, 132, 134, 140, 141, 142, 143, 144, 146, 147, 151, 152, 153, 155, 157, 158, 159, 160, 162, 163, 165], "further": [0, 4, 19, 20, 24, 25, 26, 27, 31, 34, 36, 38, 40, 42, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 102, 105, 113, 120, 141, 142], "execut": [0, 1, 3, 7, 23, 26, 38, 48, 76, 109], "first": [0, 2, 3, 4, 6, 8, 9, 13, 17, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 86, 90, 91, 92, 100, 101, 103, 104, 108, 109, 113, 120, 131, 146, 147, 148, 151, 156, 161, 162, 163, 165], "import": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 16, 17, 20, 22, 23, 24, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 46, 47, 48, 49, 58, 60, 62, 64, 66, 68, 77, 78, 80, 85, 86, 89, 90, 91, 92, 100, 101, 102, 103, 108, 109, 110, 111, 121, 129, 131, 132, 141, 146, 151, 157, 162, 163, 164], "mda": [0, 1, 2, 3, 4, 7, 8, 9, 20, 22, 23, 25, 29, 32, 33, 34, 35, 36, 37, 40, 46, 47, 48, 49, 56, 58, 60, 77, 79, 80, 85, 86, 89, 92, 103, 109, 111, 120, 129, 131, 132, 146, 153, 154, 159], "from": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 165], "datafil": [0, 1, 2, 3, 4, 7, 8, 9, 13, 16, 17, 20, 22, 23, 26, 29, 32, 33, 34, 35, 36, 40, 47, 48, 49, 77, 80, 85, 86, 92, 109, 111, 121, 131, 146], "In": [0, 2, 3, 6, 8, 13, 14, 17, 20, 23, 24, 29, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 84, 86, 88, 89, 90, 92, 98, 99, 100, 102, 104, 105, 108, 109, 111, 112, 113, 114, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 150, 151, 155, 156, 160, 161], "simplest": [0, 17, 24, 92], "case": [0, 1, 6, 7, 8, 10, 14, 17, 23, 24, 28, 29, 34, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 85, 86, 88, 90, 92, 98, 99, 102, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 155, 156, 160], "we": [0, 1, 2, 3, 4, 6, 8, 9, 13, 16, 17, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 82, 88, 91, 100, 102, 109, 110, 111, 112, 113, 138, 140, 146, 148, 151, 160, 161, 165], "simpli": [0, 6, 13, 16, 17, 23, 25, 38, 68, 79, 80, 86, 88, 92, 109, 112, 146, 147, 156], "ref": [0, 2, 9, 32, 36, 107, 154], "univers": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 61, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 87, 90, 91, 93, 103, 105, 107, 108, 109, 111, 113, 121, 125, 129, 131, 132, 133, 136, 144, 146, 147, 149, 150, 151, 154], "mobil": [0, 2, 34, 36, 38], "select_atom": [0, 2, 3, 4, 6, 8, 9, 20, 25, 32, 33, 34, 35, 36, 37, 48, 49, 58, 62, 64, 79, 80, 86, 87, 88, 90, 92, 109, 111, 113, 120, 154], "name": [0, 2, 3, 4, 6, 9, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 42, 44, 46, 49, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 85, 86, 87, 88, 90, 92, 93, 102, 105, 109, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 126, 127, 129, 130, 131, 132, 133, 136, 137, 139, 140, 141, 142, 143, 144, 147, 148, 149, 162, 163], "ca": [0, 2, 4, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 32, 34, 36, 58, 64, 86, 88, 90, 111, 113, 148], "posit": [0, 2, 3, 6, 7, 8, 9, 10, 13, 19, 22, 23, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 87, 90, 92, 95, 99, 100, 101, 102, 103, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 151, 152, 155, 156, 158, 159, 160], "28": [0, 62, 112, 141, 148, 149], "20178579474479": 0, "note": [0, 4, 6, 10, 13, 16, 17, 19, 20, 23, 24, 26, 28, 29, 31, 32, 33, 34, 36, 37, 38, 47, 48, 49, 50, 51, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 80, 86, 89, 90, 91, 92, 93, 99, 100, 101, 102, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 151, 152, 155, 159], "translat": [0, 3, 6, 32, 36, 58, 60, 76, 86, 89, 90, 99, 108, 114, 148, 151, 154, 159], "have": [0, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 20, 23, 24, 26, 27, 29, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 85, 86, 87, 88, 90, 91, 92, 98, 99, 100, 103, 109, 110, 112, 113, 120, 123, 125, 131, 134, 136, 138, 140, 141, 146, 147, 151, 152, 156, 159, 161, 165], "been": [0, 2, 3, 4, 6, 7, 8, 13, 16, 17, 19, 20, 23, 28, 32, 33, 34, 35, 36, 38, 39, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 72, 73, 74, 75, 78, 79, 80, 86, 88, 92, 101, 102, 103, 109, 112, 113, 132, 146, 159, 165], "remov": [0, 2, 4, 6, 8, 9, 10, 19, 20, 21, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 41, 51, 54, 56, 58, 60, 62, 64, 68, 69, 72, 73, 74, 75, 78, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 102, 109, 113, 114, 132, 133, 136, 148, 154, 156], "order": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 17, 18, 19, 23, 24, 26, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 76, 79, 80, 81, 83, 86, 88, 89, 90, 91, 92, 98, 100, 105, 109, 111, 147, 149, 151, 164], "look": [0, 4, 10, 23, 29, 32, 38, 40, 42, 66, 78, 79, 100, 109, 130, 131, 140, 146, 165], "pure": [0, 7, 33, 64, 91, 141], "need": [0, 2, 6, 9, 17, 19, 23, 26, 29, 32, 36, 39, 40, 41, 44, 46, 48, 49, 51, 55, 56, 64, 68, 74, 75, 76, 77, 78, 79, 82, 84, 85, 86, 88, 93, 99, 100, 104, 105, 109, 125, 135, 136, 147, 150, 152, 155, 160, 165], "superimpos": [0, 6, 14, 34, 36, 108], "centr": [0, 23, 25, 28], "mass": [0, 3, 6, 14, 15, 17, 18, 19, 24, 28, 34, 36, 48, 49, 58, 60, 86, 87, 88, 90, 92, 103, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 143, 146, 147, 148, 149, 154, 157, 158, 159, 160], "geometri": [0, 9, 22, 23, 25, 28, 34, 36, 54, 86, 112, 113, 154, 157, 158], "center": [0, 3, 6, 13, 14, 19, 23, 28, 35, 36, 37, 86, 90, 103, 106, 107, 108, 111, 113, 154, 157, 158, 159], "true": [0, 1, 2, 4, 6, 7, 8, 9, 13, 14, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 102, 103, 104, 106, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "21": [0, 8, 23, 37, 64, 65, 112, 149, 160], "892591663632704": 0, "ha": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 19, 20, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 86, 88, 90, 92, 99, 100, 102, 103, 105, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 161, 164, 165], "onli": [0, 2, 3, 4, 6, 9, 13, 16, 17, 19, 20, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 109, 110, 113, 114, 125, 126, 129, 131, 135, 136, 137, 140, 143, 147, 154, 156, 161], "done": [0, 1, 6, 9, 13, 16, 17, 29, 38, 42, 49, 56, 64, 79, 80, 91, 99, 102, 114, 115, 116, 117, 118, 119, 146, 157, 158], "superposit": [0, 6, 36, 107, 110, 112, 154], "If": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 130, 131, 134, 135, 136, 140, 141, 147, 149, 151, 154, 155, 156, 157, 158, 161, 165], "you": [0, 4, 6, 8, 9, 13, 16, 17, 19, 20, 22, 23, 27, 28, 29, 32, 34, 36, 37, 38, 39, 46, 48, 49, 51, 58, 62, 68, 74, 77, 85, 86, 88, 92, 99, 100, 102, 105, 106, 107, 111, 112, 113, 125, 131, 136, 146, 152, 155, 161, 165], "want": [0, 4, 6, 17, 23, 27, 37, 38, 40, 48, 56, 58, 68, 85, 86, 92, 120, 140, 146, 165], "also": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 23, 24, 26, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 99, 100, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 155, 156, 160, 165], "keyword": [0, 1, 2, 3, 4, 6, 9, 10, 13, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 99, 102, 109, 110, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 151], "6": [0, 2, 3, 4, 5, 6, 9, 23, 26, 29, 31, 34, 36, 37, 40, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 78, 80, 86, 89, 91, 92, 99, 100, 102, 103, 104, 108, 109, 113, 131, 140, 141, 142, 148, 149, 153, 156, 159, 160, 161, 165], "809396586471815": 0, "while": [0, 4, 13, 16, 29, 32, 35, 36, 41, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 80, 86, 92, 104, 106, 122, 134, 142, 146], "rotation_matrix": [0, 2, 86, 108], "mobile0": 0, "center_of_mass": [0, 6, 86, 90, 111], "ref0": 0, "809396586471805": 0, "arrai": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 95, 100, 101, 103, 104, 106, 107, 108, 110, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 151, 154, 157, 158, 162, 163, 165], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "14514539": 0, "27259113": 0, "95111876": 0, "88652593": 0, "46267112": 0, "00268642": 0, "43932289": 0, "84358136": 0, "30881368": 0, "put": [0, 13, 18, 92], "togeth": [0, 2, 5, 13, 16, 23, 31, 34, 38, 58, 60, 76, 80, 86, 90, 92, 146, 151, 152, 155, 159, 165], "onto": [0, 2, 8, 9, 32, 86, 99], "atomgroup": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 20, 23, 25, 28, 29, 30, 32, 33, 34, 35, 36, 46, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 74, 75, 77, 79, 80, 83, 86, 87, 88, 90, 91, 92, 93, 94, 95, 99, 103, 109, 111, 113, 114, 115, 116, 117, 118, 119, 146, 147, 151, 154, 156, 157, 158, 159], "3341": [0, 109, 111], "write": [0, 6, 17, 18, 19, 23, 25, 26, 34, 36, 48, 49, 50, 51, 54, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 84, 86, 87, 90, 92, 100, 101, 102, 104, 105, 109, 110, 114, 115, 116, 117, 118, 119, 151, 160, 165], "mobile_on_ref": 0, "pdb": [0, 4, 5, 9, 10, 24, 25, 26, 34, 37, 44, 49, 51, 54, 57, 58, 60, 61, 62, 65, 66, 69, 71, 72, 73, 75, 79, 80, 82, 84, 86, 90, 92, 105, 109, 111, 113, 133, 146, 147, 150, 154, 165], "To": [0, 1, 2, 4, 6, 9, 17, 23, 24, 25, 29, 32, 34, 35, 37, 39, 40, 42, 44, 49, 56, 58, 60, 62, 75, 76, 79, 86, 87, 89, 90, 92, 99, 102, 106, 113, 115, 116, 117, 118, 119, 129, 131, 140, 146, 147, 152, 155, 165], "singl": [0, 2, 3, 4, 8, 10, 13, 16, 17, 19, 22, 23, 29, 33, 34, 35, 36, 37, 40, 44, 49, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 74, 75, 76, 78, 80, 82, 86, 88, 89, 90, 92, 98, 99, 100, 101, 103, 109, 110, 111, 113, 114, 146, 147, 148, 150, 151], "protein": [0, 4, 6, 8, 9, 11, 13, 16, 17, 19, 23, 24, 26, 32, 34, 35, 36, 37, 38, 48, 58, 61, 64, 79, 80, 86, 87, 90, 92, 98, 109, 111, 112, 113, 120, 154, 155], "weight": [0, 8, 13, 14, 15, 17, 19, 34, 36, 38, 58, 86, 107, 109, 122, 154, 157], "809396586471809": 0, "chang": [0, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 107, 108, 109, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 154, 156, 157, 158, 159, 160, 161], "so": [0, 6, 10, 13, 16, 17, 20, 23, 24, 29, 33, 35, 36, 37, 38, 42, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 82, 86, 91, 99, 102, 103, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 151, 154, 155, 156, 158, 159, 160], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "optim": [0, 13, 20, 34, 36, 99, 107, 108, 109, 112, 151], "whole": [0, 3, 6, 7, 9, 17, 26, 32, 36, 38, 64, 68, 79, 80, 83, 86, 87, 103, 148, 151, 154, 155, 165], "1ake": [0, 36], "trj": [0, 34, 60, 79, 82, 84], "4ake": [0, 36, 66, 86, 111, 113], "filenam": [0, 3, 5, 6, 14, 17, 19, 23, 25, 26, 34, 36, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 86, 92, 94, 100, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147], "rmsfit": 0, "run": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 48, 55, 58, 80, 86, 88, 109, 111, 113, 147, 150, 152, 165], "object": [0, 2, 8, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 28, 30, 34, 35, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 88, 95, 100, 101, 102, 104, 105, 106, 108, 109, 110, 111, 113, 114, 121, 122, 124, 125, 126, 128, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 149, 151, 153, 158, 162, 163, 165], "It": [0, 2, 3, 6, 8, 9, 13, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 32, 36, 37, 38, 39, 40, 44, 48, 49, 50, 57, 58, 62, 64, 65, 68, 69, 72, 75, 77, 79, 81, 82, 83, 85, 86, 90, 98, 100, 105, 109, 111, 112, 113, 139, 146, 150, 151, 162, 163, 165], "possibl": [0, 2, 4, 6, 8, 9, 10, 17, 20, 23, 24, 25, 29, 38, 40, 49, 56, 57, 58, 64, 65, 67, 68, 76, 77, 79, 80, 86, 88, 90, 92, 94, 99, 100, 102, 109, 112, 113, 146, 147, 148, 151, 157, 160], "arbitrari": [0, 2, 3, 6, 9, 10, 18, 23, 25, 26, 29, 30, 32, 34, 36, 58, 67, 83, 86, 88, 99, 100, 101, 109], "map": [0, 12, 13, 14, 23, 32, 34, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 88, 89, 90, 91, 92, 99, 106, 109], "base": [0, 3, 4, 6, 8, 9, 11, 13, 14, 15, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 76, 77, 78, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 99, 100, 103, 104, 105, 107, 109, 110, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159], "sequenc": [0, 17, 23, 26, 34, 36, 38, 64, 65, 75, 76, 79, 86, 90, 92, 103, 108, 109, 114, 125, 149, 151], "allow": [0, 2, 3, 5, 6, 9, 13, 16, 17, 20, 23, 24, 28, 29, 30, 32, 35, 36, 37, 40, 41, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 79, 80, 81, 82, 86, 87, 88, 91, 92, 94, 95, 98, 102, 104, 105, 106, 109, 110, 111, 113, 120, 129, 134, 141, 148, 165], "homolog": 0, "wild": 0, "type": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 120, 122, 125, 126, 127, 128, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 148, 149, 153, 154, 155, 156, 157, 158, 159, 160], "mutant": 0, "wa": [0, 3, 9, 20, 21, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 42, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 104, 109, 113, 114, 146, 147, 154, 156, 157, 158, 159], "aln": 0, "would": [0, 6, 20, 23, 32, 38, 40, 49, 51, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 86, 92, 110, 113, 146, 151, 155, 156, 160, 165], "produc": [0, 10, 23, 26, 33, 34, 36, 37, 41, 44, 51, 58, 86, 90, 100, 102, 105, 132, 135, 162, 163], "appropri": [0, 6, 8, 25, 29, 35, 36, 38, 40, 42, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 79, 80, 86, 88, 90, 91, 92, 103, 109, 113, 114, 120, 160], "fasta2select": [0, 34, 36], "feed": [0, 23, 26], "result": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 90, 91, 92, 98, 99, 103, 104, 106, 107, 108, 109, 111, 113, 146, 147, 151, 154], "dictionari": [0, 2, 4, 6, 17, 18, 19, 20, 23, 26, 28, 34, 36, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 69, 70, 71, 72, 73, 75, 79, 80, 88, 91, 109, 147, 148], "seldict": 0, "see": [0, 1, 2, 3, 6, 7, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 37, 38, 39, 42, 44, 47, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 82, 86, 88, 90, 92, 94, 98, 99, 101, 102, 103, 109, 113, 120, 132, 136, 140, 141, 146, 148, 149, 150, 151, 152, 160, 162, 163, 164, 165], "document": [0, 2, 5, 6, 13, 14, 26, 31, 34, 35, 39, 42, 58, 60, 64, 65, 67, 68, 76, 77, 78, 82, 99, 102, 108, 142, 151, 164], "advanc": [0, 44, 79, 86, 92, 110], "version": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 149, 152, 154, 156, 157, 158, 159, 160, 165], "10": [0, 2, 3, 4, 8, 9, 11, 13, 15, 17, 19, 23, 24, 25, 26, 29, 30, 31, 32, 34, 36, 37, 38, 44, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 91, 92, 98, 102, 103, 104, 106, 108, 109, 111, 112, 113, 136, 141, 148, 149, 155, 160, 162, 163], "now": [0, 2, 4, 6, 8, 9, 10, 19, 20, 23, 28, 29, 30, 32, 33, 34, 36, 37, 42, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, 83, 85, 86, 88, 90, 91, 92, 94, 95, 99, 102, 103, 109, 113, 114, 132, 133, 134, 136, 138, 140, 141, 146, 149], "exclus": [0, 20, 23, 35, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 104, 105, 141], "access": [0, 1, 2, 3, 5, 6, 9, 18, 21, 23, 24, 25, 28, 29, 30, 34, 38, 39, 40, 42, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 85, 86, 88, 90, 91, 92, 94, 99, 104, 105, 109, 110, 111, 113, 135, 147, 165], "16": [0, 11, 12, 13, 14, 15, 16, 17, 19, 26, 27, 32, 34, 36, 56, 58, 61, 64, 65, 78, 80, 83, 86, 89, 92, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 133, 138, 147, 148, 149, 162], "rms_fit_trj": 0, "deprec": [0, 4, 6, 8, 9, 19, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 51, 54, 56, 58, 60, 69, 72, 73, 74, 75, 80, 86, 90, 91, 102, 109, 132, 133, 136], "favor": [0, 36, 86], "17": [0, 5, 22, 26, 34, 36, 37, 38, 51, 57, 60, 64, 65, 68, 86, 91, 92, 112, 129, 141, 142, 148, 149], "none": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 99, 100, 101, 102, 103, 105, 106, 108, 109, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 152, 153, 154, 155, 156, 157, 158, 159], "subselect": [0, 9, 86, 113], "tol_mass": [0, 34, 36], "1": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 102, 103, 104, 105, 108, 109, 111, 112, 113, 127, 131, 132, 134, 136, 138, 140, 141, 143, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163], "strict": [0, 66, 86, 90, 91, 98], "fals": [0, 1, 2, 4, 6, 8, 9, 13, 14, 17, 20, 23, 25, 26, 32, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 102, 104, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 152, 155, 156, 157, 158, 163], "match_atom": 0, "sourc": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "perform": [0, 2, 3, 4, 6, 8, 9, 11, 14, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 88, 98, 99, 102, 103, 106, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 152, 154, 157, 162, 163], "spatial": [0, 34, 35, 58, 106, 154], "follow": [0, 2, 3, 6, 13, 16, 17, 19, 20, 24, 29, 34, 38, 39, 40, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 99, 100, 102, 103, 104, 108, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 156, 160, 165], "wai": [0, 2, 4, 6, 8, 9, 13, 14, 19, 23, 24, 25, 29, 37, 40, 42, 49, 68, 75, 76, 79, 82, 85, 92, 108, 110, 111, 113, 114, 115, 116, 117, 118, 119, 135, 151, 154], "A": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 19, 22, 23, 24, 25, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 44, 51, 53, 54, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 75, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 103, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 131, 134, 138, 140, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "sel1": [0, 34, 36], "sel2": [0, 34, 36], "befor": [0, 2, 3, 4, 6, 10, 13, 14, 17, 24, 32, 36, 38, 39, 42, 44, 58, 64, 65, 68, 74, 75, 79, 86, 89, 90, 92, 98, 100, 101, 106, 107, 109, 113, 114, 138, 149, 151, 156, 157, 158], "its": [0, 3, 4, 8, 12, 13, 19, 23, 29, 32, 34, 37, 38, 40, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 81, 82, 85, 86, 88, 90, 92, 99, 103, 104, 105, 109, 112, 113, 120, 148, 151, 154], "coincid": [0, 99], "below": [0, 4, 5, 10, 17, 23, 29, 31, 32, 34, 36, 40, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 85, 86, 102, 113, 120, 131], "explan": [0, 29, 58, 109, 148], "deriv": [0, 2, 6, 7, 11, 17, 38, 42, 44, 75, 79, 83, 92, 102, 109, 114, 144, 147], "shift": [0, 26, 86, 99, 104, 159], "behavior": [0, 34, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 109, 113], "through": [0, 4, 6, 10, 11, 17, 20, 21, 23, 24, 25, 35, 38, 40, 41, 44, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 80, 83, 85, 86, 88, 92, 99, 109, 111, 113, 122, 147, 159, 165], "construct": [0, 6, 8, 13, 19, 20, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 85, 88, 92, 99, 104, 106, 109, 121, 147, 151], "alreadi": [0, 6, 7, 8, 23, 32, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 106, 113], "match": [0, 13, 16, 20, 23, 30, 34, 36, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 77, 80, 86, 88, 90, 91, 154], "should": [0, 2, 3, 4, 6, 8, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 38, 42, 44, 49, 51, 56, 58, 60, 61, 62, 64, 66, 74, 75, 79, 82, 84, 86, 88, 89, 90, 91, 95, 99, 102, 104, 105, 106, 109, 115, 116, 117, 118, 119, 130, 132, 133, 140, 141, 146, 147, 148, 155], "therefor": [0, 2, 6, 14, 17, 26, 27, 58, 64, 68, 74, 86, 103, 109, 140, 146], "preserv": [0, 8, 32, 34, 56, 60, 62, 64, 86], "exact": [0, 4, 17, 23, 29, 34, 68, 86], "either": [0, 4, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 28, 34, 36, 38, 40, 42, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 91, 92, 98, 99, 100, 101, 103, 105, 106, 109, 110, 111, 113, 122, 132, 140, 147, 151, 158, 159, 165], "ani": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 23, 24, 25, 26, 28, 29, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 81, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 102, 103, 104, 105, 106, 109, 110, 112, 113, 120, 126, 127, 129, 131, 132, 136, 146, 147, 151, 152, 160, 165], "other": [0, 2, 3, 4, 6, 8, 9, 13, 16, 17, 19, 23, 25, 26, 28, 29, 30, 32, 34, 37, 38, 39, 40, 41, 42, 46, 47, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 103, 105, 109, 110, 113, 131, 132, 140, 146, 147, 148, 151, 152, 156, 160, 163, 165], "new": [0, 1, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 46, 47, 48, 49, 50, 51, 52, 54, 57, 58, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 103, 104, 105, 108, 109, 111, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 152, 160, 165], "made": [0, 4, 5, 6, 8, 9, 15, 17, 19, 25, 32, 49, 78, 79, 80, 86, 88, 91, 92, 98, 109, 113, 147, 151], "sort": [0, 23, 24, 26, 32, 33, 38, 45, 86, 88, 89, 90, 91, 109, 113], "index": [0, 2, 6, 8, 23, 24, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 89, 90, 91, 99, 101, 109, 114, 115, 116, 117, 118, 119, 120, 129, 140, 141, 147, 148, 165], "destroi": 0, "correspond": [0, 3, 6, 8, 9, 12, 13, 18, 23, 25, 32, 34, 36, 37, 38, 39, 42, 43, 49, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 98, 99, 102, 104, 106, 109, 112, 113, 129, 149, 154, 156, 157], "safest": 0, "mix": [0, 38], "string": [0, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 42, 48, 57, 58, 61, 62, 64, 66, 68, 77, 78, 79, 80, 85, 86, 88, 90, 92, 100, 102, 105, 108, 110, 113, 114, 115, 116, 117, 118, 119, 120, 132, 134, 140, 141, 148, 149, 154, 161, 162, 163], "paramet": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "str": [0, 2, 3, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 34, 35, 36, 37, 38, 40, 41, 42, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 85, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 105, 106, 109, 112, 113, 115, 117, 120, 131, 138, 144, 148, 154, 158, 162, 163], "dict": [0, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 25, 26, 29, 30, 32, 34, 36, 38, 40, 42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 81, 83, 86, 88, 89, 91, 92, 100, 102, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 160], "tupl": [0, 4, 6, 10, 18, 19, 20, 26, 32, 34, 35, 36, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 80, 86, 89, 90, 91, 92, 98, 102, 103, 108, 109, 140, 146, 147, 149, 151], "option": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "oper": [0, 2, 6, 18, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 86, 88, 91, 99, 100, 103, 104, 106, 109, 110, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 159], "valid": [0, 8, 9, 32, 34, 35, 36, 42, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 104, 109, 136, 141, 142, 148], "ident": [0, 17, 20, 32, 34, 36, 56, 57, 86, 91, 92, 108, 109, 129, 147], "where": [0, 1, 5, 6, 7, 8, 15, 17, 18, 19, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 109, 111, 113, 132, 140, 146, 151, 154, 155, 157, 160], "return": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "clustalw": [0, 34, 36], "stamp": [0, 2, 23, 34, 36], "2": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 105, 108, 109, 112, 113, 131, 132, 133, 134, 136, 140, 141, 142, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "3": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 21, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 80, 83, 86, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 112, 113, 131, 132, 133, 136, 140, 141, 146, 147, 148, 149, 151, 156, 157, 158, 159, 160, 162, 163, 165], "gener": [0, 1, 5, 12, 13, 14, 17, 18, 19, 20, 22, 23, 24, 27, 32, 34, 35, 36, 38, 39, 40, 44, 47, 51, 57, 58, 60, 61, 62, 64, 69, 72, 73, 75, 77, 79, 80, 81, 86, 88, 90, 91, 92, 99, 101, 104, 106, 108, 109, 111, 112, 113, 129, 130, 133, 138, 140, 146, 147, 155, 160, 162, 163, 165], "equival": [0, 6, 18, 22, 24, 29, 36, 37, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 81, 86, 105, 106, 113, 141], "each": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 89, 90, 91, 92, 98, 99, 102, 103, 104, 107, 109, 111, 114, 120, 131, 140, 146, 147, 148, 154, 157, 159], "list": [0, 2, 3, 4, 6, 9, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 108, 111, 112, 113, 114, 120, 122, 125, 126, 127, 128, 130, 136, 137, 140, 141, 142, 143, 146, 147, 148, 151, 157, 160, 165], "defin": [0, 2, 3, 4, 6, 13, 16, 17, 20, 23, 24, 25, 28, 34, 36, 37, 38, 40, 44, 51, 56, 58, 60, 64, 65, 68, 74, 75, 78, 79, 86, 90, 91, 92, 99, 100, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 131, 140, 144, 146, 147, 149, 151, 152, 154, 157, 158, 160], "describ": [0, 2, 3, 11, 13, 15, 16, 17, 18, 23, 25, 29, 31, 34, 36, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 102, 103, 104, 109, 111, 112, 113, 120, 138, 141, 150, 151, 161], "under": [0, 17, 23, 25, 26, 34, 36, 37, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 80, 86, 92, 98, 99, 102, 104, 109, 119, 147, 151, 165], "bool": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 42, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 95, 99, 100, 102, 103, 106, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "whether": [0, 9, 13, 14, 16, 17, 20, 23, 24, 26, 34, 40, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 88, 90, 102, 105, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "default": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 102, 103, 105, 106, 109, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "array_lik": [0, 2, 3, 6, 9, 10, 14, 15, 17, 18, 23, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 106, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 154, 157], "choos": [0, 6, 8, 20, 23, 32, 34, 76, 79, 86, 88, 90, 154, 158], "With": [0, 6, 15, 20, 26, 34, 36, 37, 40, 46, 76, 98, 154, 157], "weigh": [0, 34, 36, 154, 157], "equal": [0, 1, 8, 13, 18, 23, 32, 34, 36, 37, 38, 44, 58, 88, 91, 98, 99, 102, 109, 154, 157, 162], "float": [0, 4, 6, 7, 8, 10, 13, 15, 16, 17, 19, 20, 23, 24, 25, 28, 31, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 80, 83, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 113, 146, 148, 149, 153, 154, 157, 160, 162, 163], "same": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 16, 17, 20, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 38, 39, 40, 44, 48, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 91, 92, 98, 99, 100, 103, 104, 108, 109, 113, 120, 129, 146, 147, 149, 154, 156, 157, 159], "length": [0, 2, 3, 6, 8, 10, 13, 14, 17, 19, 20, 22, 23, 24, 29, 30, 32, 33, 34, 36, 38, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 81, 83, 86, 89, 90, 91, 92, 99, 100, 103, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 153, 154, 155, 157, 160], "element": [0, 3, 6, 12, 13, 14, 16, 17, 18, 23, 32, 34, 36, 37, 38, 48, 49, 58, 64, 74, 86, 89, 90, 98, 104, 109, 113, 114, 122, 125, 127, 134, 136, 137, 140, 141, 142, 148, 149, 154, 157], "reject": [0, 25, 34, 36], "differ": [0, 1, 2, 3, 4, 6, 8, 11, 13, 16, 17, 19, 20, 23, 24, 25, 32, 34, 36, 37, 38, 42, 44, 49, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 82, 83, 85, 86, 90, 91, 92, 100, 108, 109, 111, 112, 113, 120, 125, 136, 141, 147, 151, 160], "more": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 23, 24, 25, 32, 34, 36, 37, 38, 39, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 87, 90, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 111, 113, 140, 141, 146, 147, 151, 155, 163, 165], "than": [0, 3, 4, 6, 8, 9, 10, 15, 17, 19, 20, 23, 24, 32, 34, 36, 37, 38, 41, 42, 50, 56, 58, 64, 66, 68, 74, 76, 80, 86, 90, 91, 92, 98, 99, 103, 104, 105, 109, 113, 146, 149, 155], "Will": [0, 4, 6, 8, 9, 17, 18, 20, 24, 28, 32, 33, 35, 36, 38, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 92, 103], "rais": [0, 2, 3, 6, 9, 23, 26, 29, 30, 32, 36, 40, 42, 43, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 92, 94, 101, 102, 103, 105, 108, 109, 113, 120, 134, 136, 144, 146, 156, 160], "selectionerror": [0, 36, 88, 94], "doe": [0, 3, 6, 13, 14, 23, 24, 29, 32, 34, 36, 37, 58, 60, 63, 64, 66, 68, 69, 76, 77, 79, 81, 83, 86, 90, 92, 94, 99, 100, 102, 103, 109, 113, 120, 130, 137, 140, 150, 152, 155], "try": [0, 20, 23, 42, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 78, 80, 82, 84, 109, 130, 132, 141, 146, 161], "prepar": [0, 92], "drop": [0, 17, 57, 86, 109], "residu": [0, 3, 6, 9, 10, 19, 23, 25, 28, 30, 31, 32, 35, 36, 37, 38, 48, 64, 65, 66, 79, 85, 86, 88, 89, 90, 92, 94, 95, 109, 111, 113, 122, 124, 125, 126, 127, 129, 130, 131, 133, 136, 138, 139, 140, 141, 143, 147, 158, 159], "non": [0, 2, 3, 6, 8, 9, 17, 23, 24, 25, 29, 30, 32, 33, 36, 38, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 88, 102, 103, 104, 105, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 125, 140, 155, 156], "get_matching_atom": 0, "detail": [0, 4, 6, 7, 8, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 38, 49, 51, 58, 60, 64, 74, 78, 79, 89, 101, 102, 109, 110, 113, 140, 141, 147, 151, 165], "e": [0, 2, 4, 6, 9, 13, 17, 18, 23, 24, 25, 26, 28, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 88, 90, 91, 92, 98, 99, 100, 102, 103, 104, 108, 109, 110, 111, 112, 113, 114, 136, 140, 146, 147, 148, 149, 151, 152, 153, 156, 157, 160, 161, 162, 163, 165], "context": [0, 23, 44, 48, 57, 58, 64, 68, 75, 77, 79, 100, 101, 105, 109, 120, 152], "rest": [0, 3, 6, 149], "ligand": [0, 3, 6, 19, 35, 38, 77, 92], "surround": 0, "water": [0, 6, 7, 8, 10, 20, 23, 24, 39, 86, 87, 92, 98, 111, 112, 113, 131, 149, 160], "old_rmsd": 0, "new_rmsd": 0, "after": [0, 1, 2, 3, 6, 8, 10, 17, 18, 20, 23, 24, 26, 32, 34, 35, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 85, 86, 90, 92, 102, 105, 106, 109, 113, 140, 146, 148, 151, 156, 157, 161], "effici": [0, 1, 10, 18, 34, 64, 67, 68, 72, 102, 112, 147], "method": [0, 2, 3, 4, 6, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 33, 35, 36, 37, 38, 40, 42, 46, 49, 51, 54, 55, 56, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 99, 100, 101, 102, 104, 106, 107, 108, 109, 111, 112, 113, 114, 120, 135, 144, 146, 147, 149, 151, 155, 158], "ad": [0, 1, 2, 3, 4, 6, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 36, 37, 42, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 82, 83, 86, 88, 89, 90, 91, 92, 98, 99, 101, 102, 103, 109, 131, 132, 134, 136, 137, 138, 140, 141, 142, 144, 146, 148, 151], "toggl": [0, 38, 92, 141], "8": [0, 2, 4, 9, 26, 31, 34, 36, 37, 40, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 90, 91, 92, 99, 103, 109, 113, 114, 115, 116, 117, 118, 119, 125, 136, 141, 147, 148, 149, 159, 160, 162, 163], "check": [0, 4, 6, 9, 10, 13, 19, 20, 23, 31, 32, 33, 34, 36, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 76, 77, 80, 86, 91, 99, 104, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159], "includ": [0, 1, 3, 5, 9, 11, 13, 17, 23, 24, 25, 29, 32, 34, 36, 38, 42, 44, 48, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 88, 89, 92, 98, 99, 102, 105, 108, 109, 113, 120, 131, 137, 141, 147, 149, 151, 165], "work": [0, 2, 4, 6, 8, 9, 10, 11, 13, 16, 17, 18, 23, 28, 31, 36, 37, 38, 39, 40, 49, 51, 54, 57, 58, 60, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 94, 99, 102, 103, 104, 105, 109, 111, 112, 113, 114, 120, 131, 141, 146, 151, 154, 159, 165], "incomplet": [0, 9, 27], "lenient": 0, "wherea": [0, 8, 32, 34, 86, 109, 110], "old": [0, 51, 79, 85, 86, 92, 109, 147], "kwarg": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 18, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 90, 91, 92, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 146, 152], "replac": [0, 6, 12, 23, 57, 86, 92, 98, 99, 105, 109, 146, 147], "mass_weight": [0, 34, 36], "sinc": [0, 4, 6, 8, 9, 14, 17, 19, 21, 23, 24, 28, 32, 33, 34, 35, 36, 38, 39, 49, 51, 64, 68, 74, 75, 80, 86, 90, 113, 140, 155], "instead": [0, 2, 3, 4, 6, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 103, 104, 109, 113, 114, 115, 116, 117, 118, 119, 120, 125, 136, 147, 151, 158], "prefix": [0, 23, 34, 86, 102, 113], "rmsfit_": 0, "forc": [0, 20, 30, 31, 39, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 84, 86, 88, 91, 92, 99, 101, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "in_memori": [0, 17, 36, 37, 80, 92], "both": [0, 2, 3, 4, 6, 9, 10, 14, 17, 23, 24, 26, 29, 30, 32, 34, 36, 38, 40, 49, 53, 55, 57, 60, 64, 68, 71, 79, 86, 91, 98, 101, 102, 111, 112, 113, 129, 132, 139, 140, 163], "must": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 18, 20, 23, 24, 26, 29, 32, 34, 36, 38, 40, 42, 44, 49, 51, 54, 58, 60, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 98, 99, 103, 104, 105, 106, 107, 109, 113, 114, 140, 144, 146, 151, 154, 156, 160], "instanc": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 23, 25, 28, 29, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 85, 86, 87, 90, 91, 92, 99, 100, 102, 104, 105, 109, 111, 113, 114, 140, 144, 147, 149, 151, 158, 162, 163, 164, 165], "output": [0, 2, 6, 13, 14, 17, 18, 19, 23, 26, 32, 34, 35, 36, 40, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 85, 86, 88, 90, 99, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 127, 147, 156], "format": [0, 3, 4, 6, 10, 13, 14, 15, 16, 17, 18, 23, 25, 26, 34, 37, 38, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 55, 57, 58, 59, 61, 64, 65, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 80, 81, 83, 84, 86, 90, 91, 92, 94, 99, 102, 103, 104, 108, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 149, 150, 161, 165], "determin": [0, 3, 4, 6, 8, 9, 10, 13, 18, 22, 23, 24, 25, 26, 29, 32, 33, 34, 38, 42, 44, 58, 64, 78, 79, 86, 90, 92, 99, 103, 107, 109, 112, 146, 156], "extens": [0, 4, 6, 17, 23, 25, 34, 44, 50, 58, 64, 65, 66, 67, 68, 76, 77, 78, 79, 84, 86, 92, 109, 110, 115, 116, 117, 118, 119, 131, 147, 150, 161], "One": [0, 2, 3, 6, 13, 16, 23, 24, 25, 26, 34, 37, 38, 48, 86, 92, 100, 113, 151, 160], "save": [0, 3, 4, 6, 7, 8, 10, 14, 17, 18, 20, 26, 28, 29, 32, 34, 36, 37, 51, 57, 58, 60, 62, 64, 68, 72, 73, 77, 82, 99, 100, 101, 105], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 51, 54, 55, 56, 57, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "altern": [0, 6, 9, 17, 19, 22, 23, 24, 28, 32, 41, 44, 49, 61, 64, 65, 86, 91, 92, 103, 109, 113, 120, 133, 151], "np": [0, 2, 3, 4, 5, 6, 8, 17, 20, 23, 24, 26, 28, 29, 32, 34, 36, 37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 92, 99, 100, 101, 103, 107, 108, 109, 113, 146, 148, 151, 162, 163], "savetxt": [0, 4, 28, 36], "subdomain": [0, 104], "against": [0, 17, 68, 91, 104], "written": [0, 2, 6, 14, 17, 19, 23, 34, 38, 40, 48, 50, 51, 54, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 79, 82, 83, 86, 90, 92, 100, 101, 102, 103, 105, 109, 114, 115, 116, 117, 118, 119, 120, 138, 141, 147, 151, 165], "prepend": [0, 34], "toler": [0, 4, 86, 88, 162, 163], "given": [0, 3, 4, 5, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 100, 101, 105, 109, 113, 131, 135, 140, 146, 149, 151, 154, 155, 156, 157, 158, 159, 161], "find": [0, 9, 10, 13, 19, 20, 23, 24, 25, 32, 34, 38, 40, 42, 43, 51, 60, 76, 82, 86, 89, 95, 100, 109, 110, 113, 130, 140, 146], "fail": [0, 6, 26, 28, 38, 49, 58, 64, 66, 68, 72, 82, 84, 86, 94, 103, 109, 144], "t": [0, 2, 4, 7, 17, 20, 22, 24, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 59, 60, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 89, 90, 98, 99, 101, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 155, 156, 157, 158, 159, 160], "found": [0, 2, 9, 19, 20, 23, 24, 25, 34, 38, 40, 42, 43, 49, 58, 64, 69, 76, 77, 78, 85, 86, 88, 90, 92, 107, 109, 110, 131, 146, 147, 165], "overwrit": [0, 20, 35, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "perman": [0, 37, 92], "switch": [0, 4, 9, 24, 38, 40, 104], "memori": [0, 8, 10, 13, 14, 18, 29, 36, 37, 40, 41, 42, 44, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 84, 86, 89, 92, 109, 146, 156], "place": [0, 6, 9, 14, 17, 23, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 89, 92, 99, 101, 103, 107, 108, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "which": [0, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 23, 24, 25, 29, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 164, 165], "improv": [0, 15, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "substanti": [0, 80], "some": [0, 4, 8, 9, 17, 20, 23, 26, 28, 32, 37, 38, 39, 40, 42, 47, 48, 49, 58, 60, 64, 67, 68, 75, 77, 78, 79, 82, 86, 88, 90, 103, 108, 109, 110, 134, 145, 146, 147, 149, 151, 160, 164, 165], "out": [0, 4, 17, 22, 23, 32, 36, 37, 38, 39, 40, 42, 44, 45, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 92, 102, 108, 114, 140, 147, 160, 161, 164, 165], "ignor": [0, 6, 13, 16, 18, 23, 42, 44, 58, 62, 64, 65, 74, 79, 80, 81, 83, 86, 90, 91, 92, 102, 103, 113, 125, 131, 132, 134, 136, 140, 146, 148], "verbos": [0, 2, 3, 4, 6, 7, 8, 9, 13, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 80, 92, 102], "logger": [0, 38, 102], "inform": [0, 8, 9, 13, 16, 17, 20, 23, 24, 25, 33, 34, 37, 38, 42, 49, 51, 54, 56, 58, 60, 64, 65, 66, 67, 68, 69, 72, 73, 74, 75, 79, 82, 83, 86, 89, 90, 92, 99, 100, 101, 103, 109, 113, 121, 122, 125, 126, 127, 129, 131, 132, 136, 137, 138, 139, 140, 141, 142, 143, 145, 147, 150, 164, 165], "progress": [0, 2, 3, 4, 6, 7, 8, 9, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 92, 102], "reference_atom": [0, 103], "mobile_atom": 0, "insid": [0, 2, 5, 20, 23, 37, 79, 82, 86, 88, 91, 98, 104, 110, 112, 120, 151, 159], "rmsd_align": 0, "valu": [0, 2, 3, 4, 6, 8, 9, 13, 14, 16, 17, 20, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 152, 160, 162, 163], "least": [0, 2, 3, 4, 6, 8, 9, 13, 15, 19, 23, 25, 29, 30, 32, 36, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 76, 80, 105, 107, 109, 125, 136, 141], "minimim": 0, "numpi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 26, 28, 29, 30, 33, 34, 35, 36, 37, 38, 40, 41, 44, 51, 52, 54, 58, 60, 69, 72, 73, 75, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 99, 103, 104, 108, 109, 111, 146, 151, 152, 163, 165], "ndarrai": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 19, 20, 23, 24, 28, 29, 30, 33, 34, 35, 36, 40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 90, 91, 92, 99, 101, 103, 104, 106, 107, 108, 109, 111, 146], "alia": [0, 4, 6, 9, 23, 24, 28, 30, 32, 33, 35, 36, 38, 86, 88, 90, 149], "attribut": [0, 2, 3, 4, 6, 7, 9, 18, 19, 20, 23, 24, 26, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 88, 89, 91, 92, 93, 99, 100, 101, 106, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 152, 160], "reflect": [0, 32, 76, 78, 83, 86, 104, 108, 109, 113], "upon": [0, 20, 58, 60, 74, 75, 76, 77, 91, 92, 102, 144, 146, 151], "recommend": [0, 2, 24, 38, 58, 64, 109, 110, 111, 113, 146, 165], "wrap": [0, 2, 3, 6, 13, 16, 18, 29, 36, 60, 64, 86, 90, 105, 106, 109, 151, 155, 157, 158], "statement": [0, 32, 79, 109, 114], "final": [0, 4, 6, 9, 13, 16, 17, 18, 20, 28, 32, 37, 38, 49, 56, 64, 74, 86, 89, 91, 106, 111, 113], "guarante": [0, 6, 24, 66, 103, 109], "restor": [0, 6], "log": [0, 2, 3, 6, 9, 17, 29, 30, 32, 36, 38, 79, 110, 147], "level": [0, 5, 23, 58, 72, 75, 77, 88, 89, 95, 102, 105, 109], "except": [0, 23, 26, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 80, 83, 86, 88, 90, 92, 109, 110, 147, 151], "represent": [0, 14, 18, 23, 34, 38, 51, 54, 56, 60, 70, 79, 91, 92, 103, 119, 120, 125, 136, 137], "remaind": [0, 111], "python": [0, 2, 6, 17, 23, 26, 39, 40, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 87, 88, 90, 100, 101, 102, 105, 107, 108, 109, 110, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 151, 164, 165], "session": [0, 68, 111], "memoryread": [0, 36, 78, 79, 92], "alwai": [0, 2, 4, 6, 13, 16, 17, 26, 32, 33, 36, 40, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 75, 79, 80, 86, 90, 92, 108, 109, 111, 113, 138, 146, 147, 151, 160], "treat": [0, 6, 19, 22, 24, 37, 38, 42, 58, 61, 76, 86, 91, 92, 103, 111, 131, 140, 147, 162, 163], "had": [0, 35, 155], "directori": [0, 23, 26, 34, 72, 105, 111, 112, 131], "19": [0, 9, 10, 32, 35, 60, 64, 65, 68, 75, 76, 80, 86, 90, 91, 92, 94, 98, 99, 103, 104, 109, 132, 140, 148, 149, 160], "support": [0, 2, 4, 6, 10, 17, 18, 23, 26, 28, 35, 36, 37, 41, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 84, 86, 88, 92, 99, 100, 101, 105, 109, 110, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 154, 160, 165], "start": [0, 1, 2, 3, 4, 6, 8, 9, 16, 18, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 78, 79, 80, 83, 87, 92, 100, 102, 109, 111, 113, 138, 141, 147, 148, 156, 165], "stop": [0, 2, 3, 4, 6, 8, 9, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 92, 100, 102], "These": [0, 1, 2, 4, 5, 9, 17, 28, 29, 32, 34, 35, 36, 37, 40, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 88, 90, 99, 100, 101, 104, 105, 106, 131, 156, 164], "pass": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 98, 102, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147], "store": [0, 2, 3, 4, 5, 6, 8, 9, 13, 14, 19, 23, 25, 28, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 52, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 91, 100, 101, 104, 107, 109, 129, 137, 147, 148, 156, 160], "averagestructur": 0, "ref_fram": [0, 34, 36], "averag": [0, 2, 4, 7, 17, 20, 23, 26, 29, 33, 34, 35, 36, 37, 42, 98, 102, 111, 151], "u": [0, 1, 2, 3, 4, 6, 8, 9, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 77, 79, 80, 85, 86, 87, 88, 90, 91, 92, 102, 103, 109, 111, 112, 113, 120, 121, 129, 131, 132, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "third": [0, 3, 37, 38, 86, 90, 91, 103, 140, 156], "av": 0, "averaged_univers": 0, "int": [0, 1, 2, 3, 6, 9, 12, 13, 14, 16, 17, 18, 20, 23, 24, 26, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 42, 49, 50, 51, 54, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 88, 89, 90, 92, 95, 98, 99, 100, 101, 102, 103, 106, 107, 109, 110, 113, 140, 148, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "dtype": [0, 6, 10, 58, 83, 86, 88, 89, 90, 95, 99, 103, 104, 106, 109, 113, 146, 151], "per": [0, 6, 13, 16, 17, 23, 24, 32, 34, 36, 37, 38, 58, 60, 66, 83, 86, 90, 92, 103, 114, 115, 116, 117, 118, 119, 152, 160], "b": [0, 2, 3, 4, 6, 9, 10, 13, 18, 23, 26, 29, 32, 35, 36, 37, 38, 51, 54, 58, 60, 64, 65, 68, 69, 72, 73, 75, 79, 80, 83, 86, 88, 89, 91, 99, 103, 108, 109, 111, 112, 113, 146, 147, 148, 149, 153, 160], "3x3": [0, 86, 103], "vector": [0, 3, 31, 32, 33, 34, 37, 51, 54, 56, 79, 83, 86, 90, 91, 99, 100, 101, 103, 108, 109, 111, 153, 157, 158], "overlap": [0, 32, 37, 76, 86, 92, 146], "mathbf": [0, 33, 35, 36, 37, 86, 90, 103], "mathsf": [0, 86, 90], "cdot": [0, 28, 32, 33, 37, 86, 90, 99, 103, 146], "n": [0, 3, 8, 9, 10, 15, 16, 17, 18, 19, 20, 23, 25, 29, 32, 33, 34, 35, 36, 37, 38, 49, 54, 56, 58, 60, 66, 74, 86, 88, 90, 98, 99, 102, 103, 104, 106, 107, 108, 109, 111, 112, 113, 116, 140, 146, 148, 149, 156, 160, 162], "shape": [0, 3, 4, 10, 12, 13, 15, 17, 20, 25, 32, 34, 35, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 104, 106, 107, 108, 109, 112, 153, 157, 163], "g": [0, 2, 6, 8, 9, 17, 18, 23, 24, 25, 26, 28, 30, 34, 35, 36, 37, 38, 39, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 99, 100, 102, 108, 109, 110, 111, 112, 113, 114, 120, 136, 140, 147, 149, 151, 152, 153, 157, 160, 161, 165], "core": [0, 6, 7, 8, 12, 13, 14, 16, 17, 18, 20, 23, 25, 34, 36, 39, 44, 45, 46, 47, 48, 49, 58, 64, 66, 79, 80, 83, 84, 95, 103, 105, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 125, 136, 146, 147, 148, 150, 159, 162, 163], "size": [0, 4, 6, 12, 13, 14, 17, 18, 19, 23, 25, 29, 32, 34, 35, 37, 40, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80, 89, 90, 91, 98, 99, 107, 108, 109, 140, 149, 155, 158, 163], "argument": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 18, 23, 25, 26, 29, 30, 31, 32, 34, 36, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 84, 85, 86, 88, 90, 92, 99, 102, 104, 105, 106, 108, 109, 113, 120, 131, 132, 135, 146, 147, 148, 149, 150, 151, 157], "mdanalysistest": [0, 2, 3, 4, 7, 9, 35, 40, 49, 77, 80, 84, 86, 146, 165], "tpr": [0, 2, 6, 23, 24, 36, 58, 77, 80, 86, 92, 113, 147, 150], "trr": [0, 23, 72, 73, 76, 77, 79, 84, 92, 101, 111], "copi": [0, 18, 36, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 104, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "backbon": [0, 5, 8, 9, 31, 32, 33, 36, 86, 88, 90, 111, 113], "47681": [0, 77, 85], "user": [0, 2, 6, 8, 9, 28, 32, 34, 36, 38, 40, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 84, 86, 88, 92, 99, 107, 109, 110, 113, 118, 120, 140, 146, 147, 150, 151, 154, 157, 158], "complet": [0, 3, 6, 17, 32, 44, 46, 64, 91, 92, 100, 111, 112, 147, 156, 165], "probabl": [0, 6, 11, 17, 37, 68, 84, 86, 98, 150], "interest": [0, 6, 9, 20, 32, 35, 36, 37, 38, 40, 41, 42, 44, 75, 76, 84, 93, 98, 109, 150, 165], "develop": [0, 57, 76, 81, 82, 84, 88, 89, 93, 99, 108, 109, 110, 111, 145, 150, 152, 161, 165], "normal": [0, 3, 6, 17, 18, 19, 23, 29, 34, 35, 38, 46, 71, 79, 82, 83, 86, 88, 92, 100, 101, 103, 108, 109, 112, 114, 151, 155, 162, 163], "_fit_to": 0, "mobile_coordin": 0, "ref_coordin": [0, 36], "mobile_com": 0, "ref_com": 0, "xyz": [0, 3, 28, 29, 37, 54, 56, 71, 77, 79, 84, 92, 100, 101, 111, 142, 147, 150, 165], "min_rmsd": 0, "minimum": [0, 6, 10, 13, 17, 23, 35, 58, 86, 91, 92, 99, 102, 104, 106, 107, 125, 129, 136, 137, 146, 147, 162, 163], "assum": [0, 3, 6, 13, 17, 23, 25, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 92, 119, 136, 146], "depend": [0, 4, 6, 7, 11, 13, 14, 17, 29, 37, 39, 40, 42, 44, 49, 57, 58, 60, 67, 70, 79, 86, 90, 98, 99, 100, 105, 106, 109, 110, 112, 113, 115, 116, 117, 118, 119, 131, 147, 152, 155, 160, 165], "origin": [0, 3, 6, 8, 12, 13, 16, 17, 22, 23, 24, 32, 34, 38, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 82, 83, 86, 91, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 112, 113, 131, 138, 148, 163], "directli": [0, 2, 4, 6, 13, 16, 19, 20, 34, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 90, 92, 95, 100, 101, 107, 109, 113, 134, 151], "x": [0, 5, 6, 13, 17, 20, 23, 24, 28, 29, 33, 34, 36, 37, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 98, 99, 100, 101, 103, 104, 105, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 160, 162, 163], "accord": [0, 3, 17, 23, 32, 34, 36, 38, 54, 58, 60, 71, 86, 90, 91, 99, 103, 109, 111, 113, 122, 141], "bar": [0, 2, 3, 6, 9, 29, 30, 32, 33, 36, 80, 102, 108], "_": [0, 17, 29, 33, 34, 36, 37, 44, 58, 86, 90, 102, 103, 141], "text": [0, 6, 17, 23, 34, 36, 57, 58, 68, 74, 77, 79, 105, 109, 148], "fastafilenam": 0, "is_align": 0, "ref_resid": 0, "target_resid": 0, "ref_offset": 0, "target_offset": 0, "alnfilenam": 0, "treefilenam": 0, "clustalw2": 0, "fasta": [0, 86, 90], "un": [0, 75, 76, 88, 92], "second": [0, 3, 17, 23, 25, 30, 31, 32, 34, 35, 37, 38, 40, 41, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 102, 103, 109, 113, 147, 156, 160], "pairwis": [0, 8, 14, 34, 103], "suffix": [0, 6, 17, 34, 50, 59, 63, 68, 79, 89, 92, 109, 161], "unless": [0, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 102, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "specifi": [0, 3, 6, 8, 9, 13, 14, 15, 16, 17, 23, 24, 26, 28, 31, 34, 37, 38, 40, 42, 44, 46, 50, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 86, 88, 89, 92, 98, 99, 101, 102, 104, 105, 106, 108, 109, 113, 125, 132, 134, 147, 149, 159], "resid": [0, 3, 6, 9, 10, 31, 35, 36, 37, 38, 49, 50, 56, 64, 72, 79, 86, 88, 90, 92, 99, 103, 109, 113, 122, 124, 125, 128, 131, 132, 133, 134, 136, 137, 138, 139, 141, 147, 149], "complic": [0, 86, 87, 113], "number": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 129, 130, 135, 136, 137, 140, 141, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163], "input": [0, 6, 7, 9, 10, 11, 12, 13, 14, 17, 23, 25, 26, 28, 32, 33, 34, 35, 36, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 86, 90, 92, 94, 98, 99, 105, 107, 109, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 147, 150, 151, 158, 160], "gap": [0, 8, 76, 98], "due": [0, 9, 17, 26, 29, 34, 35, 38, 49, 51, 54, 57, 58, 60, 66, 69, 72, 73, 74, 75, 79, 82, 99, 106, 140], "miss": [0, 9, 56, 64, 68, 74, 76, 79, 92, 94, 98, 103, 109, 133, 136, 140], "appear": [0, 6, 20, 38, 55, 60, 74, 76, 86, 91, 103, 118, 119, 120, 134, 147, 155, 159], "topologi": [0, 3, 9, 13, 16, 17, 20, 23, 24, 25, 30, 34, 38, 46, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 92, 105, 109, 110, 111, 113, 132, 134, 151, 162, 163, 165], "tabl": [0, 38, 49, 78, 84, 86, 89, 92, 99, 141, 145, 146, 150, 160], "combin": [0, 13, 16, 24, 26, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 92, 99, 113, 120, 140, 141, 152, 153, 154, 155, 156, 157, 158, 159], "path": [0, 23, 24, 26, 39, 40, 44, 58, 77, 86, 90, 105, 109, 112, 162, 163], "add": [0, 2, 3, 6, 9, 10, 20, 29, 30, 32, 36, 38, 39, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 89, 90, 92, 109, 129, 131, 140, 146, 151, 152, 161, 165], "column": [0, 2, 3, 18, 32, 34, 36, 37, 38, 41, 44, 60, 62, 64, 65, 66, 71, 74, 76, 80, 134, 138, 142], "get": [0, 1, 8, 13, 17, 19, 23, 34, 36, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 87, 89, 90, 91, 101, 102, 103, 109, 111, 140, 151], "clustal": 0, "substitut": [0, 64, 65, 86, 94, 109], "guid": [0, 2, 58, 74, 113, 146, 160], "tree": [0, 13, 88, 106], "newick": 0, "dnd": 0, "binari": [0, 3, 14, 23, 26, 40, 51, 60, 63, 67, 70, 79, 98, 105, 109, 111], "select_dict": 0, "immedi": [0, 79, 83, 92, 111, 151], "sequence_align": 0, "program": [0, 22, 23, 34, 39, 64, 100, 109, 112, 120], "creat": [0, 2, 4, 7, 8, 9, 10, 12, 13, 16, 17, 20, 25, 26, 28, 34, 35, 36, 37, 38, 40, 42, 43, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 66, 69, 70, 71, 72, 73, 75, 77, 79, 82, 83, 86, 88, 89, 90, 91, 92, 99, 100, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 129, 130, 131, 134, 135, 136, 137, 138, 139, 142, 143, 144, 146, 147, 149, 152, 155], "arg": [0, 2, 4, 6, 14, 18, 23, 28, 38, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 85, 86, 92, 109, 148], "kwd": [0, 23, 58], "global": [0, 13, 36, 58, 86, 90, 113, 151], "needleman": 0, "wunsch": 0, "bio": [0, 64, 86, 90], "pairwisealign": 0, "dynam": [0, 6, 29, 34, 39, 58, 79, 86, 102, 104, 108, 111, 112, 121, 155, 165], "tune": [0, 25, 58], "suitabl": [0, 6, 23, 34, 38, 88, 113, 146, 155], "similar": [0, 2, 10, 12, 13, 14, 29, 32, 37, 38, 39, 66, 79, 81, 86, 99, 100, 101, 102, 104, 112, 130, 141], "low": [0, 8, 10, 13, 72, 75, 77], "special": [0, 6, 8, 67, 78, 79, 88, 92, 98, 100, 106, 114, 115, 116, 117, 118, 119, 148, 151], "tool": [0, 19, 23, 28, 30, 33, 35, 48, 51, 62, 69, 80, 98, 114, 120, 162, 163], "muscl": 0, "tcoffe": 0, "match_scor": 0, "score": [0, 17, 32], "mismatch_penalti": 0, "penalti": 0, "gap_penalti": 0, "open": [0, 4, 19, 23, 26, 36, 42, 44, 55, 57, 62, 68, 70, 71, 72, 74, 76, 77, 79, 82, 86, 100, 101, 103, 105, 109, 111, 112, 114, 141], "high": [0, 6, 8, 10, 13, 32, 38, 44, 58, 86, 110, 113], "compact": [0, 23, 38, 147], "highli": [0, 24, 29, 68], "might": [0, 4, 13, 16, 38, 40, 49, 51, 68, 75, 76, 86, 91, 104, 113, 146, 148, 159, 160], "gapextension_penalti": 0, "extend": [0, 2, 32, 37, 38, 40, 41, 42, 44, 50, 58, 75, 79, 86, 90, 113, 136, 139, 147, 149, 150], "top": [0, 6, 32, 58, 62, 66, 68, 90, 102, 114, 115, 116, 117, 118, 119, 120, 131, 134, 140, 147], "begin": [0, 6, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 102, 109], "end": [0, 2, 13, 16, 23, 32, 37, 38, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 102, 109, 111, 113, 146], "prefer": [0, 13, 23, 37, 58], "your": [0, 2, 9, 17, 23, 26, 29, 36, 38, 39, 48, 51, 58, 68, 74, 87, 91, 99, 102, 112, 151], "alig": 0, "mode": [0, 6, 13, 17, 19, 50, 57, 58, 64, 65, 66, 68, 69, 77, 100, 101, 102, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120], "mismatch_scor": 0, "open_gap_scor": 0, "extend_gap_scor": 0, "seq": [0, 86, 90, 113, 114], "highest": [0, 86, 90], "topalign": 0, "bioinformat": [0, 9, 38, 112], "workflow": [0, 2, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "biopython": 0, "4": [0, 2, 3, 4, 5, 6, 8, 9, 11, 13, 17, 19, 24, 26, 30, 34, 35, 36, 37, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 80, 86, 87, 89, 90, 91, 92, 99, 101, 102, 103, 104, 107, 108, 109, 112, 113, 131, 140, 141, 142, 146, 147, 148, 149, 159, 160], "pairwise2": 0, "globalm": 0, "usebio": 0, "residuegroup": [0, 9, 25, 28, 86, 90, 92, 94, 95, 109], "releas": [0, 23, 38, 40, 49, 75, 86, 104, 109, 112, 140, 141, 151, 161, 165], "ag1": [0, 1, 35, 86, 99], "ag2": [0, 1, 35, 86, 99, 113], "take": [0, 2, 6, 9, 10, 13, 16, 23, 25, 26, 29, 30, 31, 32, 35, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 99, 102, 103, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "g1": [0, 35, 107], "g2": [0, 35, 107], "consist": [0, 3, 6, 19, 36, 37, 64, 80, 86, 88, 92, 105, 111, 113, 147, 148], "etc": [0, 2, 3, 6, 9, 23, 29, 30, 32, 34, 36, 37, 39, 42, 58, 60, 70, 79, 91, 92, 102, 111, 116, 130, 147, 148], "veri": [0, 17, 23, 27, 37, 38, 58, 64, 66, 68, 80, 86, 101, 102, 109, 111, 113, 146], "simplist": 0, "basi": [0, 20, 22, 24, 34, 66, 75, 112], "discard": [0, 38, 78], "compar": [0, 4, 9, 11, 17, 25, 32, 34, 36, 49, 73, 79, 83, 86, 91, 109, 156], "consid": [0, 1, 6, 8, 10, 13, 17, 19, 20, 23, 24, 26, 36, 37, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 91, 92, 98, 102, 104, 109, 113, 146, 160], "start_log": [0, 38, 102], "about": [0, 3, 4, 8, 9, 16, 34, 37, 38, 44, 58, 67, 69, 73, 86, 90, 100, 102, 108, 126, 127, 140, 143, 151], "mismatch": 0, "attempt": [0, 6, 20, 23, 32, 38, 42, 43, 44, 56, 58, 64, 74, 92, 102, 109, 140, 160], "slice": [0, 2, 3, 6, 9, 17, 23, 26, 29, 30, 32, 36, 39, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 86, 91, 113], "error": [0, 8, 9, 17, 23, 26, 29, 36, 57, 58, 82, 86, 89, 92, 94, 99, 109, 111, 113, 155], "tol": [0, 13], "could": [0, 4, 8, 19, 20, 24, 32, 68, 78, 80, 92, 104, 109, 110, 122, 132, 140], "profile2": 0, "too": [0, 9, 23, 42, 49, 86, 88, 91, 92, 113, 165], "expens": [0, 17, 32], "renam": [0, 23, 28, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "check_same_atom": 0, "possibli": [0, 10, 25, 36, 38, 68, 110, 111, 147], "xu": [1, 60, 98], "hong": 1, "chen": 1, "2023": [1, 141, 165], "class": [1, 6, 7, 11, 13, 14, 16, 17, 18, 19, 28, 30, 33, 35, 39, 41, 42, 43, 45, 46, 50, 52, 53, 55, 65, 66, 67, 68, 69, 72, 73, 76, 78, 82, 84, 87, 88, 90, 91, 93, 95, 100, 101, 103, 106, 108, 110, 111, 115, 116, 117, 118, 119, 120, 121, 145, 148, 150, 153, 154, 155, 156, 157, 158, 159], "over": [1, 2, 3, 4, 6, 8, 17, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 36, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 98, 100, 101, 102, 103, 105, 109, 121, 147, 154, 156, 159], "specif": [1, 2, 3, 15, 23, 26, 29, 34, 35, 38, 39, 49, 51, 54, 57, 58, 60, 62, 64, 66, 67, 69, 71, 72, 73, 75, 79, 80, 86, 94, 99, 109, 110, 112, 120, 140, 149, 151, 152, 160, 164, 165], "n_atom": [1, 32, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 87, 88, 89, 90, 92, 101, 113, 132, 135], "By": [1, 4, 6, 17, 19, 23, 26, 34, 41, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 90, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "period": [1, 3, 4, 6, 10, 20, 25, 29, 35, 36, 54, 58, 68, 76, 79, 86, 88, 91, 95, 99, 103, 104, 106, 110, 113, 141, 146, 155, 162, 163], "boundari": [1, 3, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 99, 104, 106, 109, 146, 155, 162, 163], "condit": [1, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 104, 106, 131, 146], "easili": [1, 2, 9, 14, 17, 79, 86, 110, 111, 156], "turn": [1, 2, 3, 6, 9, 17, 23, 29, 30, 32, 36, 44, 56, 89, 113, 140], "off": [1, 4, 8, 9, 16, 23, 25, 38, 40, 56, 67, 72, 103, 104, 113], "time": [1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 109, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 151, 160], "function": [1, 2, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 22, 24, 26, 29, 31, 33, 37, 38, 39, 44, 45, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 84, 85, 86, 88, 90, 91, 93, 100, 101, 104, 105, 106, 111, 112, 113, 120, 132, 140, 141, 146, 148, 150, 154, 157, 158, 159, 161, 162, 163], "gro": [1, 9, 20, 23, 37, 46, 48, 79, 84, 85, 86, 92, 111, 113, 141, 147, 150, 162, 163], "xtc": [1, 2, 6, 9, 36, 37, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 75, 76, 79, 80, 84, 86, 92, 101, 111, 162, 163], "101": [1, 37, 65, 148], "105": [1, 112], "4001": 1, "4005": 1, "100": [1, 12, 16, 17, 20, 22, 23, 29, 37, 44, 58, 79, 86, 109, 125, 141, 148, 149, 160], "4000": 1, "choic": [1, 8, 13, 16, 32, 79, 86, 99], "my_dist": 1, "our": [1, 8, 20, 23, 29, 32, 37, 48, 58, 146], "37": [1, 19, 34, 66, 88, 148, 149], "80813681": 1, "33": [1, 23, 64, 65, 114, 149], "2594864": 1, "34": [1, 34, 64, 65, 108, 149, 163], "93676414": 1, "51183299": 1, "96340209": 1, "27": [1, 64, 65, 86, 141, 148, 149, 160], "11746625": 1, "31": [1, 26, 38, 64, 65, 107, 112, 148, 149], "19878079": 1, "69439435": 1, "32": [1, 30, 31, 104, 112, 148, 149], "63446126": 1, "10451345": 1, "23": [1, 48, 64, 65, 83, 108, 109, 141, 149, 160], "27210749": 1, "30": [1, 8, 13, 36, 37, 62, 102, 148, 149, 160], "38714688": 1, "48269361": 1, "91444505": 1, "84583838": 1, "18": [1, 23, 37, 56, 62, 64, 65, 86, 109, 112, 132, 136, 137, 138, 140, 148, 149, 155, 160], "40607922": 1, "39": [1, 64, 65, 148, 149], "21993135": 1, "33468192": 1, "41": [1, 3, 64, 65, 86, 149], "0133789": 1, "46885946": 1, "26": [1, 37, 64, 65, 66, 86, 112, 141, 148, 149], "26006981": 1, "9966713": 1, "14991106": 1, "38": [1, 64, 65, 149], "13423586": 1, "95451427": 1, "83845081": 1, "66255735": 1, "35": [1, 2, 4, 6, 23, 67, 148, 149], "59335027": 1, "8926705": 1, "27175056": 1, "51994763": 1, "12161091": 1, "56481743": 1, "36": [1, 66, 112, 148, 149], "8488121": 1, "75278065": 1, "27275501": 1, "7831456": 1, "74359073": 1, "54893794": 1, "76495816": 1, "76272761": 1, "31816555": 1, "81588421": 1, "82491432": 1, "890219": 1, "20012515": 1, "40": [1, 6, 29, 37, 64, 65, 148, 149], "00563374": 1, "83857688": 1, "77886735": 1, "45775864": 1, "without": [1, 18, 37, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 86, 88, 90, 92, 106, 109, 112, 131, 135, 141, 147], "enter": [1, 114, 115, 116, 117, 118, 119], "pbc": [1, 4, 6, 20, 25, 29, 38, 48, 85, 86, 90, 91, 104, 106, 151, 157], "my_dists_nopbc": 1, "482695": 1, "21992825": 1, "0133757": 1, "99666906": 1, "14990985": 1, "13423708": 1, "95451311": 1, "66255625": 1, "27174827": 1, "51": [1, 35, 148, 149], "86981409": 1, "48": [1, 64, 65, 148, 149], "10347964": 1, "39570072": 1, "49": [1, 148, 149], "14423513": 1, "50": [1, 6, 9, 13, 17, 20, 32, 37, 112, 148, 149], "44804292": 1, "56": [1, 149], "39657447": 1, "n_frame": [1, 8, 9, 29, 32, 51, 54, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 92, 100], "5": [1, 2, 3, 4, 6, 8, 9, 13, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 159, 160], "think": [2, 4, 38], "analysisbas": [2, 19, 30, 34, 35, 36, 37, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "subclass": [2, 6, 44, 68, 75, 79, 86, 88, 90, 91, 92, 94, 102, 134, 152], "inherit": [2, 44, 82, 92, 105, 151, 154, 156, 157, 158, 159], "common": [2, 6, 29, 38, 45, 55, 60, 64, 68, 75, 76, 79, 84, 86, 90, 92, 100, 103, 109, 112, 113, 132, 150, 151], "api": [2, 4, 8, 29, 34, 36, 42, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 83, 84, 85, 86, 105, 108, 161], "make": [2, 6, 7, 23, 24, 29, 36, 38, 40, 42, 49, 51, 58, 68, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 102, 103, 105, 109, 110, 111, 113, 133, 144, 145, 155, 160, 161, 162, 163, 165], "mani": [2, 9, 12, 13, 23, 29, 32, 37, 51, 60, 75, 79, 87, 89, 99, 109, 110, 112, 132, 146], "addit": [2, 4, 13, 17, 18, 19, 20, 29, 30, 31, 34, 36, 38, 39, 40, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 88, 91, 100, 102, 103, 106, 109, 113, 120, 147, 150, 161, 164], "featur": [2, 22, 32, 36, 58, 66, 68, 89, 92, 98, 109], "automat": [2, 6, 14, 17, 18, 33, 38, 39, 40, 49, 50, 56, 58, 60, 64, 68, 72, 78, 79, 80, 85, 86, 88, 91, 99, 102, 104, 109, 112, 113, 120, 151, 156, 160, 165], "avail": [2, 13, 14, 15, 16, 18, 20, 22, 23, 26, 32, 34, 35, 39, 40, 44, 46, 49, 51, 54, 57, 58, 60, 62, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 88, 89, 91, 92, 100, 106, 109, 113, 120, 133, 141, 146, 147, 151, 161, 162, 163, 165], "progressbar": [2, 3, 6, 9, 29, 30, 32, 36, 102], "point": [2, 3, 5, 6, 8, 9, 13, 19, 20, 23, 29, 33, 34, 37, 38, 58, 79, 86, 88, 90, 99, 102, 103, 106, 108, 113, 148, 156, 157, 158], "instanti": [2, 104], "kept": [2, 23, 56, 57, 86, 132, 159], "fix": [2, 6, 13, 28, 36, 57, 58, 60, 68, 74, 75, 76, 79, 80, 86, 91, 100, 104, 111, 113, 161], "being": [2, 3, 4, 6, 13, 17, 20, 24, 25, 30, 32, 34, 37, 38, 56, 58, 64, 67, 76, 79, 80, 82, 89, 95, 98, 101, 103, 147, 151, 155, 156], "abl": [2, 23, 79, 85], "enabl": [2, 14, 34, 38, 39, 41, 42, 44, 58, 64, 67, 72, 99, 102, 104, 106, 109, 163], "shown": [2, 5, 6, 9, 26, 29, 40, 72, 109, 121, 151], "estim": [2, 11, 13, 15, 17, 20, 29, 102], "remain": [2, 6, 13, 20, 37, 38, 44, 74, 79, 84, 86, 92, 102, 108, 109, 112, 150, 154], "until": [2, 8, 32, 38, 44, 49, 64, 79, 86, 88, 140], "kind": [2, 31, 79, 86, 92, 146], "item": [2, 19, 34, 86, 89, 90, 91, 102, 149], "via": [2, 5, 8, 20, 24, 28, 35, 40, 58, 68, 91, 99, 109, 111, 112, 133, 140, 155, 160], "decid": [2, 64], "what": [2, 6, 20, 23, 29, 76, 82, 92, 109, 111], "seri": [2, 3, 4, 34, 36, 38, 40, 90, 108, 111], "analyz": [2, 3, 4, 5, 6, 9, 19, 26, 29, 30, 31, 32, 34, 36, 37, 60, 76, 102, 111, 165], "rm": [2, 8, 34, 39, 107, 112], "9": [2, 9, 13, 20, 21, 23, 24, 26, 30, 31, 34, 38, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 80, 86, 90, 91, 92, 99, 105, 109, 113, 127, 132, 134, 136, 138, 141, 143, 144, 146, 148, 149, 160], "boolean": [2, 3, 4, 6, 9, 13, 29, 30, 32, 36, 37, 44, 58, 75, 79, 83, 86, 88, 90, 99, 104, 146, 152], "plot": [2, 4, 5, 6, 8, 16, 20, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 40, 41, 111, 162, 163], "y": [2, 5, 6, 23, 29, 33, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 99, 103, 108, 109, 113, 132, 148, 162, 163], "doc": [2, 6, 26, 58, 86, 102, 109], "matplotlib": [2, 4, 5, 8, 9, 16, 20, 23, 26, 29, 33, 34, 36, 37, 40, 162, 164], "pyplot": [2, 4, 5, 8, 9, 20, 23, 26, 29, 34, 36, 37, 40, 162], "plt": [2, 4, 5, 8, 9, 16, 20, 29, 35, 36, 37, 40], "xlabel": [2, 4, 8, 23, 37], "p": [2, 17, 20, 23, 25, 26, 34, 36, 37, 38, 40, 41, 42, 44, 47, 51, 52, 53, 54, 55, 56, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 88, 109, 112, 113, 146, 148, 157, 160, 162, 163], "ylabel": [2, 4, 8, 23, 37], "\u00e5": [2, 4, 6, 20, 23, 24, 38, 51, 54, 60, 64, 66, 68, 80, 83, 86, 90, 98, 153, 160], "_single_fram": 2, "chapter": [2, 111], "own": [2, 8, 9, 13, 23, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 83, 85, 87, 101, 109, 112, 151, 152], "essenti": [2, 6, 32, 93, 109, 112, 147], "almost": [2, 51, 60, 79, 92, 113], "aim": [2, 17, 79, 84, 147, 150], "useabl": 2, "analysisfromfunct": [2, 80], "analysis_class": 2, "simpl": [2, 8, 17, 19, 23, 26, 29, 39, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 79, 80, 86, 87, 92, 94, 98, 102, 108, 109, 110, 111, 112, 120, 147, 151, 160], "wrapper": [2, 13, 16, 100, 101, 102, 106, 110], "even": [2, 6, 10, 23, 60, 75, 92, 99, 108, 112, 113, 141, 147, 161], "easier": [2, 28, 36, 38, 40, 105], "fulli": [2, 58, 79], "multi": [2, 20, 23, 38, 64, 75, 78, 79, 86, 90, 137, 140, 148, 152, 155], "design": [2, 3, 4, 13, 18, 79, 91, 109, 152], "templat": [2, 90, 152], "analys": [2, 3, 6, 9, 16, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 36, 37, 38, 86, 90, 98, 151, 164], "care": [2, 39, 66, 104], "up": [2, 4, 10, 13, 19, 23, 24, 26, 29, 32, 34, 37, 38, 42, 51, 54, 56, 58, 60, 64, 66, 69, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 98, 99, 100, 106, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 134, 136, 146, 151, 152, 156], "reader": [2, 29, 43, 45, 47, 48, 49, 50, 51, 54, 56, 58, 59, 60, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 76, 78, 83, 84, 92, 100, 105, 109, 125, 132, 135, 136, 140, 141, 149, 150], "iter": [2, 3, 4, 6, 13, 14, 17, 23, 25, 26, 32, 33, 36, 38, 41, 42, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 83, 86, 92, 100, 101, 102, 109, 111, 149, 153, 156], "offer": [2, 29, 91], "meter": [2, 102], "_prepar": 2, "_conclud": 2, "pre": [2, 4, 13, 16, 20, 34, 98, 101, 149, 160, 161], "post": [2, 100, 103], "process": [2, 6, 19, 20, 23, 26, 29, 34, 38, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 100, 109, 136, 149, 155, 159], "coordin": [2, 6, 8, 10, 14, 15, 16, 17, 19, 22, 23, 26, 29, 32, 34, 35, 36, 39, 40, 42, 44, 47, 48, 49, 86, 87, 90, 92, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 150, 151, 154, 155, 157, 158, 159, 162, 163, 165], "readerbas": [2, 40, 42, 60, 75, 79, 92], "debug": [2, 38, 102], "timestep": [2, 10, 17, 24, 29, 32, 33, 37, 38, 42, 44, 48, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 82, 84, 86, 92, 95, 99, 103, 104, 106, 109, 110, 132, 151, 153, 154, 155, 156, 157, 158, 159], "exist": [2, 4, 8, 17, 20, 23, 34, 35, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 80, 81, 83, 86, 89, 90, 92, 99, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 146, 151], "call": [2, 4, 6, 8, 10, 13, 16, 17, 18, 20, 23, 24, 29, 32, 34, 38, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 85, 86, 87, 88, 92, 98, 99, 100, 101, 102, 104, 107, 109, 111, 113, 135, 147, 149, 151, 152, 156], "indic": [2, 3, 6, 9, 13, 14, 17, 20, 23, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 44, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 91, 92, 94, 98, 99, 100, 103, 104, 106, 109, 113, 120, 129, 132, 140, 147, 161], "newanalysi": 2, "def": [2, 4, 38, 85, 109, 151, 152], "__init__": [2, 42, 44, 68, 75, 79, 83, 85, 110, 114, 151, 152], "self": [2, 8, 44, 58, 70, 75, 79, 83, 85, 86, 104, 109, 112, 151, 152], "super": [2, 44, 75, 152], "_paramet": 2, "_ag": 2, "begun": 2, "data": [2, 3, 6, 8, 9, 11, 13, 17, 18, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 41, 42, 43, 44, 45, 47, 48, 49, 51, 54, 55, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 84, 85, 86, 89, 91, 92, 93, 94, 98, 100, 103, 105, 108, 110, 111, 112, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 151, 162, 163, 164], "example_result": 2, "move": [2, 20, 21, 23, 26, 29, 38, 42, 44, 48, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 79, 80, 85, 86, 89, 90, 99, 102, 103, 108, 109, 147, 148, 155, 157, 158, 159, 160], "some_funct": [2, 152], "append": [2, 34, 38, 72, 77, 79, 86, 92, 105, 114, 115, 116, 117, 118, 119, 120], "onc": [2, 6, 20, 22, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 92, 100, 102, 109, 112, 113, 156], "finish": [2, 18, 23, 79], "normalis": [2, 38], "here": [2, 6, 8, 13, 16, 17, 24, 28, 32, 34, 37, 40, 42, 48, 56, 62, 64, 84, 86, 90, 91, 100, 104, 109, 140, 146, 150], "asarrai": 2, "sum": [2, 3, 6, 20, 32, 34, 36, 38, 76, 86, 90, 108, 162], "afterward": [2, 72, 86, 152], "like": [2, 4, 6, 10, 23, 28, 32, 38, 40, 49, 51, 54, 55, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 81, 83, 86, 90, 92, 95, 100, 101, 102, 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 140, 147, 151, 152, 157, 158], "na": [2, 20, 23, 108, 109, 148], "20": [2, 4, 6, 20, 24, 25, 29, 33, 37, 60, 61, 62, 64, 65, 68, 83, 86, 90, 98, 99, 102, 103, 109, 133, 134, 146, 148, 149, 160, 162, 163], "print": [2, 3, 4, 7, 13, 14, 17, 22, 23, 28, 33, 37, 38, 39, 40, 44, 58, 62, 68, 77, 79, 85, 86, 92, 100, 101, 102, 105, 109, 111, 113, 146, 155, 156], "kei": [2, 6, 20, 26, 28, 34, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 89, 91, 92, 99, 109, 113, 148], "progressbar_kwarg": [2, 3, 6, 9, 29, 30, 32, 36], "skip": [2, 3, 6, 9, 23, 29, 30, 32, 36, 44, 51, 60, 64, 76, 79, 80, 83, 100, 102, 103, 140], "integ": [2, 3, 6, 9, 10, 13, 17, 23, 29, 30, 32, 36, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 80, 88, 89, 100, 101, 104, 105, 109, 113, 129, 147, 148, 149], "valueerror": [2, 3, 6, 9, 29, 30, 32, 36, 42, 43, 44, 49, 50, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 78, 80, 85, 86, 88, 90, 92, 94, 103, 105, 108, 109, 134, 144, 146, 160], "custom": [2, 3, 4, 6, 8, 9, 29, 30, 32, 36, 38, 58, 74, 79, 82, 85, 92, 102, 109, 114, 146, 151, 157], "regard": [2, 3, 6, 9, 23, 29, 30, 32, 36, 38, 58, 75], "full": [2, 3, 6, 9, 13, 17, 19, 29, 30, 32, 34, 36, 39, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 79, 80, 92, 107, 109, 132, 135, 147, 161, 165], "abil": [2, 3, 6, 9, 24, 29, 30, 32, 36, 68], "modifi": [2, 3, 6, 9, 13, 16, 24, 29, 30, 32, 36, 38, 47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 86, 99, 103, 107, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "descript": [2, 3, 6, 9, 13, 17, 18, 23, 26, 29, 30, 32, 36, 42, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 99, 107, 112, 151], "tqdm": [2, 3, 6, 9, 29, 30, 32, 36, 102], "callabl": [2, 4, 13, 18, 23, 34, 86], "evalu": [2, 11, 17, 20, 37, 58, 86, 88, 99, 104, 106, 113], "simul": [2, 4, 6, 7, 8, 10, 11, 13, 16, 17, 19, 28, 29, 30, 32, 36, 37, 38, 40, 41, 44, 47, 48, 51, 57, 64, 67, 68, 76, 79, 86, 87, 92, 95, 99, 100, 105, 106, 111, 112, 120, 129, 147, 153, 155, 160, 162, 163], "timeseri": [2, 4, 24, 29, 36, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 98], "align": [2, 6, 10, 14, 17, 20, 23, 32, 34, 36, 37, 39, 44, 45, 58, 66, 86, 90, 110, 111, 112, 154, 158], "rot": [2, 107], "former": [2, 33, 80, 82, 86, 98], "value_kei": 2, "sklearn": [2, 13, 16, 17], "util": [2, 11, 12, 13, 14, 16, 17, 29, 36, 57, 82, 88, 105, 110, 125, 150], "bunch": 2, "scikit": [2, 13, 16, 39, 151], "learn": [2, 13, 16, 32, 39, 151], "attributeerror": [2, 3, 94], "assign": [2, 4, 6, 8, 12, 13, 23, 24, 30, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 86, 92, 109, 113, 134, 136, 140, 147, 163], "librari": [2, 13, 23, 46, 51, 58, 60, 67, 68, 75, 77, 79, 102, 108, 151, 165], "style": [2, 23, 51, 60, 79, 111, 140, 151], "rotationmatrix": 2, "decor": [2, 88, 102], "soohaeng": 3, "yoo": 3, "willow": 3, "david": [3, 9, 36, 67, 108, 112], "minh": 3, "2020": [3, 22, 23, 29, 98, 141, 149], "v2": [3, 8, 9, 19, 23, 26, 29, 36, 80, 98, 104], "higher": [3, 8, 28, 30, 38, 99, 100, 103], "interconvert": 3, "cartesian": [3, 6, 28, 34, 56, 83, 86, 90, 100], "intern": [3, 6, 10, 19, 22, 34, 44, 76, 83, 86, 88, 89, 90, 91, 98, 99, 100, 101, 102, 103, 109, 113, 125, 136, 137, 140, 141, 146], "system": [3, 6, 7, 8, 10, 19, 20, 23, 25, 26, 29, 31, 33, 35, 40, 48, 49, 51, 56, 58, 60, 61, 62, 64, 66, 67, 69, 72, 73, 79, 83, 86, 88, 89, 90, 91, 92, 99, 102, 103, 107, 109, 111, 112, 125, 131, 136, 138, 139, 140, 147, 154, 155, 162, 163], "chang2003": 3, "redund": [3, 86, 113], "correl": [3, 24, 32, 35, 37, 51, 60, 110, 112], "degre": [3, 20, 24, 31, 38, 51, 60, 64, 65, 68, 80, 83, 86, 90, 91, 99, 103, 109, 153, 157], "freedom": 3, "3n": [3, 32, 34], "improp": [3, 60, 86, 90, 91, 92, 129, 130, 131, 139, 140, 141, 146, 149], "hikiri2016": 3, "pair": [3, 4, 13, 16, 17, 20, 23, 24, 26, 30, 31, 34, 35, 86, 90, 99, 103, 104, 106, 147, 148, 149], "central": [3, 83, 93, 99, 106, 109], "four": [3, 17, 90, 91, 99, 125, 147], "d": [3, 4, 6, 10, 24, 29, 30, 31, 34, 35, 37, 38, 86, 88, 89, 90, 98, 99, 103, 109, 111, 112, 146, 149, 157], "plane": [3, 23, 86, 90, 91, 99, 103, 108, 146, 147, 154, 163], "anoth": [3, 6, 10, 32, 35, 37, 38, 46, 79, 83, 85, 86, 87, 91, 92, 99, 100, 101, 106, 111, 113, 114, 120, 155, 160], "share": [3, 14, 30, 35, 58, 67, 75, 79, 80, 86, 90, 92, 131, 132], "primari": [3, 29, 79, 86, 90, 99, 103, 106, 121, 159], "raw": [3, 20, 32, 35, 37, 58, 61, 79, 80, 83, 92, 98, 100, 105, 148], "definit": [3, 4, 8, 20, 29, 37, 47, 55, 64, 65, 74, 75, 86, 90, 91, 93, 103, 140], "reduc": [3, 8, 16, 17, 23, 32, 58, 73, 102, 104], "molecul": [3, 6, 7, 8, 10, 23, 24, 35, 36, 37, 38, 46, 54, 60, 62, 74, 86, 90, 92, 98, 103, 113, 130, 131, 134, 151, 155, 159, 160, 162, 163], "six": [3, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 89, 99], "extern": [3, 26, 39, 79, 86, 92, 94, 113, 114, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159], "space": [3, 6, 8, 11, 16, 17, 23, 32, 36, 40, 58, 64, 66, 73, 74, 79, 83, 86, 99, 109, 113, 132, 139, 148, 162, 163], "three": [3, 6, 11, 17, 20, 23, 26, 28, 32, 38, 54, 56, 58, 66, 76, 79, 83, 89, 90, 91, 92, 99, 103, 147], "": [3, 6, 9, 13, 16, 22, 23, 29, 32, 34, 36, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 90, 92, 95, 98, 99, 100, 103, 107, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 148, 149, 150, 160, 162, 163], "axi": [3, 20, 23, 29, 32, 33, 34, 36, 37, 86, 90, 91, 99, 103, 104, 108, 157, 162, 163], "convent": [3, 10, 29, 34, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 99, 100, 102, 104, 106, 140], "polar": [3, 23, 112, 149], "phi": [3, 5, 9, 86, 90], "azimuth": 3, "theta": [3, 37], "omega": [3, 86, 90], "adapt": 3, "algdock": 3, "minh2020": 3, "dihedr": [3, 5, 39, 60, 86, 90, 91, 92, 99, 103, 113, 129, 130, 131, 139, 140, 141, 146], "calc_dihedr": [3, 9, 99], "adenyl": [3, 9, 36, 111], "kinas": [3, 9, 36, 111], "adk": [3, 4, 9, 13, 16, 17, 36, 111], "within": [3, 4, 6, 7, 9, 10, 19, 20, 23, 24, 25, 32, 35, 37, 38, 40, 42, 44, 47, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 87, 88, 90, 91, 92, 95, 98, 99, 102, 104, 106, 109, 111, 113, 131, 133, 140, 144, 146, 159], "selected_residu": 3, "code": [3, 15, 22, 23, 26, 29, 34, 36, 38, 39, 40, 44, 51, 56, 61, 62, 64, 65, 79, 81, 85, 86, 87, 90, 92, 94, 99, 100, 101, 102, 103, 108, 110, 112, 113, 130, 132, 134, 138, 145, 146, 148, 151, 152, 160, 164], "snippet": 3, "previou": [3, 6, 9, 13, 17, 20, 30, 37, 38, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 82, 86, 90, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 156], "reconstruct": 3, "close": [3, 4, 8, 17, 19, 23, 26, 29, 32, 36, 38, 42, 44, 47, 48, 49, 51, 52, 54, 55, 57, 58, 60, 62, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 91, 99, 100, 101, 105, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146], "allclos": [3, 108], "atol": [3, 86, 88], "1e": [3, 13, 86, 88, 160], "pi": [3, 35, 99, 103, 108], "12": [3, 8, 23, 34, 37, 48, 54, 58, 62, 64, 65, 86, 109, 112, 114, 140, 148, 149, 160, 162, 163], "good": [3, 37, 67, 102], "disk": [3, 17, 23, 36, 58, 68, 72, 73, 109], "load": [3, 5, 6, 7, 8, 14, 17, 18, 20, 26, 29, 32, 34, 36, 40, 44, 57, 62, 64, 68, 69, 72, 73, 79, 80, 83, 86, 87, 92, 105, 111, 121, 129], "again": [3, 20, 23, 72, 99, 147, 155], "npy": 3, "rnew": 3, "o": [3, 8, 9, 15, 20, 23, 33, 38, 39, 46, 54, 58, 75, 77, 79, 82, 84, 86, 88, 91, 99, 104, 109, 110, 111, 112, 113, 146, 148], "ag": [3, 9, 29, 35, 49, 58, 64, 80, 85, 86, 90, 91, 92, 113, 148, 152, 154, 157, 158, 159], "initial_atom": 3, "belong": [3, 13, 16, 17, 20, 24, 32, 36, 76, 86, 89, 90, 91, 92, 103, 111, 113, 140, 147], "unavail": [3, 92], "mai": [3, 6, 13, 23, 24, 29, 34, 35, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 92, 98, 99, 102, 105, 109, 113, 120, 125, 146, 152, 155, 157, 161, 165], "guess": [3, 20, 23, 24, 43, 44, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 80, 86, 89, 90, 91, 92, 99, 103, 109, 120, 122, 123, 124, 125, 126, 127, 128, 130, 131, 133, 134, 136, 137, 138, 140, 143, 147, 148, 150, 160], "guess_bond": [3, 20, 86, 92, 103, 146, 148], "associ": [3, 6, 13, 17, 19, 36, 39, 40, 42, 51, 54, 58, 60, 64, 69, 72, 73, 75, 77, 86, 90, 109, 112, 151], "whose": [3, 8, 17, 32, 34, 38, 60, 165], "heaviest": 3, "termin": [3, 38, 100, 102, 109], "recalcul": [3, 6, 17, 72], "nframe": [3, 29, 80], "row": [3, 8, 14, 18, 22, 24, 34, 38, 99, 109], "initi": [3, 6, 8, 13, 18, 20, 23, 32, 36, 38, 39, 44, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 86, 90, 92, 99, 102, 104, 106, 108, 109, 114, 147, 149, 156], "next": [3, 4, 24, 26, 29, 37, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 100, 101, 108, 113, 120, 140], "r_": [3, 29], "01": [3, 11, 17, 48, 88, 112, 132], "a_": [3, 33], "012": [3, 65], "bat_fram": 3, "convers": [3, 6, 10, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 99, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "dimens": [3, 6, 8, 10, 16, 17, 23, 29, 30, 32, 34, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 75, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 109, 151, 155, 158], "proper": [3, 34, 75, 109, 141, 147, 149], "oppos": [3, 34], "around": [3, 6, 10, 13, 24, 29, 35, 37, 58, 64, 86, 87, 88, 91, 95, 98, 99, 103, 106, 109, 113, 138], "properti": [3, 6, 22, 29, 30, 31, 34, 42, 49, 51, 54, 55, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 98, 106, 109, 113, 129, 147, 149], "read": [3, 6, 23, 32, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 82, 83, 84, 86, 89, 90, 92, 106, 109, 110, 111, 113, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 142, 143, 144, 147, 149, 150, 151, 160, 165], "chia": 3, "en": [3, 14, 40, 103, 109, 149], "michael": [3, 9, 34], "j": [3, 4, 8, 9, 10, 13, 14, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 37, 38, 98, 99, 104, 107, 108, 111, 112, 148, 160], "potter": 3, "k": [3, 8, 9, 10, 13, 16, 23, 26, 34, 36, 76, 86, 88, 90, 99, 107, 112, 148], "gilson": 3, "molecular": [3, 8, 9, 16, 23, 29, 32, 37, 53, 60, 67, 79, 90, 104, 108, 111, 112, 121, 147, 150, 155, 165], "configur": [3, 9, 10, 34, 36, 51, 58, 99, 102, 104], "integr": [3, 17, 20, 26, 29, 48, 51, 58, 60, 67, 70, 72, 79, 100], "journal": [3, 8, 9, 11, 15, 16, 17, 19, 23, 29, 30, 31, 34, 37, 67, 98, 108, 112, 155, 160], "physic": [3, 6, 8, 29, 37, 58, 98, 112, 160], "chemistri": [3, 29, 30, 31, 37, 67, 90, 160], "107": [3, 38, 98, 112, 148], "1048": 3, "1055": 3, "2003": [3, 9, 15, 16, 26], "doi": [3, 4, 8, 9, 11, 17, 19, 23, 26, 29, 30, 31, 32, 34, 36, 37, 38, 67, 98, 108, 111, 112, 148, 155, 160, 162, 163], "1021": [3, 19, 29, 30, 31, 37, 98, 112, 148, 155], "jp027149c": 3, "simon": [3, 9], "hikiri": 3, "takashi": 3, "yoshidom": 3, "mitsunori": 3, "ikeguchi": 3, "entropi": 3, "chemic": [3, 8, 19, 29, 30, 31, 37, 98, 146, 155], "theori": [3, 29, 90, 98, 155], "5990": 3, "6000": 3, "2016": [3, 8, 32, 36, 80, 107, 112, 141, 149], "pmid": [3, 19, 30, 31], "27951672": 3, "ac": [3, 19, 38, 98, 148, 155], "jctc": [3, 98, 155], "6b00563": 3, "l": [3, 6, 8, 19, 25, 29, 34, 36, 86, 99, 107, 109, 112, 160], "alchem": 3, "grid": [3, 6, 19, 23, 99, 104, 110, 162, 163], "dock": [3, 62, 134], "bind": [3, 6, 35, 38, 68], "free": [3, 26, 58, 79], "energi": [3, 4, 40, 47, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 80, 98, 149, 160], "flexibl": [3, 17, 23, 36, 51, 58, 80, 86, 90, 105, 165], "rigid": [3, 55, 74], "receptor": 3, "7": [3, 6, 9, 19, 23, 26, 31, 32, 34, 35, 36, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 90, 94, 98, 103, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 156, 159, 160], "715": 3, "730": 3, "http": [3, 8, 9, 14, 15, 23, 29, 30, 31, 38, 58, 62, 67, 88, 102, 103, 107, 108, 109, 140, 160, 165], "org": [3, 8, 9, 23, 29, 30, 31, 38, 58, 67, 102, 103, 108, 109, 140, 160, 165], "1002": [3, 9, 30, 31, 38, 67, 112, 160], "jcc": [3, 30, 31, 67, 112], "26036": 3, "q": [4, 17, 18, 23, 26, 34, 65, 66, 79, 86, 88, 90, 108, 149], "conform": [4, 9, 12, 13, 14, 16, 17, 19, 30, 31, 34, 49, 56, 64, 66, 92, 112], "closer": [4, 42], "radiu": [4, 23, 35, 37, 66, 79, 86, 88, 90, 95, 106, 108, 111, 113, 141, 147, 163], "fraction": [4, 38, 54, 60, 99], "metric": [4, 8, 34, 102], "well": [4, 11, 13, 17, 18, 38, 39, 51, 75, 79, 80, 86, 94, 98, 99, 100, 101, 104, 106, 108, 111, 134, 146, 147], "hard": [4, 56, 68, 86, 113, 145, 146, 148, 160], "cut": [4, 16, 25, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "count": [4, 6, 10, 19, 20, 24, 34, 35, 37, 38, 79, 162, 163], "soft": 4, "potenti": [4, 13, 16, 24, 38, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 109, 111, 141, 149], "larg": [4, 6, 9, 23, 25, 34, 35, 36, 38, 42, 66, 68, 101, 112, 162, 163], "soft_cut_q": 4, "cannot": [4, 6, 9, 23, 26, 29, 43, 49, 58, 60, 66, 68, 70, 78, 79, 82, 86, 90, 109, 129, 151], "apart": [4, 155], "total": [4, 13, 24, 32, 34, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 79, 80, 83, 86, 87, 89, 90, 98, 102, 113, 149], "divid": [4, 6, 17, 19, 34, 36, 68, 104, 109, 140], "As": [4, 6, 32, 34, 38, 40, 42, 44, 51, 56, 58, 60, 62, 74, 76, 86, 92, 98, 113, 121, 140, 147, 148, 151, 160, 161], "unzip": [4, 111], "salt": [4, 38], "bridg": [4, 10, 24, 39], "enzym": 4, "transit": [4, 36, 111], "crude": [4, 23], "nh": [4, 20, 38, 148], "nz": [4, 38, 54], "ly": [4, 10, 38, 86, 99, 103, 104, 109, 113], "oe": 4, "od": [4, 38], "asp": [4, 38], "glu": [4, 38, 113], "littl": [4, 70, 99, 101, 148], "bit": [4, 62, 68, 100, 101, 104, 134, 148], "harder": [4, 37], "problem": [4, 8, 13, 29, 32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 94, 113, 161], "real": [4, 6, 54, 60, 64, 65, 66, 99, 108, 109, 111], "sel_bas": 4, "resnam": [4, 6, 9, 20, 24, 37, 38, 48, 49, 50, 56, 64, 65, 86, 88, 90, 92, 109, 113, 122, 124, 125, 128, 131, 133, 134, 136, 137, 138, 139, 140, 141, 147, 149], "sel_acid": 4, "separ": [4, 12, 13, 16, 17, 23, 26, 33, 34, 35, 37, 41, 42, 64, 66, 79, 86, 88, 92, 99, 109, 113, 120, 132, 139, 147, 148], "eg": [4, 61, 86, 88, 89, 92, 113], "crystal": [4, 86, 113, 148], "acid": [4, 9, 26, 38, 86, 88, 90, 109, 112], "basic": [4, 6, 9, 17, 19, 32, 40, 54, 75, 79, 82, 87, 102, 104, 113, 122, 128, 130, 141, 160], "ca1": 4, "refgroup": 4, "averav": 4, "average_contact": 4, "fig": [4, 9, 29, 36, 162, 163], "ax": [4, 5, 6, 8, 9, 22, 23, 26, 28, 29, 33, 34, 36, 86, 90, 108, 162, 163], "subplot": [4, 8, 9, 37], "titl": [4, 37, 64, 68, 70, 109], "2f": 4, "graph": [4, 9, 23, 25, 26, 33, 37], "state": [4, 13, 17, 19, 28, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 107, 108, 111, 112], "disappear": [4, 24, 98], "wise": [4, 10, 34], "fashion": [4, 38, 160], "clear": [4, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 111], "movi": [4, 64], "adk_zipper_cartoon": 4, "avi": 4, "suggest": [4, 6], "cutoff": [4, 8, 9, 10, 19, 24, 25, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 99, 104, 106, 113], "coars": [4, 38, 149], "grain": [4, 149], "dim": [4, 16, 28, 36, 153], "project": [4, 17, 32, 39, 99, 108, 110], "franklin2007": 4, "q1q2": 4, "f": [4, 6, 8, 24, 32, 33, 34, 44, 51, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 80, 100, 101, 104, 105, 108, 109, 111, 112, 146, 148, 160], "figsiz": [4, 9, 34, 36, 37], "figaspect": [4, 9], "label": [4, 23, 29, 34, 36, 38, 68, 147, 161], "legend": [4, 23, 36], "loc": [4, 36], "best": [4, 8, 9, 13, 23, 25, 29, 34, 36, 58, 108, 114], "pathwai": [4, 23, 34, 112], "minactionpath": 4, "form": [4, 10, 13, 17, 19, 20, 23, 24, 26, 34, 37, 38, 40, 68, 83, 86, 90, 91, 92, 95, 99, 103, 106, 108, 109, 111, 146, 147, 157], "prescrib": [4, 18, 64], "is_any_clos": 4, "r0": [4, 108], "dist": [4, 10, 34, 38, 99], "nc": [4, 68, 79, 92, 148, 149], "bound": [4, 17, 32, 38, 58, 86, 102, 104, 109], "ylim": 4, "hard_cut_q": 4, "beta": [4, 10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 141, 153], "lambda_const": 4, "best2013": 4, "r_0": 4, "frac": [4, 7, 20, 25, 29, 33, 36, 37, 86, 90, 98, 103, 160, 162], "lambda": [4, 16, 58, 69, 80, 86, 99, 101, 140], "reason": [4, 8, 17, 23, 39, 58, 68, 109, 147], "unitless": [4, 130], "angstrom": [4, 6, 20, 25, 28, 48, 49, 50, 51, 52, 54, 55, 59, 60, 62, 63, 64, 65, 66, 68, 71, 74, 79, 81, 86, 95, 113, 151, 160, 162, 163], "robert": [4, 38, 107], "gerhard": [4, 29], "hummer": [4, 29], "william": [4, 160], "eaton": 4, "fold": [4, 99, 112], "mechan": [4, 25], "atomist": [4, 111], "proceed": [4, 112], "nation": 4, "academi": 4, "scienc": [4, 8, 9, 13, 29, 108, 112], "110": [4, 141, 149], "44": [4, 86, 148, 149], "17874": 4, "17879": 4, "1073": 4, "pna": 4, "1311599110": 4, "radius_cut_q": 4, "unus": [4, 19, 36, 64, 68, 140], "fullfil": 4, "joel": 4, "franklin": 4, "patric": 4, "koehl": 4, "sebastian": 4, "doniach": 4, "marc": 4, "delaru": 4, "maximum": [4, 6, 10, 12, 13, 14, 15, 16, 17, 20, 24, 32, 37, 38, 49, 56, 58, 60, 64, 76, 86, 98, 99, 102, 106, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "likelihood": [4, 15, 17], "scale": [4, 6, 8, 17, 29, 60, 68, 102, 108, 146], "local": [4, 8, 22, 58, 76, 86, 131], "harmon": [4, 8, 11, 17, 141, 149], "landscap": 4, "nucleic": [4, 26, 86, 88, 113], "research": [4, 26, 39], "suppl_2": 4, "w477": 4, "w482": 4, "2007": [4, 13, 19, 108, 112, 160], "1093": [4, 26], "nar": [4, 26, 148], "gkm342": 4, "contact_matrix": [4, 10], "suppli": [4, 6, 7, 8, 9, 10, 13, 16, 17, 23, 25, 26, 28, 29, 32, 34, 35, 38, 43, 44, 51, 54, 56, 58, 60, 64, 69, 72, 73, 74, 75, 78, 79, 86, 92, 99, 103, 104, 109, 144, 146, 147], "alloc": [4, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "correct": [4, 24, 29, 32, 33, 36, 38, 49, 51, 58, 70, 79, 86, 90, 91, 99, 109, 146, 147, 151, 157], "fill": [4, 6, 10, 14, 20, 23, 36, 79, 99, 102, 132], "increas": [4, 6, 8, 17, 23, 34, 49, 58, 76, 86, 106, 109, 113, 146, 161], "hard_cut": 4, "basekwarg": 4, "observ": [4, 19, 20, 24, 38, 58, 86, 90, 98, 109, 160], "standard": [4, 6, 9, 13, 15, 17, 18, 23, 25, 26, 28, 31, 38, 42, 49, 50, 51, 54, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 86, 102, 105, 109, 111, 113, 125, 136, 139, 147, 149, 160, 162], "signatur": [4, 34, 79, 107], "func": [4, 23, 86, 88, 109, 114], "2d": [4, 10, 29, 30, 34, 86, 90, 99, 109, 163, 164], "accept": [4, 6, 8, 10, 17, 23, 25, 29, 32, 78, 85, 86, 90, 99, 109, 113], "soft_cut": 4, "radius_cut": 4, "mdanalysi": [5, 15, 18, 22, 39, 45, 46, 82, 84, 93, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 149, 150, 164], "experiment": [5, 11, 17, 36, 49, 68, 79, 147], "theoret": [5, 29], "packag": [5, 26, 27, 29, 34, 39, 40, 46, 51, 53, 58, 67, 68, 77, 79, 82, 85, 99, 109, 111, 112, 113, 114, 120, 124, 140, 150, 160, 164, 165], "literatur": [5, 6, 165], "rama_ref": [5, 9], "ramachandran": 5, "histogram": [5, 6, 23, 25, 28, 35, 37, 109], "were": [5, 6, 9, 10, 28, 32, 37, 42, 48, 49, 51, 56, 58, 64, 68, 75, 86, 87, 88, 90, 91, 92, 99, 107, 109, 112, 113, 120], "500": [5, 9, 13, 37, 48, 108], "taken": [5, 6, 9, 10, 17, 23, 29, 36, 37, 38, 40, 66, 70, 74, 79, 86, 90, 91, 95, 99, 104, 106, 109, 113, 148, 151, 158, 160], "lovell2003": [5, 9], "psi": [5, 9, 86, 90], "angl": [5, 20, 22, 24, 37, 38, 39, 40, 51, 60, 68, 80, 83, 86, 90, 91, 92, 99, 103, 108, 109, 113, 129, 130, 131, 139, 140, 141, 146, 149, 153, 157], "meshgrid": 5, "arang": [5, 29, 109, 163], "180": [5, 38, 51, 86, 90, 91, 99, 103, 113, 148], "z": [5, 6, 8, 13, 23, 29, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 90, 99, 103, 108, 109, 113, 132, 149, 151, 163], "contourf": 5, "15000": 5, "draw": [5, 17], "contour": [5, 9], "90": [5, 9, 83, 104, 109, 148, 149, 153, 157], "99": [5, 9, 38, 49, 50, 56, 125, 136], "figur": [5, 9, 29, 34, 36, 37, 68, 79, 162, 163], "region": [5, 6, 9, 17, 37, 98, 99], "janin_ref": [5, 9], "janin": [5, 86, 90], "chi_1": [5, 9], "chi_2": [5, 9], "sidechain": [5, 9, 86, 90], "360": [5, 23], "600": 5, "98": [5, 9, 111, 112, 148, 149], "2011": [6, 8, 19, 30, 31, 37, 107, 112], "repres": [6, 8, 13, 14, 20, 23, 29, 32, 33, 34, 35, 37, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 108, 109, 140, 146, 147], "volumetr": 6, "particular": [6, 13, 16, 17, 20, 23, 31, 34, 42, 44, 51, 71, 79, 84, 86, 91, 94, 99, 104, 113, 154, 160], "density_from_univers": 6, "density_from_pdb": 6, "bfactor2rmsf": 6, "solvent": [6, 35, 86, 92], "densityanalysi": 6, "unit": [6, 23, 28, 37, 40, 41, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 81, 83, 90, 92, 94, 99, 100, 102, 103, 106, 108, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 153, 155, 157, 158, 159], "cell": [6, 10, 28, 29, 51, 54, 56, 58, 60, 61, 64, 68, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 146, 153, 155, 157, 158, 159], "necessari": [6, 12, 23, 34, 42, 44, 48, 64, 75, 78, 82, 92, 99, 100, 103, 113, 140], "orient": [6, 37, 79, 108, 111, 149, 154, 165], "box": [6, 10, 19, 36, 40, 51, 54, 56, 58, 60, 64, 66, 67, 68, 79, 86, 95, 99, 100, 101, 103, 104, 106, 109, 113, 132, 146, 149, 151, 155], "practic": [6, 29, 40, 41], "compon": [6, 16, 17, 25, 39, 67, 69, 86, 89, 90, 103, 107, 112, 147, 162, 163, 165], "broken": [6, 86, 159], "across": [6, 36, 38, 86, 89, 98, 111, 113, 115, 116, 117, 118, 119, 153, 155], "remap": 6, "closest": [6, 42, 44], "solut": [6, 13, 20, 25, 35, 68, 108], "triclin": [6, 10, 51, 54, 56, 60, 83, 85, 86, 99, 103, 104, 109], "dodecahedron": 6, "truncat": [6, 56, 58, 109], "octahedron": 6, "studi": [6, 29, 37], "artifact": 6, "ow": [6, 38, 86, 92, 113, 131], "delta": [6, 31, 35, 37, 51, 60, 68, 70, 79, 100, 109], "convert_dens": 6, "tip4p": [6, 38, 92, 111, 160], "export": [6, 26, 58, 112, 113, 114, 165], "dx": [6, 162], "doubl": [6, 16, 19, 20, 23, 49, 63, 86, 90, 103, 146, 152], "oxygen": [6, 20, 31, 38, 49, 86, 87, 113], "measur": [6, 11, 17, 20, 30, 32, 33, 34, 38, 60, 103, 160], "rel": [6, 13, 23, 29, 36, 75, 82, 86, 88, 90, 99, 109, 110, 113, 149, 160, 165], "model": [6, 16, 17, 19, 23, 24, 29, 33, 47, 64, 74, 79, 89, 92, 98, 108, 111, 112, 133, 134, 137, 147, 160], "ambient": 6, "opendx": 6, "compat": [6, 36, 37, 74, 80, 86, 109, 149, 161, 165], "vmd": [6, 24, 25, 51, 64, 74, 86, 88, 100, 114, 120, 146, 165], "chimera": 6, "pymol": [6, 25, 86, 114, 120, 165], "manner": [6, 34, 37, 38, 76, 79, 146, 161], "metadata": [6, 13, 14, 17, 18, 58, 67, 86, 90, 161], "pad": [6, 23], "gridcent": 6, "xdim": 6, "ydim": 6, "zdim": 6, "3d": [6, 23, 29, 34, 54, 58, 92, 108, 162, 164], "updatingatomgroup": [6, 29, 86, 113], "everi": [6, 16, 17, 23, 32, 37, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 98, 102, 104, 106, 111, 113, 114, 131, 147, 151, 155], "bin": [6, 23, 26, 28, 35, 37, 109], "\u00e5ngstr\u00f6m": [6, 54, 60, 68, 160], "float32": [6, 10, 79, 83, 86, 92, 99, 103, 104, 109, 151], "edg": [6, 23, 28, 35, 49, 58, 103, 155], "empti": [6, 13, 42, 48, 51, 58, 60, 64, 66, 74, 75, 77, 79, 80, 86, 88, 91, 92, 94, 95, 102, 105, 109, 113, 114, 115, 116, 117, 118, 119, 133, 134, 136, 140, 141, 148, 149], "incorrectli": [6, 24, 66], "userwarn": [6, 136, 147], "pmda": 6, "parallel": [6, 14, 18, 23, 37, 82, 86, 99, 103, 110, 112, 113, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "gridbox": 6, "static": [6, 7, 37, 38, 51, 58, 59, 60, 63, 67, 68, 80, 86, 108, 109, 113, 138, 148], "h": [6, 20, 22, 23, 24, 26, 33, 38, 62, 86, 88, 91, 97, 102, 109, 113, 141, 146, 148, 149], "heavi": [6, 86, 90], "updat": [6, 16, 23, 24, 25, 28, 31, 38, 39, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 91, 102, 108, 111, 112, 113, 146, 165], "situat": [6, 37, 120], "limit": [6, 23, 26, 32, 36, 40, 51, 54, 57, 58, 60, 64, 68, 69, 72, 73, 75, 76, 88, 102, 147, 151, 152, 154, 156, 157, 158, 159, 163], "although": [6, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 104, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "respons": [6, 76], "ensur": [6, 19, 36, 37, 38, 58, 64, 75, 76, 79, 86, 89, 98, 104, 109, 111, 113], "encompass": [6, 104], "convert": [6, 10, 26, 29, 34, 40, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 79, 80, 85, 86, 88, 92, 94, 99, 101, 103, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 160], "invers": [6, 32, 108], "cubic": [6, 64, 141, 149], "bulk": [6, 160], "recov": [6, 108, 140], "underli": [6, 64, 68, 75, 77, 78, 79, 80, 83, 86, 90, 92, 98, 109], "probability_dens": 6, "similarli": [6, 18, 23, 25, 34, 35, 64, 75, 79, 85, 91, 99, 105], "multipli": [6, 86, 90, 101, 140], "volum": [6, 28, 37, 79, 83, 103, 148, 160], "dv": [6, 149], "voxel": 6, "prod": 6, "atom_count_histogram": 6, "thank": [6, 85, 112, 165], "fact": [6, 37, 38, 57, 86, 91], "griddata": 6, "just": [6, 13, 16, 17, 18, 23, 36, 38, 42, 46, 49, 51, 60, 64, 65, 80, 86, 88, 91, 92, 109, 111, 113], "site": [6, 35, 68, 77, 146, 149], "certain": [6, 17, 18, 23, 37, 38, 44, 79, 86, 91, 111, 113], "vicin": [6, 10, 99, 106], "near_wat": 6, "156": 6, "157": [6, 148], "305": [6, 148], "d_site": 6, "small": [6, 10, 13, 17, 19, 23, 29, 38, 49, 62, 88, 109], "explicitli": [6, 13, 16, 27, 40, 49, 50, 58, 60, 64, 68, 76, 78, 79, 92, 147, 150], "lig": 6, "com": [6, 8, 9, 11, 23, 62, 67, 86, 90, 108, 109, 149, 165], "ligand_select": 6, "extract": [6, 16, 23, 29, 37, 38, 40, 64, 68, 80, 91, 108, 109, 112, 132, 140], "ligand_com": 6, "abov": [6, 9, 19, 23, 24, 29, 37, 40, 44, 51, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 86, 102, 113, 146, 151, 162, 163], "ligand_wat": 6, "d_water": 6, "_set_user_grid": 6, "smin": 6, "smax": 6, "helper": [6, 72, 78, 110, 140], "umin": 6, "umax": 6, "staticmethod": [6, 79], "main": [6, 38, 49, 73, 148], "creation": [6, 42, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80, 91, 92, 144, 151], "regular": [6, 42, 44, 86, 88, 105, 109, 113, 141, 147], "lower": [6, 8, 17, 23, 25, 38, 41, 44, 58, 86, 90, 103, 109, 147], "upper": [6, 17, 23, 25, 34, 79, 109], "along": [6, 20, 23, 24, 28, 29, 32, 34, 37, 79, 86, 90, 99, 103, 106, 107, 108, 109, 147, 151], "meaning": [6, 76, 79, 86], "isdens": 6, "make_dens": 6, "nm": [6, 37, 47, 56, 58, 60, 67, 69, 70, 73, 79, 149, 160], "otherwis": [6, 8, 13, 18, 24, 29, 32, 36, 40, 42, 44, 58, 64, 66, 68, 79, 80, 86, 90, 92, 104, 105, 108, 109, 146], "touch": [6, 68], "histogramdd": 6, "1d": [6, 10, 23, 26, 36, 86, 90, 99, 103, 109], "front": [6, 13, 16], "left": [6, 8, 20, 24, 32, 33, 36, 68, 86, 88, 98, 100, 109, 113], "corner": [6, 86, 113], "convert_length": 6, "manipul": [6, 8, 36, 79, 83, 92, 110, 111, 165], "constructor": [6, 13, 18, 26, 60, 64, 68, 74, 91, 105, 109, 149], "hold": [6, 40, 44, 64, 79, 80, 83, 89, 104], "annot": [6, 34, 64], "readabl": [6, 40, 109], "understand": [6, 49, 67, 86, 93, 104, 109], "known": [6, 29, 43, 58, 79, 109, 111, 141, 160], "issu": [6, 8, 26, 27, 40, 42, 49, 51, 58, 60, 64, 68, 74, 79, 80, 86, 89, 99, 109, 113, 133, 136, 140, 141, 147, 152, 165], "griddataformat": 6, "right": [6, 20, 23, 33, 36, 54, 64, 74, 82, 86, 90, 109, 113], "awai": [6, 38, 86, 113], "becaus": [6, 10, 12, 32, 34, 36, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 86, 91, 92, 103, 109, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 160], "reliabl": [6, 32, 68, 79, 99, 151], "detect": [6, 49, 51, 57, 58, 60, 68, 78, 92, 109, 120, 122, 140, 156], "conveni": [6, 18, 23, 32, 34, 40, 44, 68, 86, 92, 114, 151, 160], "less": [6, 8, 19, 20, 23, 24, 32, 34, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 99, 103, 146], "demonstr": [6, 29, 88], "itself": [6, 13, 17, 18, 23, 24, 26, 35, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 109, 110, 111, 113, 120], "algebra": [6, 86, 113], "subtract": [6, 13, 36, 86], "saniti": 6, "sure": [6, 31, 42, 58, 82, 86, 90, 113, 165], "ndindex": 6, "check_compat": 6, "arithmet": 6, "scalar": [6, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 103, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "resampl": [6, 12, 17], "typeerror": [6, 36, 58, 78, 79, 80, 86, 90, 92, 109], "particl": [6, 10, 19, 29, 35, 37, 57, 58, 67, 86, 92, 98, 99, 104, 106, 129, 149, 155, 162, 163], "spc": [6, 38, 86, 113, 160], "tip3p": [6, 38, 160], "997": [6, 160], "cm": [6, 23, 28, 148, 160], "molar": [6, 160], "mol": [6, 23, 28, 47, 49, 62, 67, 68, 69, 111, 160], "runtimeerror": [6, 23, 58, 136], "unknown": [6, 134, 136, 137, 140, 150], "go": [6, 23, 32, 36, 86, 113], "back": [6, 13, 29, 32, 46, 48, 49, 58, 68, 78, 86, 92, 99, 106, 108, 109, 140, 156, 159, 160], "uniti": 6, "round": [6, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "multipl": [6, 13, 16, 20, 22, 23, 26, 34, 38, 41, 44, 58, 60, 64, 76, 77, 78, 79, 86, 90, 92, 100, 102, 105, 109, 112, 113, 114, 115, 116, 117, 118, 119, 151, 160, 162, 163], "default_format": 6, "file_format": [6, 86], "typequot": 6, "deduc": [6, 51, 54, 57, 58, 59, 60, 63, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 109, 137, 138], "preced": [6, 32, 38, 42, 78, 86, 88, 102, 113], "visual": [6, 17, 23, 26, 29, 33, 102, 112, 114, 120, 151], "pickl": [6, 26, 34, 57, 58, 68, 75, 76, 77, 82, 86, 92, 100, 101, 105, 109], "simpler": 6, "charact": [6, 51, 56, 60, 64, 65, 66, 70, 88, 100, 102, 105, 108, 109, 113, 115, 116, 117, 118, 119, 125, 146], "quot": 6, "parser": [6, 46, 86, 88, 90, 92, 93, 113, 132, 144, 145, 147, 148, 150], "namd": [6, 23, 51, 63, 64, 79, 92, 100, 111, 139, 147, 150, 165], "gridforc": 6, "backend": [6, 10, 110, 151, 152], "mdff": 6, "expect": [6, 17, 20, 32, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 88, 102, 108, 109, 113, 132, 146, 148, 153, 157], "appeas": 6, "them": [6, 9, 13, 16, 23, 27, 30, 32, 34, 40, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 91, 92, 99, 110, 111, 112, 113, 131, 146, 147, 156, 164], "interpol": [6, 114, 115, 116, 117, 118, 119], "spline": 6, "x1": [6, 17, 163], "x2": [6, 17, 49], "y1": [6, 163], "y2": 6, "z1": [6, 163], "z2": 6, "interpolation_spline_ord": 6, "cach": [6, 32, 49, 58, 91, 109], "better": [6, 19, 20, 36, 38, 49, 91, 92, 122, 151, 154, 157], "whenev": [6, 44, 79, 80], "recomput": 6, "interpolation_cv": 6, "todo": [6, 89, 98, 117], "usag": [6, 10, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 111, 148], "xx": 6, "yy": 6, "zz": 6, "mgrid": [6, 163], "75": [6, 23, 32, 34, 35, 58, 148, 149], "96": [6, 148, 163], "150": [6, 24, 65, 148], "ff": [6, 66, 140], "neg": [6, 13, 17, 34, 36, 49, 51, 54, 58, 60, 69, 72, 73, 75, 86, 89, 103, 109, 113, 129, 140], "especi": [6, 23, 38, 51, 68, 75, 86, 90, 109, 160], "scipi": [6, 10, 17, 20, 29, 34, 68, 106, 111, 112, 160, 164], "ndimag": 6, "map_coordin": 6, "constant": [6, 7, 8, 10, 20, 29, 42, 44, 79, 113, 149, 153, 155], "wherebi": 6, "outsid": [6, 23, 44, 86, 99, 102, 103, 104], "beyond": [6, 9, 29, 86, 90, 106], "rather": [6, 15, 17, 23, 37, 41, 66, 74, 80, 86, 90, 146, 159], "nearest": [6, 8, 13, 34, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 108], "elimin": [6, 113], "extrud": 6, "spline_filt": 6, "reset": [6, 57, 77, 90, 105, 109, 156], "irrevoc": 6, "warn": [6, 9, 28, 40, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 92, 109, 113, 140, 155, 156], "noth": [6, 23, 38, 89, 109, 151], "harm": 6, "othergrid": 6, "resample_factor": 6, "factor": [6, 13, 20, 29, 64, 65, 68, 86, 90, 92, 102, 108, 122, 146, 147, 160], "n_i": [6, 19, 25], "fewer": [6, 13, 68], "alter": [6, 17, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 90, 102], "rang": [6, 10, 23, 24, 35, 37, 39, 42, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 80, 86, 88, 98, 99, 102, 103, 104, 109, 113, 165], "creep": 6, "steadili": 6, "inward": 6, "extent": [6, 163], "regener": 6, "sai": [6, 36, 79, 85, 89, 109, 151], "portabl": [6, 112, 147, 150], "footnot": [6, 23, 109], "accomplish": 6, "compound": [6, 64, 86, 90, 159], "fragment": [6, 28, 33, 49, 60, 86, 90, 103, 113, 159], "fit": [6, 8, 14, 20, 23, 29, 33, 34, 36, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109, 111, 149, 151, 165], "properli": [6, 34, 36, 42, 61, 64, 75, 76, 79, 111, 150], "omit": [6, 40, 51, 54, 57, 58, 60, 62, 64, 66, 69, 71, 72, 73, 75, 78, 80, 105, 134], "clearli": [6, 23, 66], "actual": [6, 10, 17, 23, 29, 32, 34, 40, 79, 102, 109, 140, 149], "mattia": 7, "felic": 7, "palermo": [7, 34], "philip": [7, 19, 23, 112], "loch": 7, "2022": [7, 30, 141, 155], "dielectricconst": [7, 112], "temperatur": [7, 40, 48, 51, 54, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 80, 149, 160], "300": [7, 13, 19, 38, 48, 109, 162, 163], "make_whol": [7, 86, 103], "dipol": [7, 37, 86, 90, 112], "moment": [7, 23, 64, 68, 74, 79, 80, 86, 90, 112, 113, 129, 146], "boldsymbol": [7, 86, 90], "m": [7, 10, 15, 16, 17, 22, 23, 34, 37, 38, 86, 99, 103, 108, 109, 112, 149, 160], "sum_i": [7, 86, 90], "q_i": [7, 86, 90], "r_i": [7, 86, 90], "charg": [7, 24, 28, 49, 58, 60, 64, 65, 66, 79, 86, 90, 92, 113, 124, 127, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 146, 147, 149, 160], "varepsilon": 7, "langl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "rangl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "varepsilon_": 7, "v": [7, 9, 34, 37, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 103, 108, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 155], "k_b": 7, "tin": 7, "foil": 7, "usual": [7, 9, 39, 40, 48, 49, 68, 73, 77, 79, 90, 92, 103, 109, 140], "electrostat": 7, "handl": [7, 11, 17, 38, 49, 50, 51, 54, 55, 57, 58, 60, 62, 63, 64, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 82, 86, 88, 89, 90, 100, 103, 104, 105, 106, 125, 129, 136], "ewald": 7, "summat": 7, "techniqu": 7, "neumann1983": [7, 112], "kelvin": [7, 48], "disabl": [7, 38, 49, 56, 58, 64, 78, 102], "gain": 7, "speedup": [7, 58, 99], "direct": [7, 23, 26, 28, 29, 32, 34, 35, 37, 40, 54, 58, 67, 68, 72, 89, 99, 108, 131, 156, 157, 162, 163], "e\u00e5": [7, 86, 90], "m2": 7, "fluct": 7, "fluctuat": [7, 36, 112], "ep": [7, 13, 17, 34], "eps_mean": 7, "psf_triclin": 7, "dcd_triclin": 7, "diel": 7, "eugen": 8, "hruska": 8, "john": [8, 32, 36, 162, 163], "detlef": [8, 32, 36], "linear": [8, 9, 29, 32, 33, 39], "reduct": [8, 11, 17, 32], "eigenvector": [8, 19, 32, 86, 90], "collect": [8, 13, 17, 23, 26, 38, 75, 78, 79, 88, 89, 91, 103, 112, 151], "largest": [8, 25, 34, 162, 163], "eigenvalu": [8, 19, 32, 86, 90], "domin": [8, 19], "fundament": [8, 111], "difficult": [8, 26], "complex": [8, 17, 24, 38, 49, 95, 103, 106, 109, 165], "storag": [8, 23, 58, 67, 101], "sampl": [8, 9, 12, 13, 17, 20, 23, 29, 30, 31, 32, 36, 79], "equilibr": 8, "irrelev": 8, "porte2008": 8, "coifman2006": 8, "ferguson2011": 8, "rohrdanz2011": 8, "decompos": [8, 38, 108], "leav": [8, 17, 23, 24, 37, 98, 102], "epsilon": [8, 31, 90], "involv": [8, 24, 38, 86, 91, 99, 106, 140, 149], "neighbor": [8, 13, 19, 34, 35, 99, 106, 110], "trial": 8, "approach": [8, 19, 29, 38, 79, 98, 99, 105, 152, 153, 154, 155, 156, 157, 158, 159, 165], "dmap": 8, "embed": [8, 16, 17], "explicit": [8, 49, 76, 78, 99], "relationship": 8, "dimension": [8, 11, 14, 17, 24, 26, 29, 32, 37, 86], "howev": [8, 17, 23, 24, 32, 38, 40, 49, 50, 56, 58, 60, 72, 75, 76, 79, 80, 84, 86, 90, 92, 99, 113, 132, 147, 150, 151, 156, 159, 161], "isometri": 8, "vice": [8, 38, 89], "versa": [8, 38, 89], "emb": 8, "most": [8, 9, 23, 32, 34, 42, 49, 57, 58, 60, 66, 68, 75, 76, 77, 78, 79, 80, 84, 86, 90, 93, 103, 105, 109, 110, 111, 113, 114, 141, 150, 155, 159, 165], "relev": [8, 20, 40, 74, 83, 86, 99, 106], "diminish": 8, "rate": [8, 16, 17, 98, 102], "fall": [8, 42, 44, 64, 67, 68, 78, 99], "spectral": 8, "somewhat": [8, 68], "appar": 8, "equilibrium": [8, 29], "upper_limit": 8, "n_eigenvector": 8, "tight_layout": [8, 9], "num_eigenvector": 8, "inspect": [8, 23, 29, 32, 36, 109], "interpret": [8, 51, 100, 108, 109, 111, 148], "task": [8, 14, 102, 165], "approxim": [8, 23, 26, 29, 32, 34, 49, 58, 141], "euclidean": [8, 34, 36, 103], "diffusion_spac": 8, "anisotrop": 8, "kernel": [8, 17, 141], "decomposit": 8, "distancematrix": 8, "md": [8, 32, 37, 39, 49, 51, 53, 57, 60, 64, 70, 79, 92, 100, 112, 124, 147, 148, 150, 160, 162, 163], "rememb": [8, 86], "cost": [8, 104], "interv": [8, 32, 34, 51, 58, 60, 86, 99, 102, 103], "exclud": [8, 20, 23, 29, 35, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 86, 88, 92], "symmetr": [8, 17, 18, 23, 32, 34, 127], "give": [8, 13, 29, 34, 36, 37, 38, 40, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 91, 92, 99, 100, 105, 109, 111, 113, 151], "entir": [8, 19, 37, 38, 58, 80, 86, 102, 138, 146], "1eo": 8, "subject": [8, 20], "dist_matrix": 8, "ij": [8, 20, 34], "zero": [8, 17, 18, 34, 37, 51, 56, 58, 64, 74, 86, 90, 92, 99, 100, 101, 102, 103, 109, 130, 140], "diagon": [8, 17, 18, 99, 109], "often": [8, 29, 58, 60, 68, 79, 86, 98, 109, 113, 131, 147, 151], "calcrmsdrotationalmatrix": [8, 36, 107], "publish": [8, 11, 17, 36, 112, 165], "port": 8, "ben": 8, "herbst": 8, "willi": 8, "hereman": 8, "st\u00e9fan": 8, "van": [8, 23, 67, 108, 146, 148], "der": [8, 23, 67, 146, 148], "walt": 8, "introduct": [8, 32, 111], "11": [8, 10, 11, 17, 23, 26, 34, 36, 37, 50, 52, 53, 55, 56, 60, 62, 64, 65, 66, 68, 70, 74, 75, 76, 77, 83, 86, 91, 99, 103, 108, 109, 112, 113, 114, 130, 141, 148, 149, 160, 161], "2008": [8, 26, 112], "ronald": [8, 108], "coifman": 8, "st\u00e9phane": 8, "lafon": 8, "2006": [8, 108], "wavelet": 8, "url": [8, 9, 29, 67, 108, 109], "www": [8, 9, 15, 23, 62, 88, 108, 109, 165], "sciencedirect": [8, 9, 108], "articl": [8, 9, 29, 108], "pii": [8, 9, 108], "s1063520306000546": 8, "1016": [8, 9, 23, 98, 108, 111, 112], "acha": 8, "04": [8, 108, 148], "006": [8, 65], "andrew": 8, "ferguson": 8, "athanassio": 8, "panagiotopoulo": 8, "ioanni": 8, "kevrekidi": 8, "pablo": 8, "debenedetti": 8, "nonlinear": 8, "letter": [8, 23, 64, 65, 66, 86, 90, 109], "509": 8, "s0009261411004957": 8, "cplett": 8, "066": 8, "mari": 8, "rohrdanz": 8, "wenwei": 8, "zheng": 8, "mauro": 8, "maggioni": 8, "cecilia": 8, "clementi": 8, "reaction": [8, 23, 49], "134": [8, 30, 31, 86], "124116": 8, "1063": [8, 29, 37, 98], "3569857": 8, "dougla": [8, 36, 107, 112], "theobald": [8, 36, 107, 112], "rapid": [8, 107, 112], "quaternion": [8, 107, 110, 112], "characterist": [8, 20, 107, 112], "polynomi": [8, 37, 107, 112], "acta": [8, 34, 107, 108, 112], "crystallographica": [8, 107, 108, 112], "section": [8, 13, 17, 23, 36, 44, 58, 60, 64, 79, 86, 93, 108, 127, 131, 132, 134, 140, 141, 147], "61": [8, 64, 65, 107, 112, 148, 149, 162], "478": [8, 107, 112], "480": [8, 66, 107, 112], "jul": 8, "2005": [8, 23, 107, 108, 112], "1107": [8, 108], "s0108767305015266": 8, "henri": 9, "mull": 9, "2018": [9, 29, 33, 38, 112, 141], "desir": [9, 26, 29, 38, 39, 41, 48, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 78, 79, 80, 91, 102, 104, 106, 109, 156, 162, 163], "re": [9, 58, 62, 79, 86, 92, 108, 109, 110, 113, 131, 148], "phi_select": [9, 86, 90], "quick": [9, 165], "classic": [9, 68], "ramachandran1963": 9, "unlik": [9, 17, 37, 57, 58, 60, 67, 68, 77, 79, 86, 105], "those": [9, 13, 14, 24, 32, 34, 35, 38, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 113, 140, 141], "repeat": [9, 13, 16, 20, 38, 99, 109], "Then": [9, 23, 38, 42, 49, 149], "built": [9, 23, 57, 58, 68, 91, 105, 106, 149], "color": [9, 16, 23, 34, 162], "marker": 9, "background": [9, 77, 86, 90], "margin": 9, "yourself": [9, 109, 113], "prone": 9, "duplic": [9, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 94, 99, 106, 109, 113], "altloc": [9, 49, 64, 65, 86, 90, 113, 125, 133, 137, 146, 147], "janin1978": 9, "side": [9, 19, 23, 33, 64, 75, 86, 99, 103, 155, 159], "chain": [9, 22, 33, 35, 38, 64, 65, 66, 84, 92, 113], "furthermor": [9, 35, 79], "carefulli": [9, 23, 27, 38, 51, 146], "filter": [9, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102, 162, 163], "messag": [9, 13, 18, 23, 72, 102, 109], "few": [9, 18, 23, 32, 78, 86, 88, 92, 113], "mull2018": 9, "len": [9, 18, 34, 35, 38, 55, 62, 64, 74, 75, 86, 101, 102, 109, 113], "content": [9, 28, 32, 36, 40, 41, 64, 67, 74, 79, 83, 86, 90, 91, 92, 97, 109, 121, 132, 159], "c_name": [9, 30, 86, 90], "n_name": [9, 86, 90], "ca_nam": [9, 86, 90], "check_protein": 9, "legitim": 9, "carbon": [9, 22, 23, 86, 90, 98, 113, 148], "subset": [9, 23, 24, 26, 32, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 83, 86, 147], "suffic": 9, "polym": [9, 22, 113], "peptid": [9, 86, 90, 111], "cx": 9, "nt": [9, 38], "scope": [9, 29], "last": [9, 17, 23, 29, 34, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 102, 103, 105, 106, 108, 109, 111, 114, 138, 156, 162, 163], "still": [9, 18, 27, 37, 49, 51, 57, 58, 68, 77, 82, 85, 86, 90, 98, 104, 105, 109], "n_residu": [9, 86, 89, 90, 92], "activ": [9, 23, 65, 79, 99, 106], "scatter": [9, 16], "select_remov": 9, "ala": [9, 86, 113], "cy": [9, 38], "gly": [9, 86, 92, 113], "pro": 9, "ser": [9, 38], "thr": [9, 38, 113], "val": [9, 88, 90, 140], "select_protein": 9, "amino": [9, 30, 86, 90, 109], "adjust": [9, 13, 38, 48, 86, 90, 102], "enough": [9, 20], "locat": [9, 23, 34, 40, 41, 42, 64, 65, 86, 111, 113], "chi1": [9, 86, 90], "chi2": 9, "ramakrishnan": 9, "sasisekharan": 9, "stereochemistri": 9, "polypeptid": 9, "biologi": [9, 11, 17, 23, 34], "95": [9, 23, 32, 86, 148], "1963": 9, "s0022283663800236": 9, "s0022": 9, "2836": 9, "63": [9, 148, 149], "80023": 9, "jo\u00ebl": 9, "shoshanna": 9, "wodak": 9, "levitt": 9, "bernard": 9, "maigret": 9, "125": [9, 65], "357": 9, "386": 9, "1978": [9, 108], "0022283678904084": 9, "0022": 9, "78": [9, 64, 148, 149], "90408": 9, "technic": [9, 68, 109], "report": [9, 16, 19, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 165], "spidal": 9, "summer": 9, "reu": 9, "figshar": 9, "journal_contribut": 9, "technical_report_spidal_summer_reu_2018_dihedral_analysis_in_mdanalysi": 9, "6957296": 9, "6084": 9, "m9": 9, "v1": [9, 108, 162], "lovel": 9, "ian": 9, "w": [9, 19, 23, 32, 34, 36, 38, 56, 58, 60, 64, 77, 79, 100, 101, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 148], "davi": 9, "bryan": 9, "arendal": 9, "iii": [9, 108], "paul": [9, 23, 24, 98, 108], "de": [9, 105], "bakker": 9, "word": [9, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 113], "prisant": 9, "jane": 9, "richardson": 9, "\u03c8": 9, "\u03c6": 9, "c\u03b2": 9, "deviat": [9, 23, 26, 28, 34, 36, 66, 162], "437": 9, "450": 9, "prot": [9, 38, 48], "10286": 9, "rapidli": [10, 141], "sub": [10, 60, 69, 72, 73, 92, 149, 151], "awar": [10, 86, 104], "interfac": [10, 13, 16, 23, 26, 37, 58, 79, 80, 99, 105, 107, 109, 112, 118, 121], "member": [10, 13, 89, 91, 92, 109, 165], "search": [10, 19, 23, 38, 86, 99, 106, 110, 146, 165], "bigger": [10, 17, 19], "fulfil": 10, "criterion": [10, 34, 38, 111], "coord": [10, 14, 23, 74, 86, 87, 92, 99, 103, 104, 106, 146, 147], "15": [10, 23, 25, 35, 64, 65, 83, 86, 98, 109, 113, 148, 149, 165], "returntyp": 10, "contact": [10, 19, 38, 95, 106, 107, 111, 148], "There": [10, 29, 49, 55, 67, 74, 75, 78, 79, 89, 103, 120, 151], "slower": [10, 68], "larger": [10, 56, 64, 66, 76, 86, 88, 89, 98, 99, 109, 146], "spars": [10, 25], "lil_matrix": 10, "account": [10, 23, 25, 29, 35, 36, 38, 86, 90, 95, 99, 106, 113, 140], "suppress_progmet": 10, "progress_meter_freq": 10, "offset": [10, 68, 69, 72, 73, 79, 82, 100, 101, 102, 109], "id": [10, 13, 17, 24, 31, 34, 37, 38, 44, 56, 60, 64, 66, 86, 90, 91, 98, 108, 109, 113, 122, 131, 132, 133, 137, 139, 140, 147, 149], "facilit": [10, 44, 79], "comparison": [10, 11, 29, 34, 36, 86, 88, 99, 112, 113, 148], "resids_a": 10, "resids_b": 10, "distance_arrai": [10, 25, 99], "union": [10, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 95, 99, 103, 106], "_scalartype_co": [10, 99, 103, 106], "serial": [10, 64, 65, 66, 84, 86, 96, 99, 104, 105, 109, 110, 113, 125, 137, 149, 151], "imag": [10, 35, 60, 86, 91, 99, 103, 104, 106, 110, 113, 159], "orthogon": [10, 32, 48, 60, 64, 65, 86, 99, 104, 108, 109, 155], "float64": [10, 90, 99, 103, 107, 108, 146], "prealloc": [10, 99], "speed": [10, 13, 19, 29, 38, 79, 86, 99, 102, 106, 108, 110, 160, 162], "unitcel": [10, 51, 54, 58, 60, 64, 65, 69, 72, 73, 74, 75, 79, 80, 83, 86, 99, 100, 103, 106, 109], "lx": [10, 86, 99, 103, 104, 109], "lz": [10, 86, 99, 103, 104, 109], "gamma": [10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 153], "avoid": [10, 36, 38, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 99, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 156], "repeatedli": [10, 23, 99, 109], "openmp": [10, 97, 99, 110, 152], "acceler": [10, 108], "13": [10, 11, 17, 23, 33, 35, 56, 64, 65, 76, 83, 86, 99, 102, 109, 149], "hint": [10, 99, 109], "self_distance_arrai": [10, 99], "loop": [10, 13, 16, 49, 99, 102, 103], "matteo": [11, 12, 13, 14, 15, 16, 17], "tiberti": [11, 12, 13, 14, 15, 16, 17, 112], "wouter": [11, 12, 13, 14, 15, 16, 17, 80], "boomsma": [11, 12, 13, 14, 15, 16, 17, 80, 112], "tone": [11, 12, 13, 14, 15, 16, 17], "bengtsen": [11, 12, 13, 14, 15, 16, 17, 112], "2015": [11, 17, 33, 34, 37, 98, 112], "2017": [11, 38], "maintain": [11, 27, 29, 38, 39, 80, 82, 89], "gmail": 11, "mtiberti": 11, "github": [11, 23, 38, 80, 99, 165], "\u1d43lindorff": 11, "larsen2009": [11, 17], "\u1d43tiberti2015": 11, "facil": [11, 17, 18], "cluster": [11, 17, 34, 111], "multivari": [11, 17], "distribut": [11, 17, 18, 23, 37, 39, 55, 104, 111], "converg": [11, 13, 17, 29, 32, 112], "he": [11, 17, 148], "ce": [11, 17, 148], "dre": [11, 17], "ces_converg": [11, 17], "dres_converg": [11, 17], "confdistmatrix": [11, 12], "covari": [11, 17, 32], "bootstrap": [11, 17], "procedur": [11, 13, 16, 20, 23, 49], "kresten": [11, 17], "lindorff": [11, 17, 112], "larsen": [11, 17, 112], "jesper": [11, 17], "ferkinghoff": [11, 17], "borg": [11, 17], "plo": [11, 17, 34, 112], "ONE": [11, 17], "2009": [11, 17, 111, 148], "1371": [11, 17, 34, 112], "pone": [11, 17], "0004203": [11, 17], "elena": [11, 17], "papaleo": [11, 17, 112], "softwar": [11, 17, 26, 51, 58, 91, 112, 113], "quantit": [11, 17, 112], "pcbi": [11, 17, 34, 112], "1004415": [11, 17, 112], "matric": [12, 13, 14, 16, 34, 103, 110], "encor": [12, 14, 39, 112], "bootstrapped_matrix": 12, "ensemble_assign": [12, 17], "drawn": [12, 17, 23, 32], "repetit": [12, 108], "triangularmatrix": [12, 13, 14, 16, 17, 18], "dissimilar": [12, 14, 34], "long": [12, 17, 23, 29, 37, 76, 86, 90, 102, 109, 161], "this_m": 12, "get_distance_matrix_bootstrap_sampl": 12, "distance_matrix": [12, 13, 16, 17], "ncore": [12, 13, 16, 17], "independ": [12, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 90, 92, 98, 110], "get_ensemble_bootstrap_sampl": 12, "serv": [13, 16, 64], "variou": [13, 16, 25, 29, 33, 36, 47, 58, 60, 67, 79, 87, 92, 110, 145, 147], "interchang": [13, 16], "ensembl": [13, 15, 16, 28, 29, 34, 39, 86, 111, 112], "affinitypropagationn": [13, 17], "allow_collapsed_result": [13, 16, 17], "thereof": [13, 16, 79], "merg": [13, 16, 17, 18, 36, 80, 86, 92, 99], "keep": [13, 16, 17, 23, 44, 50, 58, 65, 66, 79, 86, 90, 91, 102, 103, 109, 149, 155], "track": [13, 16, 58, 86, 91], "outer": [13, 16, 25, 86, 90, 113], "explor": [13, 16, 17, 111], "fly": [13, 16, 17, 36, 55, 76, 79, 109, 152], "sever": [13, 16, 22, 24, 29, 74, 76, 86], "collaps": [13, 16, 17], "clusterscollect": [13, 17], "clusteringcollect": 13, "dcd2": [13, 16, 17], "ens1": [13, 16, 17], "ens2": [13, 16, 17], "cluster_collect": 13, "illustr": [13, 16, 17, 82], "dbscan": [13, 17], "membership": [13, 89, 90], "breviti": [13, 34], "ensemble_membership": [13, 16], "elem_list": 13, "centroid": [13, 17, 23, 86, 162, 163], "idn": 13, "4th": [13, 99], "implicitli": [13, 86], "get_centroid": 13, "get_id": 13, "nativ": [13, 16, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 111, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152], "instal": [13, 16, 17, 23, 26, 29, 34, 39, 40, 58, 67, 68, 99, 111, 112], "affinitypropag": 13, "damp": 13, "max_it": [13, 49], "convergence_it": 13, "affin": [13, 16, 17], "propag": [13, 16, 17], "unchang": [13, 44, 48, 76, 109], "achiev": [13, 24, 29, 38, 82, 109], "add_nois": 13, "nois": 13, "min_sampl": 13, "auto": [13, 34, 51, 58, 60, 68, 88, 102, 114, 115, 116, 117, 118, 119], "leaf_siz": 13, "neighborhood": [13, 16], "ball_tre": 13, "kd_tree": 13, "brute": [13, 99], "nearestneighbor": 13, "pointwis": 13, "leaf": [13, 106], "balltre": 13, "ckdtree": [13, 106], "affect": [13, 32, 49, 86], "queri": [13, 83, 86, 88, 91, 95, 104, 106, 113], "natur": [13, 17, 26, 38], "sample_weight": 13, "n_sampl": 13, "inhibit": 13, "absolut": [13, 17, 54, 86, 88, 90, 108, 109, 113, 129, 162, 163], "kmean": [13, 17], "n_cluster": 13, "n_init": 13, "init": [13, 75, 79, 109, 155], "0001": 13, "random_st": 13, "copy_x": 13, "seed": [13, 163], "consecut": [13, 24, 25, 34, 37, 49, 64, 86, 98, 109, 113], "term": [13, 40, 49, 86, 91, 113, 114, 140], "inertia": [13, 86, 90], "random": [13, 23, 26, 29, 72, 79, 82, 108, 109], "smart": [13, 23, 49, 86, 88, 113], "k_init": 13, "gaussian": [13, 17, 19], "varianc": [13, 32], "n_featur": [13, 32], "increment": [13, 38, 66, 114, 115, 116, 117, 118, 119, 147, 161], "declar": [13, 109], "randomst": 13, "numer": [13, 29, 36, 40, 60, 86, 88, 91, 105, 113, 160], "accur": [13, 29, 32, 49, 146], "introduc": [13, 35, 44, 64, 89, 149, 161], "accepts_distance_matrix": 13, "encode_centroid_info": 13, "cluster_centers_indic": 13, "cython": [13, 16, 82, 91, 99, 103, 104, 107, 110], "perturb": 13, "affinityprop": 13, "lam": 13, "max_iter": 13, "ap": [13, 37], "paper": [13, 16, 39, 67, 108, 112], "brendan": 13, "frei": [13, 108], "delbert": 13, "dueck": 13, "toronto": 13, "315": 13, "972": 13, "976": 13, "februari": 13, "triangular": [13, 14, 16, 18, 109], "notic": [13, 14, 17], "asymmetr": [13, 51, 54, 58, 60, 69, 72, 73, 75], "much": [13, 17, 58, 79, 111, 151], "reach": [13, 17, 23, 38, 42, 44, 49, 88], "ye": [13, 112, 141], "conformational_distance_matrix": 14, "conf_dist_funct": 14, "superimposition_select": 14, "n_job": [14, 18], "pairwise_align": 14, "max_nbyt": 14, "set_rmsd_matrix_el": 14, "superimposit": 14, "build": [14, 20, 25, 28, 41, 68, 89, 91, 92, 111, 114, 122, 125, 128, 130, 131, 136, 137, 139, 140, 141, 146, 150, 161], "dataset": [14, 40, 41, 49, 58], "threshold": [14, 34, 42, 58, 99], "worker": [14, 18], "trigger": [14, 86, 109], "autom": [14, 23, 109], "temp_fold": 14, "joblib": 14, "readthedoc": 14, "io": [14, 58, 68, 79, 102, 105, 109, 120], "latest": [14, 58, 165], "html": [14, 62, 102, 108, 109, 140], "conf_dist_matrix": 14, "get_distance_matrix": [14, 17], "load_matrix": [14, 17], "save_matrix": [14, 17], "superimposition_subset": 14, "conf_dist_arg": 14, "conf_dist_kwarg": 14, "retriev": [14, 32, 91], "themselv": [14, 84, 150], "signific": [14, 66, 109], "npz": [14, 17, 18, 34, 72], "bi": [14, 148], "flatten": [14, 15, 23, 34, 54, 56, 109], "meant": [14, 64], "syntax": [14, 40, 46, 86, 109, 113], "rmsdmat": 14, "fit_coord": 14, "fit_weight": 14, "trm_indic": [14, 18], "corrispond": 14, "major": [14, 18, 31, 161], "analysi": [15, 18, 41, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 87, 90, 98, 102, 107, 109, 111, 112, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 165], "covariance_matrix": 15, "shrinkage_covariance_estim": 15, "ml_covariance_estim": 15, "chose": [15, 17], "uniform": [15, 23, 68, 108], "cov_mat": 15, "reference_coordin": 15, "coordiant": [15, 66, 99], "shrinkage_paramet": 15, "shrinkag": [15, 17], "stock": 15, "applic": [15, 30, 31, 34, 35, 37, 47, 57, 58, 60, 86, 94, 102, 104, 109, 113, 155], "portfolio": 15, "ledoit": 15, "wolf": 15, "empir": 15, "financ": 15, "matlab": [15, 34], "olivi": 15, "hi": [15, 38], "websit": 15, "net": [15, 86, 90], "ole2_abstract": 15, "htm": [15, 88, 108], "nump": 15, "stochasticproximityembeddingn": [16, 17], "stochast": [16, 17, 112], "proxim": [16, 17], "princip": [16, 17, 39, 69, 86, 90, 112], "red": [16, 23], "blue": [16, 23, 34, 57], "principalcomponentanalysi": [16, 17], "pca": [16, 39], "distance_cutoff": 16, "min_lam": 16, "max_lam": 16, "ncycl": 16, "nstep": 16, "10000": 16, "cycl": [16, 23, 102], "At": [16, 23, 29, 38, 64, 68, 80, 86, 105, 113, 129, 146, 148], "stochasticproxemb": 16, "stochasticproximityembed": 16, "rco": 16, "maxlam": 16, "minlam": 16, "stressfreq": 16, "dmitrii": 16, "rassokhin": 16, "dimitri": 16, "agrafioti": [16, 107, 112], "rule": [16, 58, 86, 90, 103, 113], "graphic": [16, 23, 108, 119, 120], "22": [16, 23, 34, 48, 64, 65, 88, 98, 114, 148, 149], "133": [16, 34, 37], "140": [16, 148], "spe": [16, 17], "compos": [16, 34, 149], "lern": 16, "stress": 16, "\u1d47lindorff": 17, "\u1d47tiberti2015": 17, "38279540": 17, "04524205": 17, "computation": [17, 29], "68070702": 17, "reus": [17, 62], "densiti": [17, 23, 35, 39, 149, 160, 162], "rmsd_matrix": 17, "merge_univers": [17, 18], "later": [17, 19, 23, 58, 80, 86, 90, 101, 106, 113, 149, 165], "dimensionality_reduct": 17, "reduce_dimension": 17, "necessarili": [17, 33, 80, 113], "exactli": [17, 32, 68, 79, 102], "twice": [17, 20, 104], "jensen": 17, "shannon": 17, "diverg": 17, "ln": 17, "signifi": 17, "contrast": [17, 86, 113], "kullback": 17, "leibler": 17, "unbound": 17, "cov_estim": 17, "estimate_error": 17, "bootstrapping_sampl": 17, "calc_diagon": 17, "likelyhood": 17, "ml": 17, "thu": [17, 28, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 90, 98, 110, 151, 155, 156], "estimat": 17, "comparis": 17, "d_": 17, "kl": 17, "int_": 17, "infti": [17, 20, 29], "x_i": [17, 86], "_p": 17, "denot": 17, "everyth": [17, 23, 38, 86, 102, 111, 165], "6889": 17, "89729056": 17, "greater": [17, 20, 24, 34, 38, 58, 86, 104, 113], "doesn": [17, 64, 83, 86, 99, 104, 109, 130], "anymor": 17, "clustering_method": 17, "clusteringmethod": 17, "latter": [17, 34, 35, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 102], "arrang": [17, 38, 109], "ens3": 17, "elabor": 17, "partit": [17, 108], "popul": [17, 20, 68, 75, 92, 109, 126, 127, 136, 143], "likewis": [17, 34, 99, 113], "45": [17, 148, 149], "20447236": 17, "25331629": 17, "dimensionality_reduction_method": 17, "dimensionalityreductionmethod": 17, "nsampl": [17, 20], "1000": [17, 20, 36, 37, 79, 86, 88, 101, 102, 113, 160], "simlar": 17, "reduced_coordin": 17, "pca_method": 17, "original_ensembl": 17, "window_s": 17, "window": [17, 20, 29, 37, 98, 102, 108, 119, 120], "gradual": 17, "number_of_fram": 17, "preference_valu": 17, "split": [17, 36, 37, 49, 58, 76, 86, 88, 92, 103, 109, 132, 138, 140, 152, 153, 154, 155, 156, 157, 158, 159], "ces_conv": 17, "48194205": 17, "40284672": 17, "31699026": 17, "25220447": 17, "19829817": 17, "14642725": 17, "09911411": 17, "05667391": 17, "clustering_ensemble_similar": 17, "cc": [17, 58], "ens1_id": 17, "ens2_id": 17, "discret": [17, 34, 98], "dj": 17, "cumulative_clustering_ensemble_similar": 17, "ens1_id_min": 17, "ens2_id_min": 17, "join": [17, 38, 88, 109, 114], "compris": [17, 34], "cumulative_gen_kde_pdf": 17, "embedded_spac": 17, "nensembl": 17, "ens_id_min": 17, "ens_id_max": 17, "kde": 17, "distinguish": [17, 147], "stage": 17, "stat": [17, 29, 102], "gaussian_kd": 17, "mixtur": [17, 79], "embedded_ensembl": 17, "dimred_ensemble_similar": 17, "kde1": 17, "resamples1": 17, "kde2": 17, "resamples2": 17, "ln_p1_exp_p1": 17, "ln_p2_exp_p2": 17, "ln_p1p2_exp_p1": 17, "ln_p1p2_exp_p2": 17, "continu": [17, 20, 24, 34, 37, 48, 76, 92, 98, 108, 113, 115, 116, 117, 118, 119], "liebler": 17, "dkl": 17, "_q": 17, "discrete_jensen_shannon_diverg": 17, "pa": [17, 148], "pb": [17, 148], "discrete_kullback_leibler_diverg": 17, "p_a": 17, "p_b": 17, "akin": 17, "dres_conv": 17, "gen_kde_pdf": 17, "harmonic_ensemble_similar": 17, "sigma1": 17, "sigma2": 17, "dhe": 17, "prepare_ensembles_for_convergence_increasing_window": 17, "fed": [17, 34], "divis": [17, 67], "tmp_ensembl": 17, "write_output": 17, "base_fnam": 17, "header": [17, 60, 64, 68, 71, 79, 83, 100, 105, 110, 115, 116, 117, 118, 119, 132, 149], "dat": [17, 19, 148], "nice": 17, "stdout": 17, "concaten": [17, 29, 76, 86, 89, 99, 105, 108, 113], "basenam": 17, "parallelcalcul": 18, "request": [18, 50, 78, 79, 102, 156, 165], "nrun": [18, 20], "__call__": [18, 85, 151, 154, 157, 158, 159], "multiprocess": [18, 151, 162, 163], "manag": [18, 23, 44, 57, 58, 64, 68, 75, 77, 79, 91, 100, 101, 102, 105, 106, 112, 120, 151, 152], "queue": 18, "fetch": [18, 61, 91], "loadfil": 18, "behav": [18, 23, 44, 81, 86, 91, 100, 101, 113], "memor": 18, "though": [18, 23, 38, 44, 60, 76, 141], "as_arrai": 18, "loadz": 18, "fname": [18, 100, 101], "compress": [18, 34, 50, 55, 58, 63, 64, 65, 66, 67, 68, 73, 74, 76, 79, 101, 105, 109, 111], "savez": [18, 20], "indec": 18, "yield": [18, 33, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 101], "trm_indices_diag": 18, "trm_indices_nodiag": 18, "cutil": 18, "purermsd": 18, "coordsi": 18, "coordsj": 18, "atomsn": 18, "summass": 18, "benjamin": [19, 112], "hall": [19, 112], "ucl": 19, "uk": [19, 38, 55, 127], "hall2007": 19, "cookbook": 19, "gnmexampl": 19, "gnmanalysi": 19, "reportvector": 19, "txt": 19, "zip": [19, 37, 99, 111], "outputfil": 19, "samantha": [19, 112], "kay": [19, 112], "andi": [19, 112], "pang": [19, 112], "rafael": [19, 112], "perera": [19, 112], "biggin": [19, 112], "character": [19, 29, 98, 112], "frequenc": [19, 24, 38, 112], "american": [19, 30, 31], "societi": [19, 30, 31, 108], "129": [19, 112, 141, 149], "11394": [19, 112], "11401": [19, 112], "17715919": 19, "ja071797i": 19, "bonus_group": 19, "novel": [19, 98, 112], "monitor": [19, 20, 102], "identifi": [19, 24, 25, 26, 29, 34, 44, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 90, 104, 109, 130, 147, 150], "enm": 19, "popular": [19, 64, 79], "drug": 19, "lead": [19, 29, 38, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 109, 148, 151], "No": [19, 36, 57, 60, 78, 85, 109, 136, 138, 146, 148, 149, 151], "closecontactgnmanalysi": 19, "generate_output": 19, "privat": [19, 44], "_generate_output": 19, "parent": [19, 38, 44, 58, 85, 89], "generate_kirchoff": 19, "kirchhoff": 19, "neighbour": [19, 35, 49, 104], "kirchoff": 19, "sqrt": [19, 36, 86, 90, 103, 162], "n_j": 19, "massweight": 19, "entri": [19, 26, 28, 30, 35, 40, 44, 56, 60, 64, 66, 79, 86, 89, 90, 91, 92, 99, 106, 109, 114, 115, 116, 117, 118, 119, 136, 140, 160], "generate_grid": 19, "6x": 19, "smallish": 19, "order_list": 19, "scrambl": 19, "backup_fil": 19, "richard": [20, 21, 29, 33, 98], "gower": [20, 21, 33, 98, 112], "2014": [20, 21, 23, 26, 37, 67, 98, 112, 162, 163], "hbond": [20, 24, 38, 39, 48, 98], "c_x": 20, "startpoint": 20, "t_0": [20, 29, 37, 98], "geometr": [20, 24, 34, 37, 38, 86], "criteria": [20, 24, 51, 54, 58, 60, 69, 72, 73, 75], "lifetim": [20, 24, 37, 72, 98], "behaviour": [20, 37, 38, 42, 49, 51, 56, 68, 78, 86, 88, 91, 98, 109, 113, 156], "h_": 20, "subscript": 20, "intermitt": [20, 24, 37, 110], "attach": [20, 40, 42, 79, 86, 90, 92, 109], "whilst": [20, 68, 79, 98], "break": [20, 34, 60, 86, 103, 159], "subsequ": [20, 24, 29, 64, 80, 104, 151, 155], "reform": 20, "tau_x": 20, "int_0": [20, 35], "dt": [20, 29, 37, 42, 44, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 88], "exponenti": [20, 33, 102], "expon": 20, "a_1": 20, "exp": [20, 33, 88, 160], "tau_1": 20, "a_2": 20, "tau_2": 20, "a_3": 20, "tau_3": 20, "expoenti": 20, "a_n": 20, "limits_": 20, "a_i": [20, 33], "gowers2015": [20, 98], "donor": [20, 24, 38, 149], "acceptor": [20, 24, 38, 149], "wish": [20, 23, 48, 74, 92, 99], "find_hydrogen_donor": 20, "waterpsf": 20, "waterdcd": 20, "isn": [20, 32, 58, 105], "present": [20, 23, 24, 37, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 71, 72, 73, 74, 75, 79, 80, 83, 86, 89, 90, 91, 98, 103, 125, 130, 131, 134, 136, 138, 140], "sol": [20, 23, 24, 37, 38, 48, 56, 86, 92, 131, 149], "dummi": [20, 92, 148], "address": [20, 58], "hidx": 20, "aidx": 20, "permit": [20, 109], "consider": [20, 24, 29, 98], "strictli": [20, 56, 58, 76, 83], "intermolecular": [20, 148], "dist_crit": 20, "angle_crit": 20, "sample_tim": 20, "control": [20, 23, 26, 29, 38, 42, 49, 88, 105, 108, 113, 141, 151], "curv": [20, 34], "a1": [20, 35, 65], "tau1": [20, 37], "tau2": [20, 37], "a2": [20, 35, 65], "tau3": 20, "tau": [20, 24, 29, 37, 98], "solv": [20, 32], "130": [20, 113], "gather": [20, 23], "reli": [20, 66, 75, 98, 146], "frequent": [20, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trz_psf": [20, 33], "trz": [20, 33, 79, 82, 84], "hn": [20, 38], "hb_ac": 20, "hydrogenbondautocorrel": 20, "bond_typ": 20, "equat": [20, 155], "grab": 20, "ro": 20, "time_cut": 20, "connect": [20, 25, 34, 35, 38, 64, 65, 71, 86, 90, 91, 92, 99, 109, 111, 137, 138, 141, 142, 147, 149], "ie": [20, 33, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 91, 92, 103, 146], "mask": [20, 35, 68, 75, 79, 86, 109], "amount": [20, 32, 38, 48, 68, 90, 151], "versionchang": [20, 23, 34, 38, 60, 64, 86, 89, 90, 91, 107, 144, 146], "save_result": [20, 34], "p_guess": 20, "decai": [20, 33, 37], "leastsq": 20, "coeffici": [20, 29, 33, 37, 48, 155], "defit": 20, "tripl": [20, 49, 103, 108], "infodict": 20, "mesg": 20, "ier": 20, "hydrogenbond": [21, 37, 39, 112], "lili": [22, 23], "wang": [22, 23], "bansal2000": 22, "sugeta1967": 22, "quantifi": [22, 34, 112], "c\u03b1": 22, "twist": [22, 26], "rise": [22, 26, 37], "virtual": [22, 76, 86, 92, 108, 146, 149], "torsion": [22, 31, 39, 65, 91, 141, 147], "helix": [22, 112], "bend": [22, 141], "success": [22, 49, 57, 58, 68, 77, 82, 105, 108], "sugeta": 22, "miyazawa": 22, "1967": 22, "bond": [22, 23, 31, 32, 33, 35, 37, 38, 40, 48, 49, 60, 62, 64, 71, 85, 86, 90, 91, 92, 98, 99, 103, 112, 113, 125, 129, 130, 131, 133, 134, 136, 139, 140, 141, 142, 146, 149, 150, 159], "biopolym": 22, "673": 22, "679": 22, "bansal": [22, 112], "kumar": [22, 34, 112], "velavan": [22, 112], "2000": [22, 79, 108, 112], "characteris": [22, 112], "biomol": [22, 112], "struct": [22, 112], "dyn": [22, 112], "811": [22, 112, 148], "819": [22, 112], "helix_analysi": 22, "hel": 22, "resnum": [22, 36, 49, 86, 90, 92, 113, 122, 133, 141, 147], "161": 22, "187": [22, 51], "summari": [22, 112], "helanal2": 22, "160": [22, 36, 111], "200": [22, 44, 49, 108, 148], "230": 22, "carri": [22, 37, 39, 108, 160, 164], "hel_xyz": 22, "ref_axi": 22, "smart1993": 23, "smart1996": 23, "ion": [23, 37, 109, 113, 146], "channel": [23, 86, 90, 165], "pore": 23, "transport": [23, 29], "stelzl2014": 23, "holeprogram": 23, "osmart": 23, "apach": 23, "ex": 23, "pdb_hole": 23, "profil": [23, 27, 28, 111], "create_vmd_surfac": 23, "visualis": [23, 33], "tk": 23, "consol": [23, 37, 102], "sphpdb": 23, "sph": 23, "waal": [23, 146, 148], "radii": [23, 38, 66, 86, 90, 129, 130, 138, 146, 147, 148], "vdwradii_fil": 23, "simple2": 23, "rad": [23, 99], "symlink": 23, "infil": 23, "keep_fil": 23, "delet": [23, 64, 92], "wrong": [23, 51, 88, 108, 109, 113, 146], "mind": [23, 57, 86], "holeanalysi": 23, "cpoint": 23, "cvect": 23, "becom": [23, 32, 33, 35, 40, 56, 68, 80, 86, 109, 137, 157, 160], "runtim": [23, 68], "multipdb_hol": 23, "h2": [23, 24, 31, 49, 62], "delete_temporary_fil": 23, "temporari": [23, 86], "sos_triangl": 23, "displai": [23, 58, 80, 91, 102, 109, 112], "triangul": 23, "anim": 23, "hole_surfac": 23, "tcl": [23, 86, 119, 120], "hole_surface_subsampl": 23, "command": [23, 26, 39, 60, 86, 92, 111, 112, 120, 165], "stride": [23, 67, 79, 109], "inclus": [23, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 113], "come": [23, 38, 64, 79, 92, 111, 146, 151], "prmtop": [23, 24, 68, 147, 150], "frame0": 23, "trim": 23, "line": [23, 24, 29, 37, 41, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 80, 99, 100, 101, 102, 105, 109, 114, 115, 116, 117, 118, 119, 125, 131, 136, 137, 138, 140, 148, 162, 163], "menu": 23, "beg": 23, "render": [23, 34, 86], "caviti": [23, 37], "pdbfile": [23, 26, 47, 92], "card": [23, 50, 79, 111, 122, 147], "brookhaven": [23, 26, 79, 111, 147], "databank": [23, 26, 111], "someth": [23, 26, 37, 44, 102, 109, 114], "hetatm": [23, 64, 65, 66, 86, 90, 136, 137, 138], "record": [23, 38, 44, 51, 60, 62, 64, 65, 68, 74, 83, 86, 90, 102, 113, 134, 136, 137, 138, 140, 146, 147, 148], "infile_text": 23, "outfil": 23, "pars": [23, 26, 40, 48, 49, 56, 60, 62, 64, 67, 86, 88, 93, 113, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 162, 163], "collect_hol": 23, "sphpdb_file": 23, "sphere": [23, 37, 86, 113], "occup": [23, 49, 64, 65, 90, 125, 133, 136, 137, 147], "qss": 23, "dot": [23, 103, 108, 109, 113], "sph_process": 23, "simple2_rad": 23, "bare": 23, "suffici": [23, 37, 38, 44, 51, 60, 80, 88, 146], "tmpdir": 23, "shorten": 23, "purpos": [23, 109], "tight": [23, 102], "constrict": 23, "smaller": [23, 28, 32, 34, 64, 66, 98, 104], "end_radiu": 23, "center_of_geometri": [23, 25, 86], "55": [23, 38, 49, 64, 65, 86, 92, 105, 146, 148, 149], "li": [23, 86, 99, 104, 106, 148], "gramicidin": 23, "great": [23, 80], "sensit": [23, 34, 49, 86, 113, 131], "easi": [23, 40, 102, 112], "lie": [23, 86, 99, 103], "Or": [23, 44, 83, 86], "counter": [23, 102], "ignore_residu": 23, "refin": 23, "far": [23, 156], "infal": 23, "random_se": 23, "dai": 23, "reproduc": 23, "dure": [23, 38, 40, 41, 44, 49, 72, 74, 77, 82, 86, 90, 104, 106, 109, 129, 155, 156], "wildcard": 23, "hand": [23, 37, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 89, 90, 114], "output_level": 23, "contemporari": 23, "ditto": 23, "plu": 23, "conduct": [23, 165], "mirror": [23, 108], "charmm": [23, 30, 31, 50, 51, 60, 64, 66, 68, 79, 86, 88, 92, 100, 111, 113, 114, 120, 122, 139, 140, 146, 147, 148, 150, 160, 165], "tag": [23, 34, 39, 54, 102, 165], "grep": 23, "dcd_step": 23, "dcd_iniskip": 23, "recarrai": [23, 26, 38], "picki": 23, "doubt": 23, "diagnost": 23, "mdakit": 23, "wat": 23, "tip": 23, "hoh": 23, "cl": [23, 83, 109, 148], "write_input_fil": 23, "logfil": [23, 26, 102], "inp": 23, "arrau": 23, "versionad": [23, 60, 83, 86, 90, 91, 92, 98, 138, 144, 146], "bin_radii": 23, "width": [23, 28, 34, 56, 66, 74, 102, 109], "monoton": [23, 58, 76], "rightmost": [23, 108], "min": [23, 51, 54, 58, 60, 69, 72, 73, 75, 104, 109], "max": [23, 29, 34, 51, 54, 58, 60, 69, 72, 73, 75, 86, 88, 100, 104, 109, 113, 162], "dot_dens": 23, "no_water_color": 23, "one_water_color": 23, "green": [23, 29], "double_water_color": 23, "smooth": [23, 102], "facet": 23, "mont": [23, 160], "carlo": [23, 160], "flat": [23, 34, 38, 107, 149, 162], "field": [23, 30, 31, 37, 40, 41, 54, 56, 64, 65, 66, 68, 74, 79, 86, 88, 105, 111, 113, 125, 132, 133, 134, 140, 149, 162, 163], "guess_cpoint": 23, "histogram_radii": 23, "aggreg": [23, 38, 58], "min_radiu": 23, "over_order_paramet": 23, "order_paramet": 23, "ordereddict": 23, "cmap": [23, 86, 90, 91, 149], "viridi": 23, "linestyl": 23, "y_shift": 23, "legend_loc": 23, "zeta": [23, 31], "displac": [23, 32, 37, 39, 112, 162, 163], "clearer": 23, "plot3d": [23, 26], "r_max": 23, "stack": [23, 26, 35], "axes3d": 23, "plot3d_order_paramet": 23, "mpl_toolkit": 23, "mplot3d": 23, "plot_mean_profil": 23, "fill_alpha": 23, "n_std": 23, "opac": 23, "area": 23, "plot_order_paramet": 23, "aa": [23, 36, 38, 88, 109, 111, 148, 162], "goodfellow": 23, "wallac": 23, "biophys": [23, 98, 112], "65": [23, 32, 148, 149], "2455": 23, "2460": 23, "1993": 23, "s0006": 23, "3495": 23, "93": [23, 148, 149], "81293": 23, "joseph": [23, 162, 163], "neduvelil": 23, "xiaonan": 23, "mark": [23, 76, 120, 162, 163], "sansom": [23, 112, 162, 163], "14": [23, 28, 36, 48, 60, 64, 65, 78, 83, 86, 113, 148, 149, 160], "354": 23, "1996": [23, 37, 148], "s0263": 23, "7855": 23, "97": [23, 148], "00009": 23, "luka": 23, "stelzl": 23, "fowler": 23, "gate": 23, "occlud": 23, "laci": 23, "426": [23, 65], "735": 23, "751": 23, "jmb": [23, 111], "024": [23, 65], "andcr": 23, "eat": 23, "extra": [23, 38, 66, 70, 92, 147], "principl": [23, 68, 80], "patchi": 23, "recogn": [23, 58, 60, 64, 68, 78, 79, 84, 86, 88, 109, 141, 146, 149, 150], "overcom": 23, "check_and_fix_long_filenam": 23, "max_length": 23, "70": [23, 148, 149], "make_symlink": 23, "relpath": 23, "safe": [23, 58, 75], "short": [23, 29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 111], "tmp": 23, "curdir": 23, "trick": [23, 32], "recompil": 23, "run_hol": 23, "set_up_hole_input": 23, "write_simplerad2": 23, "nremark": 23, "57": [23, 86, 149], "ob": 23, "amber": [23, 38, 59, 79, 84, 88, 90, 92, 131, 146, 147, 148, 150, 160, 165], "weiner": 23, "et": [23, 148], "al": [23, 108, 148], "1984": [23, 90], "jac": [23, 112], "vol": 23, "106": [23, 148], "pp765": 23, "768": 23, "nvdwr": 23, "85": [23, 148, 149], "00": [23, 62, 65, 102, 109], "asn": [23, 38], "gln": [23, 38, 113], "odd": [23, 56, 108], "xplor": [23, 92, 111, 139, 147], "e2": [23, 86, 90], "d2": 23, "lone": [23, 109], "sulphur": 23, "lp": [23, 33], "funni": 23, "hydrat": [23, 113], "hill": 23, "2001": 23, "81": [23, 109, 149], "hydrogen": [23, 31, 33, 37, 38, 48, 49, 62, 86, 92, 98, 112, 113, 140, 146], "ga": [23, 108, 148], "1h": 23, "2h": 23, "3h": 23, "molqpt": 23, "nbond": 23, "2002": [23, 32], "smith": [24, 98, 112], "2019": [24, 98, 112, 141], "plugin": [24, 74, 100], "donors_sel": 24, "hydrogens_sel": 24, "acceptors_sel": 24, "d_h_cutoff": 24, "d_a_cutoff": 24, "d_h_a_angle_cutoff": 24, "update_select": [24, 38, 86], "hba": 24, "tip3": 24, "h1": [24, 49, 62, 146], "oh2": [24, 37, 38, 87], "guess_hydrogen": 24, "guess_acceptor": 24, "prior": [24, 34, 76, 98, 141], "slightli": [24, 58, 79], "protein_hydrogens_sel": 24, "protein_acceptors_sel": 24, "water_hydrogens_sel": 24, "water_acceptors_sel": 24, "tau_timeseri": [24, 37, 98], "correctli": [24, 29, 32, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 91, 109, 112, 125, 136], "absent": [24, 54, 86, 98, 113], "identif": [24, 31, 38, 39], "interact": [24, 37, 38, 90, 91, 111, 112, 140, 141, 149, 151], "count_by_id": 24, "uniqu": [24, 27, 34, 51, 86, 89, 90, 109, 113, 140, 160], "occurr": 24, "count_by_tim": 24, "count_by_typ": 24, "max_charg": 24, "o1": [24, 65], "potential_acceptor": 24, "capabl": [24, 27, 68, 79, 135], "particip": [24, 38], "quickli": [24, 32, 66], "guess_donor": 24, "potential_donor": 24, "max_mass": 24, "min_charg": 24, "min_mass": 24, "potential_hydrogen": 24, "tau_max": [24, 37, 98], "window_step": [24, 98], "autocorrel": [24, 33, 37, 39, 110], "hydrogenbondlifetim": 24, "That": [24, 29, 36, 37, 42], "yet": [24, 37, 58, 88, 94, 108, 152], "autcorrel": 24, "leafletfind": 25, "michaud": [25, 112, 165], "agrawal2011": [25, 112, 165], "lipid": [25, 37, 86, 98, 111, 112, 113, 120, 162, 163], "bilay": [25, 98, 111, 120], "planar": 25, "undul": 25, "vesicl": [25, 163], "membran": [25, 37, 98, 111, 112, 154, 162, 163], "inner": [25, 32, 86, 107, 108, 113], "radius_of_gyr": [25, 86, 90, 111], "script": [25, 66, 111, 117, 118, 151, 160], "mdanalysiscookbook": 25, "optimize_cutoff": 25, "slow": [25, 37, 49, 68, 101, 102, 106], "heurist": [25, 109], "phosphat": 25, "subgraph": 25, "head": 25, "po4": [25, 162, 163], "deem": 25, "fastest": [25, 105], "routin": [25, 56, 99], "leaflet0": 25, "leaflet1": 25, "longer": [25, 38, 48, 52, 64, 68, 70, 74, 86, 113, 131, 140], "component_index": 25, "groups_it": 25, "write_select": [25, 86], "pml": [25, 86, 118, 120], "ndx": [25, 86, 116, 120], "gromac": [25, 29, 38, 40, 41, 44, 56, 58, 67, 69, 72, 73, 76, 79, 86, 88, 92, 103, 104, 110, 111, 114, 120, 128, 131, 138, 147, 148, 149, 150, 162, 163, 165], "selectionwrit": [25, 114, 115, 116, 117, 118, 119, 120], "dmin": 25, "dmax": 25, "max_imbal": 25, "disconnect": 25, "n_0": 25, "n_1": 25, "mathrm": [25, 28, 86, 90, 160], "pick": [25, 69, 72, 73, 108, 120], "balanc": 25, "scan": [25, 60], "stepsiz": 25, "optimum": 25, "die": 25, "realli": [25, 38, 68, 149], "ought": 25, "robust": 25, "elizabeth": [26, 30, 31], "den": [26, 30, 31, 111, 112], "restrict": [26, 37, 79, 103, 109, 141, 149], "unmaintain": 26, "906": 26, "help": [26, 109, 111, 113], "lu2003": 26, "lu2008": 26, "xiang": 26, "jun": 26, "lu": [26, 148], "wilma": 26, "olson": 26, "3dna": 26, "rebuild": [26, 49], "5108": 26, "5121": 26, "09": [26, 111, 160], "gkg680": 26, "versatil": 26, "protocol": [26, 40, 75, 100, 101], "1213": 26, "1227": 26, "1038": 26, "nprot": 26, "104": [26, 112], "dna": 26, "x3dnatraj": 26, "pdb_x3dna": 26, "bashrc": 26, "x3dna_ensembl": 26, "355d": 26, "bp": [26, 31], "basepair": [26, 30, 31], "shear": [26, 108], "stretch": 26, "stagger": 26, "buckl": 26, "propel": 26, "slide": [26, 49], "tilt": 26, "roll": [26, 92], "xdna_ensembl": 26, "opt": 26, "instruct": [26, 29, 32, 39, 58, 99], "x3dna_param": 26, "bp_step": 26, "par": 26, "deal": [26, 44, 46, 79, 129, 134, 147], "outdir": 26, "gzip": [26, 58, 64, 68, 74, 79, 105, 109, 111], "mean_std": 26, "bass": 26, "png": [26, 34, 162, 163], "parameter_nam": 26, "cpickl": 26, "sorted_profiles_it": 26, "std": 26, "understood": [26, 79, 86, 90, 113], "sequenti": [26, 34, 56, 66, 79, 90, 113, 137, 147, 155, 156], "run_x3dna": 26, "applicationerror": [26, 94], "regularli": 27, "nevertheless": [27, 72], "sometim": [27, 29, 38, 64, 72, 83, 151], "discuss": [27, 68, 79, 89, 108, 112, 141, 162, 163, 165], "743": 27, "x3dna": 27, "helicoid": 27, "orthoromb": 28, "canon": [28, 79, 86, 113], "nvt": 28, "binsiz": 28, "25": [28, 32, 64, 65, 66, 86, 108, 148, 149], "segment": [28, 29, 31, 35, 76, 86, 88, 89, 90, 92, 94, 95, 113, 122, 124, 126, 127, 133, 141, 143, 147, 159], "resolut": [28, 86, 113, 163], "mass_dens": 28, "mass_density_stddev": 28, "charge_dens": 28, "charge_density_stddev": 28, "po": [28, 54, 56, 148], "pos_std": 28, "char": [28, 95, 109], "char_std": 28, "slice_volum": 28, "hist_bin_edg": 28, "futur": [28, 29, 49, 86, 113, 140, 148, 160], "lden": 28, "bug": [28, 68, 104, 161, 165], "caus": [28, 40, 42, 74, 86, 103, 113, 159], "previous": [28, 32, 39, 40, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 106, 146, 160], "histrogram": 28, "onward": [28, 142, 151], "docstr": [28, 34, 109], "hugo": 29, "macdermott": 29, "opeskin": 29, "einstein": [29, 155], "relat": [29, 34, 38, 40, 86, 99, 108, 155], "brownian": 29, "motion": [29, 32, 112, 154, 155], "behind": [29, 111], "maginn2018": 29, "express": [29, 54, 86, 88, 113], "formula": [29, 112, 160], "bigg": 29, "sum_": [29, 35, 36, 37, 86, 90], "t_": 29, "vari": [29, 42, 58, 64, 77, 129], "lag": [29, 37, 98, 102], "le": [29, 86, 90, 149], "tau_": 29, "therebi": 29, "maxim": [29, 34], "intens": 29, "fourier": [29, 141, 149], "fft": 29, "calandri2011": [29, 112], "buyl2018": [29, 112], "tidynam": [29, 112], "importerror": [29, 40, 67, 68], "citat": [29, 164], "unwrap": [29, 36, 60, 86, 90, 103, 151, 157], "despit": [29, 91, 156], "plan": [29, 109], "meantim": 29, "gmx": 29, "trjconv": 29, "nojump": [29, 151], "flag": [29, 60, 67, 75, 80, 83, 86, 100, 106, 109, 131, 140, 147, 154], "movement": [29, 36, 37, 44], "undergo": 29, "walk": 29, "random_walk": 29, "random_walk_topo": 29, "einsteinmsd": 29, "msd_type": 29, "let": [29, 34, 58], "lagtim": 29, "lc": 29, "black": 29, "slope": 29, "middl": 29, "ballist": 29, "poorli": [29, 51], "confirm": 29, "reccomend": 29, "loglog": 29, "d_d": 29, "lim_": 29, "60": [29, 36, 47, 64, 65, 149], "linregress": 29, "start_tim": 29, "start_index": 29, "end_tim": 29, "linear_model": 29, "end_index": 29, "stderr": [29, 102], "dim_fac": 29, "msd1": 29, "msd2": 29, "u1": [29, 92, 160, 162], "u2": [29, 48, 80, 92, 160], "combined_msd": 29, "msds_by_particl": 29, "average_msd": 29, "replica": 29, "jump": [29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 151], "artifici": 29, "inflat": 29, "henc": [29, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 84, 100, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 160], "elaps": [29, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "addition": [29, 37, 42, 44, 67, 100, 101], "finit": 29, "effect": [29, 32, 35, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 81, 92, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "emploi": [29, 51, 92, 99], "yeh2004": 29, "von": 29, "b\u00fclow2020": 29, "review": 29, "pitfal": 29, "kubo": 29, "prove": 29, "judici": 29, "incorpor": [29, 86, 90], "edward": [29, 37], "maginn": 29, "messerli": 29, "daniel": [29, 67], "carlson": 29, "roe": 29, "elliot": 29, "viscos": 29, "live": 29, "6324": 29, "dec": [29, 62], "livecomsjourn": 29, "php": 29, "livecom": 29, "view": [29, 80, 83, 91, 109], "v1i1e6324": 29, "33011": 29, "chul": 29, "yeh": [29, 37], "108": [29, 37, 112], "15873": 29, "15879": 29, "2004": [29, 37, 112], "jp0477147": 29, "s\u00f6ren": 29, "b\u00fclow": 29, "jakob": 29, "t\u00f3ma": 29, "bullerjahn": 29, "systemat": 29, "pressur": [29, 40, 67, 70, 149, 155], "153": 29, "021101": 29, "0008316": 29, "xy": [29, 99, 154], "yz": [29, 154], "xz": [29, 154], "n_particl": 29, "lescouli": 30, "licenc": [30, 104, 107, 108, 165], "\u1d47denning2011": 30, "\u1d47denning2012": 30, "deva": [30, 31], "priyakumar": [30, 31], "lennart": [30, 31], "nilsson": [30, 31], "alexand": [30, 31], "mackerel": [30, 31], "jr": [30, 31], "impact": [30, 31, 102], "hydroxyl": [30, 31, 38], "rna": [30, 31], "1929": [30, 31], "1943": [30, 31], "21777": [30, 31], "intrins": [30, 31, 90, 99], "contribut": [30, 31, 32, 38, 39, 68], "heterogen": [30, 31, 98], "2800": [30, 31], "2806": [30, 31], "2012": [30, 31], "22242623": [30, 31], "ja211328g": [30, 31], "nucpairdist": 30, "selection1": [30, 38], "selection2": [30, 38], "superclass": 30, "pair_dist": 30, "watsoncrickdist": 30, "strand1": 30, "strand2": 30, "n1_name": 30, "n1": [30, 31, 88, 109], "n3_name": 30, "n3": [30, 31, 38, 88], "g_name": 30, "a_nam": 30, "u_nam": 30, "t_name": 30, "watson": [30, 31], "crick": [30, 31], "nitrogen": [30, 31, 86, 113], "guanin": 30, "adenin": 30, "uracil": 30, "thymin": 30, "cytosin": [30, 38], "strand": 30, "chi": 31, "AS": 31, "cp": 31, "c2": [31, 62, 86, 88, 113], "o2": [31, 38, 65, 88], "n6": [31, 88], "o4": [31, 65, 88], "o6": [31, 88], "n4": [31, 88], "\u1d43denning2011": 31, "\u1d43denning2012": 31, "question": [31, 58, 109, 165], "wc_pair": 31, "seg1": 31, "seg2": 31, "failur": 31, "occur": [31, 35, 36, 82, 86, 113, 134], "minor_pair": 31, "minor": [31, 161], "groov": 31, "major_pair": 31, "phase_cp": 31, "seg": [31, 86, 113], "pseudo": [31, 104, 108, 109], "ribos": 31, "pucker": 31, "ring": [31, 49, 86, 113, 140], "phase_a": 31, "tor": 31, "tors_alpha": 31, "tors_beta": 31, "tors_gamma": 31, "tors_delta": 31, "tors_ep": 31, "tors_zeta": 31, "tors_chi": 31, "c1": [31, 62, 88], "hydroxyl_angl": 31, "pseudo_dihe_baseflip": 31, "bp1": 31, "bp2": 31, "seg3": 31, "flip": [31, 38, 98], "segid1": 31, "segid": [31, 49, 64, 65, 66, 86, 88, 89, 90, 111, 113, 122, 124, 125, 131, 133, 136, 137, 138, 139, 141, 147], "segid2": 31, "segid3": 31, "descend": [32, 34], "cumulated_vari": 32, "ratio": [32, 34], "significantli": [32, 73], "psf_pca": 32, "retain": [32, 49, 75, 76, 82, 109], "percent": 32, "cumul": [32, 35, 76], "ith": 32, "n_pc": 32, "pca_spac": 32, "n_compon": 32, "conclus": 32, "decreas": 32, "p_compon": 32, "percentag": [32, 38, 58, 102], "chosen": [32, 37, 64, 78, 86, 90, 113], "sped": [32, 80], "precalcul": 32, "0th": [32, 34], "mean_atom": 32, "did": [32, 58], "cumulative_overlap": [32, 112], "subspac": 32, "yang2008": [32, 112], "mutual": [32, 34], "project_single_fram": 32, "anchor": [32, 86, 103], "pc": [32, 55], "extrapol": 32, "atomselect": [32, 118, 119, 120], "captur": [32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75], "_i": [32, 33, 35, 36, 86, 90], "w_": 32, "textbf": 32, "3r": 32, "broadcast": 32, "fanci": [32, 58, 75], "index_extrapol": 32, "add_transform": [32, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 151, 152, 153, 154, 155, 156, 159], "rmsip": [32, 112], "product": [32, 36, 86, 90, 103, 107], "amadei1999": [32, 112], "leo": [32, 112], "macias2004": [32, 112], "first_interv": 32, "second_interv": 32, "last_interv": 32, "38147609331128324": 32, "17478244043688052": 32, "cosine_cont": 32, "cosin": [32, 37, 51], "hess2002": 32, "pca_compon": 32, "agreement": 32, "disagr": 32, "berk": 32, "hess": 32, "phy": [32, 112, 148], "rev": 32, "031910": 32, "mar": 32, "1103": 32, "physrev": 32, "transpos": [32, 36, 108], "commonli": [33, 64, 155], "persistencelength": 33, "persist": [33, 34, 58, 72], "decorrel": 33, "co": [33, 37, 38, 51, 112, 148, 160], "theta_": 33, "approx": 33, "l_b": 33, "l_p": 33, "bond_autocorrel": 33, "lb": 33, "predict": 33, "sort_backbon": 33, "melt": 33, "polyamid": [33, 98], "sorted_backbon": 33, "bb": [33, 36, 111], "persistence_length": 33, "perform_fit": 33, "fit_exponential_decai": 33, "rearrang": [33, 56], "sean": 34, "seyler": [34, 112], "hausdorff": 34, "fr\u00e9chet": 34, "seyler2015": 34, "nonneg": 34, "snapshot": [34, 78], "loos": [34, 66, 74], "speak": 34, "glanc": 34, "pattern": [34, 49, 58, 111], "triangl": 34, "inequ": 34, "psanalysistutori": 34, "outlin": 34, "heat": [34, 48], "dendrogram": 34, "hierarch": 34, "avishek": 34, "thorp": [34, 112], "macromolecular": [34, 61, 79, 107, 112, 133, 147], "1004568": [34, 112], "sqnorm": 34, "zeroth": 34, "get_msd_matrix": 34, "msd": [34, 37, 39, 112], "n_p": 34, "n_q": 34, "msd_matrix": 34, "m_": 34, "p_i": 34, "q_j": 34, "get_coord_ax": 34, "1st": [34, 99], "2nd": [34, 99], "get_path_metric_func": 34, "path_metr": 34, "l2": 34, "norm": [34, 35, 99, 103, 111], "revers": [34, 40, 91, 155], "halv": 34, "mid": [34, 86, 103, 159], "half": [34, 86, 99, 104, 155], "778663899862152": 34, "directed_hausdorff": 34, "earli": 34, "taha2015": 34, "abdel": 34, "aziz": 34, "taha": 34, "allan": 34, "hanburi": 34, "ieee": 34, "transact": 34, "machin": [34, 70, 99], "intellig": 34, "2153": 34, "2163": 34, "1109": 34, "tpami": 34, "2408351": 34, "hausdorff_wavg": 34, "5669644353703447": 34, "avg": 34, "obei": 34, "hausdorff_avg": 34, "bias": 34, "toward": [34, 160], "5669646575869005": 34, "hausdorff_neighbor": 34, "farthest": 34, "sens": [34, 35, 144], "discrete_frechet": 34, "778663984013591": 34, "frechet": 34, "842901117711383": 34, "fr\u00e8chet1906": 34, "alt1995": 34, "eiter1994": 34, "eiter1997": 34, "mauric": 34, "fr\u00e8chet": 34, "sur": 34, "quelqu": 34, "du": [34, 88], "fonctionnel": 34, "rendiconti": 34, "del": [34, 44, 102, 109], "circolo": 34, "matematico": 34, "di": [34, 80, 149], "1884": 34, "1940": 34, "72": [34, 83, 86, 148, 149], "1906": 34, "1007": 34, "bf03018603": 34, "helmut": 34, "alt": 34, "godau": 34, "polygon": 34, "05": [34, 49, 86, 88, 98, 108], "01n02": 34, "91": [34, 148, 149], "1995": 34, "1142": 34, "s0218195995000064": 34, "thoma": [34, 108], "eiter": 34, "heikki": 34, "mannila": 34, "1994": [34, 37, 108], "informatica": 34, "109": 34, "1997": 34, "s002360050075": 34, "dist_mat_to_vec": 34, "path_select": 34, "psanalysi": 34, "selection_str": 34, "u_origin": 34, "u_refer": 34, "u_fit": 34, "fit_to_refer": 34, "postfix": [34, 102], "_fit": 34, "rmsdfile": 34, "targetdir": 34, "refactor": [34, 36, 86, 90], "get_num_atom": 34, "to_path": 34, "unpack": [34, 109, 149], "top_nam": 34, "newtraj_nam": 34, "topology_trajectori": 34, "els": [34, 38, 49, 64, 66, 68, 86, 107, 109], "overridden": 34, "psapair": 34, "npath": 34, "compute_nearest_neighbor": 34, "nearest_neighbor": 34, "find_hausdorff_pair": 34, "overal": 34, "hausdorff_pair": 34, "encapsul": 34, "among": [34, 104], "math": [34, 37, 86, 108, 110], "ext": [34, 50, 109, 115, 116, 117, 118, 119, 139], "summar": 34, "matrix_id": 34, "pair_id": 34, "th": [34, 35, 37, 83, 99, 103, 148], "psadata": 34, "dist_mat": 34, "ward": 34, "count_sort": 34, "distance_sort": 34, "no_plot": 34, "no_label": 34, "color_threshold": 34, "heatmap": 34, "hierarchi": [34, 58, 93], "linkag": [34, 38], "squareform": 34, "link": [34, 38, 40, 68, 99, 112, 140], "node": [34, 38, 103, 130], "tm": [34, 148], "dgram": 34, "generate_path": 34, "infix": 34, "insert": [34, 64, 65, 68, 90, 125, 138], "trj_fit": 34, "subdirectori": 34, "xxx": [34, 148], "_psa": 34, "000": [34, 62, 125, 136], "999": [34, 50, 56, 66, 86, 125, 136, 148], "get_num_path": 34, "get_pairwise_dist": 34, "vectorform": 34, "get_path": 34, "psa_pair": 34, "run_pairs_analysi": 34, "psa_path": 34, "pkl": 34, "save_path": 34, "labels": 34, "uses": 34, "pdf": [34, 36, 37, 62, 108], "matshow": 34, "vertic": 34, "inch": 34, "font": 34, "colorbar": 34, "dist_matrix_clu": 34, "reorder": 34, "tick1on": 34, "tick2on": 34, "label1on": 34, "label2on": 34, "tick1lin": 34, "tick2lin": 34, "label1": 34, "label2": 34, "upstream": [34, 67], "2493": 34, "plot_annotated_heatmap": 34, "annot_s": 34, "imshow": 34, "seaborn": 34, "pip": [34, 39, 58, 112], "conda": [34, 39, 68], "plot_nearest_neighbor": 34, "idx": [34, 38, 89], "multiplot": 34, "aspect_ratio": 34, "height": [34, 102], "partial": [34, 60, 65, 79, 92, 136, 137, 140, 146, 147, 151], "nn": [34, 148], "hp": 34, "pp": [34, 112], "savez_compress": 34, "g_": 35, "ab": [35, 67, 86, 103, 105, 113], "n_": 35, "n_a": [35, 160], "n_b": 35, "_j": 35, "homogen": [35, 86, 110], "shell": [35, 38, 68, 86, 111], "dr": 35, "rho": [35, 36, 160], "solvat": [35, 38, 86, 90, 111], "r_1": [35, 146], "interrdf": 35, "nbin": [35, 109], "exclusion_block": 35, "exclude_sam": 35, "suppos": [35, 38, 51, 54, 58, 60, 69, 72, 73, 75, 155], "b1": 35, "b2": 35, "spheric": [35, 113, 163], "tile": 35, "intend": [35, 90, 102, 109], "interrdf_": 35, "superfl": 35, "opposit": [35, 86, 89, 99], "offici": [35, 54, 83], "cdf": 35, "get_cdf": 35, "gro_memprot": 35, "xtc_memprot": 35, "s1": [35, 108], "znd": 35, "289": 35, "s2": 35, "od1": [35, 38], "od2": [35, 38], "sphzone": [35, 37, 86, 113], "s3": 35, "291": 35, "292": 35, "s4": 35, "dotson": [36, 112], "rmsf": 36, "coordinat": 36, "investig": [36, 98], "lid": 36, "nmp": 36, "crd": [36, 68, 79, 84, 86, 92, 109, 111, 147, 150], "groupselect": 36, "29": [36, 148, 149, 160], "121": [36, 148, 149], "214": [36, 111], "122": [36, 65, 141, 149], "159": 36, "59": [36, 148, 149], "add_subplot": [36, 162], "111": [36, 162], "set_xlabel": [36, 162], "set_ylabel": [36, 162], "savefig": [36, 162, 163], "rmsd_all_core_lid_nmp_ref1ak": 36, "impli": [36, 54], "w_i": 36, "forward": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "838544558398293": 36, "weights_groupselect": 36, "impos": 36, "correspondingli": [36, 44], "get_weight": [36, 109], "scheme": [36, 58, 151], "rotation": 36, "overflow": 36, "underflow": 36, "rho_i": 36, "welford1962": 36, "tran": [36, 86, 90, 99, 108], "not_protein": 36, "center_in_box": [36, 158], "prealign": 36, "asel": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "reshap": [36, 108, 109], "load_new": [36, 79, 80, 92], "afc": [36, 51, 60, 80], "calpha": [36, 64, 111], "rmsfer": 36, "welford": 36, "technometr": 36, "419": [36, 112], "420": 36, "1962": 36, "1080": [36, 37, 112], "00401706": 36, "10490022": 36, "quiet": 36, "alejandro": [37, 98, 112], "bernardin": [37, 98, 112], "relax": [37, 79], "wor": 37, "yeh1999": 37, "hbl": 37, "rapaport1983": 37, "angular": [37, 98], "grigera1996": 37, "br\u00f3dka1994": 37, "surviv": [37, 98], "sp": [37, 109], "liu2004": 37, "araya": [37, 98, 112], "secchi2014": [37, 98], "milischuk2011": 37, "nanopor": 37, "yu": [37, 60], "ling": 37, "chung": 37, "yuan": 37, "mou": 37, "liquid": 37, "103": [37, 141, 149], "3699": 37, "3705": 37, "1999": [37, 112], "jp984584r": 37, "rapaport": 37, "1151": 37, "1162": 37, "1983": [37, 112], "00268978300102931": 37, "raul": [37, 98], "grigera": 37, "susana": 37, "kalko": 37, "jorg": 37, "fischbarg": 37, "wall": [37, 99], "langmuir": 37, "154": 37, "158": [37, 148], "la9408681": 37, "aleksand": 37, "br\u00f3dka": 37, "diffus": [37, 39, 112, 155, 162, 163], "82": [37, 148, 149], "1075": 37, "1078": 37, "00268979400100764": 37, "pu": [37, 107, 112, 148], "liu": [37, 107, 112], "bern": 37, "On": [37, 38, 42, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 82, 86, 105, 112, 149], "confin": [37, 64], "fluid": [37, 90, 112], "vapor": 37, "6595": 37, "6602": 37, "jp0375057": 37, "anatoli": 37, "milischuk": 37, "branka": 37, "ladanyi": 37, "silica": 37, "135": [37, 65], "174709": 37, "3657408": 37, "hbond_analysi": [37, 39, 98, 112], "hydrogenbondanalysi": 37, "stabl": [37, 86, 108], "byre": [37, 86, 113], "42": [37, 49, 56, 86, 92, 102, 113, 148, 149], "wor_analysi": 37, "readi": [37, 86], "wor_oh": 37, "wor_hh": 37, "wor_dip": 37, "oh": [37, 38], "131": [37, 148], "hh": [37, 148], "132": [37, 108, 148], "dip": 37, "t0": [37, 98, 108], "tf": 37, "dtmax": 37, "333": 37, "straight": [37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "preferenti": 37, "electr": 37, "ad_analysi": 37, "ad_analysisoh": 37, "ad_analysishh": 37, "ad_analysisdip": 37, "graph0": 37, "graph1": 37, "graph2": 37, "travel": 37, "cylindr": [37, 86, 113], "zone": [37, 86, 113], "zmax": [37, 86, 104, 113, 163], "zmin": [37, 86, 104, 113, 163], "strong": 37, "weak": [37, 83], "cyzon": [37, 86, 113], "msd_analysi": 37, "sp_timeseri": 37, "exhibit": 37, "potassium": [37, 148], "hop": 37, "advis": [37, 104, 151], "reload": [37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "md100n": 37, "joined_sp_timeseri": 37, "o13": 37, "o14": 37, "new_sp": 37, "sp_timeseries_data": 37, "datapoint": [37, 98], "sp_data": 37, "t1": [37, 108], "x_axi": 37, "y_axi": 37, "cos_theta0": 37, "ang_distr0": 37, "cos_theta1": 37, "ang_distr1": 37, "msd_t0": 37, "msd_t1": 37, "tau_n": 37, "sp_tau1": 37, "sp_tau2": 37, "sp_tau_n": 37, "nproc": 37, "propos": 37, "c_": 37, "hat": [37, 86, 90, 103], "mathit": 37, "_2": [37, 103], "p_2": 37, "3x": 37, "legendr": 37, "crash": 37, "lg2": 37, "dipolar": 37, "know": [37, 38, 58, 75], "2ndt": 37, "frac1t": 37, "comment": [37, 38, 41, 62, 64, 71, 74, 114, 115, 116, 117, 118, 119, 134, 148], "py": [37, 58, 68, 82, 111, 112, 149, 151], "act": [37, 79, 86, 102], "classifi": 37, "zhiyi": 38, "wu": 38, "gtc": 38, "ox": 38, "xiki": 38, "tempula": 38, "simultan": 38, "water_select": 38, "120": 38, "forcefield": 38, "breadth": 38, "partner": [38, 91], "water2": 38, "sele1_acceptor": 38, "water1_donor": 38, "water1_donor_heavi": 38, "water1_acceptor": 38, "sele2_donor": 38, "sele2_donor_heavi": 38, "water2_acceptor": 38, "donor_proton": 38, "donor_heavy_atom": 38, "fourth": [38, 91, 140], "depth": [38, 89, 102], "network2timeseri": 38, "travers": [38, 103], "expand_timeseri": 38, "expand": [38, 77, 109], "familiar": 38, "generate_t": 38, "reformat": 38, "databas": [38, 89, 147], "datafram": 38, "120\u00ba": 38, "123": [38, 108, 109], "oc1": 38, "oc2": 38, "amber99sb": 38, "ildn": 38, "ne": [38, 148], "nh1": [38, 66], "nh2": 38, "nd2": 38, "sg": [38, 86, 90, 148], "cyh": 38, "ne2": 38, "oe1": 38, "oe2": 38, "nd1": 38, "presenc": [38, 67, 79, 91, 106], "hsd": 38, "hse": 38, "hsp": 38, "met": [38, 66, 86, 88], "sd": 38, "gregoret1991": 38, "og": [38, 86, 90], "og1": [38, 86, 90], "trp": 38, "ne1": 38, "tyr": [38, 113], "oi": 38, "sm": [38, 148], "opl": [38, 88, 111], "ambigu": [38, 148], "histidin": [38, 49], "carbohydr": 38, "glycam": 38, "inappropri": 38, "oneself": 38, "waterbridgeanalysis_otherff": 38, "default_donor": 38, "otherff": 38, "default_acceptor": 38, "lydia": 38, "gregoret": 38, "stephen": 38, "rader": 38, "fletterick": 38, "fred": 38, "cohen": 38, "sulfur": 38, "1991": [38, 108], "340090204": 38, "arginin": [38, 49], "aspart": 38, "exit": [38, 44, 79, 109, 114], "carboxyl": [38, 49], "asp3": 38, "hw1": [38, 92, 131], "hw2": [38, 92, 131], "sol2": 38, "arg1": 38, "customis": [38, 60, 91, 132], "sele1": 38, "ang": 38, "sele2": 38, "phase": 38, "sele1_index": 38, "sele1_heavy_index": 38, "atom2": [38, 74, 86, 91], "heavy_atom2": 38, "atom1": [38, 74, 86, 91], "heavy_atom1": 38, "sele2_index": 38, "sele2_heavy_index": 38, "s1_resnam": 38, "s1_resid": 38, "s1_name": 38, "s2_resnam": 38, "s2_resid": 38, "s2_name": 38, "analysis_func": 38, "proport": 38, "peopl": 38, "pai": 38, "attent": 38, "insist": 38, "shouldn": [38, 51, 60], "order_of_water_bridg": 38, "undesir": [38, 75], "s1_index": 38, "to_index": 38, "to_resnam": 38, "to_resid": 38, "to_nam": 38, "from_index": 38, "from_resnam": 38, "from_resid": 38, "from_nam": 38, "key1": 38, "key2": 38, "s2_index": 38, "wbridge_analysi": 38, "selection1_typ": 38, "update_water_select": 38, "filter_first": 38, "distance_typ": 38, "output_format": 38, "sele1_sele2": 38, "anyth": [38, 66, 68, 81, 88, 109, 146, 152], "consum": [38, 68], "20th": [38, 112], "domain": [38, 104, 155], "surfac": [38, 40, 86], "constantli": [38, 102], "tini": [38, 112], "engag": 38, "ideal": [38, 58, 98], "180\u00ba": 38, "fairli": [38, 58, 165], "150\u00ba": 38, "shall": 38, "donor_acceptor": 38, "farther": 38, "entiti": [38, 64], "tidi": 38, "atom_1": 38, "atom_2": 38, "_only_": 38, "r_cov": 38, "58": [38, 141, 148, 149, 163], "defaultdict": 38, "coval": 38, "meth": 38, "_get_bonded_hydrogens_list": 38, "timesteps_by_typ": 38, "exampleanalysismodul": 39, "analysis_obj": 39, "analysisclass": 39, "start_fram": [39, 162, 163], "stop_fram": 39, "caveat": 39, "hole2": 39, "hole": 39, "atomicdist": 39, "quantiti": [39, 74, 160], "psa": [39, 112], "bat": 39, "hbond_autocorrel": 39, "waterbridgeanalysi": 39, "leaflet": [39, 111, 120], "nuclinfo": 39, "nucleicacid": 39, "elast": [39, 112], "network": [39, 68, 102, 112], "gnm": [39, 112], "helan": [39, 112], "helic": 39, "radial": 39, "rdf": 39, "lineardens": 39, "waterdynam": [39, 98, 112], "dielectr": [39, 112], "diffusionmap": 39, "xdr": [40, 69, 73, 84, 110, 149], "pyedr": 40, "human": [40, 98, 112], "has_pyedr": 40, "availbl": [40, 67], "aux": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "some_edr_fil": 40, "newli": 40, "data_dict": 40, "gave": 40, "unit_dict": 40, "cf": [40, 148], "mdanalysis_base_unit": 40, "inconsist": [40, 76], "convert_unit": [40, 47, 48, 50, 51, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76], "temp": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 149], "get_data": 40, "some_term": 40, "kinet": [40, 149], "all_term": 40, "auxread": [40, 41, 42, 43, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "aux_spec": [40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "surf": 40, "surften": 40, "constr": [40, 149], "inconveni": 40, "epot": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 149], "surf_tens": 40, "tension": 40, "aux_edr": 40, "aux_edr_tpr": 40, "aux_edr_xtc": 40, "namespac": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 88, 109, 164], "add_auxiliari": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "525164": 40, "0625": 40, "3764": 40, "52734375": 40, "auxdata": [40, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "1857": 40, "519287109375": 40, "initialis": [40, 41, 44, 90, 91, 102, 147], "_auxdata": [40, 44], "pathlib": 40, "posixpath": 40, "data_selector": [40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "_n_step": [40, 44], "exce": [40, 50, 86, 113], "gb": [40, 42, 149], "memory_limit": [40, 42], "keyerror": 40, "invalid": [40, 64, 103, 109, 136], "read_all_tim": [40, 41, 44], "edrstep": 40, "time_selector": [40, 41, 42, 44], "auxstep": [40, 41, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "grace": 41, "xvgstep": 41, "xvgreader": [41, 42, 44], "xvgfileread": [41, 44], "footprint": [41, 44], "auxfileread": [41, 42, 44], "uncom": 41, "trail": [41, 64, 102, 109], "initial_tim": [42, 44], "constant_dt": [42, 44], "throughout": [42, 44, 92, 98], "represent_ts_a": [42, 44], "auxnam": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "veloc": [42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 86, 92, 98, 101, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "deep": [42, 79, 83], "calc_repres": [42, 44], "frame_data": [42, 44], "frame_rep": [42, 44], "attach_auxiliari": 42, "coord_par": 42, "agnost": [42, 160], "xvg": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "edr": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "nan": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "indici": 42, "get_descript": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "replic": [42, 68], "original_aux": 42, "new_aux": 42, "move_to_t": [42, 44], "n_step": [42, 44], "next_nonempty_fram": [42, 44], "read_t": [42, 44], "update_t": [42, 44], "recent": [42, 49, 51, 68, 141, 147], "rewind": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 109], "step_to_fram": [42, 44], "return_time_diff": [42, 44], "time_frame_0": 42, "floor": [42, 44], "step_to_tim": [42, 44], "frame_index": 42, "time_diff": 42, "consant": 42, "austep": 42, "auxfil": [42, 44], "get_auxreader_for": [43, 44], "submodul": [44, 79, 147, 151], "protoread": [44, 75, 79, 92], "alongsid": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "accompani": [44, 58], "remark": [44, 51, 60, 64, 65, 66, 68, 74, 79, 100, 120, 147], "edrread": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "stand": 44, "alon": 44, "do_someth": 44, "10th": 44, "datatyp": [44, 58], "time_at_step": 44, "time_at_frame_0": 44, "pullforc": 44, "pull_forc": 44, "next_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "iter_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "particularli": [44, 66], "low_f": 44, "low_freq_aux_data": 44, "worri": [44, 86], "__iter__": [44, 75, 79, 83], "iter_auxiliari": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "get_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf_dt": 44, "settabl": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "set_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "rename_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf": 44, "reload_aux": 44, "get_aux_descript": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullx": 44, "And": [44, 85], "descr": 44, "new_u": 44, "new_trajectori": 44, "_auxstep": 44, "_data": 44, "_dt": 44, "_initial_tim": 44, "_time_selector": 44, "_data_selector": 44, "_constant_dt": 44, "setup": [44, 58], "ausstep": 44, "_select_tim": 44, "selector": [44, 86, 88, 92, 113], "_select_data": 44, "overload": 44, "_empty_data": 44, "cap": [44, 104], "required_attr": 44, "__len__": [44, 79], "__getitem__": [44, 79, 83, 109], "reposit": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "_read_next_step": 44, "__enter__": 44, "__exit__": [44, 79], "__del__": [44, 75, 79], "__eq__": [44, 79, 83], "addion": 44, "stopiter": 44, "past": [44, 79], "_go_to_step": 44, "count_n_step": 44, "_restart": 44, "overwritten": [44, 64, 83, 91], "seek": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100, 101, 105, 109, 160], "_reopen": [44, 58], "reopen": [44, 58], "recognis": [46, 58, 68, 88, 146], "parm": [46, 78, 85, 140], "pmd": [46, 48], "pgro": [46, 48], "load_fil": [46, 48], "ugro": 46, "convert_to": [46, 48, 49, 85, 86], "insensit": [46, 85, 86, 99], "pgro2": 46, "tab": [46, 66, 111, 149], "parmedpars": [46, 147], "rdkit": [46, 62, 85, 86, 88, 92, 113, 146], "rdkitpars": 46, "openmm": [46, 48], "openmmpars": 46, "accessor": 46, "app": [47, 48], "layer": [47, 86, 113], "pdbxfile": 47, "openmmtopologypars": 47, "convert_forces_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "inplac": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 103, 107, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_forces_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "unmodifi": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "modif": [47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 82, 86, 103, 105, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "caller": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "openmmapptopologypars": 47, "openmmread": 47, "pdbx": 47, "openmmsimulationread": 47, "kj": [47, 67, 68, 69, 160], "openmmappread": 47, "prm7_ala2": 48, "rst7_ala2": 48, "prm": 48, "amberparm": 48, "3026": 48, "1003": 48, "3025": 48, "parametr": [48, 85], "prm_prot": 48, "mm": 48, "createsystem": 48, "nonbondedmethod": 48, "nocutoff": 48, "constraint": [48, 131, 141, 149], "implicitsolv": 48, "gbn2": 48, "langevinintegr": 48, "bath": 48, "picosecond": [48, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 160], "friction": 48, "femtosecond": [48, 60, 160], "sim": 48, "setposit": 48, "minimizeenergi": 48, "maxiter": 48, "recogins": 48, "parmedread": [48, 78], "parmedconvert": 48, "neat": 48, "hmassrepartit": 48, "008": [48, 86, 148], "pmt": 48, "hmass": 48, "dalton": 48, "03399992": 48, "01799965": 48, "034": 48, "mgro": 48, "parmed_subset": 48, "obj": [48, 49, 51, 54, 56, 58, 60, 62, 64, 69, 72, 73, 74, 75, 79, 109, 149], "chem": [49, 62, 92, 107, 112, 148], "rdchem": 49, "atomid": [49, 90, 122, 123, 124, 128, 134, 138, 147], "atomnam": [49, 56, 66, 86, 90, 109, 113, 122, 123, 124, 126, 128, 134, 138, 140, 142, 143, 146, 148, 149], "aromat": [49, 88, 90, 146], "rschiral": [49, 88, 90], "atomtyp": [49, 62, 65, 90, 122, 123, 124, 126, 128, 129, 130, 134, 138, 140, 142, 143, 148], "chainid": [49, 50, 64, 65, 66, 90, 109, 113, 124, 125, 136, 137, 138, 147], "icod": [49, 64, 65, 86, 90, 133, 137, 147], "tempfactor": [49, 50, 64, 65, 86, 90, 92, 109, 122, 125, 133, 136, 137, 147], "getmonomerinfo": 49, "getaltloc": 49, "getisaromat": 49, "getchainid": 49, "getdoubleprop": 49, "_gasteigercharg": 49, "_tripospartialcharg": 49, "getsymbol": 49, "getinsertioncod": 49, "getidx": 49, "getmass": 49, "getnam": 49, "getprop": 49, "_triposatomnam": 49, "_cipcod": 49, "chiral": [49, 86, 88, 90, 113], "getoccup": 49, "getresiduenam": 49, "getresiduenumb": 49, "gettempfactor": 49, "_triposatomtyp": 49, "monomerinfo": 49, "rdkitread": [49, 92], "rdkitconvert": [49, 86, 88, 113], "molfrommol2fil": 49, "docking_pos": 49, "mol2": [49, 77, 79, 84, 147, 150], "removeh": [49, 62], "0x7fcebb958148": 49, "infer": [49, 76, 92], "chembl27": 49, "ongo": 49, "3339": 49, "benchmark": [49, 151], "atompdbresidueinfo": 49, "_mdanalysis_nam": 49, "segindic": [49, 88, 90], "getsegmentnumb": 49, "_mdanalysis_charg": 49, "getintprop": 49, "_mdanalysis_index": 49, "_mdanalysis_segid": 49, "_mdanalysis_typ": 49, "pdb_full": 49, "dm": [49, 79, 84, 124, 147, 160], "getatomwithidx": 49, "descriptors3d": 49, "aspher": [49, 86, 90, 112], "guesser": [49, 86, 140, 150], "guess_typ": [49, 146], "add_topologyattr": [49, 74, 89, 92, 146], "noimplicit": 49, "implicit": [49, 86], "scratch": 49, "set_converter_cache_s": 49, "bypass": 49, "hood": [49, 67, 147], "ugm": 49, "video": 49, "tackl": 49, "info": [49, 102], "accuraci": [49, 99, 101], "guidelin": 49, "prevent": 49, "conjug": 49, "_rebuild_conjugated_bond": 49, "inorgan": 49, "mostli": [49, 58, 90, 145], "_infer_bo_and_charg": 49, "formal": [49, 74, 86, 90, 113, 136], "don": [49, 86, 103, 109, 134, 138, 159], "valenc": 49, "unpair": 49, "electron": [49, 64, 66, 140, 160], "nue": 49, "ue": 49, "smallest": [49, 58], "rwmol": 49, "receiv": 49, "_standardize_pattern": 49, "recombin": 49, "x3": 49, "d4": 49, "v4": 49, "cterm": [49, 111], "h0": 49, "nterm": [49, 111], "keto": 49, "enol": 49, "sulfon": 49, "v6": 49, "anion": 49, "problemat": [49, 86, 103, 159], "goal": 49, "triplet": [49, 99, 147], "forth": 49, "kekul": 49, "cover": [49, 99, 109], "crdreader": 50, "formaterror": 50, "writer": [50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 77, 78, 80, 81, 84, 86, 109], "crdwriter": [50, 56], "wt": [50, 65, 66], "namedstream": [50, 62, 63, 94, 109, 114], "stream": [50, 57, 58, 62, 63, 64, 92, 94, 100, 105, 115], "noextend": 50, "regardless": [50, 51, 60, 92, 156, 160], "lammp": [51, 79, 84, 92, 100, 111, 132, 147, 165], "endian": [51, 60, 70, 79], "dcdreader": [51, 60, 79, 80, 111], "dcdwriter": [51, 60], "akma": [51, 58, 60, 68, 79, 160], "seamlessli": [51, 79], "watch": 51, "tri": [51, 58, 68, 79, 100, 109, 140], "wiki": [51, 103, 161], "dcdplugin": 51, "plor": 51, "c36b2": 51, "newer": [51, 140], "libdcd": [51, 60, 82, 110], "pyx": [51, 60, 101], "otherwrit": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "pull": [51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 80, 126, 127, 143, 149], "ener": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "precis": [51, 54, 56, 57, 58, 60, 63, 64, 69, 71, 72, 73, 75, 79, 80, 91, 99, 101, 103, 104, 108, 113, 149], "term_dict": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "selected_fram": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_threshold": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "remove_auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "another_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "this_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "innermost": [51, 57, 58, 60, 64, 69, 71, 72, 73, 75], "transform_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "aux_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "check_slice_indic": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "clip": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "unexpect": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80], "downstream": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109], "randomli": [51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80], "splice": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "discrep": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "held": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 86], "attrnam": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 88, 90], "gettabl": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "recreat": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "trajectory_1": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trajectory_2": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "inter": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "lst": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "encount": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99, 136], "pace": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "parse_n_atom": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 135], "notimplementederror": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 102, 120], "tom": [51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80], "rame": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "oordin": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "fac": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100], "nodataerror": [51, 58, 60, 79, 80, 83, 86, 89, 92, 94, 103], "totaltim": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "nsavc": [51, 60, 100], "istart": [51, 60, 100], "240": [51, 60, 100], "convert_dimensions_to_unitcel": [51, 54, 56, 58, 60, 69, 72, 73, 75, 79], "overriden": [51, 54, 58, 60, 69, 72, 73, 75, 79, 90], "has_valid_coordin": [51, 54, 58, 60, 69, 72, 73, 75], "dl": [52, 149, 150], "poli": [52, 150], "configread": 52, "config": [52, 79, 147, 165], "layout": [52, 58], "historyread": 52, "histori": [52, 79, 147, 152], "desmond": [53, 124, 147], "dmsreader": 53, "lattice_vector": 54, "matter": 54, "atom_frac": 54, "nx": 54, "ny": [54, 113, 148], "vx": 54, "vy": 54, "vz": 54, "speci": [54, 86, 90], "fhiaimsread": 54, "classmethod": [54, 57, 60, 64, 69, 71, 72, 73, 75, 79, 83, 90, 92, 149], "fmt": [54, 56, 109], "box_triclin": [54, 56], "8f": 54, "nlattice_vector": 54, "vel": [54, 56], "newlin": [54, 56, 64, 109, 114, 115, 116, 117, 118, 119, 148], "resourc": [55, 58, 67, 75, 151], "firefli": [55, 127], "approb": 55, "tweak": [55, 74, 102], "gmsreader": 55, "outfilenam": 55, "uncompress": [55, 105, 109], "foo": [55, 100, 101, 109], "bz2": [55, 63, 68, 74, 79, 105, 109], "gz": [55, 63, 68, 74, 79, 109], "decompress": [55, 109], "time_offset": [55, 74, 75, 83], "runtyp": 55, "renumb": [56, 66, 92], "reindex": [56, 64], "subsect": 56, "OR": 56, "groread": 56, "unk": 56, "decim": [56, 73, 91, 101, 109], "3dp": 56, "4dp": 56, "triclinic_dimens": [56, 83], "box_orthorhomb": 56, "5f": 56, "5d": 56, "3f": [56, 102], "xyz_v": 56, "4f": 56, "digit": [56, 64, 79, 109, 125, 147], "chop": 56, "nwo": 56, "ow2": 56, "orthorhomb": [56, 68, 86], "hoomd": [57, 79, 129, 147, 150], "gsdparser": [57, 129, 147], "gsdreader": [57, 82, 129], "picklabl": [57, 68, 109, 110], "hoomdtrajectori": 57, "gsdpicklabl": [57, 82], "schema": 57, "open_trajectori": [57, 58, 68, 70], "hoodm": 57, "fl": 57, "gsdfile": 57, "unpickl": [57, 58, 68, 75, 76, 77, 82, 86, 92, 105], "gsd_pickle_open": 57, "gsdfileobj": 57, "schema_vers": 57, "file_pickl": [57, 105], "dump": [57, 64, 86, 105, 132, 147], "picklable_file_io": [57, 58, 68, 77, 82, 109, 110], "fileiopickl": [57, 58, 68, 77, 82, 105], "bufferiopickl": [57, 58, 68, 77, 82, 105], "textiopickl": [57, 58, 68, 77, 82, 105], "gzippickl": [57, 58, 68, 77, 82, 105], "bz2picklabl": [57, 58, 68, 77, 82, 105], "byte": [57, 58, 68, 70, 77, 95, 100, 101, 102, 103, 105, 106, 109], "readlin": [57, 105, 109], "anyopen": [57, 82, 105, 109], "pickle_open": [57, 105], "bz2_pickle_open": [57, 105], "gzip_pickle_open": [57, 105], "rb": [57, 105, 148], "mpi": [58, 112], "wide": [58, 67], "h5mdreader": 58, "notat": [58, 65, 109, 113], "h5mdwriter": 58, "timeunit": [58, 60], "lengthunit": [58, 60, 160], "velocityunit": 58, "forceunit": 58, "arug": 58, "2884": 58, "contigu": [58, 109], "chunk": [58, 140], "output_contig": 58, "alpha_carbon": 58, "mpi4pi": 58, "driver": 58, "comm": 58, "mpio": 58, "comm_world": 58, "environ": [58, 68, 102, 109, 112, 152], "challeng": 58, "supercomput": 58, "successfulli": [58, 82], "openmpi": 58, "ubuntu": 58, "plai": [58, 106], "mpicc": 58, "ve": [58, 111], "implemen": 58, "env": [58, 68, 77], "hdf5_path": 58, "clean": [58, 102], "gcc": 58, "hdf5_dir": 58, "everyon": 58, "forum": 58, "overview": [58, 121], "gcmc": 58, "email": 58, "creator": 58, "group1": 58, "arrari": 58, "commun": [58, 68, 112, 165], "lost": 58, "cuboid": 58, "timstep": 58, "_particle_group": 58, "has_forc": [58, 79, 83], "has_posit": [58, 79, 83], "has_veloc": [58, 79, 83], "compression_opt": 58, "author_email": 58, "creator_vers": 58, "dev0": [58, 102, 161, 165], "parellel": 58, "violat": 58, "block": [58, 67, 79, 91, 102, 109, 111], "szip": 58, "lzf": 58, "tup": 58, "lowest": [58, 64, 77], "recogniz": 58, "wrote": 58, "__version__": [58, 161], "ioerror": [58, 68, 79, 101, 109, 144], "datset": 58, "enforc": [58, 64, 68, 76, 99, 106, 109], "\u00e5ngstrom": 58, "fine": 58, "piec": 58, "noncontigu": 58, "ill": 58, "thought": [58, 111], "drastic": 58, "apriori": 58, "diskspac": 58, "incom": 58, "explic": 58, "kib": 58, "mib": 58, "suboptim": 58, "mimic": [58, 149], "jakupovic2021": [58, 112], "led": 58, "10x": 58, "versu": 58, "additionali": 58, "h5md_version": 58, "data_blacklist": 58, "h5pypickl": [58, 82], "libver": 58, "userblock_s": 58, "swmr": 58, "rdcc_nslot": 58, "rdcc_nbyte": 58, "rdcc_w0": 58, "track_ord": 58, "fs_strategi": 58, "fs_persist": 58, "fs_threshold": 58, "fs_page_s": 58, "page_buf_s": 58, "min_meta_keep": 58, "min_raw_keep": 58, "lock": [58, 72], "alignment_threshold": 58, "alignment_interv": 58, "meta_block_s": 58, "readonli": 58, "legal": [58, 109], "sec2": 58, "stdio": 58, "ros3": 58, "earliest": 58, "v108": 58, "v110": 58, "v112": 58, "1024": 58, "preemption": 58, "polici": 58, "penal": 58, "flush": [58, 102, 109], "lru": 58, "preempt": 58, "slot": 58, "collis": 58, "hash": 58, "strategi": 58, "prime": 58, "thumb": 58, "521": 58, "h5": [58, 62], "get_config": 58, "fsm": 58, "vfd": 58, "page": [58, 62, 84, 104, 108, 112, 150, 161, 165], "4096": 58, "buffer": [58, 105, 109], "power": [58, 67, 111, 151], "evict": 58, "effort": 58, "hdf5_use_file_lock": 58, "overrid": [58, 99, 114, 131, 152, 158], "conjunct": 58, "portal": 58, "hdfgroup": 58, "h5p_set_align": 58, "h5p_set_meta_block_s": 58, "restart": [59, 79, 102, 156], "inpread": 59, "978": [60, 90], "888821e": [60, 160], "biomolecular": [60, 147], "lennard": [60, 140], "jone": [60, 140], "autodetect": [60, 68, 79, 92], "dumpread": 60, "ascii": [60, 79, 100, 102, 132, 147], "datapars": [60, 132], "lammps_real": 60, "nano": 60, "lammps_nano": 60, "take_this_fram": 60, "dcdfilenam": 60, "dataread": 60, "datawrit": 60, "atom_typ": [60, 146], "lammps_coordinate_convent": 60, "unwrap_imag": 60, "unscal": 60, "scaled_unwrap": 60, "whichev": [60, 86, 113], "xsu": 60, "ysu": 60, "zsu": 60, "zu": 60, "read_data": 60, "3383": 60, "transmiss": [61, 79, 133, 147], "quicker": [61, 133], "mmtfreader": [61, 78], "fetch_mmtf": 61, "pdb_id": 61, "rcsb": 61, "bank": 61, "4ucp": 61, "tripo": [62, 79, 134, 147], "gr": 62, "molecule_noh": 62, "cheminformat": 62, "toolkit": [62, 112, 165], "mol2read": 62, "statu": [62, 65, 134], "mol2writ": 62, "molfrompdbfil": 62, "moltomolfil": 62, "master": 62, "sybyl": [62, 134], "tripos_resourc": 62, "fileroot": 62, "mol2_format2": 62, "encode_block": 62, "substructur": 62, "crysin": 62, "dimensionless": 62, "mol2_format3": 62, "benzen": 62, "wed": 62, "1988": 62, "no_charg": [62, 134], "207": [62, 148], "091": 62, "414": 62, "394": [62, 111], "c3": [62, 88], "c4": [62, 88], "697": 62, "c5": [62, 88], "c6": [62, 88], "175": [62, 108], "353": 62, "936": 62, "h3": 62, "542": 62, "h4": 62, "781": 62, "939": 62, "h6": 62, "perm": 62, "coor": [63, 79], "namdbinread": 63, "namdbinwrit": 63, "denomin": 64, "exchang": [64, 86], "thath": 64, "calpha_onli": 64, "multifram": [64, 78, 79, 86], "calpha_traj": 64, "happen": [64, 68, 72, 86, 89, 92, 113, 147, 149], "pdbreader": [64, 82, 136], "pdbwriter": 64, "enhanc": [64, 79, 165], "multipdbwrit": 64, "pdbparser": [64, 125, 136], "retir": 64, "frill": [64, 65], "cryst1": [64, 65], "resseq": [64, 65, 109], "compnd": [64, 65], "bfactor": [64, 86, 90, 92, 113, 133, 136, 141], "expos": [64, 110, 141], "24": [64, 65, 100, 108, 141, 148, 149, 160], "47": [64, 65, 148, 149], "54": [64, 65, 148, 149], "achar": [64, 65], "46": [64, 65, 149], "66": [64, 65, 148, 149], "67": [64, 65, 83, 149], "76": [64, 65, 149], "unoffici": 64, "77": [64, 149], "lstring": [64, 65], "symbol": [64, 68, 141, 142, 149], "justifi": 64, "79": [64, 65, 148, 149], "80": [64, 65, 70, 113, 148, 149], "microscopi": 64, "unitari": 64, "2698": 64, "strip": [64, 109], "valus": 64, "aka": [64, 134], "bzip2": [64, 68, 74, 79, 105, 109, 111], "conect": [64, 86, 136], "endmdl": 64, "9999": 64, "record_typ": [64, 86, 136, 137], "accordingli": [64, 78, 86, 90, 109], "charat": 64, "2224": 64, "redindex": 64, "earlier": [64, 68], "100000": [64, 160], "remark_max_length": 64, "ones": [64, 78, 79, 86, 109, 111, 113, 141, 151], "_check_pdb_coordin": 64, "stringio": [64, 102, 109], "2512": 64, "_write_pdb_bond": 64, "_update_fram": 64, "_write_next_fram": [64, 72], "_write_timestep": 64, "nummdl": 64, "signal": 64, "traj": 64, "1753": 64, "2423": 64, "3144": 64, "spacegroup": 64, "zvalu": 64, "sanit": [64, 92], "2324": 64, "modelnumb": 64, "9998": 64, "write_all_timestep": 64, "extendedpdbread": [64, 125], "five": [64, 90, 91, 125], "reserv": [64, 92], "autodock": [65, 79, 137, 147], "pdbqtreader": 65, "gamm": 65, "partialchrg": 65, "gasteig": [65, 146], "peoe": 65, "nsc7810": 65, "inact": 65, "a7_7": 65, "c22_23": 65, "a9_9": 65, "a11_11": 65, "a17_17": 65, "c21_21": 65, "123456789": [65, 102], "inh": 65, "054": 65, "021": 65, "002": [65, 108, 160], "704": 65, "764": 65, "a3": 65, "975": 65, "431": 65, "a4": 65, "070": 65, "385": 65, "081": 65, "a5": 65, "062": 65, "073": 65, "238": [65, 148], "a6": 65, "306": 65, "456": 65, "226": [65, 148], "019": 65, "a7": 65, "885": 65, "114": [65, 148], "052": 65, "a8": [65, 109], "265": [65, 148], "621": 65, "449": 65, "a9": 65, "339": 65, "986": 65, "801": 65, "013": 65, "a10": 65, "176": [65, 111], "667": 65, "128": 65, "endroot": 65, "branch": 65, "a11": 65, "644": 65, "682": 65, "827": [65, 108], "a16": 65, "007": [65, 86, 148], "557": 65, "220": 65, "a12": 65, "522": 65, "485": 65, "882": 65, "a15": 65, "262": [65, 148], "209": [65, 148], "177": 65, "a17": 65, "144": [65, 148], "784": 65, "319": 65, "a14": 65, "981": 65, "910": 65, "a20": 65, "627": 65, "077": 65, "222": [65, 108, 148], "a13": 65, "749": 65, "912": [65, 91], "a19": 65, "777": 65, "285": 65, "267": 65, "a18": 65, "543": 65, "650": 65, "328": 65, "c21": 65, "834": 65, "113": [65, 148], "388": 65, "210": [65, 148], "774": 65, "915": 65, "581": 65, "oa": 65, "o3": [65, 88], "298": 65, "828": [65, 108], "237": [65, 148], "endbranch": 65, "c22": 65, "535": 65, "378": 65, "708": 65, "659": 65, "196": [65, 148], "059": 65, "torsdof": 65, "permiss": 65, "pdbqtwriter": 65, "spec": 65, "pdb2pqr": [66, 138], "adopt": 66, "apb": [66, 147], "whitespac": [66, 79, 88, 109, 113, 147, 148], "delimit": [66, 74, 88], "mandat": 66, "liber": 66, "recordnam": 66, "residuenam": 66, "residuenumb": 66, "shorter": [66, 70, 86, 146], "wildli": 66, "921": [66, 86], "307": [66, 86], "410": 66, "3000": 66, "8500": 66, "545": 66, "499": 66, "854": 66, "8000": 66, "hh11": 66, "042": [66, 86], "723": [66, 148], "4600": 66, "2245": 66, "white": [66, 79, 109, 148], "pqrreader": 66, "pqrwriter": 66, "lundborg2014": 67, "pytng": [67, 79], "has_pytng": 67, "virial": 67, "absenc": [67, 83, 98], "encourag": 67, "essenc": 67, "critic": 67, "henceforth": 67, "magnu": 67, "lundborg": 67, "rossen": 67, "apostolov": 67, "sp\u00e5ngberg": 67, "ander": 67, "g\u00e4rden\u00e4": 67, "spoel": 67, "erik": 67, "lindahl": 67, "260": [67, 109], "269": 67, "onlinelibrari": 67, "wilei": 67, "23495": 67, "tngreader": 67, "pend": 67, "additional_block": 67, "special_block": 67, "feedback": 68, "appreci": 68, "tracker": [68, 141, 165], "mailinglist": [68, 103], "Such": [68, 120], "ncdf": [68, 79], "ncdfreader": 68, "mmap": 68, "_veloc": [68, 79, 83], "_forc": [68, 79, 83], "angstroem": [68, 111], "faster": [68, 83, 86, 90, 103, 108, 146], "netcdf_fil": 68, "prevail": 68, "ncdfwriter": 68, "scale_factor": 68, "adher": [68, 165], "2323": 68, "cell_angl": 68, "2327": [68, 112], "ncdfpicklabl": [68, 82], "scale_tim": 68, "scale_cell_length": 68, "scale_cell_angl": 68, "scale_coordin": 68, "scale_veloc": 68, "scale_forc": 68, "kcal": [68, 160], "kilocalori": 68, "mole": 68, "455": [68, 112, 162, 163], "netcdf4": [68, 79], "compil": [68, 99], "506": 68, "traceback": 68, "scratch2": 68, "miniconda": 68, "py35": 68, "python3": [68, 77], "_netcdf4": 68, "cpython": 68, "35m": 68, "x86_64": 68, "linux": 68, "undefin": [68, 92, 99], "nc_inq_var_fletcher32": 68, "ldd": 68, "ld_library_path": 68, "hdf5": 68, "ld": 68, "obviou": 68, "unload": 68, "futurewarn": 68, "breach": 68, "ambertool": 68, "sander": 68, "echo": 68, "seen": [68, 156], "is_period": [68, 100], "maskandscal": 68, "64": [68, 109, 149], "fileobj": [68, 105], "trjreader": 68, "mdcrd": [68, 79], "crdbox": 68, "conflict": 68, "baseread": [69, 73], "trrreader": 69, "refresh_offset": [69, 72, 73], "lossless": [69, 73], "refresh": [69, 72, 73, 102], "trrwriter": 69, "ibisco": [70, 79], "yasp": [70, 79], "hardwar": 70, "architectur": [70, 99], "trzreader": [70, 82], "trzfilenam": 70, "weakref": 70, "_reader": 70, "_frame": [70, 79], "skip_timestep": [70, 79], "trzwriter": 70, "tinker": [71, 79, 142, 147], "arc": [71, 79, 108, 142, 147], "txyzread": 71, "libmdaxdr": [72, 82, 110], "xdrbaseread": 72, "_frame_to_t": 72, "hidden": [72, 112], "_offset": 72, "sync": 72, "writabl": [72, 109], "rebuilt": 72, "interprocesslock": 72, "xdrbasewrit": 72, "offsets_filenam": 72, "fileend": 72, "offset_filenam": 72, "read_numpy_offset": 72, "xtcreader": 73, "formart": 73, "advantag": [73, 109], "loss": 73, "xtcwriter": 73, "trjactori": 73, "xyzplugin": 74, "neither": [74, 109, 112], "nor": [74, 109], "xyzread": 74, "xyzwrit": 74, "whenc": [74, 109], "NOT": [74, 85, 103, 141], "blank": [74, 90, 92, 102], "atomn": 74, "molfil": [74, 100], "event": [74, 147], "consequ": [74, 92, 100, 155, 156], "invok": [74, 86, 113, 140], "default_remark": 74, "2692": 74, "frameiteratorbas": [75, 86], "resolv": 75, "frameiteratorsl": [75, 79], "frameiteratoral": 75, "frameiteratorindic": [75, 79], "singleframereaderbas": [75, 79, 92], "garbag": 75, "leak": 75, "mainli": 75, "inher": 75, "offload": 75, "_ts_kwarg": 75, "_read_first_fram": 75, "iobas": [75, 109], "reconstrunct": 75, "writerbas": [75, 79], "write_next_timestep": 75, "converterbas": 75, "bundl": 75, "primarili": [76, 84, 93, 98, 150], "backward": [76, 161], "ultim": 76, "stitch": 76, "part01": 76, "part02": 76, "part03": 76, "lammpsdump": [76, 79, 147], "__repr__": 76, "plain": [76, 148], "Not": [76, 79, 146], "_get_local_fram": 76, "indexerror": 76, "_appli": 76, "_get": 76, "attr": [76, 89, 92, 140], "_get_sam": 76, "verifi": [76, 86], "_read_fram": [76, 82], "active_read": 76, "interoper": [77, 120], "deleg": 77, "chemfilesread": 77, "anaconda3": 77, "mda3": 77, "adk_oplsaa": 77, "transpar": 77, "mol2_ligand": 77, "chemfiles_format": 77, "chemfileserror": 77, "chemfileswrit": 77, "writ": 77, "chemfilespickl": [77, 82], "min_chemfiles_vers": 77, "max_chemfiles_vers": 77, "check_chemfiles_vers": 77, "usabl": [77, 85, 114], "throw": 78, "ommit": 78, "get_writer_for": 78, "get_reader_for": [78, 79], "mmtf": [78, 79, 84, 92, 147, 150], "chainread": [78, 79, 84, 92], "format_hint": 78, "functionalityx": 78, "examin": 78, "nullwrit": [78, 81], "silent": [78, 79, 102], "mandatori": [78, 79, 157], "abstract": 79, "duck": 79, "simplifi": [79, 147], "factori": [79, 88], "analogi": 79, "indirectli": 79, "broad": 79, "emphasi": 79, "lossi": 79, "tng": [79, 84], "txyz": [79, 84, 147, 150], "gsd": [79, 82, 84, 147, 150], "gamess": [79, 84, 147, 150], "gm": [79, 84, 147], "semi": 79, "inpcrd": [79, 84], "restrt": 79, "netcdf": 79, "ent": [79, 147], "xpdb": [79, 125, 136, 147], "xpbd": [79, 147], "pdbqt": [79, 84, 147, 150], "pqr": [79, 84, 147, 150], "gromos96": [79, 147], "desr": [79, 84, 147, 150], "dl_poli": [79, 84, 147, 165], "dlpoli": [79, 84, 123], "namdbin": [79, 84], "fhiaim": [79, 84, 126, 147], "fhi": [79, 84, 147, 150], "h5md": [79, 82, 84, 112], "chemfil": [79, 82, 84], "_format_hint": 79, "_get_read": 79, "singlefram": 79, "250": [79, 108], "_init_unitcel": 79, "hook": 79, "_unitcel": 79, "miscellan": 79, "setter": 79, "_po": [79, 83], "ceas": 79, "__entry__": 79, "gracefulli": 79, "314": 79, "process_fram": 79, "100th": 79, "frameiter": 79, "extrem": 79, "sensibl": 79, "pico": [79, 160], "_aux": 79, "trajctori": 79, "trajectorywrit": 79, "delai": 79, "framewrit": 79, "blanket": 79, "wb": [80, 105], "ku": 80, "dk": [80, 149], "wouterboomsma": 80, "transfer": [80, 92], "straightforward": [80, 113], "Of": 80, "cours": [80, 129, 156], "decis": [80, 109], "transfer_to_memori": [80, 86, 92], "universe2": 80, "coordinate_arrai": 80, "acf": 80, "caf": 80, "fca": 80, "cfa": 80, "1041": 80, "_kwarg": [80, 109], "get_arrai": 80, "set_arrai": 80, "favour": [80, 91], "dev": [81, 161], "suppress": 81, "idea": [82, 111], "__getstate__": 82, "__setstate__": 82, "__reduce__": 82, "consult": [82, 99, 110], "tell": [82, 100, 101, 105, 109], "But": [82, 109], "mayb": [82, 146], "_seek": 82, "ing": 82, "_read_next_timestep": 82, "crucial": [82, 86, 113], "machineri": 82, "pickliabl": 82, "test_multiprocess": 82, "test_pickleio": 82, "uint64": 83, "has_": 83, "hardcod": 83, "from_coordin": 83, "from_timestep": 83, "weren": 83, "81138802": 83, "58312416": 83, "58049774": 83, "45159912": 83, "71": [83, 148, 149], "56504822": 83, "mdamath": [83, 109, 110], "triclinic_vector": [83, 103, 109], "copy_slic": 83, "sel": [83, 86, 119, 120], "new_t": [83, 151], "rework": 83, "concern": [84, 109, 110, 150], "null": [84, 100, 103], "programm": 84, "anyon": 84, "serializ": 84, "multiframereadertest": 84, "basereadertest": 84, "speechwrapp": 85, "person": 85, "whoami": 85, "am": [85, 148], "bob": 85, "hello": 85, "converterwrapp": [85, 86], "destin": [85, 102], "lowercas": 85, "metaclass": [85, 88], "magic": 85, "parmed_structur": 85, "11302": 85, "segmentgroup": [86, 90, 92, 94, 95, 109], "atom3": [86, 91], "aslic": 86, "ag_concat": 86, "conserv": [86, 149], "contrari": [86, 149], "synomym": 86, "ag_union": 86, "dedupl": [86, 109], "isdisjoint": 86, "issubset": 86, "is_strict_subset": 86, "issuperset": 86, "is_strict_superset": 86, "intersect": [86, 91, 113], "symmetric_differ": 86, "isol": [86, 113], "g_pickl": 86, "u_pickl": 86, "h_pickl": 86, "aforement": 86, "detach": 86, "reattach": 86, "unives": 86, "instant": [86, 92], "accumul": 86, "acuumul": 86, "contract": [86, 90], "molnum": [86, 90, 131, 147], "prop": [86, 88, 113], "align_principal_axi": [86, 90], "principal_ax": [86, 90], "topologyobject": [86, 93], "dima2004b": [86, 90, 112], "asuniqu": 86, "ix": [86, 89, 91, 108, 113], "int64": [86, 90, 99, 103, 109], "ag3": [86, 113], "bbox": [86, 149], "enclos": 86, "2x3": 86, "xmin": [86, 104, 109, 162, 163], "ymin": [86, 104, 162, 163], "xmax": [86, 104, 109, 162, 163], "ymax": [86, 104, 162, 163], "bsphere": 86, "xcen": 86, "ycen": 86, "zcen": 86, "intact": [86, 90], "center_of_charg": [86, 90], "vert": [86, 90], "m_i": [86, 90], "dipole_mo": [86, 90], "mu": [86, 90], "magnitud": [86, 90], "dipole_vector": [86, 90], "q_": [86, 90], "coc": [86, 90], "fragindic": [86, 90], "interconnect": [86, 90], "get_connect": 86, "typenam": 86, "topologygroup": [86, 91, 92], "ureybradlei": [86, 90, 91], "groupbi": 86, "topattr": 86, "010999999999999": 86, "462": 86, "116": [86, 141, 148, 149], "999000000000001": 86, "011": [86, 112, 148], "169": [86, 112, 162, 163], "vdwradii": [86, 92, 146, 148], "fudge_factor": [86, 92, 146], "lower_bound": [86, 92, 146], "vdw": [86, 146, 148], "guess_angl": [86, 146], "guess_dihedr": [86, 146], "mislead": 86, "gyration_mo": [86, 90], "gyrat": [86, 90, 111], "tensor": [86, 90], "dima2004a": [86, 90, 112], "principle_moments_of_gyr": [86, 90], "improperdihedr": [86, 91], "0a": 86, "shell1": 86, "shell2": 86, "superset": 86, "isuniqu": 86, "ix_arrai": 86, "moment_of_inertia": [86, 90], "big": [86, 90], "otim": [86, 90], "i_": [86, 90], "m_k": [86, 90], "delta_": [86, 90], "_k": [86, 90], "n_fragment": [86, 90], "n_segment": [86, 89, 90, 92], "pack_into_box": 86, "boxlength": 86, "l_i": 86, "lfloor": 86, "rfloor": 86, "e1": [86, 90], "e3": [86, 90], "axis_vector": [86, 90], "quadrupole_mo": [86, 90], "quadrupol": [86, 90], "gray1984": [86, 90], "traceless": [86, 90], "quadropol": [86, 90], "unsymmetr": [86, 90], "quadrupole_tensor": [86, 90], "tr": [86, 90, 109], "rightarrow": 86, "rotatebi": [86, 157], "othersel": 86, "rtol": [86, 88], "08": [86, 88, 108, 148], "rdkit_kwarg": [86, 88, 92, 113], "smarts_kwarg": [86, 88, 113], "selgroup": [86, 88], "isclos": [86, 88], "getsubstructmatch": [86, 88, 113], "preexist": 86, "parenthes": [86, 88, 113], "dmpc": [86, 113], "3420": [86, 113], "notho": 86, "1250": 86, "nucleicbackbon": [86, 113], "identfi": [86, 113], "esoter": [86, 113], "colon": [86, 109, 113], "163b": 86, "163": 86, "162": [86, 148], "sensic": [86, 113], "moltyp": [86, 90, 113, 131, 141, 147, 149], "protein_a": [86, 113], "daylight": [86, 113], "usechir": [86, 113], "maxmatch": [86, 88, 113], "occasion": [86, 90, 113], "stereocent": [86, 113], "formalcharg": [86, 90, 113, 125, 136], "aren": [86, 109, 113], "lysin": [86, 113], "alanin": [86, 113], "sphlayer": [86, 113], "cog": [86, 113], "isolay": [86, 113], "iso": [86, 160], "externalradiu": [86, 113], "cylind": [86, 113], "cylay": [86, 113], "innerradiu": [86, 113], "bynum": [86, 113], "entireti": [86, 113], "lazili": [86, 91, 101, 113], "fullgroup": [86, 113], "shape_paramet": [86, 90, 112], "superflu": [86, 90], "keyfunc": 86, "multidimension": 86, "447": 86, "741": 86, "595": [86, 108], "926": [86, 109], "632": 86, "619": 86, "046": 86, "argsort": 86, "total_charg": [86, 90], "total_mass": [86, 87, 90], "4x4": [86, 108], "pack": [86, 103, 159], "Be": [86, 148], "all_frag_atom": 86, "apply_pbc": [86, 99], "meaningless": 86, "euclidian": 86, "filenamefmt": 86, "trjname": 86, "pbd": 86, "trjname_fram": 86, "jmol": [86, 120], "spt": [86, 117, 120], "token": [86, 88], "s_": 86, "topologyattr": [86, 88, 89, 92, 93, 113], "groupbas": 86, "hoc": [86, 146, 148], "resindex": [86, 89, 90], "rg": [86, 90], "rg2": 86, "chi1_select": [86, 90], "cb_name": [86, 90], "cb": [86, 90], "cg_name": [86, 90], "cg": [86, 90, 131], "cg1": [86, 90], "omega_select": [86, 90], "ci": [86, 90, 99], "prolin": [86, 90], "psi_select": [86, 90], "seqrecord": [86, 90], "seqio": [86, 90], "myseq1": [86, 90], "myprotein": [86, 90], "record1": [86, 90], "record2": [86, 90], "iupac": [86, 90], "segindex": [86, 89, 90], "sg2": 86, "base_group": 86, "water_shel": [86, 87], "water_shell_prev": 86, "is_uptod": 86, "stale": 86, "caught": 86, "erron": 86, "date": [86, 165], "reevalu": 86, "componentbas": 86, "bonded_atom": [86, 90], "fragindex": [86, 90], "cg2": [86, 90], "1970": [86, 90], "singular": [86, 88, 90, 113], "plural": 86, "topology_fil": 87, "trajectory_fil": 87, "invis": 88, "aromaticselect": 88, "backboneselect": 88, "ot": 88, "termini": 88, "bb_atom": 88, "100x": 88, "baseselect": 88, "nucleobas": 88, "n9": 88, "n7": 88, "c8": 88, "n2": [88, 109], "c5m": 88, "base_atom": 88, "boolselect": 88, "bynumselect": 88, "byresselect": 88, "resindic": [88, 90], "2669": 88, "2672": 88, "float_pattern": [88, 113], "2e": 88, "floatrangeselect": 88, "int_pattern": [88, 113], "sign": [88, 104, 111], "nucleicbackboneselect": 88, "o5": 88, "nucleicselect": 88, "awk": 88, "resi": 88, "printf": 88, "top_all27_prot_na": 88, "rtf": 88, "ura": 88, "cyt": 88, "gua": 88, "thy": 88, "da": 88, "dc": [88, 149], "dg": 88, "nucl_r": 88, "nucleicsugarselect": 88, "sug_atom": 88, "propertyselect": 88, "proteinselect": 88, "prot_r": 88, "top_all27_prot_lipid": 88, "convert_aa_cod": [88, 109], "range_pattern": [88, 113], "rangeselect": 88, "residselect": 88, "sameselect": 88, "subkeyword": [88, 113], "selectionpars": 88, "recurs": 88, "descent": 88, "climb": 88, "engr": 88, "mun": 88, "theo": 88, "misc": 88, "exp_pars": 88, "nest": [88, 102, 109], "grammar": 88, "xpression": 88, "inari": 88, "nari": 88, "erm": 88, "anticip": 88, "selectstr": 88, "goe": 88, "singlecharselect": 88, "smartsselect": 88, "rdkit_warg": 88, "thrown": 88, "gen_selection_class": 88, "per_object": [88, 90], "codebas": 88, "_topologyattrmeta": 88, "_protostringselect": 88, "_selector": 88, "clash": 88, "resnameselect": 88, "_selectionmeta": 88, "grab_not_keyword": 88, "pop": 88, "hit": 88, "dequ": 88, "is_keyword": 88, "selectiondict": 88, "logicoper": 88, "eof": 88, "join_separated_valu": 88, "return_empty_on_appli": 88, "363": 89, "n_re": 89, "n_seg": 89, "atom_resindex": [89, 92], "residue_segindex": [89, 92], "heirarchi": 89, "add_residu": [89, 92], "new_attr": 89, "residx": 89, "_add_new": 89, "resiz": [89, 102], "add_seg": [89, 92], "wasn": 89, "deepcopi": [89, 90], "del_topologyattr": [89, 92], "guessed_attribut": 89, "read_attribut": 89, "transtabl": 89, "upward": 89, "downward": 89, "_1": [89, 103], "_2d": 89, "lazi": 89, "ra": [89, 148], "sr": [89, 148, 149], "atoms2residu": 89, "aix": 89, "rix": 89, "atoms2seg": 89, "move_atom": 89, "move_residu": 89, "residues2atoms_1d": 89, "residues2atoms_2d": 89, "raix": 89, "residues2seg": 89, "segments2atoms_1d": 89, "segments2atoms_2d": 89, "saix": 89, "segments2residues_1d": 89, "segments2residues_2d": 89, "srix": 89, "make_downshift_arrai": 89, "upshift": 89, "nparent": 89, "downshift": 89, "children": 89, "atom2r": 89, "never": [89, 155], "topologypars": 90, "grai": 90, "keith": 90, "gubbin": 90, "joslin": 90, "monograph": 90, "oxford": 90, "press": [90, 108], "york": 90, "isbn": 90, "855602": 90, "atomattr": 90, "get_atom": 90, "get_residu": 90, "child": [90, 114], "get_seg": 90, "set_atom": 90, "set_residu": 90, "set_seg": 90, "segmentattribut": 90, "atomstringattr": 90, "atomindic": 90, "unambigu": 90, "epsilon14": 90, "lj": [90, 140, 149], "gbscreen": 90, "born": 90, "screen": [90, 102], "imaginari": [90, 108], "nonbondedindic": 90, "nonbond": [90, 148], "rmin14": 90, "rmin": 90, "recordtyp": [90, 138], "residueattr": 90, "residuestringattr": 90, "segmentattr": 90, "segmentstringattr": 90, "solventradii": 90, "bfactor_sett": 90, "bfactors_sett": 90, "skeleton": 90, "coerc": 90, "from_blank": 90, "topologyattribut": [90, 92, 133, 136], "is_guess": [90, 91], "apex": [91, 147], "__slots__": 91, "coupl": 91, "span": [91, 99, 103], "improper_tors": 91, "topologydict": 91, "topdict": 91, "categoris": 91, "ethanol": [91, 92], "td": 91, "smartli": 91, "ever": 91, "bondidx": 91, "btype": 91, "tg2": 91, "tg": 91, "select_bond": 91, "atomgroup_intersect": 91, "shortcut": [91, 113], "overhaul": 91, "selectbond": 91, "from_indic": 91, "dump_cont": 91, "to_indic": [91, 92], "radian": [91, 99, 103, 108], "predefin": 91, "atom4": 91, "_topologi": [91, 146], "urei": [91, 141], "bradlei": [91, 141], "ti": [92, 148], "all_coordin": 92, "topology_format": [92, 131, 147, 150], "in_memory_step": 92, "topologyreaderbas": [92, 134, 144, 147], "nth": [92, 148], "traj1": 92, "traj2": 92, "newr": 92, "alias": [92, 133, 136], "add_angl": 92, "hashabl": 92, "add_bond": 92, "ow_hw1": 92, "ow_hw2": 92, "ow_mw": 92, "mw": [92, 148], "add_dihedr": 92, "add_improp": 92, "hasattr": 92, "delete_angl": 92, "delete_bond": 92, "delete_dihedr": 92, "delete_improp": 92, "from_smil": 92, "smile": 92, "addh": 92, "generate_coordin": 92, "numconf": 92, "allchem": 92, "embedmultipleconf": 92, "cco": 92, "etkdgv3": 92, "param": [92, 149, 152], "edit": [92, 109], "upto": 92, "relabel": 92, "u3": 92, "assert": [92, 109], "conversionwarn": 94, "duplicatewarn": [94, 109], "aris": 94, "fileformatwarn": 94, "missingdatawarn": 94, "selectionwarn": 94, "streamwarn": [94, 109], "everywher": [94, 107], "atomneighborsearch": 95, "atom_group": 95, "_supportsarrai": [95, 103, 106], "_nestedsequ": [95, 103, 106], "capped_dist": [95, 99], "atom_list": 95, "calc_dist": 97, "mateusz": 98, "bieniek": 98, "acount": 98, "inspir": [98, 104], "seemingli": 98, "dispar": 98, "cholesterol": 98, "flop": 98, "gu2019": 98, "survivalprob": 98, "paola": 98, "multiscal": 98, "142": 98, "224907": 98, "4922445": 98, "secchi": [98, 112], "toma": [98, 112], "perez": [98, 112], "acl": [98, 112], "seung": [98, 112], "gu": [98, 112], "kang": [98, 112], "tien": [98, 112], "huynh": [98, 112], "yerko": [98, 112], "escalona": [98, 112], "jose": [98, 112], "antonio": [98, 112], "garat": [98, 112], "agustin": [98, 112], "mart": 98, "\u00ed": 98, "nez": 98, "isaac": [98, 112], "garc": 98, "juan": [98, 112], "\u00e1": 98, "ez": 98, "ruhong": [98, 112], "zhou": [98, 112], "pocket": [98, 112], "cx26": [98, 112], "hemichannel": [98, 112], "599": [98, 112], "612": [98, 112], "bpj": 98, "037": 98, "ruo": 98, "svetlana": 98, "baoukina": 98, "peter": 98, "tieleman": 98, "2064": 98, "2070": 98, "8b00933": 98, "list_of_set": 98, "encod": [98, 102, 108], "said": 98, "transloc": 98, "bracket": 98, "autocorel": 98, "timeseries_data": 98, "evolut": 98, "correct_intermitt": 98, "preprocess": [98, 155], "probabilti": 98, "consit": 98, "used_openmp": 99, "c_distanc": 99, "c_distances_openmp": 99, "standalon": [99, 132], "simd": 99, "vectoris": 99, "calc_bond": 99, "isa": 99, "vcl2": 99, "satisfi": [99, 140], "repositori": 99, "max_cutoff": [99, 104], "min_cutoff": 99, "return_dist": 99, "kdtree": [99, 106, 110], "bruteforc": 99, "nsgrid": [99, 110], "pkdtree": [99, 110], "n_pair": 99, "enumer": 99, "coord1": 99, "coord2": [99, 107], "periodickdtre": [99, 110], "fastn": [99, 104], "temporarili": 99, "2919": 99, "2229": 99, "2345": 99, "2670": 99, "2930": 99, "self_capped_dist": 99, "self_search": [99, 104], "coords1": [99, 107, 109], "coords2": [99, 107, 109], "linalg": [99, 103, 108, 111], "bondlength": 99, "calc_angl": 99, "coords3": 99, "apic": 99, "coords4": 99, "quadruplet": [99, 147], "3rd": 99, "calc_tors": 99, "newcoord": 99, "transform_rto": 99, "reciproc": 99, "transform_stor": 99, "augment_coordin": [99, 106], "vec": 99, "augment": [99, 146], "thick": 99, "augmented_index": 99, "original_index": 99, "all_coord": [99, 104], "undo_aug": [99, 106], "nreal": 99, "counterpart": 99, "minimize_vector": 99, "naiv": 99, "minimized_vector": 99, "_distanc": 99, "caution": 99, "_distances_openmp": 99, "dcdfile": 100, "namedtupl": [100, 101], "natom": [100, 101, 109, 110, 149], "besid": [100, 101, 151], "acknowledg": 100, "catdcd": 100, "4d": 100, "mdawiki": 100, "charmm_bitfield": 100, "bitfield": 100, "dcd_is_charmm": 100, "0x01": 100, "dcd_has_4dim": 100, "0x02": 100, "dcd_has_extra_block": 100, "0x04": 100, "charm": 100, "dcdframe": 100, "readfram": 100, "write_head": 100, "239": 100, "pretend": 100, "xtcfile": 101, "trrfile": 101, "read_direct_xvf": 101, "calc_offset": 101, "set_offset": 101, "trrframe": 101, "haven": 101, "_lambda": 101, "cartes": 101, "read_direct_x": 101, "xtcframe": 101, "strang": 101, "getlogg": 102, "modulenam": 102, "stop_log": 102, "progressmet": 102, "nullhandl": 102, "handler": [102, 109], "addhandl": 102, "advic": 102, "formatt": 102, "emit": [102, 136, 155], "whatev": 102, "__": 102, "tty": 102, "devic": 102, "desc": 102, "unspecifi": 102, "inf": 102, "resort": 102, "statist": 102, "eta": 102, "trace": [102, 103, 106], "textiowrapp": [102, 105], "sy": 102, "write_byt": 102, "ncol": 102, "stai": 102, "fallback": 102, "mininterv": 102, "maxinterv": 102, "minit": 102, "dynamic_minit": 102, "thread": [102, 110, 151, 152, 153, 154, 155, 156, 157, 158, 159], "cpu": 102, "errat": 102, "unicod": 102, "unit_scal": 102, "kilo": 102, "mega": 102, "dynamic_ncol": 102, "nrow": 102, "gui": [102, 119, 120], "instantan": [102, 112, 162, 163], "bar_format": 102, "l_bar": 102, "r_bar": 102, "0f": 102, "n_fmt": 102, "total_fmt": 102, "rate_fmt": 102, "var": 102, "elapsed_": 102, "rate_noinv": 102, "rate_noinv_fmt": 102, "rate_inv": 102, "rate_inv_fmt": 102, "unit_divisor": 102, "remaining_": 102, "set_postfix": 102, "lock_arg": 102, "hide": 102, "jupyt": 102, "notebook": 102, "clear_handl": 102, "logger_nam": 102, "vec1": 103, "vec2": 103, "collinear": 103, "lot": 103, "fuss": 103, "pdot": 103, "pnorm": 103, "bc": [103, 148], "cd": [103, 108, 112, 148], "\u03c0": 103, "stp": 103, "vec3": 103, "epip": 103, "_3": 103, "sarrus_det": 103, "sarru": 103, "det": 103, "triclinic_box": 103, "wikipedia": 103, "lattice_const": 103, "_type": 103, "_array_lik": 103, "_nested_sequ": 103, "_dtype_lik": 103, "_supportsdtyp": 103, "supportsindex": 103, "abc": 103, "_dtypedict": 103, "tsjerk": 103, "wassenaar": 103, "box_matrix": 103, "box_volum": 103, "necessit": 103, "frag": 103, "find_frag": 103, "bondlist": 103, "distinct": 103, "int32": 103, "versionadd": 103, "greatli": 104, "appendix": [104, 160], "552": 104, "frenkel": 104, "smit": 104, "brief": [104, 161], "cellsiz": 104, "rewrot": 104, "1290": 104, "cube": 104, "lmax": 104, "lmin": 104, "pseudobox": 104, "gridsearch": 104, "search_coord": 104, "nsresult": 104, "get_pair": 104, "get_pair_dist": 104, "regist": 104, "hald": 104, "demand": 104, "coontain": 104, "composit": [105, 111], "fileio": [105, 149], "wider": 105, "bufferedread": 105, "buffer_wrap": 105, "text_wrap": 105, "bz2file": 105, "xyz_bz2": 105, "pathlik": 105, "xb": 105, "compresslevel": 105, "gzipfil": 105, "mmtf_gz": 105, "1218": 105, "trivial": 105, "bytesio": 105, "discern": 105, "slowest": 105, "mtime": 105, "timestamp": 105, "rt": [105, 109], "leafsiz": 106, "condtion": 106, "treatment": 106, "suffer": 106, "poor": 106, "down": [106, 108], "get_indic": 106, "search_pair": 106, "search_tre": 106, "set_coord": 106, "pittsburgh": 107, "delgado": 107, "cornel": 107, "arizona": 107, "jla65": 107, "pitt": 107, "edu": 107, "bsd": [107, 108], "pyqcprot": 107, "brandei": 107, "dmitri": [107, 112], "1561": [107, 112], "1563": [107, 112], "conf": 107, "float64_t": 107, "condid": 107, "npfloat64_t": 107, "3xn": 107, "nx3": 107, "innerproduct": 107, "candid": 107, "e0": 107, "fastcalcrmsdandrot": 107, "euler": 108, "arcbal": 108, "christoph": 108, "gohlk": 108, "laboratori": 108, "fluoresc": 108, "california": 108, "irvin": 108, "claus": 108, "revis": 108, "epydoc": 108, "invert": 108, "inv": 108, "m0": 108, "m1": 108, "opengl": 108, "glmultmatrixd": 108, "jy": 108, "kz": 108, "sxyz": 108, "ryxi": 108, "tatic": 108, "otat": 108, "pariti": 108, "goldman": 108, "gem": 108, "472": 108, "475": [108, 112, 162, 163], "morgan": 108, "kaufmann": 108, "usa": 108, "1990": 108, "ken": 108, "shoemak": 108, "kirk": 108, "editor": [108, 112], "124": 108, "academ": [108, 112], "1992": 108, "charl": 108, "karnei": 108, "604": 108, "jmgm": 108, "itzhack": 108, "guidanc": 108, "1085": 108, "1087": 108, "2514": 108, "4654": 108, "vii": 108, "perspect": 108, "jame": 108, "arvo": 108, "ii": 108, "338": 108, "341": 108, "san": 108, "diego": 108, "b9780080507545500724": 108, "b978": 108, "050754": 108, "50072": 108, "spencer": 108, "320": 108, "323": 108, "b9780080507545500694": 108, "50069": 108, "324": 108, "331": 108, "b9780080507545500700": 108, "50070": 108, "heckbert": 108, "iv": 108, "229": 108, "192": [108, 148], "ljll": 108, "upmc": 108, "fr": [108, 148], "scientif": [108, 109, 112, 165], "20visualis": 108, "20k": 108, "20quaternion": 108, "diebel": 108, "attitud": 108, "kabsch": 108, "sep": 108, "s0567739478001680": 108, "berthold": 108, "horn": 108, "optic": 108, "629": 108, "642": 108, "1987": 108, "1364": 108, "josaa": 108, "000629": 108, "jmp": 108, "waveren": 108, "intel": 108, "asmo": 108, "eng": 108, "293748": 108, "234": 108, "345": 108, "xaxi": 108, "yaxi": 108, "zaxi": 108, "identity_matrix": 108, "rx": 108, "ry": 108, "rz": 108, "concatenate_matric": 108, "euler_from_matrix": 108, "rxyz": 108, "euler_matrix": 108, "is_same_transform": 108, "qx": 108, "quaternion_about_axi": 108, "qy": 108, "qz": 108, "quaternion_multipli": 108, "rq": 108, "quaternion_matrix": 108, "scale_matrix": 108, "translation_matrix": 108, "shear_matrix": 108, "random_rotation_matrix": 108, "rand": 108, "persp": 108, "decompose_matrix": 108, "tan": 108, "compose_matrix": 108, "trackbal": 108, "ball": 108, "drag": 108, "275": 108, "90583455": 108, "setax": 108, "setconstrain": 108, "400": 108, "2055924": 108, "cursor": 108, "constrain": 108, "getconstrain": 108, "arcball_nearest_axi": 108, "degen": 108, "r1": 108, "euler_from_quaternion": 108, "99810947": 108, "06146124": 108, "projection_from_matrix": 108, "projection_matrix": 108, "p0": 108, "p1": 108, "quaternion_imag": 108, "quaternion_r": 108, "reflection_from_matrix": 108, "reflection_matrix": 108, "v0": 108, "rotation_from_matrix": 108, "direc": 108, "rotaxi": 108, "scale_from_matrix": 108, "s0": 108, "shear_from_matrix": 108, "cross": [108, 120, 141, 149, 162, 163], "translation_from_matrix": 108, "anywher": [109, 152], "mathemat": [109, 110], "openani": [109, 114], "datasourc": 109, "isstream": 109, "socket": 109, "ead": 109, "rite": 109, "startswith": 109, "urllib2": 109, "urlopen": 109, "bzip": 109, "ppend": 109, "openf": 109, "greedy_splitext": 109, "extsep": 109, "splitext": 109, "home": 109, "joe": 109, "jai": 109, "stackoverflow": 109, "377017": 109, "realpath": 109, "get_ext": 109, "check_compressed_format": 109, "uppercas": [109, 146], "format_from_filename_extens": 109, "guess_format": 109, "insuffici": 109, "ordinari": 109, "pdb_": 109, "982": 109, "26000214": 109, "98200226": 109, "92599964": 109, "recognit": 109, "glue": 109, "thing": 109, "remot": 109, "seekabl": 109, "fake": 109, "expandvar": 109, "expandus": 109, "close_stream": 109, "fileno": 109, "descriptor": 109, "fsync": 109, "seek_set": 109, "seek_cur": 109, "seek_end": 109, "writelin": 109, "asiter": 109, "hasmethod": 109, "unique_int_1d": 109, "unique_row": 109, "arr": 109, "return_index": 109, "answer": 109, "r_idx": 109, "dupic": 109, "blocks_of": 109, "nblock": 109, "miniblock": 109, "group_same_or_consecutive_integ": 109, "fortranread": 109, "fortran": [109, 140], "fortran_format_regex": 109, "2i10": 109, "2x": 109, "3f20": 109, "f20": 109, "atomformat": 109, "totr": 109, "number_of_match": 109, "parse_fortran_format": 109, "edit_descriptor": 109, "totallength": 109, "tl": [109, 148], "ss": 109, "bn": 109, "bz": 109, "ew": 109, "dee": 109, "ifeax": 109, "numfmt": 109, "expresss": 109, "ifelax": 109, "fixedwidth_bin": 109, "nd": [109, 148], "correpsond": 109, "ltruncate_int": 109, "ndigit": 109, "1234": 109, "flatten_dict": 109, "parent_kei": 109, "shallow": 109, "6027615": 109, "1897": 109, "imran": 109, "amino_acid_cod": 109, "inverse_aa_cod": 109, "parse_residu": 109, "lys300": 109, "hz1": 109, "k300": 109, "4gb300": 109, "h6o": 109, "4gb": 109, "conv_float": 109, "comprehens": [109, 112, 165], "universe_valid": 109, "_cach": 109, "def__init__": 109, "keynam": 109, "lookup": [109, 148, 160], "others": 109, "_valid": 109, "store_init_argu": 109, "static_vari": 109, "equip": 109, "msg": 109, "279586": 109, "claudiu": 109, "warn_if_not_uniqu": 109, "groupmethod": 109, "assur": 109, "check_coord": 109, "coord_nam": 109, "allow_singl": 109, "enforce_copi": 109, "check_lengths_match": 109, "enforce_dtyp": 109, "convert_singl": 109, "reduce_result_if_singl": 109, "allow_atomgroup": 109, "coordsum": 109, "c_contigu": 109, "err": 109, "got": 109, "check_atomgroup_not_empti": 109, "deprecationwarn": 109, "old_nam": 109, "rebind": 109, "__name__": 109, "restructur": 109, "sphinx": 109, "role": 109, "new_nam": 109, "old_func": 109, "oldfunc": 109, "confus": 109, "new_func": 109, "_deprec": 109, "dedent_docstr": 109, "dedent": 109, "__doc__": 109, "textwrap": 109, "check_box": 109, "boxtyp": 109, "ortho": 109, "tri_vec": 109, "checked_box": 109, "cecked_box": 109, "why": 109, "framework": [110, 152, 165], "elsewher": 110, "multitud": 110, "neighborsearch": 110, "pxd": 110, "cimport": 110, "imagin": 110, "cdef": 110, "make_timestep": 110, "s4ake": 111, "rgyr": 111, "ipython": 111, "onlin": 111, "invari": 111, "gromo": [111, 128, 146, 148], "prompt": 111, "elementari": [111, 160], "adk_dim": 111, "easiest": [111, 165], "u_dims_adk": 111, "u_eq_adk": 111, "beckstein2009": 111, "ten": 111, "perilla": 111, "woolf": [111, 112], "insight": 111, "biol": [111, 112], "009": 111, "aspect": [111, 162], "rmsfit_qcp": 111, "potential_profil": 111, "nativecontact": 111, "multimer": 111, "transmembran": 111, "multim": 111, "dcd2xtc": 111, "amber2dcd": 111, "make_mthk_tetram": 111, "gowers2016": [112, 165], "ask": [112, 165], "upcom": 112, "supersed": 112, "agraw": 112, "2319": 112, "21787": 112, "barnoud": 112, "reddi": [112, 162, 163], "melo": 112, "domanski": 112, "buchoux": 112, "kennei": 112, "benthal": 112, "rostrup": 112, "15th": 112, "confer": 112, "austin": 112, "tx": 112, "25080": 112, "majora": 112, "629e541a": 112, "00e": 112, "theobald2005b": 112, "liu2010b": 112, "bansal2000b": 112, "hall2007b": 112, "secchi2014b": 112, "martinez": 112, "garcia": 112, "saez": 112, "seyler2015b": 112, "sl": 112, "mf": 112, "e1004568": 112, "tiberti2015b": 112, "e1004415": 112, "streamlin": [112, 163, 164], "streamlines_3d": [112, 162, 164], "chavent2014b": 112, "chavent": [112, 162, 163], "dahl": [112, 162, 163], "goos": [112, 162, 163], "jobard": [112, 162, 163], "methodologi": [112, 162, 163], "faradai": [112, 162, 163], "1039": [112, 162, 163], "c3fd00145h": [112, 162, 163], "smith2019": 112, "ziolek": 112, "gazzarrini": 112, "owen": 112, "lorenz": 112, "hyaluron": 112, "synovi": 112, "pccp": 112, "9845": 112, "9857": 112, "c9cp01532a": 112, "amadei": 112, "ceruso": 112, "nola": 112, "424": 112, "sici": [112, 160], "1097": 112, "0134": 112, "19990901": 112, "aid": [112, 160], "prot5": 112, "macia": 112, "lopez": 112, "romero": 112, "lupyan": 112, "zerbino": 112, "ortiz": 112, "deform": 112, "superfamili": 112, "biophi": 112, "88": [112, 148, 149], "1291": 112, "1299": 112, "1529": 112, "biophysj": 112, "052449": 112, "yang": 112, "song": 112, "carriquiri": 112, "jernigan": 112, "hiv": 112, "proteas": 112, "321": 112, "330": 112, "calandrini": 112, "pellegrini": 112, "calligari": 112, "hinsen": 112, "kneller": 112, "nmoldyn": 112, "spectroscop": 112, "experi": 112, "sfn": 112, "201": 112, "232": [112, 148], "1051": 112, "201112010": 112, "buyl": 112, "877": 112, "21105": 112, "joss": 112, "00877": 112, "dima": 112, "thirumalai": 112, "asymmetri": 112, "denatur": 112, "6564": 112, "6570": 112, "jp037128y": 112, "neumann": 112, "841": 112, "858": 112, "00268978300102721": 112, "buyl2013": 112, "colberg": 112, "h\u00f6fling": 112, "185": 112, "cpc": 112, "018": 112, "jakupov": 112, "meghann": 112, "agarw": 112, "chri": 112, "callowai": 112, "dillon": 112, "niederhut": 112, "shupe": 112, "ed": 112, "2021": [112, 141], "1b6fd038": 112, "005": 112, "yourscript": 112, "yourmodul": 112, "duecredit_en": 112, "bibtex": 112, "kalp": 113, "sixth": 113, "circumv": 113, "mytopologyattr": 113, "tricki": 113, "exhaust": 113, "fnmatch": 113, "gl": 113, "glx29": 113, "referenc": 113, "convention": 113, "arbitrarili": 113, "ag_upd": 113, "chained_ag_upd": 113, "static_ag": 113, "concatent": 113, "570": 113, "452": 113, "selectionwriterbas": [114, 115, 116, 117, 118, 119, 120], "_write_head": 114, "_translat": 114, "_write_tail": 114, "numterm": [114, 115, 116, 117, 118, 119], "preambl": [114, 115, 116, 117, 118, 119], "commentfmt": [114, 115, 116, 117, 118, 119], "presum": [114, 115, 116, 117, 118, 119], "macro": [115, 116, 117, 118, 119, 120], "mdanalysis001": [115, 116, 117, 119], "write_preambl": [115, 116, 117, 118, 119], "gromacs_command": 116, "mdanalysis002": 116, "default_numterm": 117, "singleword": [119, 120], "favourit": 120, "mda_protein": 120, "mda_mdanalysi": 120, "upper_satur": 120, "upper_sat": 120, "lower_satur": 120, "lower_sat": 120, "upper_unsatur": 120, "upper_unsat": 120, "lower_unsatur": 120, "lower_unsat": 120, "get_writ": 120, "defaultformat": 120, "briefli": 121, "atomno": 122, "resno": 122, "crdparser": [122, 147], "dmsparser": [124, 147], "atomnum": 124, "extendedpdbpars": [125, 136], "assembli": [127, 147], "symmetri": 127, "gmsparser": [127, 147], "gropars": [128, 147], "variat": 129, "bodi": [129, 149], "hoomdxmlpars": [130, 147], "placehold": 130, "anywai": 130, "chargegroup": [131, 147], "infer_system": 131, "moleculetyp": 131, "itppars": [131, 147], "include_dir": 131, "usr": 131, "itp_tip5p": 131, "hw2_charg": 131, "topol": 131, "tip5p": 131, "molnam": 131, "nrexcl": 131, "ifndef": 131, "hw1_charg": 131, "241": 131, "endif": 131, "nr": [131, 149], "opls_118": 131, "opls_119": 131, "opls_120": 131, "lp1": 131, "lp2": 131, "ifdef": 131, "extra_atom": 131, "lp3": 131, "lp4": 131, "settl": [131, 141, 149], "lammpsdataconvert": 132, "atom_styl": 132, "7151744275286681e": 132, "8684434743140471e": 132, "9285127961842125e": 132, "myfil": 132, "grab_datafil": 132, "read_data_timestep": 132, "ts_class": 132, "ts_kwarg": 132, "lammpsdumppars": 132, "1901": [133, 136], "mmtfparser": 133, "mol2pars": [134, 147], "subst_nam": 134, "fledg": 135, "minimalpars": 135, "incorrect": 136, "2422": 136, "corrupt": 136, "pdbqtparser": [137, 147], "pqrparser": [138, 147], "guess_flavour": 138, "variant": [138, 139], "flavour": 138, "no_chainid": 138, "psfparser": [139, 147], "atom_nam": [140, 146], "atomic_numb": [140, 149], "bonds_inc_hydrogen": 140, "bonds_without_hydrogen": 140, "angles_inc_hydrogen": 140, "angles_without_hydrogen": 140, "dihedrals_inc_hydrogen": 140, "dihedrals_without_hydrogen": 140, "atom_type_index": 140, "type_indic": [140, 147], "amber_atom_typ": 140, "residue_label": 140, "residue_point": 140, "chamber": 140, "stringent": 140, "2223": [140, 160], "scenario": 140, "toppars": [140, 147], "inc": 140, "amber10": 140, "amber12": 140, "parse_bond": 140, "num_per_record": 140, "numlin": 140, "parm7": [140, 147], "ambermd": 140, "parse_charg": 140, "parse_chunk": 140, "chunksiz": 140, "parse_dihedr": 140, "diha": 140, "dihh": 140, "sublist": 140, "nb": [140, 148, 149], "parse_el": 140, "pasr": 140, "2306": 140, "2651": 140, "unrecognis": 140, "parse_mass": 140, "parse_nam": 140, "parse_residx": 140, "pointer": 140, "parse_resnam": 140, "recrod": 140, "parse_type_indic": 140, "typeindic": 140, "parse_typ": 140, "parsesection_mapp": 140, "mapper": 140, "skipper": 140, "tpx": [141, 149], "73": [141, 148, 149, 163], "83": [141, 148, 149], "112": [141, 148, 149], "119": [141, 149], "127": [141, 148, 149], "2428": 141, "463": 141, "g96": 141, "mors": [141, 149], "fene": [141, 149], "restraint": [141, 149], "tabul": 141, "type3": 141, "quartic": [141, 149], "ryckaert": [141, 149], "belleman": 141, "tpr_resid_from_on": [141, 149], "itp": [141, 147, 150], "gromacs_dir": [141, 149], "src": [141, 149], "gmxdump": 141, "gmxlib": [141, 149], "tpxio": [141, 149], "gmxfio_rw": 141, "gmxfio_xdr": 141, "gmxfiofio": 141, "read_tpxhead": [141, 149], "tprreaderdevelop": 141, "read_": 141, "do_": 141, "extract_": 141, "txyzpars": [142, 147], "won": 143, "xyzpars": [143, 147], "guess_atom_typ": [145, 146, 148], "guess_atom_mass": [145, 146], "guess_atom_x": 146, "guess_x": 146, "guess_atom_el": [146, 148], "synonym": 146, "prm7": 146, "inde": 146, "prm19sbopc": 146, "epw": 146, "outcom": 146, "guessed_el": 146, "get_atom_mass": 146, "guess_aromat": 146, "guess_atom_charg": 146, "r_2": 146, "eachoth": 146, "superced": 146, "lewi": 146, "burn": 146, "somebodi": 146, "guess_gasteiger_charg": 146, "guess_improper_dihedr": 146, "guess_mass": 146, "atom_mass": 146, "validate_atom_typ": 146, "vaildat": 146, "anton": 147, "tprparser": 147, "lammpspars": [147, 150], "elem": 147, "dlpolypars": [147, 150], "xml": [147, 150], "fhiaimspars": [147, 150], "sole": 147, "histor": 147, "permut": 147, "bondtupl": 147, "_init_bond": 147, "atomel": 148, "br": 148, "c0": 148, "ca2": 148, "cal": 148, "cla": 148, "clal": 148, "cu": 148, "fe": 148, "fe2": 148, "iod": 148, "lit": 148, "mg": 148, "mg2": 148, "pot": [148, 149], "qc": 148, "qk": 148, "ql": 148, "qn": 148, "qr": 148, "sod": 148, "zn": 148, "227": 148, "028": 148, "8682": 148, "981539": 148, "243": 148, "948": 148, "74": [148, 149], "92159": 148, "au": 148, "96654": 148, "904": 148, "ba": [148, 149], "137": 148, "327": 148, "012182": 148, "bh": 148, "208": 148, "98037": 148, "bk": 148, "247": 148, "546": 148, "411": 148, "251": 148, "9332": 148, "cr": 148, "9961": 148, "db": 148, "dy": [148, 162], "er": 148, "167": 148, "252": 148, "eu": 148, "151": 148, "965": 148, "998": 148, "847": 148, "fm": [148, 160], "257": 148, "223": 148, "69": [148, 149], "gd": 148, "ge": 148, "0026": 148, "hf": 148, "178": 148, "hg": 148, "ho": 148, "164": 148, "93032": 148, "126": 148, "9045": 148, "ir": 148, "102": 148, "kr": 148, "la": 148, "138": 148, "9055": 148, "941": 148, "lr": [148, 149], "174": 148, "967": 148, "258": 148, "mn": 148, "93805": 148, "mo": 148, "94": [148, 149], "mt": 148, "266": 148, "98977": 148, "1797": 148, "989768": 148, "92": [148, 149], "90638": 148, "ni": 148, "6934": 148, "259": 148, "048": 148, "190": 148, "974": 148, "231": 148, "0359": 148, "pd": 148, "pm": [148, 160], "145": 148, "pr": [148, 152], "90765": 148, "pt": 148, "195": 148, "244": 148, "4678": 148, "025": 148, "186": 148, "rf": [148, 149], "261": 148, "rh": 148, "rn": 148, "ru": 148, "07": 148, "06": [148, 160], "sb": 148, "757": 148, "sc": 148, "95591": 148, "se": 148, "263": 148, "si": [148, 160], "0855": 148, "sn": 148, "118": [148, 149], "87": [148, 149], "62": [148, 149], "ta": 148, "9479": 148, "tb": 148, "92534": 148, "tc": 148, "te": 148, "0381": 148, "204": 148, "3833": 148, "168": 148, "93421": 148, "0289": 148, "9415": 148, "183": 148, "xe": 148, "90585": 148, "yb": 148, "173": 148, "zr": 148, "224": 148, "84": [148, 149], "AT": 148, "02": 148, "68": [148, 149], "BE": 148, "53": [148, 149], "43": [148, 149], "IN": 148, "52": [148, 149], "rr": 148, "03": 148, "86": [148, 149], "seealso": 148, "kv2dict": 148, "convertor": 148, "primit": 148, "table_atomel": 148, "propka": 148, "chlorid": 148, "bromid": 148, "nbr": 148, "calcium": 148, "ncal": 148, "nc0": 148, "nca2": 148, "cesium": 148, "nce": 148, "ncla": 148, "nclal": 148, "ncl": 148, "iodid": 148, "niod": 148, "iron": 148, "nfe": 148, "nfe2": 148, "lithium": 148, "nlit": 148, "nli": 148, "nql": 148, "magnesium": 148, "nmg": 148, "nmg2": 148, "nobl": 148, "gase": 148, "collid": 148, "nk": 148, "npot": 148, "nqk": 148, "sodium": 148, "nsod": 148, "nna": 148, "nqn": 148, "zink": 148, "nzn": 148, "copper": 148, "ncu": 148, "cerium": 148, "nqc": 148, "rubidium": 148, "nrb": 148, "nqr": 148, "nbc": 148, "nac": 148, "nmw": 148, "table_mass": 148, "atommass": 148, "nal": 148, "nam": 148, "nsb": 148, "nat": 148, "nba": 148, "nbk": 148, "nbe": 148, "nbi": 148, "nbh": 148, "90400": 148, "ncd": 148, "nca": 148, "08000": 148, "ncf": 148, "01100": 148, "11600": 148, "90000": 148, "45000": 148, "ncr": 148, "nco": 148, "54600": 148, "ncm": 148, "ndb": 148, "ndy": 148, "ner": 148, "neu": 148, "nfm": 148, "nf": 148, "99800": 148, "nfr": 148, "ngd": 148, "nga": 148, "nge": 148, "nau": 148, "nhf": 148, "nhe": 148, "00260": 148, "nho": 148, "00800": 148, "nin": 148, "90450": 148, "nir": 148, "84700": 148, "nkr": 148, "nla": 148, "nlr": 148, "npb": 148, "nlu": 148, "30500": 148, "nmn": 148, "nmt": 148, "nmd": 148, "nhg": 148, "nmo": 148, "00700": 148, "nnd": 148, "nne": 148, "17970": 148, "nnp": 148, "nni": 148, "nnb": 148, "nno": 148, "nOs": 148, "nO": 148, "99900": 148, "npd": 148, "97400": 148, "npt": [148, 160], "npu": 148, "npo": 148, "10200": 148, "npr": 148, "npm": 148, "npa": 148, "nra": 148, "nrn": 148, "nre": [148, 149], "nrh": 148, "46780": 148, "nru": 148, "nrf": 148, "nsm": 148, "nsc": 148, "nsg": 148, "nse": 148, "nsi": 148, "nag": 148, "nsr": 148, "06000": 148, "nta": 148, "ntc": 148, "nte": 148, "ntb": 148, "ntl": 148, "ntm": 148, "nsn": 148, "nti": 148, "nw": 148, "nu": 148, "nv": 148, "nxe": 148, "nyb": 148, "37000": 148, "nzr": 148, "ndummi": 148, "table_vdwradii": 148, "bondi": 148, "1964": 148, "441": 148, "451": 148, "j100785a001": 148, "rowland": 148, "taylor": 148, "organ": 148, "7384": 148, "7391": 148, "jp953141": 148, "mantina": 148, "5806": 148, "5812": 148, "jp8111556": 148, "r_vdw": 148, "naa": 148, "nrr": 148, "nhh": 148, "supported_vers": 149, "immut": 149, "f_angl": 149, "idef": 149, "f_angr": 149, "f_angresz": 149, "f_anharm_pol": 149, "f_bham": 149, "f_bham_lr": 149, "f_bond": 149, "f_cbtdih": 149, "f_cmap": 149, "f_com_pul": 149, "f_connbond": 149, "f_constr": 149, "f_constrnc": 149, "f_coul14": 149, "f_coul_lr": 149, "f_coul_recip": 149, "f_coul_sr": 149, "f_cross_bond_angl": 149, "f_cross_bond_bond": 149, "f_cubicbond": 149, "f_densityfit": 149, "f_dhdl_con": 149, "f_dihr": 149, "f_dihresviol": 149, "f_dispcorr": 149, "f_disr": 149, "f_disresviol": 149, "f_dkdl": 149, "f_dpd": 149, "f_dvdl": 149, "f_dvdl_bond": 149, "f_dvdl_coul": 149, "89": 149, "f_dvdl_restraint": 149, "f_dvdl_temperatur": 149, "f_dvdl_vdw": 149, "f_econserv": 149, "f_ekin": 149, "f_epot": 149, "f_eqm": 149, "f_etot": 149, "f_fbposr": 149, "f_fenebond": 149, "f_fourdih": 149, "f_g96angl": 149, "f_g96bond": 149, "f_gb12": 149, "f_gb13": 149, "f_gb14": 149, "f_gbpol": 149, "f_harmon": 149, "f_idih": 149, "f_linear_angl": 149, "f_lj": 149, "f_lj14": 149, "f_ljc14_q": 149, "f_ljc_pairs_nb": 149, "f_lj_lr": 149, "f_lj_recip": 149, "f_mors": 149, "f_npsolvat": 149, "f_nre": 149, "f_orir": 149, "f_oriresdev": 149, "f_pdih": 149, "f_pdispcorr": 149, "f_pidih": 149, "f_polar": 149, "f_posr": 149, "f_pre": 149, "f_quartic_angl": 149, "f_rbdih": 149, "f_restrangl": 149, "f_restrbond": 149, "f_restrdih": 149, "f_rf_excl": 149, "f_settl": 149, "f_tabangl": 149, "f_tabbond": 149, "f_tabbondsnc": 149, "f_tabdih": 149, "f_temp": 149, "f_thole_pol": 149, "f_urey_bradlei": 149, "f_vsite1": 149, "f_vsite2": 149, "f_vsite2fd": 149, "f_vsite3": 149, "f_vsite3fad": 149, "f_vsite3fd": 149, "f_vsite3out": 149, "f_vsite4fd": 149, "f_vsite4fdn": 149, "f_vsiten": 149, "f_vtemp_nolongerus": 149, "f_water_pol": 149, "ftupd": 149, "117": 149, "interaction_typ": 149, "g96bond": 149, "cubicbond": 149, "connbond": 149, "fenebond": 149, "tabbond": 149, "tabbondsnc": 149, "restraintpot": 149, "g96angl": 149, "restrangl": 149, "linear_angl": 149, "lin": 149, "cross_bond_bond": 149, "cross_bond_angl": 149, "urey_bradlei": 149, "qangl": 149, "tabangl": 149, "pdih": 149, "dih": 149, "rbdih": 149, "bell": 149, "restrdih": 149, "cbtdih": 149, "cbt": 149, "fourdih": 149, "idih": 149, "pidih": 149, "tabdih": 149, "gb12": 149, "pol": 149, "gb13": 149, "gb14": 149, "gbpol": 149, "npsolvat": 149, "nonpolar": 149, "lj14": 149, "coul14": 149, "coulomb": 149, "ljc14_q": 149, "ljc": 149, "ljc_nb": 149, "lj_sr": 149, "bham": 149, "buck": 149, "ham": 149, "lj_lr": 149, "bham_lr": 149, "dispcorr": 149, "disper": 149, "corr": 149, "coul_sr": 149, "coul_lr": 149, "rf_excl": 149, "excl": 149, "coul_recip": 149, "coul": 149, "recip": 149, "lj_recip": 149, "dpd": 149, "waterpol": 149, "thole": 149, "anharm_pol": 149, "anharm": 149, "posr": 149, "fbposr": 149, "bottom": 149, "disr": 149, "disresviol": 149, "viol": 149, "orir": 149, "ordev": 149, "ori": 149, "angr": 149, "angresz": 149, "dihr": 149, "dihresviol": 149, "constrnc": 149, "conn": 149, "vsite1": 149, "vsite2": 149, "vsite2fd": 149, "2fd": 149, "vsite3": 149, "vsite3fd": 149, "3fd": 149, "vsite3fad": 149, "3fad": 149, "vsite3out": 149, "3out": 149, "vsite4fd": 149, "4fd": 149, "vsite4fdn": 149, "4fdn": 149, "vsiten": 149, "com_pul": 149, "densityfit": 149, "eqm": 149, "quantum": 149, "ekin": 149, "etot": 149, "econ": 149, "vtemp": 149, "vir": 149, "pdispcorr": 149, "dh": 149, "dl_con": 149, "dvremain": 149, "dekin": 149, "dvc": 149, "dvcoul": 149, "dvv": 149, "dvvdw": 149, "dvb": 149, "dvbond": 149, "dvr": 149, "dvrestraint": 149, "dvt": 149, "dvtemperatur": 149, "ifunc": 149, "mb": 149, "qb": 149, "tp": 149, "typeb": 149, "ptype": 149, "resind": 149, "atomnumb": 149, "atomkind": 149, "element_symbol": 149, "ilist": 149, "ik": 149, "iatom": 149, "interactionkind": 149, "long_nam": 149, "atom_ndx": 149, "molblock": 149, "molb_typ": 149, "molb_nmol": 149, "molb_natoms_mol": 149, "molb_nposres_xa": 149, "molb_nposres_xb": 149, "moleculekind": 149, "dihe": 149, "impr": 149, "number_of_atom": 149, "number_of_residu": 149, "remap_angl": 149, "atom_start_ndx": 149, "remap_bond": 149, "remap_dih": 149, "remap_impr": 149, "mtop": 149, "nmoltyp": 149, "nmolblock": 149, "atnr": 149, "ntype": 149, "functyp": 149, "reppow": 149, "fudgeqq": 149, "tpxheader": 149, "ver_str": 149, "fver": 149, "fgen": 149, "file_tag": 149, "ngtc": 149, "fep_stat": 149, "lamb": 149, "bir": 149, "btop": 149, "bx": 149, "bv": 149, "bf": 149, "sizeoftprbodi": 149, "do_mtop": 149, "do_symtab": 149, "do_ffparam": 149, "do_iparam": 149, "do_moltyp": 149, "do_atom": 149, "do_resinfo": 149, "do_ilist": 149, "do_block": 149, "do_blocka": 149, "do_molblock": 149, "stuff": 149, "do_inputrec": 149, "tpxunpack": 149, "do_str": 149, "emul": 149, "gmx_fio_do_str": 149, "unpack_str": 149, "unsign": 149, "gmx_system_xdr": 149, "454": 149, "unpack_int64": 149, "unpack_uchar": 149, "unpack_uint64": 149, "unpack_ushort": 149, "tpxunpacker2020": 149, "inmemoryseri": 149, "from_unpack": 149, "unpack_fstr": 149, "define_unpack_r": 149, "prec": 149, "unpack_r": 149, "symtab": 149, "do_harm": 149, "do_rvec": 149, "do_symstr": 149, "extract_box_info": 149, "fileversion_err": 149, "ndo_int": 149, "gmx_fio_ndo_r": 149, "ndo_ivec": 149, "gmx_fio_ndo_rvec": 149, "ndo_real": 149, "ndo_rvec": 149, "do_tpxhead": 149, "cpp": 149, "glean": 150, "topolgi": 150, "transformation_1": 151, "transformation_2": 151, "up_by_2": 151, "transformationbas": [151, 152], "_transform": [151, 152], "roughli": 151, "up_by_x_class": 151, "up_by_x_func": 151, "functool": 151, "up_by_x": 151, "notabl": 151, "max_thread": [151, 152, 153, 154, 155, 156, 157, 158, 159], "assess": 151, "paralleliz": [151, 152, 153, 154, 155, 156, 157, 158, 159], "ultil": 151, "oversubscrib": [151, 152], "hyper": 151, "openbla": [151, 152], "engin": [151, 152], "dask": [151, 152], "threadpoolctl": 151, "environment": 151, "varibal": 151, "omp_num_thread": [151, 152], "mkl_num_thread": 151, "openblas_num_thread": 151, "blis_num_thread": 151, "positionaverag": [151, 152], "boxdimens": 151, "kill": 152, "subscrib": [152, 165], "hyperthread": 152, "2950": 152, "2996": 152, "newtransform": 152, "_param": 152, "new_transform": 152, "set_dimens": 153, "fit_transl": 154, "suport": 154, "closur": [154, 157, 158, 159], "fit_rot_tran": 154, "kulke2022": 155, "check_continu": 155, "b6": 155, "orthonorm": 155, "dimer": 155, "martin": 155, "kulk": 155, "josh": 155, "vermaa": 155, "6161": 155, "6171": 155, "2c00327": 155, "avg_fram": 156, "check_reset": 156, "resetarrai": 156, "current_avg": 156, "arround": 157, "bon": 159, "66053892103219": 160, "602176565": 160, "f_": 160, "precomput": 160, "get_conversion_factor": 160, "densityunit_factor": 160, "concentr": 160, "n_avogadro": 160, "rho0": 160, "h2o": 160, "rho_0": 160, "unit_typ": 160, "conversion_factor": 160, "incompat": [160, 161], "boltzmann_const": 160, "008314462159": 160, "02214129e": 160, "calori": 160, "184": 160, "electric_const": 160, "00552635": 160, "elementary_charg": 160, "602176565e": 160, "codata": 160, "nist": 160, "thermochem": 160, "80000": 160, "lengthunit_factor": 160, "femtomet": 160, "nanomet": 160, "picomet": 160, "molarmass": 160, "016": 160, "985": 160, "001": 160, "298k": 160, "1atm": 160, "jorgensen1998": 160, "1660": 160, "5389210321898": 160, "37184690488927": 160, "85655608913766": 160, "886382818497438": 160, "00628806551247": 160, "timeunit_factor": 160, "45482949774598": 160, "microsecond": 160, "millisecond": 160, "nanosecond": 160, "sec": 160, "\u03bc": 160, "speedunit_factor": 160, "04888821": 160, "forceunit_factor": 160, "66053892103219e": 160, "newton": 160, "2390057361376673": 160, "chargeunit_factor": 160, "602176487": 160, "8000000e": 160, "ev": 160, "01036426919046959": 160, "jorgensen": 160, "corki": 160, "jenson": 160, "1179": 160, "1186": 160, "1998": 160, "1096": 160, "987x": 160, "19980730": 160, "jcc6": 160, "semant": 161, "patch": 161, "stabil": 161, "soon": 161, "tyler": [162, 163], "matthieu": [162, 163], "generate_streamlin": [162, 163], "flow": [162, 163], "analyi": [162, 163], "topology_file_path": [162, 163], "trajectory_file_path": [162, 163], "grid_spac": [162, 163], "mda_select": [162, 163], "end_fram": [162, 163], "maximum_delta_magnitud": [162, 163], "num_cor": [162, 163], "g_filter": [162, 163], "\u1d43chavent2014": 162, "excess": [162, 163], "dx_arrai": [162, 163], "dy_arrai": [162, 163], "average_displac": 162, "standard_deviation_of_displac": 162, "testing_filt": [162, 163], "73000049591": 162, "1225": [162, 163], "96008301": 162, "5799999237": 162, "1224": [162, 163], "34008789": 162, "linspac": 162, "1200": [162, 163], "linewidth": 162, "testing_streamlin": 162, "dpi": 162, "anna": [162, 163], "carolin": [162, 163], "stone": [162, 163], "bruno": [162, 163], "generate_streamlines_3d": [162, 163], "viru": 163, "capsid": 163, "\u1d47chavent2014": 163, "dz_arrai": 163, "mayavi": 163, "mlab": 163, "x_lower": 163, "x_upper": 163, "y_lower": 163, "y_upper": 163, "z_lower": 163, "z_upper": 163, "grid_spacing_valu": 163, "1j": 163, "bgcolor": 163, "800": 163, "fgcolor": 163, "z_valu": 163, "st": 163, "line_width": 163, "seedtyp": 163, "integration_direct": 163, "streamline_typ": 163, "tube": 163, "tube_filt": 163, "widget": 163, "point1": 163, "point2": 163, "scene": 163, "z_plus_view": 163, "test_streamplot_3d": 163, "compel": 163, "tailor": 164, "streamplot": 164, "aug": 165, "mdnalysi": 165, "mail": 165, "agre": 165, "forg": 165, "upgrad": 165, "tutori": 165, "gpl": 165, "git": 165, "clone": 165}, "objects": {"MDAnalysis.analysis": [[0, 0, 0, "-", "align"], [1, 0, 0, "-", "atomicdistances"], [2, 0, 0, "-", "base"], [3, 0, 0, "-", "bat"], [4, 0, 0, "-", "contacts"], [6, 0, 0, "-", "density"], [7, 0, 0, "-", "dielectric"], [8, 0, 0, "-", "diffusionmap"], [9, 0, 0, "-", "dihedrals"], [10, 0, 0, "-", "distances"], [19, 0, 0, "-", "gnm"], [22, 0, 0, "-", "helix_analysis"], [23, 0, 0, "-", "hole2"], [25, 0, 0, "-", "leaflet"], [28, 0, 0, "-", "lineardensity"], [29, 0, 0, "-", "msd"], [30, 0, 0, "-", "nucleicacids"], [31, 0, 0, "-", "nuclinfo"], [32, 0, 0, "-", "pca"], [33, 0, 0, "-", "polymer"], [34, 0, 0, "-", "psa"], [35, 0, 0, "-", "rdf"], [36, 0, 0, "-", "rms"], [37, 0, 0, "-", "waterdynamics"]], "MDAnalysis.analysis.align": [[0, 1, 1, "", "AlignTraj"], [0, 1, 1, "", "AverageStructure"], [0, 3, 1, "", "_fit_to"], [0, 3, 1, "", "alignto"], [0, 3, 1, "", "fasta2select"], [0, 3, 1, "", "get_matching_atoms"], [0, 3, 1, "", "rotation_matrix"], [0, 3, 1, "", "sequence_alignment"]], "MDAnalysis.analysis.align.AlignTraj": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AlignTraj.results": [[0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AverageStructure": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "positions"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.align.AverageStructure.results": [[0, 2, 1, "", "positions"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.atomicdistances": [[1, 1, 1, "", "AtomicDistances"]], "MDAnalysis.analysis.atomicdistances.AtomicDistances": [[1, 2, 1, "", "n_atoms"], [1, 2, 1, "", "n_frames"], [1, 2, 1, "", "results"]], "MDAnalysis.analysis.base": [[2, 1, 1, "", "AnalysisBase"], [2, 1, 1, "", "AnalysisFromFunction"], [2, 1, 1, "", "Results"], [2, 3, 1, "", "analysis_class"]], "MDAnalysis.analysis.base.AnalysisBase": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "results"], [2, 4, 1, "", "run"], [2, 2, 1, "", "times"]], "MDAnalysis.analysis.base.AnalysisFromFunction.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.base.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.bat": [[3, 1, 1, "", "BAT"]], "MDAnalysis.analysis.bat.BAT": [[3, 4, 1, "", "Cartesian"], [3, 5, 1, "", "atoms"], [3, 4, 1, "", "load"], [3, 4, 1, "", "run"], [3, 4, 1, "", "save"]], "MDAnalysis.analysis.bat.BAT.results": [[3, 2, 1, "", "bat"]], "MDAnalysis.analysis.contacts": [[4, 1, 1, "", "Contacts"], [4, 3, 1, "", "contact_matrix"], [4, 3, 1, "", "hard_cut_q"], [4, 3, 1, "", "q1q2"], [4, 3, 1, "", "radius_cut_q"], [4, 3, 1, "", "soft_cut_q"]], "MDAnalysis.analysis.contacts.Contacts.results": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.contacts.Contacts": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.data": [[5, 0, 0, "-", "filenames"]], "MDAnalysis.analysis.data.filenames": [[5, 6, 1, "", "Janin_ref"], [5, 6, 1, "", "Rama_ref"]], "MDAnalysis.analysis.density": [[6, 1, 1, "", "Density"], [6, 1, 1, "", "DensityAnalysis"]], "MDAnalysis.analysis.density.Density": [[6, 4, 1, "", "centers"], [6, 4, 1, "", "check_compatible"], [6, 4, 1, "", "convert_density"], [6, 4, 1, "", "convert_length"], [6, 2, 1, "", "default_format"], [6, 2, 1, "", "delta"], [6, 2, 1, "", "edges"], [6, 4, 1, "", "export"], [6, 2, 1, "", "grid"], [6, 5, 1, "", "interpolated"], [6, 5, 1, "", "interpolation_spline_order"], [6, 4, 1, "", "load"], [6, 4, 1, "", "make_density"], [6, 2, 1, "", "origin"], [6, 4, 1, "", "resample"], [6, 4, 1, "", "resample_factor"], [6, 4, 1, "", "save"], [6, 2, 1, "", "units"]], "MDAnalysis.analysis.density.DensityAnalysis": [[6, 4, 1, "", "_set_user_grid"], [6, 2, 1, "", "density"], [6, 4, 1, "", "run"]], "MDAnalysis.analysis.density.DensityAnalysis.results": [[6, 2, 1, "", "density"]], "MDAnalysis.analysis.dielectric": [[7, 1, 1, "", "DielectricConstant"]], "MDAnalysis.analysis.dielectric.DielectricConstant.results": [[7, 2, 1, "", "M"], [7, 2, 1, "", "M2"], [7, 2, 1, "", "eps"], [7, 2, 1, "", "eps_mean"], [7, 2, 1, "", "fluct"]], "MDAnalysis.analysis.diffusionmap": [[8, 1, 1, "", "DiffusionMap"], [8, 1, 1, "", "DistanceMatrix"]], "MDAnalysis.analysis.diffusionmap.DiffusionMap": [[8, 2, 1, "", "eigenvalues"], [8, 4, 1, "", "run"], [8, 4, 1, "", "transform"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix": [[8, 2, 1, "", "atoms"], [8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results": [[8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.dihedrals": [[9, 1, 1, "", "Dihedral"], [9, 1, 1, "", "Janin"], [9, 1, 1, "", "Ramachandran"]], "MDAnalysis.analysis.dihedrals.Dihedral": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Dihedral.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Janin": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Janin.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Ramachandran": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Ramachandran.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.distances": [[10, 3, 1, "", "between"], [10, 3, 1, "", "contact_matrix"], [10, 3, 1, "", "dist"], [10, 3, 1, "", "distance_array"], [10, 3, 1, "", "self_distance_array"]], "MDAnalysis.analysis.encore": [[12, 0, 0, "-", "bootstrap"], [14, 0, 0, "-", "confdistmatrix"], [15, 0, 0, "-", "covariance"], [17, 0, 0, "-", "similarity"], [18, 0, 0, "-", "utils"]], "MDAnalysis.analysis.encore.bootstrap": [[12, 3, 1, "", "bootstrapped_matrix"], [12, 3, 1, "", "get_distance_matrix_bootstrap_samples"], [12, 3, 1, "", "get_ensemble_bootstrap_samples"]], "MDAnalysis.analysis.encore.clustering": [[13, 0, 0, "-", "ClusterCollection"], [13, 0, 0, "-", "ClusteringMethod"], [13, 0, 0, "-", "affinityprop"], [13, 0, 0, "-", "cluster"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, 1, 1, "", "Cluster"], [13, 1, 1, "", "ClusterCollection"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster": [[13, 2, 1, "", "centroid"], [13, 2, 1, "", "elements"], [13, 2, 1, "", "id"], [13, 2, 1, "", "metadata"], [13, 2, 1, "", "size"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection": [[13, 2, 1, "", "clusters"], [13, 4, 1, "", "get_centroids"], [13, 4, 1, "", "get_ids"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, 1, 1, "", "AffinityPropagation"], [13, 1, 1, "", "AffinityPropagationNative"], [13, 1, 1, "", "ClusteringMethod"], [13, 1, 1, "", "DBSCAN"], [13, 1, 1, "", "KMeans"], [13, 3, 1, "", "encode_centroid_info"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans": [[13, 2, 1, "", "accepts_distance_matrix"]], "MDAnalysis.analysis.encore.clustering.affinityprop": [[13, 3, 1, "", "AffinityPropagation"]], "MDAnalysis.analysis.encore.clustering.cluster": [[13, 3, 1, "", "cluster"]], "MDAnalysis.analysis.encore.confdistmatrix": [[14, 3, 1, "", "conformational_distance_matrix"], [14, 3, 1, "", "get_distance_matrix"], [14, 3, 1, "", "set_rmsd_matrix_elements"]], "MDAnalysis.analysis.encore.covariance": [[15, 3, 1, "", "covariance_matrix"], [15, 3, 1, "", "ml_covariance_estimator"], [15, 3, 1, "", "shrinkage_covariance_estimator"]], "MDAnalysis.analysis.encore.cutils": [[18, 3, 1, "", "PureRMSD"]], "MDAnalysis.analysis.encore.dimensionality_reduction": [[16, 0, 0, "-", "DimensionalityReductionMethod"], [16, 0, 0, "-", "reduce_dimensionality"], [16, 0, 0, "-", "stochasticproxembed"]], "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod": [[16, 1, 1, "", "DimensionalityReductionMethod"], [16, 1, 1, "", "PrincipalComponentAnalysis"], [16, 1, 1, "", "StochasticProximityEmbeddingNative"]], "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, 3, 1, "", "reduce_dimensionality"]], "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, 3, 1, "", "StochasticProximityEmbedding"]], "MDAnalysis.analysis.encore.similarity": [[17, 3, 1, "", "ces"], [17, 3, 1, "", "ces_convergence"], [17, 3, 1, "", "clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_gen_kde_pdfs"], [17, 3, 1, "", "dimred_ensemble_similarity"], [17, 3, 1, "", "discrete_jensen_shannon_divergence"], [17, 3, 1, "", "discrete_kullback_leibler_divergence"], [17, 3, 1, "", "dres"], [17, 3, 1, "", "dres_convergence"], [17, 3, 1, "", "gen_kde_pdfs"], [17, 3, 1, "", "harmonic_ensemble_similarity"], [17, 3, 1, "", "hes"], [17, 3, 1, "", "prepare_ensembles_for_convergence_increasing_window"], [17, 3, 1, "", "write_output"]], "MDAnalysis.analysis.encore.utils": [[18, 1, 1, "", "ParallelCalculation"], [18, 1, 1, "", "TriangularMatrix"], [18, 3, 1, "", "merge_universes"], [18, 3, 1, "", "trm_indices"], [18, 3, 1, "", "trm_indices_diag"], [18, 3, 1, "", "trm_indices_nodiag"]], "MDAnalysis.analysis.encore.utils.ParallelCalculation": [[18, 2, 1, "", "args"], [18, 2, 1, "", "function"], [18, 2, 1, "", "kwargs"], [18, 2, 1, "", "n_jobs"], [18, 2, 1, "", "nruns"], [18, 4, 1, "", "run"], [18, 4, 1, "", "worker"]], "MDAnalysis.analysis.encore.utils.TriangularMatrix": [[18, 4, 1, "", "as_array"], [18, 4, 1, "", "loadz"], [18, 4, 1, "", "savez"]], "MDAnalysis.analysis.gnm": [[19, 1, 1, "", "GNMAnalysis"], [19, 1, 1, "", "closeContactGNMAnalysis"], [19, 3, 1, "", "generate_grid"], [19, 3, 1, "", "order_list"]], "MDAnalysis.analysis.gnm.GNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.GNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.hbonds": [[21, 0, 0, "-", "hbond_autocorrel"]], "MDAnalysis.analysis.hole2": [[23, 1, 1, "", "HoleAnalysis"], [23, 3, 1, "", "hole"], [23, 0, 0, "-", "templates"], [23, 0, 0, "-", "utils"]], "MDAnalysis.analysis.hole2.HoleAnalysis": [[23, 4, 1, "", "bin_radii"], [23, 4, 1, "", "create_vmd_surface"], [23, 4, 1, "", "delete_temporary_files"], [23, 4, 1, "", "gather"], [23, 4, 1, "", "guess_cpoint"], [23, 4, 1, "", "histogram_radii"], [23, 4, 1, "", "min_radius"], [23, 2, 1, "", "outfiles"], [23, 4, 1, "", "over_order_parameters"], [23, 4, 1, "", "plot"], [23, 4, 1, "", "plot3D"], [23, 4, 1, "", "plot3D_order_parameters"], [23, 4, 1, "", "plot_mean_profile"], [23, 4, 1, "", "plot_order_parameters"], [23, 2, 1, "", "profiles"], [23, 4, 1, "", "run"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.HoleAnalysis.results": [[23, 2, 1, "", "outfiles"], [23, 2, 1, "", "profiles"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.templates": [[23, 6, 1, "", "SIMPLE2_RAD"]], "MDAnalysis.analysis.hole2.utils": [[23, 3, 1, "", "check_and_fix_long_filename"], [23, 3, 1, "", "collect_hole"], [23, 3, 1, "", "create_vmd_surface"], [23, 3, 1, "", "run_hole"], [23, 3, 1, "", "write_simplerad2"]], "MDAnalysis.analysis.hydrogenbonds": [[24, 0, 0, "-", "hbond_analysis"], [20, 0, 0, "-", "hbond_autocorrel"], [38, 0, 0, "-", "wbridge_analysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, 1, 1, "", "HydrogenBondAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis": [[24, 4, 1, "", "count_by_ids"], [24, 4, 1, "", "count_by_time"], [24, 4, 1, "", "count_by_type"], [24, 4, 1, "", "guess_acceptors"], [24, 4, 1, "", "guess_donors"], [24, 4, 1, "", "guess_hydrogens"], [24, 2, 1, "", "hbonds"], [24, 4, 1, "", "lifetime"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results": [[24, 2, 1, "", "hbonds"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, 1, 1, "", "HydrogenBondAutoCorrel"], [20, 3, 1, "", "find_hydrogen_donors"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel": [[20, 4, 1, "", "run"], [20, 4, 1, "", "solve"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, 1, 1, "", "WaterBridgeAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis": [[38, 2, 1, "", "DEFAULT_ACCEPTORS"], [38, 2, 1, "", "DEFAULT_DONORS"], [38, 4, 1, "", "count_by_time"], [38, 4, 1, "", "count_by_type"], [38, 4, 1, "", "generate_table"], [38, 2, 1, "", "network"], [38, 2, 1, "", "r_cov"], [38, 2, 1, "", "table"], [38, 2, 1, "", "timeseries"], [38, 2, 1, "", "timesteps"], [38, 4, 1, "", "timesteps_by_type"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results": [[38, 2, 1, "", "network"], [38, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.leaflet": [[25, 1, 1, "", "LeafletFinder"], [25, 3, 1, "", "optimize_cutoff"]], "MDAnalysis.analysis.leaflet.LeafletFinder": [[25, 4, 1, "", "group"], [25, 4, 1, "", "groups"], [25, 4, 1, "", "groups_iter"], [25, 4, 1, "", "sizes"], [25, 4, 1, "", "update"], [25, 4, 1, "", "write_selection"]], "MDAnalysis.analysis.legacy": [[26, 0, 0, "-", "x3dna"]], "MDAnalysis.analysis.legacy.x3dna": [[26, 7, 1, "", "ApplicationError"], [26, 1, 1, "", "X3DNA"], [26, 1, 1, "", "X3DNAtraj"]], "MDAnalysis.analysis.legacy.x3dna.X3DNA": [[26, 4, 1, "", "collect"], [26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj": [[26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "run_x3dna"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.lineardensity": [[28, 1, 1, "", "LinearDensity"], [28, 1, 1, "", "Results"]], "MDAnalysis.analysis.lineardensity.LinearDensity": [[28, 2, 1, "", "Note"]], "MDAnalysis.analysis.lineardensity.LinearDensity.results.x": [[28, 2, 1, "", "char"], [28, 2, 1, "", "char_std"], [28, 2, 1, "", "charge_density"], [28, 2, 1, "", "charge_density_stddev"], [28, 2, 1, "", "dim"], [28, 2, 1, "", "hist_bin_edges"], [28, 2, 1, "", "mass_density"], [28, 2, 1, "", "mass_density_stddev"], [28, 2, 1, "", "pos"], [28, 2, 1, "", "pos_std"], [28, 2, 1, "", "slice_volume"]], "MDAnalysis.analysis.msd": [[29, 1, 1, "", "EinsteinMSD"]], "MDAnalysis.analysis.msd.EinsteinMSD": [[29, 2, 1, "", "ag"], [29, 2, 1, "", "dim_fac"], [29, 2, 1, "", "n_frames"], [29, 2, 1, "", "n_particles"], [29, 4, 1, "", "run"]], "MDAnalysis.analysis.msd.EinsteinMSD.results": [[29, 2, 1, "", "msds_by_particle"], [29, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.nucleicacids": [[30, 1, 1, "", "NucPairDist"], [30, 1, 1, "", "WatsonCrickDist"]], "MDAnalysis.analysis.nucleicacids.NucPairDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.NucPairDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nuclinfo": [[31, 3, 1, "", "hydroxyl"], [31, 3, 1, "", "major_pair"], [31, 3, 1, "", "minor_pair"], [31, 3, 1, "", "phase_as"], [31, 3, 1, "", "phase_cp"], [31, 3, 1, "", "pseudo_dihe_baseflip"], [31, 3, 1, "", "tors"], [31, 3, 1, "", "tors_alpha"], [31, 3, 1, "", "tors_beta"], [31, 3, 1, "", "tors_chi"], [31, 3, 1, "", "tors_delta"], [31, 3, 1, "", "tors_eps"], [31, 3, 1, "", "tors_gamma"], [31, 3, 1, "", "tors_zeta"], [31, 3, 1, "", "wc_pair"]], "MDAnalysis.analysis.pca": [[32, 1, 1, "", "PCA"], [32, 3, 1, "", "cosine_content"], [32, 3, 1, "", "cumulative_overlap"], [32, 3, 1, "", "rmsip"]], "MDAnalysis.analysis.pca.PCA": [[32, 2, 1, "", "cumulated_variance"], [32, 4, 1, "", "cumulative_overlap"], [32, 2, 1, "", "p_components"], [32, 4, 1, "", "project_single_frame"], [32, 4, 1, "", "rmsip"], [32, 4, 1, "", "run"], [32, 4, 1, "", "transform"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.pca.PCA.results": [[32, 2, 1, "", "cumulated_variance"], [32, 2, 1, "", "p_components"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.polymer": [[33, 1, 1, "", "PersistenceLength"], [33, 3, 1, "", "fit_exponential_decay"], [33, 3, 1, "", "sort_backbone"]], "MDAnalysis.analysis.polymer.PersistenceLength": [[33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 4, 1, "", "plot"]], "MDAnalysis.analysis.polymer.PersistenceLength.results": [[33, 2, 1, "", "bond_autocorrelation"], [33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 2, 1, "", "x"]], "MDAnalysis.analysis.psa": [[34, 1, 1, "", "PSAPair"], [34, 1, 1, "", "PSAnalysis"], [34, 1, 1, "", "Path"], [34, 3, 1, "", "discrete_frechet"], [34, 3, 1, "", "dist_mat_to_vec"], [34, 3, 1, "", "get_coord_axes"], [34, 3, 1, "", "get_msd_matrix"], [34, 3, 1, "", "get_path_metric_func"], [34, 3, 1, "", "hausdorff"], [34, 3, 1, "", "hausdorff_avg"], [34, 3, 1, "", "hausdorff_neighbors"], [34, 3, 1, "", "hausdorff_wavg"], [34, 3, 1, "", "sqnorm"]], "MDAnalysis.analysis.psa.PSAPair": [[34, 2, 1, "", "hausdorff_pair"], [34, 2, 1, "", "matrix_id"], [34, 2, 1, "", "nearest_neighbors"], [34, 2, 1, "", "npaths"], [34, 2, 1, "", "pair_id"]], "MDAnalysis.analysis.psa.PSAnalysis": [[34, 2, 1, "", "D"], [34, 4, 1, "", "cluster"], [34, 4, 1, "", "generate_paths"], [34, 4, 1, "", "get_num_atoms"], [34, 4, 1, "", "get_num_paths"], [34, 4, 1, "", "get_pairwise_distances"], [34, 4, 1, "", "get_paths"], [34, 5, 1, "", "hausdorff_pairs"], [34, 4, 1, "", "load"], [34, 5, 1, "", "nearest_neighbors"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "paths"], [34, 4, 1, "", "plot"], [34, 4, 1, "", "plot_annotated_heatmap"], [34, 4, 1, "", "plot_nearest_neighbors"], [34, 5, 1, "", "psa_pairs"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 4, 1, "", "run_pairs_analysis"], [34, 4, 1, "", "save_paths"], [34, 2, 1, "", "select"], [34, 2, 1, "", "u_reference"], [34, 2, 1, "", "universes"]], "MDAnalysis.analysis.psa.Path": [[34, 4, 1, "", "fit_to_reference"], [34, 4, 1, "", "get_num_atoms"], [34, 2, 1, "", "path"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 2, 1, "", "select"], [34, 4, 1, "", "to_path"], [34, 2, 1, "", "u_fitted"], [34, 2, 1, "", "u_original"], [34, 2, 1, "", "u_reference"]], "MDAnalysis.analysis.rdf": [[35, 1, 1, "", "InterRDF"], [35, 1, 1, "", "InterRDF_s"]], "MDAnalysis.analysis.rdf.InterRDF": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 4, 1, "", "get_cdf"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rms": [[36, 1, 1, "", "RMSD"], [36, 1, 1, "", "RMSF"], [36, 3, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD.results": [[36, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD": [[36, 2, 1, "", "rmsd"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.rms.RMSF.results": [[36, 2, 1, "", "rmsf"]], "MDAnalysis.analysis.rms.RMSF": [[36, 2, 1, "", "rmsf"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics": [[37, 1, 1, "", "AngularDistribution"], [37, 1, 1, "", "MeanSquareDisplacement"], [37, 1, 1, "", "SurvivalProbability"], [37, 1, 1, "", "WaterOrientationalRelaxation"]], "MDAnalysis.analysis.waterdynamics.AngularDistribution": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.SurvivalProbability": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation": [[37, 4, 1, "", "lg2"], [37, 4, 1, "", "run"]], "MDAnalysis.auxiliary": [[40, 0, 0, "-", "EDR"], [41, 0, 0, "-", "XVG"], [44, 0, 0, "-", "__init__"], [42, 0, 0, "-", "base"], [43, 0, 0, "-", "core"]], "MDAnalysis.auxiliary.EDR": [[40, 1, 1, "", "EDRReader"], [40, 1, 1, "", "EDRStep"]], "MDAnalysis.auxiliary.EDR.EDRReader": [[40, 2, 1, "", "_auxdata"], [40, 2, 1, "", "_n_steps"], [40, 2, 1, "", "data_dict"], [40, 4, 1, "", "get_data"], [40, 4, 1, "", "read_all_times"], [40, 2, 1, "", "terms"], [40, 2, 1, "", "unit_dict"]], "MDAnalysis.auxiliary.XVG": [[41, 1, 1, "", "XVGFileReader"], [41, 1, 1, "", "XVGReader"], [41, 1, 1, "", "XVGStep"], [41, 3, 1, "", "uncomment"]], "MDAnalysis.auxiliary.XVG.XVGFileReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.XVG.XVGReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.base": [[42, 1, 1, "", "AuxFileReader"], [42, 1, 1, "", "AuxReader"], [42, 1, 1, "", "AuxStep"]], "MDAnalysis.auxiliary.base.AuxFileReader": [[42, 2, 1, "", "auxfile"], [42, 4, 1, "", "close"]], "MDAnalysis.auxiliary.base.AuxReader": [[42, 4, 1, "", "attach_auxiliary"], [42, 2, 1, "", "auxstep"], [42, 4, 1, "", "calc_representative"], [42, 5, 1, "", "constant_dt"], [42, 4, 1, "", "copy"], [42, 5, 1, "", "data_selector"], [42, 5, 1, "", "dt"], [42, 2, 1, "", "frame_data"], [42, 2, 1, "", "frame_rep"], [42, 4, 1, "", "get_description"], [42, 5, 1, "", "initial_time"], [42, 4, 1, "", "move_to_ts"], [42, 5, 1, "", "n_steps"], [42, 4, 1, "", "next"], [42, 4, 1, "", "next_nonempty_frame"], [42, 4, 1, "", "read_ts"], [42, 5, 1, "", "represent_ts_as"], [42, 4, 1, "", "rewind"], [42, 5, 1, "", "step"], [42, 4, 1, "", "step_to_frame"], [42, 4, 1, "", "step_to_time"], [42, 5, 1, "", "time"], [42, 5, 1, "", "time_selector"], [42, 4, 1, "", "update_ts"]], "MDAnalysis.auxiliary.base.AuxStep": [[42, 5, 1, "", "data"], [42, 2, 1, "", "step"], [42, 5, 1, "", "time"]], "MDAnalysis.auxiliary.core": [[43, 3, 1, "", "auxreader"], [43, 3, 1, "", "get_auxreader_for"]], "MDAnalysis": [[46, 0, 0, "-", "converters"], [94, 0, 0, "-", "exceptions"], [110, 0, 0, "-", "lib"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"], [151, 0, 0, "-", "transformations"], [160, 0, 0, "-", "units"], [161, 0, 0, "-", "version"]], "MDAnalysis.converters": [[47, 0, 0, "-", "OpenMM"], [47, 0, 0, "-", "OpenMMParser"], [48, 0, 0, "-", "ParmEd"], [48, 0, 0, "-", "ParmEdParser"], [49, 0, 0, "-", "RDKit"], [49, 0, 0, "-", "RDKitParser"]], "MDAnalysis.converters.OpenMM": [[47, 1, 1, "", "OpenMMAppReader"], [47, 1, 1, "", "OpenMMSimulationReader"]], "MDAnalysis.converters.OpenMM.OpenMMAppReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMM.OpenMMSimulationReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser": [[47, 1, 1, "", "OpenMMAppTopologyParser"], [47, 1, 1, "", "OpenMMTopologyParser"]], "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd": [[48, 1, 1, "", "ParmEdConverter"], [48, 1, 1, "", "ParmEdReader"]], "MDAnalysis.converters.ParmEd.ParmEdConverter": [[48, 4, 1, "", "convert"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd.ParmEdReader": [[48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEdParser": [[48, 1, 1, "", "ParmEdParser"]], "MDAnalysis.converters.ParmEdParser.ParmEdParser": [[48, 4, 1, "", "close"], [48, 4, 1, "", "convert_forces_from_native"], [48, 4, 1, "", "convert_forces_to_native"], [48, 4, 1, "", "convert_pos_from_native"], [48, 4, 1, "", "convert_pos_to_native"], [48, 4, 1, "", "convert_time_from_native"], [48, 4, 1, "", "convert_time_to_native"], [48, 4, 1, "", "convert_velocities_from_native"], [48, 4, 1, "", "convert_velocities_to_native"], [48, 4, 1, "", "parse"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit": [[49, 1, 1, "", "RDKitConverter"], [49, 1, 1, "", "RDKitReader"], [49, 3, 1, "", "_infer_bo_and_charges"], [49, 3, 1, "", "_rebuild_conjugated_bonds"], [49, 3, 1, "", "_standardize_patterns"]], "MDAnalysis.converters.RDKit.RDKitConverter": [[49, 4, 1, "", "convert"], [49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit.RDKitReader": [[49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKitParser": [[49, 1, 1, "", "RDKitParser"]], "MDAnalysis.converters.RDKitParser.RDKitParser": [[49, 4, 1, "", "close"], [49, 4, 1, "", "convert_forces_from_native"], [49, 4, 1, "", "convert_forces_to_native"], [49, 4, 1, "", "convert_pos_from_native"], [49, 4, 1, "", "convert_pos_to_native"], [49, 4, 1, "", "convert_time_from_native"], [49, 4, 1, "", "convert_time_to_native"], [49, 4, 1, "", "convert_velocities_from_native"], [49, 4, 1, "", "convert_velocities_to_native"], [49, 4, 1, "", "parse"], [49, 2, 1, "", "units"]], "MDAnalysis.coordinates": [[50, 0, 0, "-", "CRD"], [51, 0, 0, "-", "DCD"], [52, 0, 0, "-", "DLPoly"], [53, 0, 0, "-", "DMS"], [54, 0, 0, "-", "FHIAIMS"], [55, 0, 0, "-", "GMS"], [56, 0, 0, "-", "GRO"], [57, 0, 0, "-", "GSD"], [58, 0, 0, "-", "H5MD"], [59, 0, 0, "-", "INPCRD"], [60, 0, 0, "-", "LAMMPS"], [61, 0, 0, "-", "MMTF"], [62, 0, 0, "-", "MOL2"], [63, 0, 0, "-", "NAMDBIN"], [64, 0, 0, "-", "PDB"], [65, 0, 0, "-", "PDBQT"], [66, 0, 0, "-", "PQR"], [67, 0, 0, "-", "TNG"], [68, 0, 0, "-", "TRJ"], [69, 0, 0, "-", "TRR"], [70, 0, 0, "-", "TRZ"], [71, 0, 0, "-", "TXYZ"], [72, 0, 0, "-", "XDR"], [73, 0, 0, "-", "XTC"], [74, 0, 0, "-", "XYZ"], [79, 0, 0, "-", "__init__"], [75, 0, 0, "-", "base"], [76, 0, 0, "-", "chain"], [77, 0, 0, "-", "chemfiles"], [78, 0, 0, "-", "core"], [80, 0, 0, "-", "memory"], [81, 0, 0, "-", "null"], [83, 0, 0, "-", "timestep"]], "MDAnalysis.coordinates.CRD": [[50, 1, 1, "", "CRDReader"], [50, 1, 1, "", "CRDWriter"]], "MDAnalysis.coordinates.CRD.CRDReader": [[50, 4, 1, "", "Writer"], [50, 2, 1, "", "units"]], "MDAnalysis.coordinates.CRD.CRDWriter": [[50, 2, 1, "", "units"], [50, 4, 1, "", "write"]], "MDAnalysis.coordinates.DCD": [[51, 1, 1, "", "DCDReader"], [51, 1, 1, "", "DCDWriter"]], "MDAnalysis.coordinates.DCD.DCDReader": [[51, 4, 1, "", "OtherWriter"], [51, 4, 1, "", "Writer"], [51, 4, 1, "", "add_auxiliary"], [51, 4, 1, "", "add_transformations"], [51, 5, 1, "", "aux_list"], [51, 4, 1, "", "check_slice_indices"], [51, 4, 1, "", "close"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "copy"], [51, 5, 1, "", "dimensions"], [51, 5, 1, "", "dt"], [51, 5, 1, "", "frame"], [51, 4, 1, "", "get_aux_attribute"], [51, 4, 1, "", "get_aux_descriptions"], [51, 4, 1, "", "iter_as_aux"], [51, 4, 1, "", "iter_auxiliary"], [51, 5, 1, "", "n_frames"], [51, 4, 1, "", "next"], [51, 4, 1, "", "next_as_aux"], [51, 4, 1, "", "parse_n_atoms"], [51, 4, 1, "", "remove_auxiliary"], [51, 4, 1, "", "rename_aux"], [51, 4, 1, "", "rewind"], [51, 4, 1, "", "set_aux_attribute"], [51, 5, 1, "", "time"], [51, 4, 1, "", "timeseries"], [51, 5, 1, "", "totaltime"], [51, 5, 1, "", "transformations"], [51, 2, 1, "", "units"]], "MDAnalysis.coordinates.DCD.DCDWriter": [[51, 4, 1, "", "close"], [51, 4, 1, "", "convert_dimensions_to_unitcell"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "has_valid_coordinates"], [51, 2, 1, "", "units"], [51, 4, 1, "", "write"]], "MDAnalysis.coordinates.DLPoly": [[52, 1, 1, "", "ConfigReader"], [52, 1, 1, "", "HistoryReader"]], "MDAnalysis.coordinates.DLPoly.ConfigReader": [[52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DLPoly.HistoryReader": [[52, 4, 1, "", "close"], [52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DMS": [[53, 1, 1, "", "DMSReader"]], "MDAnalysis.coordinates.DMS.DMSReader": [[53, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS": [[54, 1, 1, "", "FHIAIMSReader"], [54, 1, 1, "", "FHIAIMSWriter"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader": [[54, 4, 1, "", "OtherWriter"], [54, 4, 1, "", "Writer"], [54, 4, 1, "", "add_auxiliary"], [54, 4, 1, "", "add_transformations"], [54, 5, 1, "", "aux_list"], [54, 4, 1, "", "check_slice_indices"], [54, 4, 1, "", "close"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 4, 1, "", "copy"], [54, 5, 1, "", "dt"], [54, 5, 1, "", "frame"], [54, 4, 1, "", "get_aux_attribute"], [54, 4, 1, "", "get_aux_descriptions"], [54, 4, 1, "", "iter_as_aux"], [54, 4, 1, "", "iter_auxiliary"], [54, 4, 1, "", "next"], [54, 4, 1, "", "next_as_aux"], [54, 4, 1, "", "parse_n_atoms"], [54, 4, 1, "", "remove_auxiliary"], [54, 4, 1, "", "rename_aux"], [54, 4, 1, "", "rewind"], [54, 4, 1, "", "set_aux_attribute"], [54, 5, 1, "", "time"], [54, 4, 1, "", "timeseries"], [54, 5, 1, "", "totaltime"], [54, 5, 1, "", "transformations"], [54, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter": [[54, 4, 1, "", "close"], [54, 4, 1, "", "convert_dimensions_to_unitcell"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 2, 1, "", "fmt"], [54, 4, 1, "", "has_valid_coordinates"], [54, 2, 1, "", "units"], [54, 4, 1, "", "write"]], "MDAnalysis.coordinates.GMS": [[55, 1, 1, "", "GMSReader"]], "MDAnalysis.coordinates.GMS.GMSReader": [[55, 4, 1, "", "close"], [55, 5, 1, "", "n_atoms"], [55, 5, 1, "", "runtyp"], [55, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO": [[56, 1, 1, "", "GROReader"], [56, 1, 1, "", "GROWriter"]], "MDAnalysis.coordinates.GRO.GROReader": [[56, 4, 1, "", "Writer"], [56, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO.GROWriter": [[56, 2, 1, "", "fmt"], [56, 2, 1, "", "units"], [56, 4, 1, "", "write"]], "MDAnalysis.coordinates.GSD": [[57, 1, 1, "", "GSDPicklable"], [57, 1, 1, "", "GSDReader"], [57, 3, 1, "", "gsd_pickle_open"]], "MDAnalysis.coordinates.GSD.GSDReader": [[57, 4, 1, "", "OtherWriter"], [57, 4, 1, "", "Writer"], [57, 4, 1, "", "add_auxiliary"], [57, 4, 1, "", "add_transformations"], [57, 5, 1, "", "aux_list"], [57, 4, 1, "", "check_slice_indices"], [57, 4, 1, "", "close"], [57, 4, 1, "", "convert_forces_from_native"], [57, 4, 1, "", "convert_forces_to_native"], [57, 4, 1, "", "convert_pos_from_native"], [57, 4, 1, "", "convert_pos_to_native"], [57, 4, 1, "", "convert_time_from_native"], [57, 4, 1, "", "convert_time_to_native"], [57, 4, 1, "", "convert_velocities_from_native"], [57, 4, 1, "", "convert_velocities_to_native"], [57, 4, 1, "", "copy"], [57, 5, 1, "", "dt"], [57, 5, 1, "", "frame"], [57, 4, 1, "", "get_aux_attribute"], [57, 4, 1, "", "get_aux_descriptions"], [57, 4, 1, "", "iter_as_aux"], [57, 4, 1, "", "iter_auxiliary"], [57, 5, 1, "", "n_frames"], [57, 4, 1, "", "next"], [57, 4, 1, "", "next_as_aux"], [57, 4, 1, "", "open_trajectory"], [57, 4, 1, "", "parse_n_atoms"], [57, 4, 1, "", "remove_auxiliary"], [57, 4, 1, "", "rename_aux"], [57, 4, 1, "", "rewind"], [57, 4, 1, "", "set_aux_attribute"], [57, 5, 1, "", "time"], [57, 4, 1, "", "timeseries"], [57, 5, 1, "", "totaltime"], [57, 5, 1, "", "transformations"], [57, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD": [[58, 1, 1, "", "H5MDReader"], [58, 1, 1, "", "H5MDWriter"], [58, 1, 1, "", "H5PYPicklable"]], "MDAnalysis.coordinates.H5MD.H5MDReader": [[58, 4, 1, "", "OtherWriter"], [58, 4, 1, "", "Writer"], [58, 4, 1, "", "_reopen"], [58, 4, 1, "", "add_auxiliary"], [58, 4, 1, "", "add_transformations"], [58, 5, 1, "", "aux_list"], [58, 4, 1, "", "check_slice_indices"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 4, 1, "", "copy"], [58, 5, 1, "", "dt"], [58, 5, 1, "", "frame"], [58, 4, 1, "", "get_aux_attribute"], [58, 4, 1, "", "get_aux_descriptions"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 5, 1, "", "has_velocities"], [58, 4, 1, "", "iter_as_aux"], [58, 4, 1, "", "iter_auxiliary"], [58, 5, 1, "", "n_frames"], [58, 4, 1, "", "next"], [58, 4, 1, "", "next_as_aux"], [58, 4, 1, "", "open_trajectory"], [58, 4, 1, "", "parse_n_atoms"], [58, 4, 1, "", "remove_auxiliary"], [58, 4, 1, "", "rename_aux"], [58, 4, 1, "", "rewind"], [58, 4, 1, "", "set_aux_attribute"], [58, 5, 1, "", "time"], [58, 4, 1, "", "timeseries"], [58, 5, 1, "", "totaltime"], [58, 5, 1, "", "transformations"], [58, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD.H5MDWriter": [[58, 2, 1, "", "H5MD_VERSION"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_dimensions_to_unitcell"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 2, 1, "", "data_blacklist"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 4, 1, "", "has_valid_coordinates"], [58, 5, 1, "", "has_velocities"], [58, 2, 1, "", "units"], [58, 4, 1, "", "write"]], "MDAnalysis.coordinates.INPCRD": [[59, 1, 1, "", "INPReader"]], "MDAnalysis.coordinates.INPCRD.INPReader": [[59, 4, 1, "", "parse_n_atoms"], [59, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS": [[60, 1, 1, "", "DATAReader"], [60, 1, 1, "", "DATAWriter"], [60, 1, 1, "", "DCDReader"], [60, 1, 1, "", "DCDWriter"], [60, 1, 1, "", "DumpReader"]], "MDAnalysis.coordinates.LAMMPS.DATAReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DATAWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DCDReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dimensions"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 5, 1, "", "n_frames"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DCDWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DumpReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.MMTF": [[61, 1, 1, "", "MMTFReader"], [61, 3, 1, "", "fetch_mmtf"]], "MDAnalysis.coordinates.MOL2": [[62, 1, 1, "", "MOL2Reader"], [62, 1, 1, "", "MOL2Writer"]], "MDAnalysis.coordinates.MOL2.MOL2Reader": [[62, 2, 1, "", "units"]], "MDAnalysis.coordinates.MOL2.MOL2Writer": [[62, 4, 1, "", "close"], [62, 4, 1, "", "encode_block"], [62, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN": [[63, 1, 1, "", "NAMDBINReader"], [63, 1, 1, "", "NAMDBINWriter"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader": [[63, 4, 1, "", "Writer"], [63, 4, 1, "", "parse_n_atoms"], [63, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter": [[63, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB": [[64, 1, 1, "", "ExtendedPDBReader"], [64, 1, 1, "", "MultiPDBWriter"], [64, 1, 1, "", "PDBReader"], [64, 1, 1, "", "PDBWriter"]], "MDAnalysis.coordinates.PDB.ExtendedPDBReader": [[64, 4, 1, "", "OtherWriter"], [64, 4, 1, "", "Writer"], [64, 4, 1, "", "add_auxiliary"], [64, 4, 1, "", "add_transformations"], [64, 5, 1, "", "aux_list"], [64, 4, 1, "", "check_slice_indices"], [64, 4, 1, "", "close"], [64, 4, 1, "", "convert_forces_from_native"], [64, 4, 1, "", "convert_forces_to_native"], [64, 4, 1, "", "convert_pos_from_native"], [64, 4, 1, "", "convert_pos_to_native"], [64, 4, 1, "", "convert_time_from_native"], [64, 4, 1, "", "convert_time_to_native"], [64, 4, 1, "", "convert_velocities_from_native"], [64, 4, 1, "", "convert_velocities_to_native"], [64, 4, 1, "", "copy"], [64, 5, 1, "", "dt"], [64, 5, 1, "", "frame"], [64, 4, 1, "", "get_aux_attribute"], [64, 4, 1, "", "get_aux_descriptions"], [64, 4, 1, "", "iter_as_aux"], [64, 4, 1, "", "iter_auxiliary"], [64, 4, 1, "", "next"], [64, 4, 1, "", "next_as_aux"], [64, 4, 1, "", "parse_n_atoms"], [64, 4, 1, "", "remove_auxiliary"], [64, 4, 1, "", "rename_aux"], [64, 4, 1, "", "rewind"], [64, 4, 1, "", "set_aux_attribute"], [64, 5, 1, "", "time"], [64, 4, 1, "", "timeseries"], [64, 5, 1, "", "totaltime"], [64, 5, 1, "", "transformations"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBReader": [[64, 4, 1, "", "Writer"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBWriter": [[64, 4, 1, "", "CONECT"], [64, 4, 1, "", "CRYST1"], [64, 4, 1, "", "END"], [64, 4, 1, "", "ENDMDL"], [64, 4, 1, "", "HEADER"], [64, 4, 1, "", "MODEL"], [64, 4, 1, "", "REMARK"], [64, 4, 1, "", "TITLE"], [64, 4, 1, "", "_check_pdb_coordinates"], [64, 4, 1, "", "_update_frame"], [64, 4, 1, "", "_write_pdb_bonds"], [64, 4, 1, "", "_write_timestep"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"], [64, 4, 1, "", "write"], [64, 4, 1, "", "write_all_timesteps"]], "MDAnalysis.coordinates.PDBQT": [[65, 1, 1, "", "PDBQTReader"], [65, 1, 1, "", "PDBQTWriter"]], "MDAnalysis.coordinates.PDBQT.PDBQTReader": [[65, 4, 1, "", "Writer"], [65, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDBQT.PDBQTWriter": [[65, 4, 1, "", "close"], [65, 2, 1, "", "units"], [65, 4, 1, "", "write"]], "MDAnalysis.coordinates.PQR": [[66, 1, 1, "", "PQRReader"], [66, 1, 1, "", "PQRWriter"]], "MDAnalysis.coordinates.PQR.PQRReader": [[66, 4, 1, "", "Writer"], [66, 2, 1, "", "units"]], "MDAnalysis.coordinates.PQR.PQRWriter": [[66, 2, 1, "", "units"], [66, 4, 1, "", "write"]], "MDAnalysis.coordinates.TNG": [[67, 1, 1, "", "TNGReader"]], "MDAnalysis.coordinates.TNG.TNGReader": [[67, 4, 1, "", "Writer"], [67, 5, 1, "", "additional_blocks"], [67, 5, 1, "", "blocks"], [67, 4, 1, "", "close"], [67, 5, 1, "", "n_frames"], [67, 4, 1, "", "parse_n_atoms"], [67, 5, 1, "", "special_blocks"], [67, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ": [[68, 1, 1, "", "NCDFPicklable"], [68, 1, 1, "", "NCDFReader"], [68, 1, 1, "", "NCDFWriter"], [68, 1, 1, "", "TRJReader"]], "MDAnalysis.coordinates.TRJ.NCDFReader": [[68, 4, 1, "", "Writer"], [68, 4, 1, "", "close"], [68, 4, 1, "", "parse_n_atoms"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.NCDFWriter": [[68, 4, 1, "", "close"], [68, 4, 1, "", "is_periodic"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.TRJReader": [[68, 4, 1, "", "close"], [68, 5, 1, "", "n_frames"], [68, 4, 1, "", "open_trajectory"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR": [[69, 1, 1, "", "TRRReader"], [69, 1, 1, "", "TRRWriter"]], "MDAnalysis.coordinates.TRR.TRRReader": [[69, 4, 1, "", "OtherWriter"], [69, 4, 1, "", "Writer"], [69, 4, 1, "", "add_auxiliary"], [69, 4, 1, "", "add_transformations"], [69, 5, 1, "", "aux_list"], [69, 4, 1, "", "check_slice_indices"], [69, 4, 1, "", "close"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "copy"], [69, 5, 1, "", "dt"], [69, 5, 1, "", "frame"], [69, 4, 1, "", "get_aux_attribute"], [69, 4, 1, "", "get_aux_descriptions"], [69, 4, 1, "", "iter_as_aux"], [69, 4, 1, "", "iter_auxiliary"], [69, 5, 1, "", "n_frames"], [69, 4, 1, "", "next"], [69, 4, 1, "", "next_as_aux"], [69, 4, 1, "", "parse_n_atoms"], [69, 4, 1, "", "remove_auxiliary"], [69, 4, 1, "", "rename_aux"], [69, 4, 1, "", "rewind"], [69, 4, 1, "", "set_aux_attribute"], [69, 5, 1, "", "time"], [69, 4, 1, "", "timeseries"], [69, 5, 1, "", "totaltime"], [69, 5, 1, "", "transformations"], [69, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR.TRRWriter": [[69, 4, 1, "", "close"], [69, 4, 1, "", "convert_dimensions_to_unitcell"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "has_valid_coordinates"], [69, 2, 1, "", "units"], [69, 4, 1, "", "write"]], "MDAnalysis.coordinates.TRZ": [[70, 1, 1, "", "TRZReader"], [70, 1, 1, "", "TRZWriter"]], "MDAnalysis.coordinates.TRZ.TRZReader": [[70, 4, 1, "", "Writer"], [70, 4, 1, "", "close"], [70, 5, 1, "", "delta"], [70, 5, 1, "", "n_atoms"], [70, 5, 1, "", "n_frames"], [70, 4, 1, "", "open_trajectory"], [70, 5, 1, "", "skip_timestep"], [70, 2, 1, "", "ts"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRZ.TRZWriter": [[70, 4, 1, "", "close"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TXYZ": [[71, 1, 1, "", "TXYZReader"]], "MDAnalysis.coordinates.TXYZ.TXYZReader": [[71, 4, 1, "", "OtherWriter"], [71, 4, 1, "", "Writer"], [71, 4, 1, "", "add_auxiliary"], [71, 4, 1, "", "add_transformations"], [71, 5, 1, "", "aux_list"], [71, 4, 1, "", "check_slice_indices"], [71, 4, 1, "", "close"], [71, 4, 1, "", "convert_forces_from_native"], [71, 4, 1, "", "convert_forces_to_native"], [71, 4, 1, "", "convert_pos_from_native"], [71, 4, 1, "", "convert_pos_to_native"], [71, 4, 1, "", "convert_time_from_native"], [71, 4, 1, "", "convert_time_to_native"], [71, 4, 1, "", "convert_velocities_from_native"], [71, 4, 1, "", "convert_velocities_to_native"], [71, 4, 1, "", "copy"], [71, 5, 1, "", "dt"], [71, 5, 1, "", "frame"], [71, 4, 1, "", "get_aux_attribute"], [71, 4, 1, "", "get_aux_descriptions"], [71, 4, 1, "", "iter_as_aux"], [71, 4, 1, "", "iter_auxiliary"], [71, 5, 1, "", "n_atoms"], [71, 4, 1, "", "next"], [71, 4, 1, "", "next_as_aux"], [71, 4, 1, "", "parse_n_atoms"], [71, 4, 1, "", "remove_auxiliary"], [71, 4, 1, "", "rename_aux"], [71, 4, 1, "", "rewind"], [71, 4, 1, "", "set_aux_attribute"], [71, 5, 1, "", "time"], [71, 4, 1, "", "timeseries"], [71, 5, 1, "", "totaltime"], [71, 5, 1, "", "transformations"], [71, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR": [[72, 1, 1, "", "XDRBaseReader"], [72, 1, 1, "", "XDRBaseWriter"], [72, 3, 1, "", "offsets_filename"], [72, 3, 1, "", "read_numpy_offsets"]], "MDAnalysis.coordinates.XDR.XDRBaseReader": [[72, 4, 1, "", "OtherWriter"], [72, 4, 1, "", "Writer"], [72, 4, 1, "", "add_auxiliary"], [72, 4, 1, "", "add_transformations"], [72, 5, 1, "", "aux_list"], [72, 4, 1, "", "check_slice_indices"], [72, 4, 1, "", "close"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "copy"], [72, 5, 1, "", "dt"], [72, 5, 1, "", "frame"], [72, 4, 1, "", "get_aux_attribute"], [72, 4, 1, "", "get_aux_descriptions"], [72, 4, 1, "", "iter_as_aux"], [72, 4, 1, "", "iter_auxiliary"], [72, 5, 1, "", "n_frames"], [72, 4, 1, "", "next"], [72, 4, 1, "", "next_as_aux"], [72, 4, 1, "", "parse_n_atoms"], [72, 4, 1, "", "remove_auxiliary"], [72, 4, 1, "", "rename_aux"], [72, 4, 1, "", "rewind"], [72, 4, 1, "", "set_aux_attribute"], [72, 5, 1, "", "time"], [72, 4, 1, "", "timeseries"], [72, 5, 1, "", "totaltime"], [72, 5, 1, "", "transformations"], [72, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR.XDRBaseWriter": [[72, 4, 1, "", "close"], [72, 4, 1, "", "convert_dimensions_to_unitcell"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "has_valid_coordinates"], [72, 2, 1, "", "units"], [72, 4, 1, "", "write"]], "MDAnalysis.coordinates.XTC": [[73, 1, 1, "", "XTCReader"], [73, 1, 1, "", "XTCWriter"]], "MDAnalysis.coordinates.XTC.XTCReader": [[73, 4, 1, "", "OtherWriter"], [73, 4, 1, "", "Writer"], [73, 4, 1, "", "add_auxiliary"], [73, 4, 1, "", "add_transformations"], [73, 5, 1, "", "aux_list"], [73, 4, 1, "", "check_slice_indices"], [73, 4, 1, "", "close"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "copy"], [73, 5, 1, "", "dt"], [73, 5, 1, "", "frame"], [73, 4, 1, "", "get_aux_attribute"], [73, 4, 1, "", "get_aux_descriptions"], [73, 4, 1, "", "iter_as_aux"], [73, 4, 1, "", "iter_auxiliary"], [73, 5, 1, "", "n_frames"], [73, 4, 1, "", "next"], [73, 4, 1, "", "next_as_aux"], [73, 4, 1, "", "parse_n_atoms"], [73, 4, 1, "", "remove_auxiliary"], [73, 4, 1, "", "rename_aux"], [73, 4, 1, "", "rewind"], [73, 4, 1, "", "set_aux_attribute"], [73, 5, 1, "", "time"], [73, 4, 1, "", "timeseries"], [73, 5, 1, "", "totaltime"], [73, 5, 1, "", "transformations"], [73, 2, 1, "", "units"]], "MDAnalysis.coordinates.XTC.XTCWriter": [[73, 4, 1, "", "close"], [73, 4, 1, "", "convert_dimensions_to_unitcell"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "has_valid_coordinates"], [73, 2, 1, "", "units"], [73, 4, 1, "", "write"]], "MDAnalysis.coordinates.XYZ": [[74, 1, 1, "", "XYZReader"], [74, 1, 1, "", "XYZWriter"]], "MDAnalysis.coordinates.XYZ.XYZReader": [[74, 4, 1, "", "Writer"], [74, 4, 1, "", "close"], [74, 5, 1, "", "n_atoms"], [74, 2, 1, "", "units"]], "MDAnalysis.coordinates.XYZ.XYZWriter": [[74, 4, 1, "", "close"], [74, 2, 1, "", "units"], [74, 4, 1, "", "write"]], "MDAnalysis.coordinates.base": [[75, 1, 1, "", "ConverterBase"], [75, 1, 1, "", "FrameIteratorAll"], [75, 1, 1, "", "FrameIteratorBase"], [75, 1, 1, "", "FrameIteratorIndices"], [75, 1, 1, "", "FrameIteratorSliced"], [75, 1, 1, "", "IOBase"], [75, 1, 1, "", "ProtoReader"], [75, 1, 1, "", "ReaderBase"], [75, 1, 1, "", "SingleFrameReaderBase"], [75, 1, 1, "", "WriterBase"]], "MDAnalysis.coordinates.base.ConverterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.IOBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.ProtoReader": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"]], "MDAnalysis.coordinates.base.ReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.SingleFrameReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.WriterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_dimensions_to_unitcell"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "has_valid_coordinates"], [75, 2, 1, "", "units"], [75, 4, 1, "", "write"]], "MDAnalysis.coordinates.chain": [[76, 1, 1, "", "ChainReader"]], "MDAnalysis.coordinates.chain.ChainReader": [[76, 4, 1, "", "_apply"], [76, 4, 1, "", "_get"], [76, 4, 1, "", "_get_local_frame"], [76, 4, 1, "", "_get_same"], [76, 4, 1, "", "_read_frame"], [76, 5, 1, "", "active_reader"], [76, 4, 1, "", "close"], [76, 5, 1, "", "compressed"], [76, 4, 1, "", "convert_pos_from_native"], [76, 4, 1, "", "convert_pos_to_native"], [76, 4, 1, "", "convert_time_from_native"], [76, 4, 1, "", "convert_time_to_native"], [76, 5, 1, "", "frame"], [76, 5, 1, "", "periodic"], [76, 5, 1, "", "time"], [76, 5, 1, "", "units"]], "MDAnalysis.coordinates.chemfiles": [[77, 1, 1, "", "ChemfilesPicklable"], [77, 1, 1, "", "ChemfilesReader"], [77, 1, 1, "", "ChemfilesWriter"], [77, 6, 1, "", "MAX_CHEMFILES_VERSION"], [77, 6, 1, "", "MIN_CHEMFILES_VERSION"], [77, 3, 1, "", "check_chemfiles_version"]], "MDAnalysis.coordinates.core": [[78, 3, 1, "", "get_reader_for"], [78, 3, 1, "", "get_writer_for"], [78, 3, 1, "", "reader"], [78, 3, 1, "", "writer"]], "MDAnalysis.coordinates.memory": [[80, 1, 1, "", "MemoryReader"]], "MDAnalysis.coordinates.memory.MemoryReader": [[80, 4, 1, "", "OtherWriter"], [80, 4, 1, "", "Writer"], [80, 4, 1, "", "add_auxiliary"], [80, 4, 1, "", "add_transformations"], [80, 5, 1, "", "aux_list"], [80, 4, 1, "", "check_slice_indices"], [80, 4, 1, "", "close"], [80, 4, 1, "", "convert_forces_from_native"], [80, 4, 1, "", "convert_forces_to_native"], [80, 4, 1, "", "convert_pos_from_native"], [80, 4, 1, "", "convert_pos_to_native"], [80, 4, 1, "", "convert_time_from_native"], [80, 4, 1, "", "convert_time_to_native"], [80, 4, 1, "", "convert_velocities_from_native"], [80, 4, 1, "", "convert_velocities_to_native"], [80, 4, 1, "", "copy"], [80, 5, 1, "", "dt"], [80, 5, 1, "", "frame"], [80, 4, 1, "", "get_array"], [80, 4, 1, "", "get_aux_attribute"], [80, 4, 1, "", "get_aux_descriptions"], [80, 4, 1, "", "iter_as_aux"], [80, 4, 1, "", "iter_auxiliary"], [80, 4, 1, "", "next"], [80, 4, 1, "", "next_as_aux"], [80, 4, 1, "", "parse_n_atoms"], [80, 4, 1, "", "remove_auxiliary"], [80, 4, 1, "", "rename_aux"], [80, 4, 1, "", "rewind"], [80, 4, 1, "", "set_array"], [80, 4, 1, "", "set_aux_attribute"], [80, 5, 1, "", "time"], [80, 4, 1, "", "timeseries"], [80, 5, 1, "", "totaltime"], [80, 5, 1, "", "transformations"], [80, 2, 1, "", "units"]], "MDAnalysis.coordinates.null": [[81, 1, 1, "", "NullWriter"]], "MDAnalysis.coordinates.null.NullWriter": [[81, 2, 1, "", "units"]], "MDAnalysis.coordinates.timestep": [[83, 1, 1, "", "Timestep"]], "MDAnalysis.coordinates.timestep.Timestep": [[83, 4, 1, "", "__eq__"], [83, 4, 1, "", "__getitem__"], [83, 4, 1, "", "__init__"], [83, 4, 1, "", "__iter__"], [83, 2, 1, "", "_forces"], [83, 2, 1, "", "_pos"], [83, 2, 1, "", "_velocities"], [83, 4, 1, "", "copy"], [83, 4, 1, "", "copy_slice"], [83, 2, 1, "", "data"], [83, 2, 1, "", "dimensions"], [83, 2, 1, "", "dt"], [83, 2, 1, "", "dtype"], [83, 2, 1, "", "forces"], [83, 2, 1, "", "frame"], [83, 4, 1, "", "from_coordinates"], [83, 4, 1, "", "from_timestep"], [83, 2, 1, "", "has_forces"], [83, 2, 1, "", "has_positions"], [83, 2, 1, "", "has_velocities"], [83, 2, 1, "", "n_atoms"], [83, 2, 1, "", "positions"], [83, 2, 1, "", "time"], [83, 2, 1, "", "triclinic_dimensions"], [83, 2, 1, "", "velocities"], [83, 2, 1, "", "volume"]], "MDAnalysis.core": [[87, 0, 0, "-", "__init__"], [85, 0, 0, "-", "accessors"], [86, 0, 0, "-", "groups"], [88, 0, 0, "-", "selection"], [89, 0, 0, "-", "topology"], [90, 0, 0, "-", "topologyattrs"], [91, 0, 0, "-", "topologyobjects"], [92, 0, 0, "-", "universe"]], "MDAnalysis.core.accessors": [[85, 1, 1, "", "Accessor"], [85, 1, 1, "", "ConverterWrapper"]], "MDAnalysis.core.groups": [[86, 1, 1, "", "Atom"], [86, 1, 1, "", "AtomGroup"], [86, 1, 1, "", "Residue"], [86, 1, 1, "", "ResidueGroup"], [86, 1, 1, "", "Segment"], [86, 1, 1, "", "SegmentGroup"], [86, 1, 1, "", "UpdatingAtomGroup"]], "MDAnalysis.core.groups.Atom": [[86, 5, 1, "", "bfactor"], [86, 5, 1, "", "bonded_atoms"], [86, 5, 1, "", "force"], [86, 5, 1, "", "fragindex"], [86, 5, 1, "", "fragment"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "position"], [86, 5, 1, "", "velocity"]], "MDAnalysis.core.groups.AtomGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 5, 1, "", "angle"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 5, 1, "", "bond"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 5, 1, "", "cmap"], [86, 4, 1, "", "concatenate"], [86, 2, 1, "", "convert_to"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dihedral"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 5, 1, "", "forces"], [86, 5, 1, "", "fragindices"], [86, 5, 1, "", "fragments"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "guess_bonds"], [86, 4, 1, "", "gyration_moments"], [86, 5, 1, "", "improper"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_fragments"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 5, 1, "", "positions"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "select_atoms"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "sort"], [86, 4, 1, "", "split"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 5, 1, "", "ts"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 5, 1, "", "ureybradley"], [86, 5, 1, "", "velocities"], [86, 4, 1, "", "wrap"], [86, 4, 1, "", "write"]], "MDAnalysis.core.groups.Residue": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "chi1_selection"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "omega_selection"], [86, 4, 1, "", "phi_selection"], [86, 4, 1, "", "psi_selection"], [86, 5, 1, "", "segment"]], "MDAnalysis.core.groups.ResidueGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "chi1_selections"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "omega_selections"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "phi_selections"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "psi_selections"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "sequence"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.Segment": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "residues"]], "MDAnalysis.core.groups.SegmentGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.UpdatingAtomGroup": [[86, 5, 1, "", "atoms"], [86, 4, 1, "", "copy"], [86, 5, 1, "", "is_uptodate"], [86, 4, 1, "", "update_selection"]], "MDAnalysis.core.selection": [[88, 1, 1, "", "AromaticSelection"], [88, 1, 1, "", "BackboneSelection"], [88, 1, 1, "", "BaseSelection"], [88, 1, 1, "", "BoolSelection"], [88, 1, 1, "", "ByNumSelection"], [88, 1, 1, "", "ByResSelection"], [88, 6, 1, "", "FLOAT_PATTERN"], [88, 1, 1, "", "FloatRangeSelection"], [88, 6, 1, "", "INT_PATTERN"], [88, 1, 1, "", "NucleicBackboneSelection"], [88, 1, 1, "", "NucleicSelection"], [88, 1, 1, "", "NucleicSugarSelection"], [88, 1, 1, "", "PropertySelection"], [88, 1, 1, "", "ProteinSelection"], [88, 6, 1, "", "RANGE_PATTERN"], [88, 1, 1, "", "RangeSelection"], [88, 1, 1, "", "ResidSelection"], [88, 1, 1, "", "SameSelection"], [88, 1, 1, "", "SelectionParser"], [88, 1, 1, "", "SingleCharSelection"], [88, 1, 1, "", "SmartsSelection"], [88, 3, 1, "", "gen_selection_class"], [88, 3, 1, "", "grab_not_keywords"], [88, 3, 1, "", "is_keyword"], [88, 3, 1, "", "join_separated_values"], [88, 3, 1, "", "return_empty_on_apply"]], "MDAnalysis.core.selection.FloatRangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.RangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.SelectionParser": [[88, 4, 1, "", "expect"], [88, 4, 1, "", "parse"]], "MDAnalysis.core.topology": [[89, 1, 1, "", "Topology"], [89, 1, 1, "", "TransTable"], [89, 3, 1, "", "make_downshift_arrays"]], "MDAnalysis.core.topology.Topology": [[89, 4, 1, "", "add_Residue"], [89, 4, 1, "", "add_Segment"], [89, 4, 1, "", "add_TopologyAttr"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "del_TopologyAttr"], [89, 5, 1, "", "guessed_attributes"], [89, 5, 1, "", "read_attributes"]], "MDAnalysis.core.topology.TransTable": [[89, 4, 1, "", "atoms2residues"], [89, 4, 1, "", "atoms2segments"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "move_atom"], [89, 4, 1, "", "move_residue"], [89, 2, 1, "", "n_atoms"], [89, 2, 1, "", "n_residues"], [89, 2, 1, "", "n_segments"], [89, 4, 1, "", "residues2atoms_1d"], [89, 4, 1, "", "residues2atoms_2d"], [89, 4, 1, "", "residues2segments"], [89, 4, 1, "", "segments2atoms_1d"], [89, 4, 1, "", "segments2atoms_2d"], [89, 4, 1, "", "segments2residues_1d"], [89, 4, 1, "", "segments2residues_2d"], [89, 2, 1, "", "size"]], "MDAnalysis.core.topologyattrs": [[90, 1, 1, "", "AltLocs"], [90, 1, 1, "", "Angles"], [90, 1, 1, "", "Aromaticities"], [90, 1, 1, "", "AtomAttr"], [90, 1, 1, "", "AtomStringAttr"], [90, 1, 1, "", "Atomids"], [90, 1, 1, "", "Atomindices"], [90, 1, 1, "", "Atomnames"], [90, 1, 1, "", "Atomtypes"], [90, 1, 1, "", "Bonds"], [90, 1, 1, "", "CMaps"], [90, 1, 1, "", "ChainIDs"], [90, 1, 1, "", "Charges"], [90, 1, 1, "", "Dihedrals"], [90, 1, 1, "", "Elements"], [90, 1, 1, "", "Epsilon14s"], [90, 1, 1, "", "Epsilons"], [90, 1, 1, "", "FormalCharges"], [90, 1, 1, "", "GBScreens"], [90, 1, 1, "", "ICodes"], [90, 1, 1, "", "Impropers"], [90, 1, 1, "", "Masses"], [90, 1, 1, "", "Molnums"], [90, 1, 1, "", "Moltypes"], [90, 1, 1, "", "NonbondedIndices"], [90, 1, 1, "", "Occupancies"], [90, 1, 1, "", "RMin14s"], [90, 1, 1, "", "RMins"], [90, 1, 1, "", "RSChirality"], [90, 1, 1, "", "Radii"], [90, 1, 1, "", "RecordTypes"], [90, 1, 1, "", "Resids"], [90, 1, 1, "", "ResidueAttr"], [90, 1, 1, "", "ResidueStringAttr"], [90, 1, 1, "", "Resindices"], [90, 1, 1, "", "Resnames"], [90, 1, 1, "", "Resnums"], [90, 1, 1, "", "Segids"], [90, 1, 1, "", "Segindices"], [90, 1, 1, "", "SegmentAttr"], [90, 1, 1, "", "SegmentStringAttr"], [90, 1, 1, "", "SolventRadii"], [90, 1, 1, "", "Tempfactors"], [90, 1, 1, "", "TopologyAttr"], [90, 1, 1, "", "UreyBradleys"]], "MDAnalysis.core.topologyattrs.AltLocs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Aromaticities": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.AtomAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.AtomStringAttr": [[90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Atomindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomnames": [[90, 4, 1, "", "chi1_selection"], [90, 4, 1, "", "chi1_selections"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "omega_selection"], [90, 4, 1, "", "omega_selections"], [90, 4, 1, "", "phi_selection"], [90, 4, 1, "", "phi_selections"], [90, 4, 1, "", "psi_selection"], [90, 4, 1, "", "psi_selections"]], "MDAnalysis.core.topologyattrs.Atomtypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Bonds": [[90, 4, 1, "", "bonded_atoms"], [90, 4, 1, "", "fragindex"], [90, 4, 1, "", "fragindices"], [90, 4, 1, "", "fragment"], [90, 4, 1, "", "fragments"], [90, 4, 1, "", "n_fragments"]], "MDAnalysis.core.topologyattrs.ChainIDs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Charges": [[90, 4, 1, "", "center_of_charge"], [90, 4, 1, "", "dipole_moment"], [90, 4, 1, "", "dipole_vector"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "quadrupole_moment"], [90, 4, 1, "", "quadrupole_tensor"], [90, 4, 1, "", "total_charge"]], "MDAnalysis.core.topologyattrs.Elements": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilon14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilons": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.FormalCharges": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.GBScreens": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ICodes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Masses": [[90, 4, 1, "", "align_principal_axis"], [90, 4, 1, "", "asphericity"], [90, 4, 1, "", "center_of_mass"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "gyration_moments"], [90, 4, 1, "", "moment_of_inertia"], [90, 4, 1, "", "principal_axes"], [90, 4, 1, "", "radius_of_gyration"], [90, 4, 1, "", "shape_parameter"], [90, 4, 1, "", "total_mass"]], "MDAnalysis.core.topologyattrs.Molnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Moltypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.NonbondedIndices": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Occupancies": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMin14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMins": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Radii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RecordTypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Resids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ResidueAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.ResidueStringAttr": [[90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resnames": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "sequence"]], "MDAnalysis.core.topologyattrs.Resnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentStringAttr": [[90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SolventRadii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Tempfactors": [[90, 4, 1, "", "bfactor"], [90, 4, 1, "", "bfactor_setter"], [90, 4, 1, "", "bfactors"], [90, 4, 1, "", "bfactors_setter"], [90, 2, 1, "", "dtype"], [90, 2, 1, "", "group"]], "MDAnalysis.core.topologyattrs.TopologyAttr": [[90, 2, 1, "", "attrname"], [90, 4, 1, "", "copy"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "from_blank"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 5, 1, "", "is_guessed"], [90, 2, 1, "", "per_object"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"], [90, 2, 1, "", "singular"], [90, 2, 1, "", "top"]], "MDAnalysis.core.topologyobjects": [[91, 1, 1, "", "Angle"], [91, 1, 1, "", "Bond"], [91, 1, 1, "", "CMap"], [91, 1, 1, "", "Dihedral"], [91, 1, 1, "", "ImproperDihedral"], [91, 1, 1, "", "TopologyDict"], [91, 1, 1, "", "TopologyGroup"], [91, 1, 1, "", "TopologyObject"], [91, 1, 1, "", "UreyBradley"]], "MDAnalysis.core.topologyobjects.Angle": [[91, 4, 1, "", "angle"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Bond": [[91, 4, 1, "", "length"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Dihedral": [[91, 4, 1, "", "dihedral"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.ImproperDihedral": [[91, 4, 1, "", "improper"]], "MDAnalysis.core.topologyobjects.TopologyDict": [[91, 4, 1, "", "keys"]], "MDAnalysis.core.topologyobjects.TopologyGroup": [[91, 4, 1, "", "angles"], [91, 5, 1, "", "atom1"], [91, 5, 1, "", "atom2"], [91, 5, 1, "", "atom3"], [91, 5, 1, "", "atom4"], [91, 4, 1, "", "atomgroup_intersection"], [91, 4, 1, "", "bonds"], [91, 4, 1, "", "dihedrals"], [91, 4, 1, "", "dump_contents"], [91, 5, 1, "", "indices"], [91, 4, 1, "", "selectBonds"], [91, 4, 1, "", "select_bonds"], [91, 4, 1, "", "to_indices"], [91, 5, 1, "", "topDict"], [91, 4, 1, "", "types"], [91, 5, 1, "", "universe"], [91, 4, 1, "", "values"]], "MDAnalysis.core.topologyobjects.TopologyObject": [[91, 5, 1, "", "atoms"], [91, 5, 1, "", "indices"], [91, 5, 1, "", "type"]], "MDAnalysis.core.topologyobjects.UreyBradley": [[91, 4, 1, "", "distance"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.universe": [[92, 3, 1, "", "Merge"], [92, 1, 1, "", "Universe"]], "MDAnalysis.core.universe.Universe": [[92, 4, 1, "", "add_Residue"], [92, 4, 1, "", "add_Segment"], [92, 4, 1, "", "add_TopologyAttr"], [92, 4, 1, "", "add_angles"], [92, 4, 1, "", "add_bonds"], [92, 4, 1, "", "add_dihedrals"], [92, 4, 1, "", "add_impropers"], [92, 2, 1, "", "angles"], [92, 2, 1, "", "atoms"], [92, 2, 1, "", "bonds"], [92, 5, 1, "", "coord"], [92, 4, 1, "", "copy"], [92, 4, 1, "", "del_TopologyAttr"], [92, 4, 1, "", "delete_angles"], [92, 4, 1, "", "delete_bonds"], [92, 4, 1, "", "delete_dihedrals"], [92, 4, 1, "", "delete_impropers"], [92, 2, 1, "", "dihedrals"], [92, 2, 1, "", "dimensions"], [92, 4, 1, "", "empty"], [92, 4, 1, "", "from_smiles"], [92, 2, 1, "", "impropers"], [92, 5, 1, "", "kwargs"], [92, 4, 1, "", "load_new"], [92, 5, 1, "", "models"], [92, 2, 1, "", "residues"], [92, 2, 1, "", "segments"], [92, 4, 1, "", "select_atoms"], [92, 2, 1, "", "trajectory"], [92, 4, 1, "", "transfer_to_memory"]], "MDAnalysis.exceptions": [[94, 7, 1, "", "ApplicationError"], [94, 7, 1, "", "ConversionWarning"], [94, 7, 1, "", "DuplicateWarning"], [94, 7, 1, "", "FileFormatWarning"], [94, 7, 1, "", "MissingDataWarning"], [94, 7, 1, "", "NoDataError"], [94, 7, 1, "", "SelectionError"], [94, 7, 1, "", "SelectionWarning"], [94, 7, 1, "", "StreamWarning"]], "MDAnalysis.lib": [[95, 0, 0, "-", "NeighborSearch"], [96, 0, 0, "-", "c_distances"], [97, 0, 0, "-", "c_distances_openmp"], [98, 0, 0, "-", "correlations"], [99, 0, 0, "-", "distances"], [102, 0, 0, "-", "log"], [103, 0, 0, "-", "mdamath"], [104, 0, 0, "-", "nsgrid"], [105, 0, 0, "-", "picklable_file_io"], [106, 0, 0, "-", "pkdtree"], [107, 0, 0, "-", "qcprot"], [108, 0, 0, "-", "transformations"], [109, 0, 0, "-", "util"]], "MDAnalysis.lib.NeighborSearch": [[95, 1, 1, "", "AtomNeighborSearch"]], "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch": [[95, 4, 1, "", "search"]], "MDAnalysis.lib.correlations": [[98, 3, 1, "", "autocorrelation"], [98, 3, 1, "", "correct_intermittency"]], "MDAnalysis.lib.distances": [[99, 3, 1, "", "apply_PBC"], [99, 3, 1, "", "augment_coordinates"], [99, 3, 1, "", "calc_angles"], [99, 3, 1, "", "calc_bonds"], [99, 3, 1, "", "calc_dihedrals"], [99, 3, 1, "", "capped_distance"], [99, 3, 1, "", "distance_array"], [99, 3, 1, "", "minimize_vectors"], [99, 3, 1, "", "self_capped_distance"], [99, 3, 1, "", "self_distance_array"], [99, 3, 1, "", "transform_RtoS"], [99, 3, 1, "", "transform_StoR"], [99, 3, 1, "", "undo_augment"]], "MDAnalysis.lib.formats": [[100, 0, 0, "-", "libdcd"], [101, 0, 0, "-", "libmdaxdr"]], "MDAnalysis.lib.formats.libdcd": [[100, 1, 1, "", "DCDFile"]], "MDAnalysis.lib.formats.libdcd.DCDFile": [[100, 2, 1, "", "charmm_bitfield"], [100, 4, 1, "", "close"], [100, 2, 1, "", "header"], [100, 4, 1, "", "open"], [100, 4, 1, "", "read"], [100, 4, 1, "", "readframes"], [100, 4, 1, "", "seek"], [100, 4, 1, "", "tell"], [100, 4, 1, "", "write"], [100, 4, 1, "", "write_header"]], "MDAnalysis.lib.formats.libmdaxdr": [[101, 1, 1, "", "TRRFile"], [101, 1, 1, "", "XTCFile"]], "MDAnalysis.lib.formats.libmdaxdr.TRRFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_xvf"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.formats.libmdaxdr.XTCFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_x"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.log": [[102, 1, 1, "", "NullHandler"], [102, 1, 1, "", "ProgressBar"], [102, 3, 1, "", "clear_handlers"], [102, 3, 1, "", "create"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"]], "MDAnalysis.lib.log.NullHandler": [[102, 4, 1, "", "emit"]], "MDAnalysis.lib.mdamath": [[103, 3, 1, "", "angle"], [103, 3, 1, "", "box_volume"], [103, 3, 1, "", "dihedral"], [103, 3, 1, "", "find_fragments"], [103, 3, 1, "", "make_whole"], [103, 3, 1, "", "norm"], [103, 3, 1, "", "normal"], [103, 3, 1, "", "pdot"], [103, 3, 1, "", "pnorm"], [103, 3, 1, "", "sarrus_det"], [103, 3, 1, "", "stp"], [103, 3, 1, "", "triclinic_box"], [103, 3, 1, "", "triclinic_vectors"]], "MDAnalysis.lib.nsgrid": [[104, 1, 1, "", "FastNS"], [104, 1, 1, "", "NSResults"]], "MDAnalysis.lib.nsgrid.FastNS": [[104, 4, 1, "", "search"], [104, 4, 1, "", "self_search"]], "MDAnalysis.lib.nsgrid.NSResults": [[104, 4, 1, "", "get_pair_distances"], [104, 4, 1, "", "get_pairs"]], "MDAnalysis.lib.picklable_file_io": [[105, 1, 1, "", "BZ2Picklable"], [105, 1, 1, "", "BufferIOPicklable"], [105, 1, 1, "", "FileIOPicklable"], [105, 1, 1, "", "GzipPicklable"], [105, 1, 1, "", "TextIOPicklable"], [105, 3, 1, "", "bz2_pickle_open"], [105, 3, 1, "", "gzip_pickle_open"], [105, 3, 1, "", "pickle_open"]], "MDAnalysis.lib.pkdtree": [[106, 1, 1, "", "PeriodicKDTree"]], "MDAnalysis.lib.pkdtree.PeriodicKDTree": [[106, 4, 1, "", "get_indices"], [106, 5, 1, "", "pbc"], [106, 4, 1, "", "search"], [106, 4, 1, "", "search_pairs"], [106, 4, 1, "", "search_tree"], [106, 4, 1, "", "set_coords"]], "MDAnalysis.lib.qcprot": [[107, 3, 1, "", "CalcRMSDRotationalMatrix"], [107, 3, 1, "", "FastCalcRMSDAndRotation"], [107, 3, 1, "", "InnerProduct"]], "MDAnalysis.lib.transformations": [[108, 1, 1, "", "Arcball"], [108, 3, 1, "", "arcball_nearest_axis"], [108, 3, 1, "", "compose_matrix"], [108, 3, 1, "", "concatenate_matrices"], [108, 3, 1, "", "decompose_matrix"], [108, 3, 1, "", "euler_from_quaternion"], [108, 3, 1, "", "projection_from_matrix"], [108, 3, 1, "", "quaternion_imag"], [108, 3, 1, "", "quaternion_real"], [108, 3, 1, "", "reflection_from_matrix"], [108, 3, 1, "", "rotation_from_matrix"], [108, 3, 1, "", "rotaxis"], [108, 3, 1, "", "scale_from_matrix"], [108, 3, 1, "", "shear_from_matrix"], [108, 3, 1, "", "translation_from_matrix"]], "MDAnalysis.lib.transformations.Arcball": [[108, 4, 1, "", "down"], [108, 4, 1, "", "drag"], [108, 4, 1, "", "getconstrain"], [108, 4, 1, "", "matrix"], [108, 4, 1, "", "next"], [108, 4, 1, "", "place"], [108, 4, 1, "", "setaxes"], [108, 4, 1, "", "setconstrain"]], "MDAnalysis.lib.util": [[109, 1, 1, "", "FORTRANReader"], [109, 6, 1, "", "FORTRAN_format_regex"], [109, 1, 1, "", "NamedStream"], [109, 1, 1, "", "Namespace"], [109, 1, 1, "", "_Deprecate"], [109, 3, 1, "", "anyopen"], [109, 3, 1, "", "asiterable"], [109, 3, 1, "", "blocks_of"], [109, 3, 1, "", "cached"], [109, 3, 1, "", "check_atomgroup_not_empty"], [109, 3, 1, "", "check_box"], [109, 3, 1, "", "check_compressed_format"], [109, 3, 1, "", "check_coords"], [109, 3, 1, "", "conv_float"], [109, 3, 1, "", "convert_aa_code"], [109, 3, 1, "", "dedent_docstring"], [109, 3, 1, "", "deprecate"], [109, 3, 1, "", "filename"], [109, 3, 1, "", "fixedwidth_bins"], [109, 3, 1, "", "flatten_dict"], [109, 3, 1, "", "format_from_filename_extension"], [109, 3, 1, "", "get_ext"], [109, 3, 1, "", "get_weights"], [109, 3, 1, "", "greedy_splitext"], [109, 3, 1, "", "group_same_or_consecutive_integers"], [109, 3, 1, "", "guess_format"], [109, 3, 1, "", "hasmethod"], [109, 3, 1, "", "isstream"], [109, 3, 1, "", "iterable"], [109, 3, 1, "", "ltruncate_int"], [109, 3, 1, "", "openany"], [109, 3, 1, "", "parse_residue"], [109, 3, 1, "", "realpath"], [109, 3, 1, "", "static_variables"], [109, 3, 1, "", "store_init_arguments"], [109, 3, 1, "", "unique_int_1d"], [109, 3, 1, "", "unique_rows"], [109, 3, 1, "", "warn_if_not_unique"], [109, 3, 1, "", "which"]], "MDAnalysis.lib.util.FORTRANReader": [[109, 4, 1, "", "number_of_matches"], [109, 4, 1, "", "parse_FORTRAN_format"], [109, 4, 1, "", "read"]], "MDAnalysis.lib.util.NamedStream": [[109, 4, 1, "", "close"], [109, 5, 1, "", "closed"], [109, 4, 1, "", "fileno"], [109, 4, 1, "", "flush"], [109, 4, 1, "", "readable"], [109, 4, 1, "", "readline"], [109, 4, 1, "", "reset"], [109, 4, 1, "", "seek"], [109, 4, 1, "", "seekable"], [109, 4, 1, "", "tell"], [109, 4, 1, "", "truncate"], [109, 4, 1, "", "writable"]], "MDAnalysis.selections": [[114, 0, 0, "-", "base"], [115, 0, 0, "-", "charmm"], [120, 3, 1, "", "get_writer"], [116, 0, 0, "-", "gromacs"], [117, 0, 0, "-", "jmol"], [118, 0, 0, "-", "pymol"], [119, 0, 0, "-", "vmd"]], "MDAnalysis.selections.base": [[114, 1, 1, "", "SelectionWriterBase"], [114, 3, 1, "", "join"]], "MDAnalysis.selections.base.SelectionWriterBase": [[114, 4, 1, "", "__init__"], [114, 4, 1, "", "_translate"], [114, 4, 1, "", "_write_head"], [114, 4, 1, "", "_write_tail"], [114, 4, 1, "", "comment"], [114, 4, 1, "", "write"]], "MDAnalysis.selections.charmm": [[115, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.charmm.SelectionWriter": [[115, 4, 1, "", "close"], [115, 4, 1, "", "comment"], [115, 2, 1, "", "commentfmt"], [115, 2, 1, "", "continuation"], [115, 2, 1, "", "ext"], [115, 2, 1, "", "format"], [115, 4, 1, "", "write"], [115, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.gromacs": [[116, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.gromacs.SelectionWriter": [[116, 4, 1, "", "close"], [116, 4, 1, "", "comment"], [116, 2, 1, "", "commentfmt"], [116, 2, 1, "", "continuation"], [116, 2, 1, "", "ext"], [116, 2, 1, "", "format"], [116, 4, 1, "", "write"], [116, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.jmol": [[117, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.jmol.SelectionWriter": [[117, 4, 1, "", "close"], [117, 4, 1, "", "comment"], [117, 2, 1, "", "commentfmt"], [117, 2, 1, "", "continuation"], [117, 2, 1, "", "default_numterms"], [117, 2, 1, "", "ext"], [117, 2, 1, "", "format"], [117, 4, 1, "", "write"], [117, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.pymol": [[118, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.pymol.SelectionWriter": [[118, 4, 1, "", "close"], [118, 4, 1, "", "comment"], [118, 2, 1, "", "commentfmt"], [118, 2, 1, "", "continuation"], [118, 2, 1, "", "ext"], [118, 2, 1, "", "format"], [118, 4, 1, "", "write"], [118, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.vmd": [[119, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.vmd.SelectionWriter": [[119, 4, 1, "", "close"], [119, 4, 1, "", "comment"], [119, 2, 1, "", "commentfmt"], [119, 2, 1, "", "continuation"], [119, 2, 1, "", "ext"], [119, 2, 1, "", "format"], [119, 4, 1, "", "write"], [119, 4, 1, "", "write_preamble"]], "MDAnalysis.topology": [[122, 0, 0, "-", "CRDParser"], [123, 0, 0, "-", "DLPolyParser"], [124, 0, 0, "-", "DMSParser"], [125, 0, 0, "-", "ExtendedPDBParser"], [126, 0, 0, "-", "FHIAIMSParser"], [127, 0, 0, "-", "GMSParser"], [128, 0, 0, "-", "GROParser"], [129, 0, 0, "-", "GSDParser"], [130, 0, 0, "-", "HoomdXMLParser"], [131, 0, 0, "-", "ITPParser"], [132, 0, 0, "-", "LAMMPSParser"], [133, 0, 0, "-", "MMTFParser"], [134, 0, 0, "-", "MOL2Parser"], [135, 0, 0, "-", "MinimalParser"], [136, 0, 0, "-", "PDBParser"], [137, 0, 0, "-", "PDBQTParser"], [138, 0, 0, "-", "PQRParser"], [139, 0, 0, "-", "PSFParser"], [140, 0, 0, "-", "TOPParser"], [141, 0, 0, "-", "TPRParser"], [142, 0, 0, "-", "TXYZParser"], [143, 0, 0, "-", "XYZParser"], [147, 0, 0, "-", "__init__"], [144, 0, 0, "-", "base"], [145, 0, 0, "-", "core"], [146, 0, 0, "-", "guessers"], [148, 0, 0, "-", "tables"], [149, 0, 0, "-", "tpr"]], "MDAnalysis.topology.CRDParser": [[122, 1, 1, "", "CRDParser"]], "MDAnalysis.topology.CRDParser.CRDParser": [[122, 4, 1, "", "close"], [122, 4, 1, "", "convert_forces_from_native"], [122, 4, 1, "", "convert_forces_to_native"], [122, 4, 1, "", "convert_pos_from_native"], [122, 4, 1, "", "convert_pos_to_native"], [122, 4, 1, "", "convert_time_from_native"], [122, 4, 1, "", "convert_time_to_native"], [122, 4, 1, "", "convert_velocities_from_native"], [122, 4, 1, "", "convert_velocities_to_native"], [122, 4, 1, "", "parse"], [122, 2, 1, "", "units"]], "MDAnalysis.topology.DMSParser": [[124, 1, 1, "", "DMSParser"]], "MDAnalysis.topology.DMSParser.DMSParser": [[124, 4, 1, "", "close"], [124, 4, 1, "", "convert_forces_from_native"], [124, 4, 1, "", "convert_forces_to_native"], [124, 4, 1, "", "convert_pos_from_native"], [124, 4, 1, "", "convert_pos_to_native"], [124, 4, 1, "", "convert_time_from_native"], [124, 4, 1, "", "convert_time_to_native"], [124, 4, 1, "", "convert_velocities_from_native"], [124, 4, 1, "", "convert_velocities_to_native"], [124, 4, 1, "", "parse"], [124, 2, 1, "", "units"]], "MDAnalysis.topology.ExtendedPDBParser": [[125, 1, 1, "", "ExtendedPDBParser"]], "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser": [[125, 4, 1, "", "close"], [125, 4, 1, "", "convert_forces_from_native"], [125, 4, 1, "", "convert_forces_to_native"], [125, 4, 1, "", "convert_pos_from_native"], [125, 4, 1, "", "convert_pos_to_native"], [125, 4, 1, "", "convert_time_from_native"], [125, 4, 1, "", "convert_time_to_native"], [125, 4, 1, "", "convert_velocities_from_native"], [125, 4, 1, "", "convert_velocities_to_native"], [125, 4, 1, "", "parse"], [125, 2, 1, "", "units"]], "MDAnalysis.topology.FHIAIMSParser": [[126, 1, 1, "", "FHIAIMSParser"]], "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser": [[126, 4, 1, "", "close"], [126, 4, 1, "", "convert_forces_from_native"], [126, 4, 1, "", "convert_forces_to_native"], [126, 4, 1, "", "convert_pos_from_native"], [126, 4, 1, "", "convert_pos_to_native"], [126, 4, 1, "", "convert_time_from_native"], [126, 4, 1, "", "convert_time_to_native"], [126, 4, 1, "", "convert_velocities_from_native"], [126, 4, 1, "", "convert_velocities_to_native"], [126, 4, 1, "", "parse"], [126, 2, 1, "", "units"]], "MDAnalysis.topology.GMSParser": [[127, 1, 1, "", "GMSParser"]], "MDAnalysis.topology.GMSParser.GMSParser": [[127, 4, 1, "", "close"], [127, 4, 1, "", "convert_forces_from_native"], [127, 4, 1, "", "convert_forces_to_native"], [127, 4, 1, "", "convert_pos_from_native"], [127, 4, 1, "", "convert_pos_to_native"], [127, 4, 1, "", "convert_time_from_native"], [127, 4, 1, "", "convert_time_to_native"], [127, 4, 1, "", "convert_velocities_from_native"], [127, 4, 1, "", "convert_velocities_to_native"], [127, 4, 1, "", "parse"], [127, 2, 1, "", "units"]], "MDAnalysis.topology.GROParser": [[128, 1, 1, "", "GROParser"]], "MDAnalysis.topology.GROParser.GROParser": [[128, 4, 1, "", "close"], [128, 4, 1, "", "convert_forces_from_native"], [128, 4, 1, "", "convert_forces_to_native"], [128, 4, 1, "", "convert_pos_from_native"], [128, 4, 1, "", "convert_pos_to_native"], [128, 4, 1, "", "convert_time_from_native"], [128, 4, 1, "", "convert_time_to_native"], [128, 4, 1, "", "convert_velocities_from_native"], [128, 4, 1, "", "convert_velocities_to_native"], [128, 4, 1, "", "parse"], [128, 2, 1, "", "units"]], "MDAnalysis.topology.GSDParser": [[129, 1, 1, "", "GSDParser"]], "MDAnalysis.topology.GSDParser.GSDParser": [[129, 4, 1, "", "close"], [129, 4, 1, "", "convert_forces_from_native"], [129, 4, 1, "", "convert_forces_to_native"], [129, 4, 1, "", "convert_pos_from_native"], [129, 4, 1, "", "convert_pos_to_native"], [129, 4, 1, "", "convert_time_from_native"], [129, 4, 1, "", "convert_time_to_native"], [129, 4, 1, "", "convert_velocities_from_native"], [129, 4, 1, "", "convert_velocities_to_native"], [129, 4, 1, "", "parse"], [129, 2, 1, "", "units"]], "MDAnalysis.topology.HoomdXMLParser": [[130, 1, 1, "", "HoomdXMLParser"]], "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser": [[130, 4, 1, "", "close"], [130, 4, 1, "", "convert_forces_from_native"], [130, 4, 1, "", "convert_forces_to_native"], [130, 4, 1, "", "convert_pos_from_native"], [130, 4, 1, "", "convert_pos_to_native"], [130, 4, 1, "", "convert_time_from_native"], [130, 4, 1, "", "convert_time_to_native"], [130, 4, 1, "", "convert_velocities_from_native"], [130, 4, 1, "", "convert_velocities_to_native"], [130, 4, 1, "", "parse"], [130, 2, 1, "", "units"]], "MDAnalysis.topology.ITPParser": [[131, 1, 1, "", "ITPParser"]], "MDAnalysis.topology.ITPParser.ITPParser": [[131, 4, 1, "", "close"], [131, 4, 1, "", "convert_forces_from_native"], [131, 4, 1, "", "convert_forces_to_native"], [131, 4, 1, "", "convert_pos_from_native"], [131, 4, 1, "", "convert_pos_to_native"], [131, 4, 1, "", "convert_time_from_native"], [131, 4, 1, "", "convert_time_to_native"], [131, 4, 1, "", "convert_velocities_from_native"], [131, 4, 1, "", "convert_velocities_to_native"], [131, 4, 1, "", "parse"], [131, 2, 1, "", "units"]], "MDAnalysis.topology.LAMMPSParser": [[132, 1, 1, "", "DATAParser"], [132, 1, 1, "", "LammpsDumpParser"]], "MDAnalysis.topology.LAMMPSParser.DATAParser": [[132, 4, 1, "", "close"], [132, 4, 1, "", "convert_forces_from_native"], [132, 4, 1, "", "convert_forces_to_native"], [132, 4, 1, "", "convert_pos_from_native"], [132, 4, 1, "", "convert_pos_to_native"], [132, 4, 1, "", "convert_time_from_native"], [132, 4, 1, "", "convert_time_to_native"], [132, 4, 1, "", "convert_velocities_from_native"], [132, 4, 1, "", "convert_velocities_to_native"], [132, 4, 1, "", "grab_datafile"], [132, 4, 1, "", "parse"], [132, 4, 1, "", "read_DATA_timestep"], [132, 2, 1, "", "units"]], "MDAnalysis.topology.MMTFParser": [[133, 1, 1, "", "MMTFParser"]], "MDAnalysis.topology.MOL2Parser": [[134, 1, 1, "", "MOL2Parser"]], "MDAnalysis.topology.MOL2Parser.MOL2Parser": [[134, 4, 1, "", "close"], [134, 4, 1, "", "convert_forces_from_native"], [134, 4, 1, "", "convert_forces_to_native"], [134, 4, 1, "", "convert_pos_from_native"], [134, 4, 1, "", "convert_pos_to_native"], [134, 4, 1, "", "convert_time_from_native"], [134, 4, 1, "", "convert_time_to_native"], [134, 4, 1, "", "convert_velocities_from_native"], [134, 4, 1, "", "convert_velocities_to_native"], [134, 4, 1, "", "parse"], [134, 2, 1, "", "units"]], "MDAnalysis.topology.MinimalParser": [[135, 1, 1, "", "MinimalParser"]], "MDAnalysis.topology.MinimalParser.MinimalParser": [[135, 4, 1, "", "close"], [135, 4, 1, "", "convert_forces_from_native"], [135, 4, 1, "", "convert_forces_to_native"], [135, 4, 1, "", "convert_pos_from_native"], [135, 4, 1, "", "convert_pos_to_native"], [135, 4, 1, "", "convert_time_from_native"], [135, 4, 1, "", "convert_time_to_native"], [135, 4, 1, "", "convert_velocities_from_native"], [135, 4, 1, "", "convert_velocities_to_native"], [135, 4, 1, "", "parse"], [135, 2, 1, "", "units"]], "MDAnalysis.topology.PDBParser": [[136, 1, 1, "", "PDBParser"]], "MDAnalysis.topology.PDBParser.PDBParser": [[136, 4, 1, "", "close"], [136, 4, 1, "", "convert_forces_from_native"], [136, 4, 1, "", "convert_forces_to_native"], [136, 4, 1, "", "convert_pos_from_native"], [136, 4, 1, "", "convert_pos_to_native"], [136, 4, 1, "", "convert_time_from_native"], [136, 4, 1, "", "convert_time_to_native"], [136, 4, 1, "", "convert_velocities_from_native"], [136, 4, 1, "", "convert_velocities_to_native"], [136, 4, 1, "", "parse"], [136, 2, 1, "", "units"]], "MDAnalysis.topology.PDBQTParser": [[137, 1, 1, "", "PDBQTParser"]], "MDAnalysis.topology.PDBQTParser.PDBQTParser": [[137, 4, 1, "", "close"], [137, 4, 1, "", "convert_forces_from_native"], [137, 4, 1, "", "convert_forces_to_native"], [137, 4, 1, "", "convert_pos_from_native"], [137, 4, 1, "", "convert_pos_to_native"], [137, 4, 1, "", "convert_time_from_native"], [137, 4, 1, "", "convert_time_to_native"], [137, 4, 1, "", "convert_velocities_from_native"], [137, 4, 1, "", "convert_velocities_to_native"], [137, 4, 1, "", "parse"], [137, 2, 1, "", "units"]], "MDAnalysis.topology.PQRParser": [[138, 1, 1, "", "PQRParser"]], "MDAnalysis.topology.PQRParser.PQRParser": [[138, 4, 1, "", "close"], [138, 4, 1, "", "convert_forces_from_native"], [138, 4, 1, "", "convert_forces_to_native"], [138, 4, 1, "", "convert_pos_from_native"], [138, 4, 1, "", "convert_pos_to_native"], [138, 4, 1, "", "convert_time_from_native"], [138, 4, 1, "", "convert_time_to_native"], [138, 4, 1, "", "convert_velocities_from_native"], [138, 4, 1, "", "convert_velocities_to_native"], [138, 4, 1, "", "guess_flavour"], [138, 4, 1, "", "parse"], [138, 2, 1, "", "units"]], "MDAnalysis.topology.PSFParser": [[139, 1, 1, "", "PSFParser"]], "MDAnalysis.topology.PSFParser.PSFParser": [[139, 4, 1, "", "close"], [139, 4, 1, "", "convert_forces_from_native"], [139, 4, 1, "", "convert_forces_to_native"], [139, 4, 1, "", "convert_pos_from_native"], [139, 4, 1, "", "convert_pos_to_native"], [139, 4, 1, "", "convert_time_from_native"], [139, 4, 1, "", "convert_time_to_native"], [139, 4, 1, "", "convert_velocities_from_native"], [139, 4, 1, "", "convert_velocities_to_native"], [139, 4, 1, "", "parse"], [139, 2, 1, "", "units"]], "MDAnalysis.topology.TOPParser": [[140, 1, 1, "", "TOPParser"]], "MDAnalysis.topology.TOPParser.TOPParser": [[140, 4, 1, "", "close"], [140, 4, 1, "", "convert_forces_from_native"], [140, 4, 1, "", "convert_forces_to_native"], [140, 4, 1, "", "convert_pos_from_native"], [140, 4, 1, "", "convert_pos_to_native"], [140, 4, 1, "", "convert_time_from_native"], [140, 4, 1, "", "convert_time_to_native"], [140, 4, 1, "", "convert_velocities_from_native"], [140, 4, 1, "", "convert_velocities_to_native"], [140, 4, 1, "", "parse"], [140, 4, 1, "", "parse_bonded"], [140, 4, 1, "", "parse_charges"], [140, 4, 1, "", "parse_chunks"], [140, 4, 1, "", "parse_dihedrals"], [140, 4, 1, "", "parse_elements"], [140, 4, 1, "", "parse_masses"], [140, 4, 1, "", "parse_names"], [140, 4, 1, "", "parse_residx"], [140, 4, 1, "", "parse_resnames"], [140, 4, 1, "", "parse_type_indices"], [140, 4, 1, "", "parse_types"], [140, 4, 1, "", "parsesection_mapper"], [140, 4, 1, "", "skipper"], [140, 2, 1, "", "units"]], "MDAnalysis.topology.TPRParser": [[141, 1, 1, "", "TPRParser"]], "MDAnalysis.topology.TPRParser.TPRParser": [[141, 4, 1, "", "close"], [141, 4, 1, "", "convert_forces_from_native"], [141, 4, 1, "", "convert_forces_to_native"], [141, 4, 1, "", "convert_pos_from_native"], [141, 4, 1, "", "convert_pos_to_native"], [141, 4, 1, "", "convert_time_from_native"], [141, 4, 1, "", "convert_time_to_native"], [141, 4, 1, "", "convert_velocities_from_native"], [141, 4, 1, "", "convert_velocities_to_native"], [141, 4, 1, "", "parse"], [141, 2, 1, "", "units"]], "MDAnalysis.topology.TXYZParser": [[142, 1, 1, "", "TXYZParser"]], "MDAnalysis.topology.TXYZParser.TXYZParser": [[142, 4, 1, "", "close"], [142, 4, 1, "", "convert_forces_from_native"], [142, 4, 1, "", "convert_forces_to_native"], [142, 4, 1, "", "convert_pos_from_native"], [142, 4, 1, "", "convert_pos_to_native"], [142, 4, 1, "", "convert_time_from_native"], [142, 4, 1, "", "convert_time_to_native"], [142, 4, 1, "", "convert_velocities_from_native"], [142, 4, 1, "", "convert_velocities_to_native"], [142, 4, 1, "", "parse"], [142, 2, 1, "", "units"]], "MDAnalysis.topology.XYZParser": [[143, 1, 1, "", "XYZParser"]], "MDAnalysis.topology.XYZParser.XYZParser": [[143, 4, 1, "", "parse"]], "MDAnalysis.topology.base": [[144, 1, 1, "", "TopologyReaderBase"]], "MDAnalysis.topology.base.TopologyReaderBase": [[144, 4, 1, "", "close"], [144, 4, 1, "", "convert_forces_from_native"], [144, 4, 1, "", "convert_forces_to_native"], [144, 4, 1, "", "convert_pos_from_native"], [144, 4, 1, "", "convert_pos_to_native"], [144, 4, 1, "", "convert_time_from_native"], [144, 4, 1, "", "convert_time_to_native"], [144, 4, 1, "", "convert_velocities_from_native"], [144, 4, 1, "", "convert_velocities_to_native"], [144, 2, 1, "", "units"]], "MDAnalysis.topology.guessers": [[146, 3, 1, "", "get_atom_mass"], [146, 3, 1, "", "guess_angles"], [146, 3, 1, "", "guess_aromaticities"], [146, 3, 1, "", "guess_atom_charge"], [146, 3, 1, "", "guess_atom_element"], [146, 3, 1, "", "guess_atom_mass"], [146, 3, 1, "", "guess_atom_type"], [146, 3, 1, "", "guess_bonds"], [146, 3, 1, "", "guess_dihedrals"], [146, 3, 1, "", "guess_gasteiger_charges"], [146, 3, 1, "", "guess_improper_dihedrals"], [146, 3, 1, "", "guess_masses"], [146, 3, 1, "", "guess_types"], [146, 3, 1, "", "validate_atom_types"]], "MDAnalysis.topology.tables": [[148, 6, 1, "", "TABLE_ATOMELEMENTS"], [148, 6, 1, "", "TABLE_MASSES"], [148, 6, 1, "", "TABLE_VDWRADII"], [148, 6, 1, "", "atomelements"], [148, 3, 1, "", "kv2dict"], [148, 6, 1, "", "masses"], [148, 6, 1, "", "vdwradii"]], "MDAnalysis.topology.tpr": [[149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 0, 0, "-", "obj"], [149, 0, 0, "-", "setting"], [149, 0, 0, "-", "utils"]], "MDAnalysis.topology.tpr.obj": [[149, 1, 1, "", "Atom"], [149, 1, 1, "", "AtomKind"], [149, 1, 1, "", "Atoms"], [149, 1, 1, "", "Box"], [149, 1, 1, "", "Ilist"], [149, 1, 1, "", "InteractionKind"], [149, 1, 1, "", "Molblock"], [149, 1, 1, "", "MoleculeKind"], [149, 1, 1, "", "Mtop"], [149, 1, 1, "", "Params"], [149, 1, 1, "", "TpxHeader"]], "MDAnalysis.topology.tpr.obj.Atom": [[149, 2, 1, "", "atomnumber"], [149, 2, 1, "", "m"], [149, 2, 1, "", "mB"], [149, 2, 1, "", "ptype"], [149, 2, 1, "", "q"], [149, 2, 1, "", "qB"], [149, 2, 1, "", "resind"], [149, 2, 1, "", "tp"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.AtomKind": [[149, 5, 1, "", "element_symbol"]], "MDAnalysis.topology.tpr.obj.Atoms": [[149, 2, 1, "", "atomnames"], [149, 2, 1, "", "atoms"], [149, 2, 1, "", "nr"], [149, 2, 1, "", "nres"], [149, 2, 1, "", "resnames"], [149, 2, 1, "", "type"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.Box": [[149, 2, 1, "", "rel"], [149, 2, 1, "", "size"], [149, 2, 1, "", "v"]], "MDAnalysis.topology.tpr.obj.Ilist": [[149, 2, 1, "", "iatoms"], [149, 2, 1, "", "ik"], [149, 2, 1, "", "nr"]], "MDAnalysis.topology.tpr.obj.InteractionKind": [[149, 4, 1, "", "process"]], "MDAnalysis.topology.tpr.obj.Molblock": [[149, 2, 1, "", "molb_natoms_mol"], [149, 2, 1, "", "molb_nmol"], [149, 2, 1, "", "molb_nposres_xA"], [149, 2, 1, "", "molb_nposres_xB"], [149, 2, 1, "", "molb_type"]], "MDAnalysis.topology.tpr.obj.MoleculeKind": [[149, 4, 1, "", "number_of_atoms"], [149, 4, 1, "", "number_of_residues"], [149, 4, 1, "", "remap_angles"], [149, 4, 1, "", "remap_bonds"], [149, 4, 1, "", "remap_dihe"], [149, 4, 1, "", "remap_impr"]], "MDAnalysis.topology.tpr.obj.Mtop": [[149, 2, 1, "", "moltypes"], [149, 2, 1, "", "nmolblock"], [149, 2, 1, "", "nmoltype"]], "MDAnalysis.topology.tpr.obj.Params": [[149, 2, 1, "", "atnr"], [149, 2, 1, "", "fudgeQQ"], [149, 2, 1, "", "functype"], [149, 2, 1, "", "ntypes"], [149, 2, 1, "", "reppow"]], "MDAnalysis.topology.tpr.obj.TpxHeader": [[149, 2, 1, "", "bBox"], [149, 2, 1, "", "bF"], [149, 2, 1, "", "bIr"], [149, 2, 1, "", "bTop"], [149, 2, 1, "", "bV"], [149, 2, 1, "", "bX"], [149, 2, 1, "", "fep_state"], [149, 2, 1, "", "fgen"], [149, 2, 1, "", "file_tag"], [149, 2, 1, "", "fver"], [149, 2, 1, "", "lamb"], [149, 2, 1, "", "natoms"], [149, 2, 1, "", "ngtc"], [149, 2, 1, "", "precision"], [149, 2, 1, "", "sizeOfTprBody"], [149, 2, 1, "", "ver_str"]], "MDAnalysis.topology.tpr.setting": [[149, 6, 1, "", "F_ANGLES"], [149, 6, 1, "", "F_ANGRES"], [149, 6, 1, "", "F_ANGRESZ"], [149, 6, 1, "", "F_ANHARM_POL"], [149, 6, 1, "", "F_BHAM"], [149, 6, 1, "", "F_BHAM_LR"], [149, 6, 1, "", "F_BONDS"], [149, 6, 1, "", "F_CBTDIHS"], [149, 6, 1, "", "F_CMAP"], [149, 6, 1, "", "F_COM_PULL"], [149, 6, 1, "", "F_CONNBONDS"], [149, 6, 1, "", "F_CONSTR"], [149, 6, 1, "", "F_CONSTRNC"], [149, 6, 1, "", "F_COUL14"], [149, 6, 1, "", "F_COUL_LR"], [149, 6, 1, "", "F_COUL_RECIP"], [149, 6, 1, "", "F_COUL_SR"], [149, 6, 1, "", "F_CROSS_BOND_ANGLES"], [149, 6, 1, "", "F_CROSS_BOND_BONDS"], [149, 6, 1, "", "F_CUBICBONDS"], [149, 6, 1, "", "F_DENSITYFITTING"], [149, 6, 1, "", "F_DHDL_CON"], [149, 6, 1, "", "F_DIHRES"], [149, 6, 1, "", "F_DIHRESVIOL"], [149, 6, 1, "", "F_DISPCORR"], [149, 6, 1, "", "F_DISRES"], [149, 6, 1, "", "F_DISRESVIOL"], [149, 6, 1, "", "F_DKDL"], [149, 6, 1, "", "F_DPD"], [149, 6, 1, "", "F_DVDL"], [149, 6, 1, "", "F_DVDL_BONDED"], [149, 6, 1, "", "F_DVDL_COUL"], [149, 6, 1, "", "F_DVDL_RESTRAINT"], [149, 6, 1, "", "F_DVDL_TEMPERATURE"], [149, 6, 1, "", "F_DVDL_VDW"], [149, 6, 1, "", "F_ECONSERVED"], [149, 6, 1, "", "F_EKIN"], [149, 6, 1, "", "F_EPOT"], [149, 6, 1, "", "F_EQM"], [149, 6, 1, "", "F_ETOT"], [149, 6, 1, "", "F_FBPOSRES"], [149, 6, 1, "", "F_FENEBONDS"], [149, 6, 1, "", "F_FOURDIHS"], [149, 6, 1, "", "F_G96ANGLES"], [149, 6, 1, "", "F_G96BONDS"], [149, 6, 1, "", "F_GB12"], [149, 6, 1, "", "F_GB13"], [149, 6, 1, "", "F_GB14"], [149, 6, 1, "", "F_GBPOL"], [149, 6, 1, "", "F_HARMONIC"], [149, 6, 1, "", "F_IDIHS"], [149, 6, 1, "", "F_LINEAR_ANGLES"], [149, 6, 1, "", "F_LJ"], [149, 6, 1, "", "F_LJ14"], [149, 6, 1, "", "F_LJC14_Q"], [149, 6, 1, "", "F_LJC_PAIRS_NB"], [149, 6, 1, "", "F_LJ_LR"], [149, 6, 1, "", "F_LJ_RECIP"], [149, 6, 1, "", "F_MORSE"], [149, 6, 1, "", "F_NPSOLVATION"], [149, 6, 1, "", "F_NRE"], [149, 6, 1, "", "F_ORIRES"], [149, 6, 1, "", "F_ORIRESDEV"], [149, 6, 1, "", "F_PDIHS"], [149, 6, 1, "", "F_PDISPCORR"], [149, 6, 1, "", "F_PIDIHS"], [149, 6, 1, "", "F_POLARIZATION"], [149, 6, 1, "", "F_POSRES"], [149, 6, 1, "", "F_PRES"], [149, 6, 1, "", "F_QUARTIC_ANGLES"], [149, 6, 1, "", "F_RBDIHS"], [149, 6, 1, "", "F_RESTRANGLES"], [149, 6, 1, "", "F_RESTRBONDS"], [149, 6, 1, "", "F_RESTRDIHS"], [149, 6, 1, "", "F_RF_EXCL"], [149, 6, 1, "", "F_SETTLE"], [149, 6, 1, "", "F_TABANGLES"], [149, 6, 1, "", "F_TABBONDS"], [149, 6, 1, "", "F_TABBONDSNC"], [149, 6, 1, "", "F_TABDIHS"], [149, 6, 1, "", "F_TEMP"], [149, 6, 1, "", "F_THOLE_POL"], [149, 6, 1, "", "F_UREY_BRADLEY"], [149, 6, 1, "", "F_VSITE1"], [149, 6, 1, "", "F_VSITE2"], [149, 6, 1, "", "F_VSITE2FD"], [149, 6, 1, "", "F_VSITE3"], [149, 6, 1, "", "F_VSITE3FAD"], [149, 6, 1, "", "F_VSITE3FD"], [149, 6, 1, "", "F_VSITE3OUT"], [149, 6, 1, "", "F_VSITE4FD"], [149, 6, 1, "", "F_VSITE4FDN"], [149, 6, 1, "", "F_VSITEN"], [149, 6, 1, "", "F_VTEMP_NOLONGERUSED"], [149, 6, 1, "", "F_WATER_POL"], [149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 6, 1, "", "ftupd"], [149, 6, 1, "", "interaction_types"]], "MDAnalysis.topology.tpr.utils": [[149, 1, 1, "", "TPXUnpacker"], [149, 1, 1, "", "TPXUnpacker2020"], [149, 3, 1, "", "define_unpack_real"], [149, 3, 1, "", "do_atom"], [149, 3, 1, "", "do_atoms"], [149, 3, 1, "", "do_block"], [149, 3, 1, "", "do_blocka"], [149, 3, 1, "", "do_ffparams"], [149, 3, 1, "", "do_harm"], [149, 3, 1, "", "do_ilists"], [149, 3, 1, "", "do_iparams"], [149, 3, 1, "", "do_molblock"], [149, 3, 1, "", "do_moltype"], [149, 3, 1, "", "do_mtop"], [149, 3, 1, "", "do_resinfo"], [149, 3, 1, "", "do_rvec"], [149, 3, 1, "", "do_symstr"], [149, 3, 1, "", "do_symtab"], [149, 3, 1, "", "extract_box_info"], [149, 3, 1, "", "fileVersion_err"], [149, 3, 1, "", "ndo_int"], [149, 3, 1, "", "ndo_ivec"], [149, 3, 1, "", "ndo_real"], [149, 3, 1, "", "ndo_rvec"], [149, 3, 1, "", "read_tpxheader"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "unpack_int64"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_uint64"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker2020": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "from_unpacker"], [149, 4, 1, "", "unpack_fstring"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.transformations": [[152, 0, 0, "-", "base"], [153, 0, 0, "-", "boxdimensions"], [154, 0, 0, "-", "fit"], [155, 0, 0, "-", "nojump"], [156, 0, 0, "-", "positionaveraging"], [157, 0, 0, "-", "rotate"], [158, 0, 0, "-", "translate"], [159, 0, 0, "-", "wrap"]], "MDAnalysis.transformations.base": [[152, 1, 1, "", "TransformationBase"]], "MDAnalysis.transformations.boxdimensions": [[153, 1, 1, "", "set_dimensions"]], "MDAnalysis.transformations.fit": [[154, 1, 1, "", "fit_rot_trans"], [154, 1, 1, "", "fit_translation"]], "MDAnalysis.transformations.nojump": [[155, 1, 1, "", "NoJump"]], "MDAnalysis.transformations.positionaveraging": [[156, 1, 1, "", "PositionAverager"]], "MDAnalysis.transformations.rotate": [[157, 1, 1, "", "rotateby"]], "MDAnalysis.transformations.translate": [[158, 1, 1, "", "center_in_box"], [158, 1, 1, "", "translate"]], "MDAnalysis.transformations.wrap": [[159, 1, 1, "", "unwrap"], [159, 1, 1, "", "wrap"]], "MDAnalysis.units": [[160, 6, 1, "", "MDANALYSIS_BASE_UNITS"], [160, 6, 1, "", "chargeUnit_factor"], [160, 6, 1, "", "constants"], [160, 6, 1, "", "conversion_factor"], [160, 3, 1, "", "convert"], [160, 6, 1, "", "densityUnit_factor"], [160, 6, 1, "", "forceUnit_factor"], [160, 3, 1, "", "get_conversion_factor"], [160, 6, 1, "", "lengthUnit_factor"], [160, 6, 1, "", "speedUnit_factor"], [160, 6, 1, "", "timeUnit_factor"], [160, 6, 1, "", "unit_types"], [160, 6, 1, "", "water"]], "MDAnalysis.version": [[161, 6, 1, "", "__version__"]], "MDAnalysis.visualization": [[162, 0, 0, "-", "streamlines"], [163, 0, 0, "-", "streamlines_3D"]], "MDAnalysis.visualization.streamlines": [[162, 3, 1, "", "generate_streamlines"]], "MDAnalysis.visualization.streamlines_3D": [[163, 3, 1, "", "generate_streamlines_3d"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method", "5": "py:property", "6": "py:data", "7": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "titleterms": {"coordin": [0, 3, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 134, 156], "fit": [0, 154], "align": [0, 107], "mdanalysi": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 123, 126, 134, 141, 144, 145, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "analysi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], "rm": [0, 36], "tutori": [0, 8, 32], "common": [0, 43, 78, 145], "usag": [0, 1, 40], "function": [0, 4, 17, 18, 19, 20, 23, 25, 32, 34, 35, 36, 43, 77, 78, 87, 89, 92, 98, 99, 102, 103, 107, 108, 109, 110, 145, 149, 151, 160], "class": [0, 2, 3, 4, 8, 9, 20, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 70, 71, 74, 75, 77, 79, 80, 81, 83, 85, 86, 89, 92, 102, 104, 105, 109, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 149, 151, 152], "helper": [0, 23, 34, 75, 77, 89, 103, 109], "simpl": [1, 113], "atom": [1, 38, 88, 132, 146, 147], "distanc": [1, 10, 14, 30, 31, 39, 96, 97, 99], "atomicdist": 1, "basic": 1, "build": [2, 39, 58, 145, 151], "block": [2, 39, 151], "base": [2, 42, 72, 75, 114, 144, 152, 160], "exampl": [2, 3, 4, 9, 20, 22, 24, 26, 36, 37, 58, 60, 62, 64, 111, 146], "us": [2, 22, 23, 24, 37, 38, 77, 80, 99, 111, 112, 146], "standard": 2, "tool": 2, "write": [2, 4, 56, 58, 120], "new": [2, 82], "bond": [3, 20, 21, 24, 39, 147], "angl": [3, 9, 31, 147], "torsion": 3, "bat": 3, "applic": [3, 9, 26, 36], "nativ": 4, "contact": [4, 39], "One": 4, "dimension": [4, 16, 39], "two": 4, "q1": 4, "q2": 4, "your": 4, "own": 4, "data": [5, 39, 40, 60, 109, 160, 161], "file": [5, 23, 50, 53, 54, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 82, 109, 110, 120, 124, 134], "gener": [6, 9, 26, 141], "densiti": [6, 28], "from": [6, 80, 146], "trajectori": [6, 19, 23, 26, 40, 44, 51, 55, 57, 58, 60, 61, 67, 68, 69, 70, 72, 73, 74, 77, 79, 80, 100, 101, 111, 151, 155, 156, 157, 158], "md": [6, 19], "creat": [6, 23, 80, 151], "object": [6, 86, 89, 90, 91, 92, 93], "dielectr": 7, "diffus": [8, 29], "map": 8, "diffusionmap": 8, "dihedr": [9, 31, 147], "ramachandran": 9, "janin": 9, "refer": [9, 11, 17, 112, 160], "plot": 9, "encor": [11, 13, 15, 16, 17, 18], "ensembl": [11, 12, 14, 17], "similar": [11, 17, 34, 113], "calcul": [11, 14, 15, 17, 34, 36, 96, 97], "modul": [11, 23, 27, 39, 45, 46, 84, 93, 99, 110, 112, 150, 164], "bootstrap": 12, "procedur": 12, "cluster": [13, 16], "frontend": [13, 16], "represent": [13, 80], "clustercollect": 13, "clusteringmethod": 13, "algorithm": [13, 16, 25, 104, 112], "matrix": 14, "confdistmatrix": 14, "covari": 15, "reduct": [16, 39], "dimensionality_reduct": 16, "reduce_dimension": 16, "dimensionalityreductionmethod": 16, "comparison": 17, "util": [18, 19, 23, 26, 98, 109, 149], "elast": 19, "network": [19, 38], "gnm": 19, "task": 19, "hydrogen": [20, 21, 24, 39], "autocorrel": [20, 21, 98], "hydrogenbond": [20, 24, 38], "hbond_autocorrel": [20, 21], "descript": 20, "input": [20, 24, 141], "output": [20, 24, 37, 38, 81], "work": [20, 62, 64], "polyamid": 20, "hbond": 21, "deprec": 21, "helan": 22, "protein": [22, 39], "helic": 22, "hole": 23, "hole2": 23, "pdb": [23, 64, 125, 136], "vmd": [23, 119], "analyz": 23, "full": 23, "subsampl": 23, "surfac": 23, "load": [23, 58, 60], "templat": 23, "hbond_analysi": 24, "hydrogenbondanalysi": 24, "The": [24, 121], "its": 24, "method": [24, 34, 44, 79], "leaflet": 25, "identif": 25, "x3dna": 26, "helicoid": 26, "paramet": 26, "profil": 26, "legaci": [26, 27, 39], "singl": [26, 79, 120], "structur": [26, 39, 47, 48, 50, 59, 64, 65, 107, 124], "code": [27, 104, 109, 111, 165], "linear": [28, 103], "lineardens": 28, "mean": [29, 36], "squar": [29, 36], "displac": 29, "msd": 29, "comput": [29, 99], "an": [29, 44, 58, 80], "self": 29, "combin": 29, "multipl": [29, 36, 120], "replic": [29, 44], "updat": 30, "nucleic": [30, 31, 39], "acid": [30, 31, 39], "nucleicacid": 30, "nuclinfo": 31, "phase": 31, "princip": 32, "compon": 32, "pca": 32, "polym": [33, 39], "path": 34, "psa": 34, "variabl": [34, 131], "radial": 35, "distribut": 35, "rdf": 35, "root": 36, "quantiti": 36, "rmsd": [36, 107], "domain": 36, "water": [37, 38], "dynam": [37, 113], "waterdynam": 37, "hydrogenbondlifetim": 37, "waterorientationalrelax": 37, "angulardistribut": 37, "meansquaredisplac": 37, "survivalprob": 37, "bridg": 38, "waterbridgeanalysi": 38, "theori": 38, "timeseri": 38, "detect": 38, "default": 38, "heavi": 38, "name": [38, 120, 146], "charmm27": 38, "forc": 38, "field": 38, "type": 38, "glycam06": 38, "how": [38, 80, 82, 120, 151], "perform": 38, "count_by_typ": 38, "count_by_tim": 38, "membran": 39, "macromolecul": 39, "liquid": 39, "volumetr": 39, "edr": 40, "auxiliari": [40, 41, 42, 43, 44, 45], "reader": [40, 41, 42, 44, 52, 55, 57, 61, 74, 75, 77, 79, 80, 82, 123, 144, 147], "background": 40, "standalon": 40, "edrread": 40, "ad": [40, 44], "xvg": 41, "read": [43, 77, 78, 80, 100, 101, 105, 141], "core": [43, 78, 85, 86, 87, 88, 89, 90, 91, 92, 93, 145], "support": [44, 79, 120, 147, 149], "format": [44, 52, 53, 54, 56, 60, 62, 63, 66, 71, 74, 79, 82, 100, 101, 109, 110, 123, 124, 134, 141, 147], "api": [44, 79], "iter": 44, "access": [44, 82], "attribut": [44, 79, 90], "recreat": 44, "auxstep": 44, "auxread": 44, "registri": [44, 79], "convert": [46, 47, 48, 49, 75], "openmm": 47, "topologi": [47, 48, 49, 89, 90, 91, 93, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150], "parser": [47, 48, 49, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 149], "openmmpars": 47, "i": [47, 48, 49, 51, 60, 70, 105], "o": [47, 48, 49, 51, 60, 70, 105], "parm": 48, "parmedpars": 48, "rdkit": 49, "rdkitpars": 49, "molecul": 49, "crd": [50, 122], "dcd": [51, 60, 100], "dl_poli": 52, "dlpoli": 52, "desr": [53, 124], "dm": 53, "fhi": [54, 126], "aim": [54, 126], "fhiaim": 54, "develop": [54, 56, 141, 147], "note": [54, 56, 62, 141, 147, 160], "fhiaimswrit": 54, "string": [54, 56, 109], "gamess": [55, 127], "gm": 55, "gro": [56, 128], "growrit": 56, "gsd": [57, 129], "h5md": 58, "unit": [58, 86, 160], "simul": [58, 60], "open": 58, "parallel": [58, 97], "h5py": 58, "hdf5": 58, "linux": 58, "inpcrd": 59, "lammp": 60, "dump": 60, "mmtf": [61, 133], "mol2": [62, 134], "namdbin": 63, "capabl": 64, "pdbqt": [65, 137], "pqr": [66, 138], "tng": 67, "current": [67, 82, 151], "limit": 67, "amber": [68, 140], "trj": 68, "binari": 68, "netcdf": 68, "ascii": 68, "traj": 68, "trr": 69, "trz": 70, "txyz": [71, 142], "xdr": [72, 101], "xtc": 73, "xyz": [74, 143], "frameiter": 75, "writer": [75, 79, 114, 120], "chainread": 76, "chain": 76, "chemfil": 77, "timestep": [79, 83], "tabl": [79, 120, 147, 148, 165], "privat": 79, "frame": 79, "memori": 80, "memoryread": 80, "In": 80, "arbitrari": 80, "switch": 80, "construct": 80, "numpi": 80, "arrai": [80, 99, 109], "sub": 80, "system": [80, 93, 121], "null": 81, "serial": 82, "To": 82, "seek": 82, "miscellan": 82, "test": [82, 165], "_singleframeread": 82, "basereadertest": 82, "multiframereadertest": 82, "handler": 82, "implement": [82, 151, 160], "picklabl": [82, 105], "io": 82, "atomgroup": [85, 120], "accessor": 85, "contain": [86, 109], "group": 86, "collect": 86, "chemic": 86, "level": [86, 99, 100, 101, 110], "select": [88, 93, 99, 113, 114, 115, 116, 117, 118, 119, 120], "hierarchi": 88, "topologyattr": 90, "topologyobject": 91, "univers": 92, "import": 93, "user": [93, 165], "custom": 94, "except": 94, "warn": 94, "neighbor": [95, 104], "search": [95, 104], "wrapper": 95, "lib": [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110], "neighborsearch": 95, "librari": [96, 97, 99, 104, 110, 112], "c_distanc": 96, "c_distances_openmp": 97, "correl": 98, "intermitt": 98, "fast": [99, 107], "acceler": 99, "backend": 99, "avail": 99, "distopia": 99, "low": [99, 100, 101, 110], "libdcd": 100, "gromac": [101, 116, 141], "libmdaxdr": 101, "set": [102, 149, 153], "up": 102, "log": 102, "conveni": 102, "other": 102, "purpos": 102, "mathemat": 103, "mdamath": 103, "algebra": 103, "connect": [103, 113], "nsgrid": 104, "about": 104, "onli": 105, "picklable_file_io": 105, "periodickdtre": 106, "pkdtree": 106, "qcp": 107, "qcprot": 107, "homogen": 108, "transform": [108, 151, 152, 153, 154, 155, 156, 157, 158, 159], "matric": 108, "quaternion": 108, "requir": 108, "directori": 109, "stream": 109, "list": [109, 110], "pars": [109, 141], "manipul": 109, "handl": 109, "decor": 109, "manag": 109, "check": 109, "overview": [110, 111], "libmdanalysi": 110, "over": 111, "python": 111, "includ": [111, 112], "snippet": 111, "citat": [112, 165], "whole": 112, "duecredit": 112, "command": 113, "keyword": 113, "pattern": 113, "match": 113, "boolean": 113, "geometr": 113, "index": 113, "preexist": 113, "modifi": 113, "order": 113, "charmm": 115, "jmol": 117, "pymol": 118, "export": 120, "recogn": 120, "extens": 120, "todo": [122, 140], "dl": 123, "poli": 123, "dlpolypars": 123, "molecular": 124, "extend": 125, "topolgi": 126, "fhiaimspars": 126, "hoomd": 130, "xml": 130, "itp": 131, "preprocessor": 131, "lammpspars": 132, "style": 132, "minim": 135, "psf": 139, "prmtop": 140, "portabl": 141, "run": 141, "tpr": [141, 149], "version": [141, 161], "tprparser": [141, 149], "guess": 146, "unknown": 146, "inform": [146, 161], "guesser": 146, "element": 146, "bondord": 147, "improp": 147, "definit": 149, "fly": 151, "workflow": 151, "complex": 151, "closur": 151, "box": 153, "dimens": 153, "boxdimens": 153, "No": 155, "jump": 155, "unwrap": [155, 159], "nojump": 155, "averag": 156, "positionaverag": 156, "rotat": 157, "translat": 158, "wrap": 159, "constant": 160, "convers": 160, "encod": 160, "mdanalysis_base_unit": 160, "footnot": 160, "streamplot": [162, 163], "2d": 162, "visual": [162, 163, 164], "streamlin": 162, "3d": 163, "streamlines_3d": 163, "lipid": 164, "flow": 164, "document": 165, "get": 165, "involv": 165, "guid": 165, "instal": 165, "conda": 165, "pip": 165, "sourc": 165, "indic": 165}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx.ext.todo": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align": [[0, "coordinate-fitting-and-alignment-mdanalysis-analysis-align"]], "RMS-fitting tutorial": [[0, "rms-fitting-tutorial"]], "Common usage": [[0, "common-usage"]], "Functions and Classes": [[0, "functions-and-classes"], [20, "functions-and-classes"]], "Helper functions": [[0, "helper-functions"], [77, "helper-functions"], [89, "helper-functions"]], "Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances": [[1, "simple-atomic-distance-analysis-mdanalysis-analysis-atomicdistances"]], "Basic usage": [[1, "basic-usage"]], "Analysis building blocks \u2014 MDAnalysis.analysis.base": [[2, "analysis-building-blocks-mdanalysis-analysis-base"]], "Example of using a standard analysis tool": [[2, "example-of-using-a-standard-analysis-tool"]], "Writing new analysis tools": [[2, "writing-new-analysis-tools"]], "Classes": [[2, "classes"], [4, "classes"], [8, "classes"], [29, "classes"], [37, "classes"], [38, "classes"], [40, "classes"], [47, "classes"], [47, "id5"], [48, "classes"], [48, "id2"], [49, "classes"], [49, "id1"], [51, "classes"], [54, "classes"], [56, "classes"], [57, "classes"], [58, "classes"], [59, "classes"], [60, "classes"], [61, "classes"], [62, "classes"], [63, "classes"], [64, "classes"], [70, "classes"], [71, "classes"], [74, "classes"], [77, "classes"], [80, "classes"], [81, "classes"], [85, "classes"], [86, "classes"], [89, "classes"], [92, "classes"], [104, "classes"], [122, "classes"], [124, "classes"], [125, "classes"], [126, "classes"], [127, "classes"], [128, "classes"], [129, "classes"], [130, "classes"], [131, "classes"], [132, "classes"], [133, "classes"], [134, "classes"], [135, "classes"], [136, "classes"], [137, "classes"], [138, "classes"], [139, "classes"], [140, "classes"], [141, "classes"], [142, "classes"], [143, "classes"], [144, "classes"]], "Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat": [[3, "bond-angle-torsion-coordinates-analysis-mdanalysis-analysis-bat"]], "Example applications": [[3, "example-applications"], [9, "example-applications"], [26, "example-applications"], [36, "example-applications"]], "Analysis classes": [[3, "analysis-classes"], [26, "analysis-classes"], [36, "analysis-classes"]], "Native contacts analysis \u2014 MDAnalysis.analysis.contacts": [[4, "native-contacts-analysis-mdanalysis-analysis-contacts"]], "Examples for contact analysis": [[4, "examples-for-contact-analysis"]], "One-dimensional contact analysis": [[4, "one-dimensional-contact-analysis"]], "Two-dimensional contact analysis (q1-q2)": [[4, "two-dimensional-contact-analysis-q1-q2"]], "Writing your own contact analysis": [[4, "writing-your-own-contact-analysis"]], "Functions": [[4, "functions"], [36, "functions"], [92, "functions"], [99, "functions"], [107, "functions"], [108, "functions"], [160, "functions"]], "Analysis data files": [[5, "analysis-data-files"]], "Data files": [[5, "data-files"]], "Generating densities from trajectories \u2014 MDAnalysis.analysis.density": [[6, "generating-densities-from-trajectories-mdanalysis-analysis-density"]], "Generating a density from a MD trajectory": [[6, "generating-a-density-from-a-md-trajectory"]], "Creating densities": [[6, "creating-densities"]], "Density object": [[6, "density-object"]], "Dielectric \u2014 MDAnalysis.analysis.dielectric": [[7, "dielectric-mdanalysis-analysis-dielectric"]], "Diffusion map \u2014 MDAnalysis.analysis.diffusionmap": [[8, "diffusion-map-mdanalysis-analysis-diffusionmap"]], "Diffusion Map tutorial": [[8, "diffusion-map-tutorial"]], "Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals": [[9, "dihedral-angles-analysis-mdanalysis-analysis-dihedrals"]], "General dihedral analysis": [[9, "general-dihedral-analysis"]], "Ramachandran analysis": [[9, "ramachandran-analysis"]], "Janin analysis": [[9, "janin-analysis"]], "Reference plots": [[9, "reference-plots"]], "Analysis Classes": [[9, "analysis-classes"]], "Distance analysis \u2014 MDAnalysis.analysis.distances": [[10, "distance-analysis-mdanalysis-analysis-distances"]], "ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore": [[11, "encore-ensemble-similarity-calculations-mdanalysis-analysis-encore"]], "Modules": [[11, "modules"]], "References": [[11, "references"], [112, "references"]], "bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap": [[12, "bootstrap-procedures-mdanalysis-analysis-ensemble-bootstrap"]], "Clustering": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.cluster": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-cluster"]], "Cluster representation \u2014 MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, "cluster-representation-mdanalysis-analysis-encore-clustering-clustercollection"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-clusteringmethod"]], "Clustering algorithms": [[13, "clustering-algorithms"]], "Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix": [[14, "distance-matrix-calculation-mdanalysis-analysis-ensemble-confdistmatrix"]], "Covariance calculation \u2014 encore.covariance": [[15, "covariance-calculation-encore-covariance"]], "Dimensionality reduction": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-dimensionality-reduction-reduce-dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.clustering.DimensionalityReductionMethod": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-clustering-dimensionalityreductionmethod"]], "Dimensionality reduction algorithms": [[16, "dimensionality-reduction-algorithms"]], "Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity": [[17, "ensemble-similarity-calculations-mdanalysis-analysis-encore-similarity"]], "Functions for ensemble comparisons": [[17, "functions-for-ensemble-comparisons"]], "Function reference": [[17, "function-reference"]], "Utility functions for ENCORE": [[18, "module-MDAnalysis.analysis.encore.utils"]], "Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm": [[19, "elastic-network-analysis-of-md-trajectories-mdanalysis-analysis-gnm"]], "Analysis tasks": [[19, "analysis-tasks"]], "Utility functions": [[19, "utility-functions"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hydrogenbonds-hbond-autocorrel"]], "Description": [[20, "description"]], "Input": [[20, "input"], [24, "input"]], "Output": [[20, "output"], [24, "output"], [37, "output"]], "Worked Example for Polyamide": [[20, "worked-example-for-polyamide"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)": [[21, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hbonds-hbond-autocorrel-deprecated"]], "HELANAL \u2014 analysis of protein helices": [[22, "helanal-analysis-of-protein-helices"]], "Example use": [[22, "example-use"]], "HOLE analysis \u2014 MDAnalysis.analysis.hole2": [[23, "hole-analysis-mdanalysis-analysis-hole2"]], "Module": [[23, "module-MDAnalysis.analysis.hole2"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2": [[23, "id3"]], "Using HOLE on a PDB file": [[23, "using-hole-on-a-pdb-file"]], "Using HOLE on a trajectory": [[23, "using-hole-on-a-trajectory"]], "Using HOLE with VMD": [[23, "using-hole-with-vmd"]], "Analyzing a full trajectory": [[23, "analyzing-a-full-trajectory"]], "Creating subsampled HOLE surface": [[23, "creating-subsampled-hole-surface"]], "Loading a trajectory into VMD with subsampling": [[23, "loading-a-trajectory-into-vmd-with-subsampling"]], "Creating a subsampled trajectory": [[23, "creating-a-subsampled-trajectory"]], "Functions and classes": [[23, "functions-and-classes"]], "Utility functions and templates": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.helper": [[23, "hole-analysis-mdanalysis-analysis-hole2-helper"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.templates": [[23, "hole-analysis-mdanalysis-analysis-hole2-templates"]], "Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "hydrogen-bond-analysis-mdanalysis-analysis-hydrogenbonds-hbond-analysis"]], "Example use of HydrogenBondAnalysis": [[24, "example-use-of-hydrogenbondanalysis"]], "The class and its methods": [[24, "the-class-and-its-methods"]], "Leaflet identification \u2014 MDAnalysis.analysis.leaflet": [[25, "leaflet-identification-mdanalysis-analysis-leaflet"]], "Algorithm": [[25, "algorithm"]], "Classes and Functions": [[25, "classes-and-functions"], [32, "classes-and-functions"]], "Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna": [[26, "generation-and-analysis-of-x3dna-helicoidal-parameter-profiles-mdanalysis-analysis-legacy-x3dna"]], "Single structure": [[26, "single-structure"]], "Trajectory": [[26, "trajectory"]], "Utilities": [[26, "utilities"]], "MDAnalysis.analysis.legacy \u2014 Legacy analysis code": [[27, "mdanalysis-analysis-legacy-legacy-analysis-code"]], "Legacy modules": [[27, "legacy-modules"]], "Linear Density \u2014 MDAnalysis.analysis.lineardensity": [[28, "linear-density-mdanalysis-analysis-lineardensity"]], "Mean Squared Displacement \u2014 MDAnalysis.analysis.msd": [[29, "mean-squared-displacement-mdanalysis-analysis-msd"]], "Computing an MSD": [[29, "computing-an-msd"]], "Computing Self-Diffusivity": [[29, "computing-self-diffusivity"]], "Combining Multiple Replicates": [[29, "combining-multiple-replicates"]], "Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids": [[30, "updated-nucleic-acid-analysis-mdanalysis-analysis-nucleicacids"]], "Distances": [[30, "distances"], [31, "distances"]], "Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo": [[31, "nucleic-acid-analysis-mdanalysis-analysis-nuclinfo"]], "Phases": [[31, "phases"]], "Dihedral angles": [[31, "dihedral-angles"]], "Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca": [[32, "principal-component-analysis-pca-mdanalysis-analysis-pca"]], "PCA Tutorial": [[32, "pca-tutorial"]], "Polymer analysis \u2014 MDAnalysis.analysis.polymer": [[33, "polymer-analysis-mdanalysis-analysis-polymer"]], "Calculating path similarity \u2014 MDAnalysis.analysis.psa": [[34, "calculating-path-similarity-mdanalysis-analysis-psa"]], "Helper functions and variables": [[34, "helper-functions-and-variables"]], "Classes, methods, and functions": [[34, "classes-methods-and-functions"]], "Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf": [[35, "radial-distribution-functions-mdanalysis-analysis-rdf"]], "Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms": [[36, "calculating-root-mean-square-quantities-mdanalysis-analysis-rms"]], "Calculating RMSD for multiple domains": [[36, "calculating-rmsd-for-multiple-domains"]], "Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics": [[37, "water-dynamics-analysis-mdanalysis-analysis-waterdynamics"]], "Example use of the analysis classes": [[37, "example-use-of-the-analysis-classes"]], "HydrogenBondLifetimes": [[37, "hydrogenbondlifetimes"]], "WaterOrientationalRelaxation": [[37, "waterorientationalrelaxation"], [37, "id76"]], "AngularDistribution": [[37, "angulardistribution"], [37, "id77"]], "MeanSquareDisplacement": [[37, "meansquaredisplacement"], [37, "id78"]], "SurvivalProbability": [[37, "survivalprobability"], [37, "id79"]], "Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis": [[38, "water-bridge-analysis-mdanalysis-analysis-hydrogenbonds-waterbridgeanalysis"]], "Theory": [[38, "theory"]], "Output as Network": [[38, "output-as-network"]], "Output as Timeseries": [[38, "output-as-timeseries"]], "Detection of water bridges": [[38, "detection-of-water-bridges"]], "Default heavy atom names for CHARMM27 force field.": [[38, "id69"]], "Heavy atom types for GLYCAM06 force field.": [[38, "id70"]], "How to perform WaterBridgeAnalysis": [[38, "how-to-perform-waterbridgeanalysis"]], "Use count_by_type": [[38, "use-count-by-type"]], "Use count_by_time": [[38, "use-count-by-time"]], "Analysis modules": [[39, "analysis-modules"]], "Building blocks for Analysis": [[39, "building-blocks-for-analysis"]], "Distances and contacts": [[39, "distances-and-contacts"]], "Hydrogen bonding": [[39, "hydrogen-bonding"]], "Membranes and membrane proteins": [[39, "membranes-and-membrane-proteins"]], "Nucleic acids": [[39, "nucleic-acids"]], "Polymers": [[39, "polymers"]], "Structure": [[39, "structure"]], "Macromolecules": [[39, "macromolecules"]], "Liquids": [[39, "liquids"]], "Volumetric analysis": [[39, "volumetric-analysis"]], "Dimensionality Reduction": [[39, "dimensionality-reduction"]], "Legacy analysis modules": [[39, "legacy-analysis-modules"]], "Data": [[39, "data"], [160, "data"], [161, "data"]], "EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR": [[40, "edr-auxiliary-reader-mdanalysis-auxiliary-edr"]], "Background": [[40, "background"]], "Standalone Usage of the EDRReader": [[40, "standalone-usage-of-the-edrreader"]], "Adding EDR data to trajectories": [[40, "adding-edr-data-to-trajectories"]], "XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG": [[41, "xvg-auxiliary-reader-mdanalysis-auxiliary-xvg"]], "XVG Readers": [[41, "xvg-readers"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary.base": [[42, "auxiliary-readers-mdanalysis-auxiliary-base"]], "Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core": [[43, "common-functions-for-auxiliary-reading-mdanalysis-auxiliary-core"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary": [[44, "auxiliary-readers-mdanalysis-auxiliary"]], "Supported formats": [[44, "supported-formats"]], "Auxiliary API": [[44, "auxiliary-api"]], "Auxiliaries and trajectories": [[44, "auxiliaries-and-trajectories"]], "Adding an auxiliary to a trajectory": [[44, "adding-an-auxiliary-to-a-trajectory"]], "Iterating by an auxiliary": [[44, "iterating-by-an-auxiliary"]], "Accessing auxiliary attributes": [[44, "accessing-auxiliary-attributes"]], "Recreating auxiliaries": [[44, "recreating-auxiliaries"]], "AuxStep class": [[44, "auxstep-class"]], "Attributes": [[44, "attributes"], [44, "id2"], [79, "attributes"], [79, "id19"], [79, "id21"]], "Methods": [[44, "methods"], [44, "id3"], [79, "methods"], [79, "id18"], [79, "id20"], [79, "id22"]], "AuxReader class": [[44, "auxreader-class"]], "Registry": [[44, "registry"], [79, "registry"]], "Replicating auxiliaries": [[44, "replicating-auxiliaries"]], "Auxiliary modules": [[45, "auxiliary-modules"]], "Converter modules": [[46, "converter-modules"]], "OpenMM topology parser MDAnalysis.converters.OpenMMParser": [[47, "openmm-topology-parser-mdanalysis-converters-openmmparser"]], "OpenMM structure I/O \u2014 MDAnalysis.converters.OpenMM": [[47, "openmm-structure-i-o-mdanalysis-converters-openmm"]], "ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser": [[48, "parmed-topology-parser-mdanalysis-converters-parmedparser"]], "ParmEd structure I/O \u2014 MDAnalysis.converters.ParmEd": [[48, "parmed-structure-i-o-mdanalysis-converters-parmed"]], "RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser": [[49, "rdkit-topology-parser-mdanalysis-converters-rdkitparser"]], "RDKit molecule I/O \u2014 MDAnalysis.converters.RDKit": [[49, "rdkit-molecule-i-o-mdanalysis-converters-rdkit"]], "CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD": [[50, "crd-structure-files-in-mdanalysis-mdanalysis-coordinates-crd"]], "DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD": [[51, "dcd-trajectory-i-o-mdanalysis-coordinates-dcd"]], "DL_Poly format reader MDAnalysis.coordinates.DLPoly": [[52, "dl-poly-format-reader-mdanalysis-coordinates-dlpoly"]], "DESRES file format \u2014 MDAnalysis.coordinates.DMS": [[53, "desres-file-format-mdanalysis-coordinates-dms"]], "FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS": [[54, "fhi-aims-file-format-mdanalysis-coordinates-fhiaims"]], "Developer notes: FHIAIMSWriter format strings": [[54, "developer-notes-fhiaimswriter-format-strings"]], "GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS": [[55, "gamess-trajectory-reader-mdanalysis-coordinates-gms"]], "GRO file format \u2014 MDAnalysis.coordinates.GRO": [[56, "gro-file-format-mdanalysis-coordinates-gro"]], "Writing GRO files": [[56, "writing-gro-files"]], "Developer notes: GROWriter format strings": [[56, "developer-notes-growriter-format-strings"]], "GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD": [[57, "gsd-trajectory-reader-mdanalysis-coordinates-gsd"]], "H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD": [[58, "h5md-trajectories-mdanalysis-coordinates-h5md"]], "Units": [[58, "units"]], "Example: Loading an H5MD simulation": [[58, "example-loading-an-h5md-simulation"]], "Example: Writing an H5MD file": [[58, "example-writing-an-h5md-file"]], "Example: Opening an H5MD file in parallel": [[58, "example-opening-an-h5md-file-in-parallel"]], "Building parallel h5py and HDF5 on Linux": [[58, "building-parallel-h5py-and-hdf5-on-linux"]], "INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD": [[59, "inpcrd-structure-files-in-mdanalysis-mdanalysis-coordinates-inpcrd"]], "LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS": [[60, "lammps-dcd-trajectory-and-data-i-o-mdanalysis-coordinates-lammps"]], "Data file formats": [[60, "data-file-formats"]], "Dump files": [[60, "dump-files"]], "Example: Loading a LAMMPS simulation": [[60, "example-loading-a-lammps-simulation"]], "MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF": [[61, "mmtf-trajectory-reader-mdanalysis-coordinates-mmtf"]], "MOL2 file format \u2014 MDAnalysis.coordinates.MOL2": [[62, "mol2-file-format-mdanalysis-coordinates-mol2"], [134, "mol2-file-format-mdanalysis-coordinates-mol2"]], "Example for working with mol2 files": [[62, "example-for-working-with-mol2-files"]], "MOL2 format notes": [[62, "mol2-format-notes"]], "NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN": [[63, "namdbin-files-format-mdanalysis-coordinates-namdbin"]], "PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB": [[64, "pdb-structure-files-in-mdanalysis-mdanalysis-coordinates-pdb"]], "Capabilities": [[64, "capabilities"]], "Examples for working with PDB files": [[64, "examples-for-working-with-pdb-files"]], "PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT": [[65, "pdbqt-structure-files-in-mdanalysis-mdanalysis-coordinates-pdbqt"]], "PQR file format \u2014 MDAnalysis.coordinates.PQR": [[66, "pqr-file-format-mdanalysis-coordinates-pqr"]], "TNG trajectory files \u2014 MDAnalysis.coordinates.TNG": [[67, "tng-trajectory-files-mdanalysis-coordinates-tng"]], "Current Limitations": [[67, "current-limitations"]], "AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ": [[68, "amber-trajectories-mdanalysis-coordinates-trj"]], "Binary NetCDF trajectories": [[68, "binary-netcdf-trajectories"]], "ASCII TRAJ trajectories": [[68, "ascii-traj-trajectories"]], "TRR trajectory files \u2014 MDAnalysis.coordinates.TRR": [[69, "trr-trajectory-files-mdanalysis-coordinates-trr"]], "TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ": [[70, "trz-trajectory-i-o-mdanalysis-coordinates-trz"]], "TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ": [[71, "txyz-file-format-mdanalysis-coordinates-txyz"]], "XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR": [[72, "xdr-based-trajectory-files-mdanalysis-coordinates-xdr"]], "XTC trajectory files \u2014 MDAnalysis.coordinates.XTC": [[73, "xtc-trajectory-files-mdanalysis-coordinates-xtc"]], "XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ": [[74, "xyz-trajectory-reader-mdanalysis-coordinates-xyz"]], "XYZ File format": [[74, "xyz-file-format"]], "Base classes \u2014 MDAnalysis.coordinates.base": [[75, "base-classes-mdanalysis-coordinates-base"]], "FrameIterators": [[75, "frameiterators"]], "Readers": [[75, "readers"], [79, "readers"]], "Writers": [[75, "writers"], [79, "writers"]], "Converters": [[75, "converters"]], "Helper classes": [[75, "helper-classes"]], "ChainReader \u2014 MDAnalysis.coordinates.chain": [[76, "chainreader-mdanalysis-coordinates-chain"]], "Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles": [[77, "reading-trajectories-with-chemfiles-mdanalysis-coordinates-chemfiles"]], "Using the CHEMFILES reader": [[77, "using-the-chemfiles-reader"]], "Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core": [[78, "common-functions-for-coordinate-reading-mdanalysis-coordinates-core"]], "Trajectory Readers and Writers \u2014 MDAnalysis.coordinates": [[79, "trajectory-readers-and-writers-mdanalysis-coordinates"]], "Timesteps": [[79, "timesteps"]], "Supported coordinate formats": [[79, "supported-coordinate-formats"]], "Table of supported coordinate formats": [[79, "id23"]], "Trajectory API": [[79, "trajectory-api"]], "Timestep class": [[79, "timestep-class"]], "Private attributes": [[79, "private-attributes"]], "Trajectory Reader class": [[79, "trajectory-reader-class"]], "Trajectory Writer class": [[79, "trajectory-writer-class"]], "Single Frame Writer class": [[79, "single-frame-writer-class"]], "Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory": [[80, "reading-trajectories-from-memory-mdanalysis-coordinates-memory"]], "How to use the MemoryReader": [[80, "how-to-use-the-memoryreader"]], "In-memory representation of arbitrary trajectories": [[80, "in-memory-representation-of-arbitrary-trajectories"]], "Switching a trajectory to an in-memory representation": [[80, "switching-a-trajectory-to-an-in-memory-representation"]], "Constructing a Reader from a numpy array": [[80, "constructing-a-reader-from-a-numpy-array"]], "Creating an in-memory trajectory of a sub-system": [[80, "creating-an-in-memory-trajectory-of-a-sub-system"]], "Null output \u2014 MDAnalysis.coordinates.null": [[81, "null-output-mdanalysis-coordinates-null"]], "Serialization of Coordinate Readers": [[82, "serialization-of-coordinate-readers"]], "How to serialize a new reader": [[82, "how-to-serialize-a-new-reader"]], "File Access": [[82, "file-access"]], "To seek or not to seek": [[82, "to-seek-or-not-to-seek"]], "Miscellaneous": [[82, "miscellaneous"]], "Tests": [[82, "tests"], [165, "tests"]], "_SingleFrameReader Test": [[82, "singleframereader-test"]], "BaseReaderTest and MultiframeReaderTest": [[82, "basereadertest-and-multiframereadertest"]], "File handler Test": [[82, "file-handler-test"]], "Currently implemented picklable IO Formats": [[82, "currently-implemented-picklable-io-formats"]], "Timestep Class \u2014 MDAnalysis.coordinates.timestep": [[83, "timestep-class-mdanalysis-coordinates-timestep"]], "Timestep": [[83, "timestep"]], "Coordinates modules": [[84, "coordinates-modules"]], "AtomGroup accessors \u2014 MDAnalysis.core.accessors": [[85, "atomgroup-accessors-mdanalysis-core-accessors"]], "Core objects: Containers \u2014 MDAnalysis.core.groups": [[86, "core-objects-containers-mdanalysis-core-groups"]], "Collections": [[86, "collections"]], "Chemical units": [[86, "chemical-units"]], "Levels": [[86, "levels"]], "Core functions of MDAnalysis": [[87, "core-functions-of-mdanalysis"]], "Atom selection Hierarchy \u2014 MDAnalysis.core.selection": [[88, "atom-selection-hierarchy-mdanalysis-core-selection"]], "Core Topology object \u2014 MDAnalysis.core.topology": [[89, "core-topology-object-mdanalysis-core-topology"]], "Topology attribute objects \u2014 MDAnalysis.core.topologyattrs": [[90, "topology-attribute-objects-mdanalysis-core-topologyattrs"]], "Core Topology Objects \u2014 MDAnalysis.core.topologyobjects": [[91, "core-topology-objects-mdanalysis-core-topologyobjects"]], "Core object: Universe \u2014 MDAnalysis.core.universe": [[92, "core-object-universe-mdanalysis-core-universe"]], "Core modules": [[93, "core-modules"]], "Important objects for users": [[93, "important-objects-for-users"]], "Topology system": [[93, "topology-system"]], "Selection system": [[93, "selection-system"]], "Custom exceptions and warnings \u2014 MDAnalysis.exceptions": [[94, "custom-exceptions-and-warnings-mdanalysis-exceptions"]], "Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch": [[95, "neighbor-search-wrapper-for-mdanalysis-mdanalysis-lib-neighborsearch"]], "Distance calculation library \u2014 MDAnalysis.lib.c_distances": [[96, "distance-calculation-library-mdanalysis-lib-c-distances"]], "Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp": [[97, "parallel-distance-calculation-library-mdanalysis-lib-c-distances-openmp"]], "Correlations utilities \u2014 MDAnalysis.lib.correlations": [[98, "correlations-utilities-mdanalysis-lib-correlations"]], "Autocorrelation Function": [[98, "autocorrelation-function"]], "Intermittency Function": [[98, "intermittency-function"]], "Fast distance array computation \u2014 MDAnalysis.lib.distances": [[99, "fast-distance-array-computation-mdanalysis-lib-distances"]], "Selection of acceleration (\u201cbackend\u201d)": [[99, "selection-of-acceleration-backend"]], "Available backends for accelerated distance functions.": [[99, "id1"]], "Use of the distopia library": [[99, "use-of-the-distopia-library"]], "Functions available using the distopia backend.": [[99, "id2"]], "Low-level modules for MDAnalysis.lib.distances": [[99, "low-level-modules-for-mdanalysis-lib-distances"]], "Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd": [[100, "low-level-dcd-trajectory-reading-mdanalysis-lib-formats-libdcd"]], "Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr": [[101, "low-level-gromacs-xdr-trajectory-reading-mdanalysis-lib-formats-libmdaxdr"]], "Setting up logging \u2014 MDAnalysis.lib.log": [[102, "setting-up-logging-mdanalysis-lib-log"]], "Convenience functions": [[102, "convenience-functions"]], "Other functions and classes for logging purposes": [[102, "other-functions-and-classes-for-logging-purposes"]], "Mathematical helper functions \u2014 MDAnalysis.lib.mdamath": [[103, "mathematical-helper-functions-mdanalysis-lib-mdamath"]], "Linear algebra": [[103, "linear-algebra"]], "Connectivity": [[103, "connectivity"]], "Neighbor search library \u2014 MDAnalysis.lib.nsgrid": [[104, "neighbor-search-library-mdanalysis-lib-nsgrid"]], "About the code": [[104, "about-the-code"]], "About the algorithm": [[104, "about-the-algorithm"]], "Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io": [[105, "picklable-read-only-i-o-classes-mdanalysis-lib-picklable-file-io"]], "PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree": [[106, "periodickdtree-mdanalysis-lib-pkdtree"]], "Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot": [[107, "fast-qcp-rmsd-structure-alignment-mdanalysis-lib-qcprot"]], "Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations": [[108, "homogeneous-transformation-matrices-and-quaternions-mdanalysis-lib-transformations"]], "Requirements": [[108, "requirements"]], "Helper functions \u2014 MDAnalysis.lib.util": [[109, "helper-functions-mdanalysis-lib-util"]], "Files and directories": [[109, "files-and-directories"]], "Streams": [[109, "streams"]], "Containers and lists": [[109, "containers-and-lists"]], "Arrays": [[109, "arrays"]], "File parsing": [[109, "file-parsing"]], "Data manipulation and handling": [[109, "data-manipulation-and-handling"]], "Strings": [[109, "strings"]], "Class decorators": [[109, "class-decorators"]], "Function decorators": [[109, "function-decorators"]], "Code management": [[109, "code-management"]], "Data format checks": [[109, "data-format-checks"]], "Library functions \u2014 MDAnalysis.lib": [[110, "module-MDAnalysis.lib"]], "Overview": [[110, "overview"]], "List of modules": [[110, "list-of-modules"]], "Low level file formats": [[110, "low-level-file-formats"]], "Libmdanalysis": [[110, "libmdanalysis"]], "Overview over MDAnalysis": [[111, "overview-over-mdanalysis"]], "Using MDAnalysis in python": [[111, "using-mdanalysis-in-python"]], "Examples": [[111, "examples"]], "Included trajectories": [[111, "included-trajectories"]], "Code snippets": [[111, "code-snippets"]], "Citations for the whole MDAnalysis library": [[112, "citations-for-the-whole-mdanalysis-library"]], "Citations for included algorithms and modules": [[112, "citations-for-included-algorithms-and-modules"]], "Citations using Duecredit": [[112, "citations-using-duecredit"]], "Selection commands": [[113, "selection-commands"]], "Selection Keywords": [[113, "selection-keywords"]], "Simple selections": [[113, "simple-selections"]], "Pattern matching": [[113, "pattern-matching"]], "Boolean": [[113, "boolean"]], "Geometric": [[113, "geometric"]], "Similarity and connectivity": [[113, "similarity-and-connectivity"]], "Index": [[113, "index"]], "Preexisting selections and modifiers": [[113, "preexisting-selections-and-modifiers"]], "Dynamic selections": [[113, "dynamic-selections"]], "Ordered selections": [[113, "ordered-selections"]], "Base classes for the selection writers": [[114, "base-classes-for-the-selection-writers"]], "CHARMM selections": [[115, "charmm-selections"]], "Gromacs selections": [[116, "gromacs-selections"]], "Jmol selections": [[117, "jmol-selections"]], "PyMOL selections": [[118, "pymol-selections"]], "VMD selections": [[119, "vmd-selections"]], "Selection exporters": [[120, "selection-exporters"]], "Table of supported exporters and recognized file name extensions.": [[120, "id2"]], "How to write selections": [[120, "how-to-write-selections"]], "Single AtomGroup": [[120, "single-atomgroup"]], "Multiple selections": [[120, "multiple-selections"]], "Selection writers": [[120, "selection-writers"]], "The topology system": [[121, "the-topology-system"]], "CRD topology parser": [[122, "crd-topology-parser"]], "Todo": [[122, "id1"], [140, "id1"]], "DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser": [[123, "dl-poly-format-topology-readers-mdanalysis-topology-dlpolyparser"]], "DESRES Molecular Structure file format topology parser": [[124, "desres-molecular-structure-file-format-topology-parser"]], "Extended PDB topology parser": [[125, "extended-pdb-topology-parser"]], "FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser": [[126, "fhi-aims-topology-parser-mdanalysis-topolgy-fhiaimsparser"]], "GAMESS Topology Parser": [[127, "gamess-topology-parser"]], "GRO topology parser": [[128, "gro-topology-parser"]], "GSD topology parser": [[129, "gsd-topology-parser"]], "HOOMD XML topology parser": [[130, "hoomd-xml-topology-parser"]], "ITP topology parser": [[131, "itp-topology-parser"]], "Preprocessor variables": [[131, "preprocessor-variables"]], "LAMMPSParser": [[132, "lammpsparser"]], "Atom styles": [[132, "atom-styles"]], "MMTF Topology Parser": [[133, "mmtf-topology-parser"]], "Minimal topology parser": [[135, "minimal-topology-parser"]], "PDB Topology Parser": [[136, "pdb-topology-parser"]], "PDBQT topology parser": [[137, "pdbqt-topology-parser"]], "PQR topology parser": [[138, "pqr-topology-parser"]], "PSF topology parser": [[139, "psf-topology-parser"]], "AMBER PRMTOP topology parser": [[140, "amber-prmtop-topology-parser"]], "Gromacs portable run input TPR format parser": [[141, "gromacs-portable-run-input-tpr-format-parser"]], "TPR format versions and generations read by MDAnalysis.topology.TPRParser.parse().": [[141, "id4"]], "Development notes": [[141, "development-notes"]], "TXYZ topology parser": [[142, "txyz-topology-parser"]], "XYZ Topology Parser": [[143, "xyz-topology-parser"]], "Base topology reader classes \u2014 MDAnalysis.topology.base": [[144, "base-topology-reader-classes-mdanalysis-topology-base"]], "Common functions for topology building \u2014 MDAnalysis.topology.core": [[145, "common-functions-for-topology-building-mdanalysis-topology-core"]], "Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers": [[146, "guessing-unknown-topology-information-mdanalysis-topology-guessers"]], "Example uses of guessers": [[146, "example-uses-of-guessers"]], "Guessing elements from atom names": [[146, "guessing-elements-from-atom-names"]], "Topology readers \u2014 MDAnalysis.topology": [[147, "topology-readers-mdanalysis-topology"]], "Table of Supported Topology Formats": [[147, "id19"]], "Developer Notes": [[147, "developer-notes"]], "atoms": [[147, "atoms"]], "bonds": [[147, "bonds"]], "bondorder": [[147, "bondorder"]], "angles": [[147, "angles"]], "dihedrals": [[147, "dihedrals"]], "impropers": [[147, "impropers"]], "MDAnalysis topology tables": [[148, "mdanalysis-topology-tables"]], "Utility functions for the TPR topology parser": [[149, "utility-functions-for-the-tpr-topology-parser"]], "TPR support": [[149, "tpr-support"]], "TPRParser settings": [[149, "tprparser-settings"]], "Class definitions for the TPRParser": [[149, "class-definitions-for-the-tprparser"]], "Utilities for the TPRParser": [[149, "utilities-for-the-tprparser"]], "Topology modules": [[150, "topology-modules"]], "Trajectory transformations (\u201con-the-fly\u201d transformations)": [[151, "module-MDAnalysis.transformations"]], "Workflows": [[151, "workflows"]], "Creating transformations": [[151, "creating-transformations"]], "Creating complex transformation classes": [[151, "creating-complex-transformation-classes"]], "Creating complex transformation closure functions": [[151, "creating-complex-transformation-closure-functions"]], "Transformations in MDAnalysis": [[151, "transformations-in-mdanalysis"]], "How to transformations": [[151, "how-to-transformations"]], "Building blocks for Transformation Classes": [[151, "building-blocks-for-transformation-classes"]], "Currently implemented transformations": [[151, "currently-implemented-transformations"]], "Transformations Base Class \u2014 MDAnalysis.transformations.base": [[152, "transformations-base-class-mdanalysis-transformations-base"]], "Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions": [[153, "set-box-dimensions-mdanalysis-transformations-boxdimensions"]], "Fitting transformations \u2014 MDAnalysis.transformations.fit": [[154, "fitting-transformations-mdanalysis-transformations-fit"]], "No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump": [[155, "no-jump-trajectory-unwrapping-mdanalysis-transformations-nojump"]], "Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging": [[156, "trajectory-coordinate-averaging-mdanalysis-transformations-positionaveraging"]], "Trajectory rotation \u2014 MDAnalysis.transformations.rotate": [[157, "trajectory-rotation-mdanalysis-transformations-rotate"]], "Trajectory translation \u2014 MDAnalysis.transformations.translate": [[158, "trajectory-translation-mdanalysis-transformations-translate"]], "Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap": [[159, "wrap-unwrap-transformations-mdanalysis-transformations-wrap"]], "Constants and unit conversion \u2014 MDAnalysis.units": [[160, "constants-and-unit-conversion-mdanalysis-units"]], "Base units in MDAnalysis as encoded in MDANALYSIS_BASE_UNITS": [[160, "id71"]], "Implementation notes": [[160, "implementation-notes"]], "Conversions": [[160, "conversions"]], "References and footnotes": [[160, "references-and-footnotes"]], "Version information for MDAnalysis - MDAnalysis.version": [[161, "version-information-for-mdanalysis-mdanalysis-version"]], "Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines": [[162, "streamplots-2d-mdanalysis-visualization-streamlines"]], "Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D": [[163, "streamplots-3d-mdanalysis-visualization-streamlines-3d"]], "Visualization modules": [[164, "visualization-modules"]], "Visualization of Lipid Flow": [[164, "visualization-of-lipid-flow"]], "MDAnalysis documentation": [[165, "mdanalysis-documentation"]], "Getting involved": [[165, "getting-involved"]], "User Guide": [[165, "user-guide"]], "Installing MDAnalysis": [[165, "installing-mdanalysis"]], "conda": [[165, "conda"]], "pip": [[165, "pip"]], "Source Code": [[165, "source-code"]], "Citation": [[165, "citation"]], "Indices and tables": [[165, "indices-and-tables"]]}, "indexentries": {"aligntraj (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AlignTraj"]], "averagestructure (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AverageStructure"]], "mdanalysis.analysis.align": [[0, "module-MDAnalysis.analysis.align"]], "_fit_to() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align._fit_to"]], "alignto() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.alignto"]], "fasta2select() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.fasta2select"]], "filename (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.filename"]], "filename (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.filename"]], "get_matching_atoms() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.get_matching_atoms"]], "mobile_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.mobile_atoms"]], "mobile_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.mobile_atoms"]], "module": [[0, "module-MDAnalysis.analysis.align"], [1, "module-MDAnalysis.analysis.atomicdistances"], [2, "module-MDAnalysis.analysis.base"], [3, "module-MDAnalysis.analysis.bat"], [4, "module-MDAnalysis.analysis.contacts"], [5, "module-MDAnalysis.analysis.data.filenames"], [6, "module-MDAnalysis.analysis.density"], [7, "module-MDAnalysis.analysis.dielectric"], [8, "module-MDAnalysis.analysis.diffusionmap"], [9, "module-MDAnalysis.analysis.dihedrals"], [10, "module-MDAnalysis.analysis.distances"], [12, "module-MDAnalysis.analysis.encore.bootstrap"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"], [13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"], [13, "module-MDAnalysis.analysis.encore.clustering.cluster"], [14, "module-MDAnalysis.analysis.encore.confdistmatrix"], [15, "module-MDAnalysis.analysis.encore.covariance"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"], [17, "module-MDAnalysis.analysis.encore.similarity"], [18, "module-MDAnalysis.analysis.encore.utils"], [19, "module-MDAnalysis.analysis.gnm"], [20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"], [21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"], [22, "module-MDAnalysis.analysis.helix_analysis"], [23, "module-MDAnalysis.analysis.hole2"], [23, "module-MDAnalysis.analysis.hole2.templates"], [23, "module-MDAnalysis.analysis.hole2.utils"], [24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"], [25, "module-MDAnalysis.analysis.leaflet"], [26, "module-MDAnalysis.analysis.legacy.x3dna"], [28, "module-MDAnalysis.analysis.lineardensity"], [29, "module-MDAnalysis.analysis.msd"], [30, "module-MDAnalysis.analysis.nucleicacids"], [31, "module-MDAnalysis.analysis.nuclinfo"], [32, "module-MDAnalysis.analysis.pca"], [33, "module-MDAnalysis.analysis.polymer"], [34, "module-MDAnalysis.analysis.psa"], [35, "module-MDAnalysis.analysis.rdf"], [36, "module-MDAnalysis.analysis.rms"], [37, "module-MDAnalysis.analysis.waterdynamics"], [38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"], [40, "module-MDAnalysis.auxiliary.EDR"], [41, "module-MDAnalysis.auxiliary.XVG"], [42, "module-MDAnalysis.auxiliary.base"], [43, "module-MDAnalysis.auxiliary.core"], [44, "module-MDAnalysis.auxiliary.__init__"], [46, "module-MDAnalysis.converters"], [47, "module-MDAnalysis.converters.OpenMM"], [47, "module-MDAnalysis.converters.OpenMMParser"], [48, "module-MDAnalysis.converters.ParmEd"], [48, "module-MDAnalysis.converters.ParmEdParser"], [49, "module-MDAnalysis.converters.RDKit"], [49, "module-MDAnalysis.converters.RDKitParser"], [50, "module-MDAnalysis.coordinates.CRD"], [51, "module-MDAnalysis.coordinates.DCD"], [52, "module-MDAnalysis.coordinates.DLPoly"], [53, "module-MDAnalysis.coordinates.DMS"], [54, "module-MDAnalysis.coordinates.FHIAIMS"], [55, "module-MDAnalysis.coordinates.GMS"], [56, "module-MDAnalysis.coordinates.GRO"], [57, "module-MDAnalysis.coordinates.GSD"], [58, "module-MDAnalysis.coordinates.H5MD"], [59, "module-MDAnalysis.coordinates.INPCRD"], [60, "module-MDAnalysis.coordinates.LAMMPS"], [61, "module-MDAnalysis.coordinates.MMTF"], [62, "module-MDAnalysis.coordinates.MOL2"], [63, "module-MDAnalysis.coordinates.NAMDBIN"], [64, "module-MDAnalysis.coordinates.PDB"], [65, "module-MDAnalysis.coordinates.PDBQT"], [66, "module-MDAnalysis.coordinates.PQR"], [67, "module-MDAnalysis.coordinates.TNG"], [68, "module-MDAnalysis.coordinates.TRJ"], [69, "module-MDAnalysis.coordinates.TRR"], [70, "module-MDAnalysis.coordinates.TRZ"], [71, "module-MDAnalysis.coordinates.TXYZ"], [72, "module-MDAnalysis.coordinates.XDR"], [73, "module-MDAnalysis.coordinates.XTC"], [74, "module-MDAnalysis.coordinates.XYZ"], [75, "module-MDAnalysis.coordinates.base"], [76, "module-MDAnalysis.coordinates.chain"], [77, "module-MDAnalysis.coordinates.chemfiles"], [78, "module-MDAnalysis.coordinates.core"], [79, "module-MDAnalysis.coordinates.__init__"], [80, "module-MDAnalysis.coordinates.memory"], [81, "module-MDAnalysis.coordinates.null"], [83, "module-MDAnalysis.coordinates.timestep"], [85, "module-MDAnalysis.core.accessors"], [86, "module-MDAnalysis.core.groups"], [87, "module-MDAnalysis.core.__init__"], [88, "module-MDAnalysis.core.selection"], [89, "module-MDAnalysis.core.topology"], [90, "module-MDAnalysis.core.topologyattrs"], [91, "module-MDAnalysis.core.topologyobjects"], [92, "module-MDAnalysis.core.universe"], [94, "module-MDAnalysis.exceptions"], [95, "module-MDAnalysis.lib.NeighborSearch"], [96, "module-MDAnalysis.lib.c_distances"], [97, "module-MDAnalysis.lib.c_distances_openmp"], [98, "module-MDAnalysis.lib.correlations"], [99, "module-MDAnalysis.lib.distances"], [100, "module-MDAnalysis.lib.formats.libdcd"], [101, "module-MDAnalysis.lib.formats.libmdaxdr"], [102, "module-MDAnalysis.lib.log"], [103, "module-MDAnalysis.lib.mdamath"], [104, "module-MDAnalysis.lib.nsgrid"], [105, "module-MDAnalysis.lib.picklable_file_io"], [106, "module-MDAnalysis.lib.pkdtree"], [107, "module-MDAnalysis.lib.qcprot"], [108, "module-MDAnalysis.lib.transformations"], [109, "module-MDAnalysis.lib.util"], [110, "module-MDAnalysis.lib"], [114, "module-MDAnalysis.selections.base"], [115, "module-MDAnalysis.selections.charmm"], [116, "module-MDAnalysis.selections.gromacs"], [117, "module-MDAnalysis.selections.jmol"], [118, "module-MDAnalysis.selections.pymol"], [119, "module-MDAnalysis.selections.vmd"], [122, "module-MDAnalysis.topology.CRDParser"], [123, "module-MDAnalysis.topology.DLPolyParser"], [124, "module-MDAnalysis.topology.DMSParser"], [125, "module-MDAnalysis.topology.ExtendedPDBParser"], [126, "module-MDAnalysis.topology.FHIAIMSParser"], [127, "module-MDAnalysis.topology.GMSParser"], [128, "module-MDAnalysis.topology.GROParser"], [129, "module-MDAnalysis.topology.GSDParser"], [130, "module-MDAnalysis.topology.HoomdXMLParser"], [131, "module-MDAnalysis.topology.ITPParser"], [132, "module-MDAnalysis.topology.LAMMPSParser"], [133, "module-MDAnalysis.topology.MMTFParser"], [134, "module-MDAnalysis.topology.MOL2Parser"], [135, "module-MDAnalysis.topology.MinimalParser"], [136, "module-MDAnalysis.topology.PDBParser"], [137, "module-MDAnalysis.topology.PDBQTParser"], [138, "module-MDAnalysis.topology.PQRParser"], [139, "module-MDAnalysis.topology.PSFParser"], [140, "module-MDAnalysis.topology.TOPParser"], [141, "module-MDAnalysis.topology.TPRParser"], [142, "module-MDAnalysis.topology.TXYZParser"], [143, "module-MDAnalysis.topology.XYZParser"], [144, "module-MDAnalysis.topology.base"], [145, "module-MDAnalysis.topology.core"], [146, "module-MDAnalysis.topology.guessers"], [147, "module-MDAnalysis.topology.__init__"], [148, "module-MDAnalysis.topology.tables"], [149, "module-MDAnalysis.topology.tpr"], [149, "module-MDAnalysis.topology.tpr.obj"], [149, "module-MDAnalysis.topology.tpr.setting"], [149, "module-MDAnalysis.topology.tpr.utils"], [151, "module-MDAnalysis.transformations"], [152, "module-MDAnalysis.transformations.base"], [153, "module-MDAnalysis.transformations.boxdimensions"], [154, "module-MDAnalysis.transformations.fit"], [155, "module-MDAnalysis.transformations.nojump"], [156, "module-MDAnalysis.transformations.positionaveraging"], [157, "module-MDAnalysis.transformations.rotate"], [158, "module-MDAnalysis.transformations.translate"], [159, "module-MDAnalysis.transformations.wrap"], [160, "module-MDAnalysis.units"], [161, "module-MDAnalysis.version"], [162, "module-MDAnalysis.visualization.streamlines"], [163, "module-MDAnalysis.visualization.streamlines_3D"]], "positions (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.positions"]], "positions (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.positions"]], "reference_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.reference_atoms"]], "reference_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.reference_atoms"]], "rmsd (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.rmsd"]], "rmsd (mdanalysis.analysis.align.aligntraj.results attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.results.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.rmsd"]], "rotation_matrix() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.rotation_matrix"]], "sequence_alignment() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.sequence_alignment"]], "universe (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.universe"]], "universe (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.universe"]], "atomicdistances (class in mdanalysis.analysis.atomicdistances)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances"]], "mdanalysis.analysis.atomicdistances": [[1, "module-MDAnalysis.analysis.atomicdistances"]], "n_atoms (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_atoms"]], "n_frames (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_frames"]], "results (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.results"]], "analysisbase (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisBase"]], "analysisfromfunction (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction"]], "mdanalysis.analysis.base": [[2, "module-MDAnalysis.analysis.base"]], "results (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.Results"]], "analysis_class() (in module mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.analysis_class"]], "frames (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.frames"]], "frames (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.frames"]], "frames (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.frames"]], "results (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.results"]], "run() (mdanalysis.analysis.base.analysisbase method)": [[2, "MDAnalysis.analysis.base.AnalysisBase.run"]], "times (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.times"]], "times (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.times"]], "times (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.times"]], "timeseries (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.timeseries"]], "timeseries (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.timeseries"]], "bat (class in mdanalysis.analysis.bat)": [[3, "MDAnalysis.analysis.bat.BAT"]], "cartesian() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.Cartesian"]], "mdanalysis.analysis.bat": [[3, "module-MDAnalysis.analysis.bat"]], "atoms (mdanalysis.analysis.bat.bat property)": [[3, "MDAnalysis.analysis.bat.BAT.atoms"]], "bat (mdanalysis.analysis.bat.bat.results attribute)": [[3, "MDAnalysis.analysis.bat.BAT.results.bat"]], "load() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.load"]], "run() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.run"]], "save() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.save"]], "contacts (class in mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.Contacts"]], "mdanalysis.analysis.contacts": [[4, "module-MDAnalysis.analysis.contacts"]], "contact_matrix() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.contact_matrix"]], "hard_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.hard_cut_q"]], "q1q2() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.q1q2"]], "radius_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.radius_cut_q"]], "soft_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.soft_cut_q"]], "timeseries (mdanalysis.analysis.contacts.contacts attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.timeseries"]], "timeseries (mdanalysis.analysis.contacts.contacts.results attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.results.timeseries"]], "janin_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Janin_ref"]], "mdanalysis.analysis.data.filenames": [[5, "module-MDAnalysis.analysis.data.filenames"]], "rama_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Rama_ref"]], "density (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.Density"]], "densityanalysis (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.DensityAnalysis"]], "mdanalysis.analysis.density": [[6, "module-MDAnalysis.analysis.density"]], "_set_user_grid() (mdanalysis.analysis.density.densityanalysis static method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis._set_user_grid"]], "centers() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.centers"]], "check_compatible() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.check_compatible"]], "convert_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_density"]], "convert_length() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_length"]], "default_format (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.default_format"]], "delta (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.delta"]], "density (mdanalysis.analysis.density.densityanalysis attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.density"]], "density (mdanalysis.analysis.density.densityanalysis.results attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.results.density"]], "edges (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.edges"]], "export() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.export"]], "grid (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.grid"]], "interpolated (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolated"]], "interpolation_spline_order (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolation_spline_order"]], "load() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.load"]], "make_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.make_density"]], "origin (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.origin"]], "resample() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample"]], "resample_factor() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample_factor"]], "run() (mdanalysis.analysis.density.densityanalysis method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.run"]], "save() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.save"]], "units (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.units"]], "dielectricconstant (class in mdanalysis.analysis.dielectric)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant"]], "m (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M"]], "m2 (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M2"]], "mdanalysis.analysis.dielectric": [[7, "module-MDAnalysis.analysis.dielectric"]], "eps (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps"]], "eps_mean (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps_mean"]], "fluct (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.fluct"]], "diffusionmap (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap"]], "distancematrix (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix"]], "mdanalysis.analysis.diffusionmap": [[8, "module-MDAnalysis.analysis.diffusionmap"]], "atoms (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.atoms"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.dist_matrix"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix.results attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results.dist_matrix"]], "eigenvalues (mdanalysis.analysis.diffusionmap.diffusionmap attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.eigenvalues"]], "run() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.run"]], "transform() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.transform"]], "dihedral (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral"]], "janin (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Janin"]], "mdanalysis.analysis.dihedrals": [[9, "module-MDAnalysis.analysis.dihedrals"]], "ramachandran (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran"]], "angles (mdanalysis.analysis.dihedrals.dihedral attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.angles"]], "angles (mdanalysis.analysis.dihedrals.dihedral.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.results.angles"]], "angles (mdanalysis.analysis.dihedrals.janin attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.angles"]], "angles (mdanalysis.analysis.dihedrals.janin.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.results.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.results.angles"]], "plot() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.plot"]], "plot() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.plot"]], "run() (mdanalysis.analysis.dihedrals.dihedral method)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.run"]], "run() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.run"]], "run() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.run"]], "mdanalysis.analysis.distances": [[10, "module-MDAnalysis.analysis.distances"]], "between() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.between"]], "contact_matrix() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.contact_matrix"]], "dist() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.dist"]], "distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.distance_array"]], "self_distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.self_distance_array"]], "mdanalysis.analysis.encore.bootstrap": [[12, "module-MDAnalysis.analysis.encore.bootstrap"]], "bootstrapped_matrix() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.bootstrapped_matrix"]], "get_distance_matrix_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_distance_matrix_bootstrap_samples"]], "get_ensemble_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_ensemble_bootstrap_samples"]], "affinitypropagation (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagation"]], "affinitypropagation() (in module mdanalysis.analysis.encore.clustering.affinityprop)": [[13, "MDAnalysis.analysis.encore.clustering.affinityprop.AffinityPropagation"]], "affinitypropagationnative (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative"]], "cluster (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster"]], "clustercollection (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection"]], "clusteringmethod (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.ClusteringMethod"]], "dbscan (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.DBSCAN"]], "kmeans (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans"]], "mdanalysis.analysis.encore.clustering.clustercollection": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"]], "mdanalysis.analysis.encore.clustering.clusteringmethod": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"]], "mdanalysis.analysis.encore.clustering.affinityprop": [[13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"]], "mdanalysis.analysis.encore.clustering.cluster": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "accepts_distance_matrix (mdanalysis.analysis.encore.clustering.clusteringmethod.kmeans attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans.accepts_distance_matrix"]], "centroid (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.centroid"]], "cluster() (in module mdanalysis.analysis.encore.clustering.cluster)": [[13, "MDAnalysis.analysis.encore.clustering.cluster.cluster"]], "clusters (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.clusters"]], "elements (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.elements"]], "encode_centroid_info() (in module mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.encode_centroid_info"]], "get_centroids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_centroids"]], "get_ids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_ids"]], "id (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.id"]], "metadata (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.metadata"]], "size (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.size"]], "mdanalysis.analysis.encore.confdistmatrix": [[14, "module-MDAnalysis.analysis.encore.confdistmatrix"]], "conformational_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.conformational_distance_matrix"]], "get_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.get_distance_matrix"]], "set_rmsd_matrix_elements() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.set_rmsd_matrix_elements"]], "mdanalysis.analysis.encore.covariance": [[15, "module-MDAnalysis.analysis.encore.covariance"]], "covariance_matrix() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.covariance_matrix"]], "ml_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.ml_covariance_estimator"]], "shrinkage_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.shrinkage_covariance_estimator"]], "dimensionalityreductionmethod (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"]], "principalcomponentanalysis (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.PrincipalComponentAnalysis"]], "stochasticproximityembedding() (in module mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed.StochasticProximityEmbedding"]], "stochasticproximityembeddingnative (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative"]], "reduce_dimensionality() (in module mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality.reduce_dimensionality"]], "mdanalysis.analysis.encore.similarity": [[17, "module-MDAnalysis.analysis.encore.similarity"]], "ces() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces"]], "ces_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces_convergence"]], "clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.clustering_ensemble_similarity"]], "cumulative_clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_clustering_ensemble_similarity"]], "cumulative_gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_gen_kde_pdfs"]], "dimred_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dimred_ensemble_similarity"]], "discrete_jensen_shannon_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_jensen_shannon_divergence"]], "discrete_kullback_leibler_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_kullback_leibler_divergence"]], "dres() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres"]], "dres_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres_convergence"]], "gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.gen_kde_pdfs"]], "harmonic_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.harmonic_ensemble_similarity"]], "hes() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.hes"]], "prepare_ensembles_for_convergence_increasing_window() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.prepare_ensembles_for_convergence_increasing_window"]], "write_output() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.write_output"]], "mdanalysis.analysis.encore.utils": [[18, "module-MDAnalysis.analysis.encore.utils"]], "parallelcalculation (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation"]], "purermsd() (in module mdanalysis.analysis.encore.cutils)": [[18, "MDAnalysis.analysis.encore.cutils.PureRMSD"]], "triangularmatrix (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix"]], "args (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.args"]], "as_array() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.as_array"]], "function (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.function"]], "kwargs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.kwargs"]], "loadz() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.loadz"]], "merge_universes() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.merge_universes"]], "n_jobs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.n_jobs"]], "nruns (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.nruns"]], "run() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.run"]], "savez() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.savez"]], "trm_indices() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices"]], "trm_indices_diag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_diag"]], "trm_indices_nodiag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_nodiag"]], "worker() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.worker"]], "gnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis"]], "mdanalysis.analysis.gnm": [[19, "module-MDAnalysis.analysis.gnm"]], "closecontactgnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis"]], "eigenvalues (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvalues"]], "eigenvalues (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvalues"]], "eigenvectors (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvectors"]], "eigenvectors (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvectors"]], "generate_grid() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.generate_grid"]], "generate_kirchoff() (mdanalysis.analysis.gnm.gnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.generate_kirchoff"]], "generate_kirchoff() (mdanalysis.analysis.gnm.closecontactgnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.generate_kirchoff"]], "order_list() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.order_list"]], "times (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.times"]], "times (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.times"]], "hydrogenbondautocorrel (class in mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel"]], "mdanalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"]], "find_hydrogen_donors() (in module mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.find_hydrogen_donors"]], "run() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.run"]], "solve() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.solve"]], "mdanalysis.analysis.hbonds.hbond_autocorrel": [[21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"]], "mdanalysis.analysis.helix_analysis": [[22, "module-MDAnalysis.analysis.helix_analysis"]], "holeanalysis (class in mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis"]], "mdanalysis.analysis.hole2": [[23, "module-MDAnalysis.analysis.hole2"]], "mdanalysis.analysis.hole2.templates": [[23, "module-MDAnalysis.analysis.hole2.templates"]], "mdanalysis.analysis.hole2.utils": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "path": [[23, "index-0"], [23, "index-1"], [109, "index-0"]], "simple2_rad (in module mdanalysis.analysis.hole2.templates)": [[23, "MDAnalysis.analysis.hole2.templates.SIMPLE2_RAD"]], "bin_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.bin_radii"]], "check_and_fix_long_filename() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.check_and_fix_long_filename"]], "collect_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.collect_hole"]], "create_vmd_surface() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.create_vmd_surface"]], "create_vmd_surface() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.create_vmd_surface"]], "delete_temporary_files() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.delete_temporary_files"]], "environment variable": [[23, "index-0"], [23, "index-1"], [68, "index-0"], [68, "index-1"], [109, "index-0"], [109, "index-1"], [112, "index-0"], [152, "index-0"]], "gather() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.gather"]], "guess_cpoint() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.guess_cpoint"]], "histogram_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.histogram_radii"]], "hole() (in module mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.hole"]], "min_radius() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.min_radius"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.outfiles"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.outfiles"]], "over_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.over_order_parameters"]], "plot() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot"]], "plot3d() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D"]], "plot3d_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D_order_parameters"]], "plot_mean_profile() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_mean_profile"]], "plot_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_order_parameters"]], "profiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.profiles"]], "profiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.profiles"]], "run() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.run"]], "run_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.run_hole"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.sphpdbs"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.sphpdbs"]], "write_simplerad2() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.write_simplerad2"]], "hydrogenbondanalysis (class in mdanalysis.analysis.hydrogenbonds.hbond_analysis)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis"]], "mdanalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"]], "count_by_ids() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_ids"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_type"]], "guess_acceptors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_acceptors"]], "guess_donors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_donors"]], "guess_hydrogens() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_hydrogens"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.hbonds"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis.results attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results.hbonds"]], "lifetime() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.lifetime"]], "leafletfinder (class in mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder"]], "mdanalysis.analysis.leaflet": [[25, "module-MDAnalysis.analysis.leaflet"]], "group() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.group"]], "groups() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups"]], "groups_iter() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups_iter"]], "optimize_cutoff() (in module mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.optimize_cutoff"]], "sizes() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.sizes"]], "update() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.update"]], "write_selection() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.write_selection"]], "applicationerror": [[26, "MDAnalysis.analysis.legacy.x3dna.ApplicationError"], [94, "MDAnalysis.exceptions.ApplicationError"]], "mdanalysis.analysis.legacy.x3dna": [[26, "module-MDAnalysis.analysis.legacy.x3dna"]], "x3dna (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA"]], "x3dnatraj (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj"]], "collect() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.collect"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean_std"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean_std"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.plot"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.plot"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dna attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.profiles"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dnatraj attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.profiles"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.run"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run"]], "run_x3dna() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run_x3dna"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.save"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.save"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.sorted_profiles_iter"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.sorted_profiles_iter"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.std"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.std"]], "lineardensity (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity"]], "mdanalysis.analysis.lineardensity": [[28, "module-MDAnalysis.analysis.lineardensity"]], "note (mdanalysis.analysis.lineardensity.lineardensity attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.Note"]], "results (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.Results"]], "char (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char"]], "char_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char_std"]], "charge_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density"]], "charge_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density_stddev"]], "dim (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.dim"]], "hist_bin_edges (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.hist_bin_edges"]], "mass_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density"]], "mass_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density_stddev"]], "pos (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos"]], "pos_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos_std"]], "slice_volume (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.slice_volume"]], "einsteinmsd (class in mdanalysis.analysis.msd)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD"]], "mdanalysis.analysis.msd": [[29, "module-MDAnalysis.analysis.msd"]], "ag (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.ag"]], "dim_fac (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.dim_fac"]], "msds_by_particle (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.msds_by_particle"]], "n_frames (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_frames"]], "n_particles (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_particles"]], "run() (mdanalysis.analysis.msd.einsteinmsd method)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.run"]], "timeseries (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.timeseries"]], "mdanalysis.analysis.nucleicacids": [[30, "module-MDAnalysis.analysis.nucleicacids"]], "nucpairdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist"]], "watsoncrickdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist"]], "pair_distances (mdanalysis.analysis.nucleicacids.nucpairdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.results.pair_distances"]], "pair_distances (mdanalysis.analysis.nucleicacids.watsoncrickdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results.pair_distances"]], "run() (mdanalysis.analysis.nucleicacids.nucpairdist method)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.run"]], "run() (mdanalysis.analysis.nucleicacids.watsoncrickdist method)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.run"]], "times (mdanalysis.analysis.nucleicacids.nucpairdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.times"]], "times (mdanalysis.analysis.nucleicacids.watsoncrickdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.times"]], "mdanalysis.analysis.nuclinfo": [[31, "module-MDAnalysis.analysis.nuclinfo"]], "hydroxyl() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.hydroxyl"]], "major_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.major_pair"]], "minor_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.minor_pair"]], "phase_as() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_as"]], "phase_cp() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_cp"]], "pseudo_dihe_baseflip() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.pseudo_dihe_baseflip"]], "tors() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors"]], "tors_alpha() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_alpha"]], "tors_beta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_beta"]], "tors_chi() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_chi"]], "tors_delta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_delta"]], "tors_eps() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_eps"]], "tors_gamma() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_gamma"]], "tors_zeta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_zeta"]], "wc_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.wc_pair"]], "mdanalysis.analysis.pca": [[32, "module-MDAnalysis.analysis.pca"]], "pca (class in mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.PCA"]], "cosine_content() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cosine_content"]], "cumulated_variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.cumulated_variance"]], "cumulated_variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.cumulated_variance"]], "cumulative_overlap() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.cumulative_overlap"]], "cumulative_overlap() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cumulative_overlap"]], "p_components (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.p_components"]], "p_components (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.p_components"]], "project_single_frame() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.project_single_frame"]], "rmsip() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.rmsip"]], "rmsip() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.rmsip"]], "run() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.run"]], "transform() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.transform"]], "variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.variance"]], "variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.variance"]], "mdanalysis.analysis.polymer": [[33, "module-MDAnalysis.analysis.polymer"]], "persistencelength (class in mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength"]], "bond_autocorrelation (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.bond_autocorrelation"]], "fit (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.fit"]], "fit (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.fit"]], "fit_exponential_decay() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.fit_exponential_decay"]], "lb (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lb"]], "lb (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lb"]], "lp (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lp"]], "lp (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lp"]], "plot() (mdanalysis.analysis.polymer.persistencelength method)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.plot"]], "sort_backbone() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.sort_backbone"]], "x (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.x"]], "d (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.D"]], "mdanalysis.analysis.psa": [[34, "module-MDAnalysis.analysis.psa"]], "psapair (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAPair"]], "psanalysis (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAnalysis"]], "path (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.Path"]], "cluster() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.cluster"]], "discrete_frechet() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.discrete_frechet"]], "dist_mat_to_vec() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.dist_mat_to_vec"]], "fit_to_reference() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.fit_to_reference"]], "generate_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.generate_paths"]], "get_coord_axes() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_coord_axes"]], "get_msd_matrix() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_msd_matrix"]], "get_num_atoms() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_atoms"]], "get_num_atoms() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.get_num_atoms"]], "get_num_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_paths"]], "get_pairwise_distances() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_pairwise_distances"]], "get_path_metric_func() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_path_metric_func"]], "get_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_paths"]], "hausdorff() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff"]], "hausdorff_avg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_avg"]], "hausdorff_neighbors() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_neighbors"]], "hausdorff_pair (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.hausdorff_pair"]], "hausdorff_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.hausdorff_pairs"]], "hausdorff_wavg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_wavg"]], "load() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.load"]], "matrix_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.matrix_id"]], "nearest_neighbors (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.nearest_neighbors"]], "nearest_neighbors (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.nearest_neighbors"]], "npaths (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.npaths"]], "pair_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.pair_id"]], "path (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path"]], "path_select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.path_select"]], "path_select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path_select"]], "paths (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.paths"]], "plot() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot"]], "plot_annotated_heatmap() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_annotated_heatmap"]], "plot_nearest_neighbors() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_nearest_neighbors"]], "psa_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.psa_pairs"]], "ref_frame (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.ref_frame"]], "ref_frame (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.ref_frame"]], "run() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run"]], "run() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.run"]], "run_pairs_analysis() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run_pairs_analysis"]], "save_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.save_paths"]], "select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.select"]], "select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.select"]], "sqnorm() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.sqnorm"]], "to_path() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.to_path"]], "u_fitted (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_fitted"]], "u_original (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_original"]], "u_reference (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.u_reference"]], "u_reference (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_reference"]], "universes (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.universes"]], "interrdf (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF"]], "interrdf_s (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s"]], "mdanalysis.analysis.rdf": [[35, "module-MDAnalysis.analysis.rdf"]], "bins (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.bins"]], "bins (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.bins"]], "cdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.cdf"]], "cdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.cdf"]], "count (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.count"]], "count (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.count"]], "count (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.count"]], "count (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.count"]], "edges (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.edges"]], "edges (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.edges"]], "get_cdf() (mdanalysis.analysis.rdf.interrdf_s method)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.get_cdf"]], "rdf (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.rdf"]], "mdanalysis.analysis.rms": [[36, "module-MDAnalysis.analysis.rms"]], "rmsd (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSD"]], "rmsf (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSF"]], "rmsd (mdanalysis.analysis.rms.rmsd attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.rmsd"]], "rmsd (mdanalysis.analysis.rms.rmsd.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.results.rmsd"]], "rmsd() (in module mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.rmsd"]], "rmsf (mdanalysis.analysis.rms.rmsf attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.rmsf"]], "rmsf (mdanalysis.analysis.rms.rmsf.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.results.rmsf"]], "run() (mdanalysis.analysis.rms.rmsd method)": [[36, "MDAnalysis.analysis.rms.RMSD.run"]], "run() (mdanalysis.analysis.rms.rmsf method)": [[36, "MDAnalysis.analysis.rms.RMSF.run"]], "angulardistribution (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution"]], "mdanalysis.analysis.waterdynamics": [[37, "module-MDAnalysis.analysis.waterdynamics"]], "meansquaredisplacement (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement"]], "survivalprobability (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability"]], "waterorientationalrelaxation (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation"]], "lg2() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation static method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.lg2"]], "run() (mdanalysis.analysis.waterdynamics.angulardistribution method)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution.run"]], "run() (mdanalysis.analysis.waterdynamics.meansquaredisplacement method)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement.run"]], "run() (mdanalysis.analysis.waterdynamics.survivalprobability method)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability.run"]], "run() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.run"]], "default_acceptors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_ACCEPTORS"]], "default_donors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_DONORS"]], "mdanalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"]], "waterbridgeanalysis (class in mdanalysis.analysis.hydrogenbonds.wbridge_analysis)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_type"]], "generate_table() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.generate_table"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.network"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.network"]], "r_cov (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.r_cov"]], "table (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.table"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timeseries"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.timeseries"]], "timesteps (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps"]], "timesteps_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps_by_type"]], "edrreader (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader"]], "edrstep (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRStep"]], "mdanalysis.auxiliary.edr": [[40, "module-MDAnalysis.auxiliary.EDR"]], "_auxdata (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._auxdata"]], "_n_steps (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._n_steps"]], "data_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.data_dict"]], "get_data() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.get_data"]], "read_all_times() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.read_all_times"]], "terms (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.terms"]], "unit_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.unit_dict"]], "mdanalysis.auxiliary.xvg": [[41, "module-MDAnalysis.auxiliary.XVG"]], "xvgfilereader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader"]], "xvgreader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader"]], "xvgstep (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGStep"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgfilereader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader.read_all_times"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgreader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader.read_all_times"]], "uncomment() (in module mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.uncomment"]], "auxfilereader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader"]], "auxreader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxReader"]], "auxstep (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxStep"]], "mdanalysis.auxiliary.base": [[42, "module-MDAnalysis.auxiliary.base"]], "attach_auxiliary() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.attach_auxiliary"]], "auxfile (mdanalysis.auxiliary.base.auxfilereader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.auxfile"]], "auxstep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.auxstep"]], "calc_representative() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.calc_representative"]], "close() (mdanalysis.auxiliary.base.auxfilereader method)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.close"]], "constant_dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.constant_dt"]], "copy() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.copy"]], "data (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.data"]], "data_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.data_selector"]], "dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.dt"]], "frame_data (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_data"]], "frame_rep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_rep"]], "get_description() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.get_description"]], "initial_time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.initial_time"]], "move_to_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.move_to_ts"]], "n_steps (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.n_steps"]], "next() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next"]], "next_nonempty_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next_nonempty_frame"]], "read_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.read_ts"]], "represent_ts_as (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.represent_ts_as"]], "rewind() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.rewind"]], "step (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step"]], "step (mdanalysis.auxiliary.base.auxstep attribute)": [[42, "MDAnalysis.auxiliary.base.AuxStep.step"]], "step_to_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_frame"]], "step_to_time() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_time"]], "time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time"]], "time (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.time"]], "time_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time_selector"]], "update_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.update_ts"]], "mdanalysis.auxiliary.core": [[43, "module-MDAnalysis.auxiliary.core"]], "auxreader() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.auxreader"]], "get_auxreader_for() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.get_auxreader_for"]], "mdanalysis.auxiliary.__init__": [[44, "module-MDAnalysis.auxiliary.__init__"]], "mdanalysis.converters": [[46, "module-MDAnalysis.converters"]], "mdanalysis.converters.openmm": [[47, "module-MDAnalysis.converters.OpenMM"]], "mdanalysis.converters.openmmparser": [[47, "module-MDAnalysis.converters.OpenMMParser"]], "openmmappreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader"]], "openmmapptopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser"]], "openmmsimulationreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader"]], "openmmtopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser"]], "close() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.close"]], "close() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.close"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_to_native"]], "units (mdanalysis.converters.openmm.openmmappreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader.units"]], "units (mdanalysis.converters.openmm.openmmsimulationreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader.units"]], "units (mdanalysis.converters.openmmparser.openmmapptopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.units"]], "units (mdanalysis.converters.openmmparser.openmmtopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.units"]], "mdanalysis.converters.parmed": [[48, "module-MDAnalysis.converters.ParmEd"]], "mdanalysis.converters.parmedparser": [[48, "module-MDAnalysis.converters.ParmEdParser"]], "parmedconverter (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter"]], "parmedparser (class in mdanalysis.converters.parmedparser)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser"]], "parmedreader (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader"]], "close() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.close"]], "convert() (mdanalysis.converters.parmed.parmedconverter method)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.parse"]], "units (mdanalysis.converters.parmed.parmedconverter attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.units"]], "units (mdanalysis.converters.parmed.parmedreader attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader.units"]], "units (mdanalysis.converters.parmedparser.parmedparser attribute)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.units"]], "mdanalysis.converters.rdkit": [[49, "module-MDAnalysis.converters.RDKit"]], "mdanalysis.converters.rdkitparser": [[49, "module-MDAnalysis.converters.RDKitParser"]], "rdkitconverter (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter"]], "rdkitparser (class in mdanalysis.converters.rdkitparser)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser"]], "rdkitreader (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitReader"]], "_infer_bo_and_charges() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._infer_bo_and_charges"]], "_rebuild_conjugated_bonds() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._rebuild_conjugated_bonds"]], "_standardize_patterns() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._standardize_patterns"]], "close() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.close"]], "convert() (mdanalysis.converters.rdkit.rdkitconverter method)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.parse"]], "units (mdanalysis.converters.rdkit.rdkitconverter attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.units"]], "units (mdanalysis.converters.rdkit.rdkitreader attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitReader.units"]], "units (mdanalysis.converters.rdkitparser.rdkitparser attribute)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.units"]], "crdreader (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDReader"]], "crdwriter (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter"]], "mdanalysis.coordinates.crd": [[50, "module-MDAnalysis.coordinates.CRD"]], "writer() (mdanalysis.coordinates.crd.crdreader method)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.Writer"]], "units (mdanalysis.coordinates.crd.crdreader attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.units"]], "units (mdanalysis.coordinates.crd.crdwriter attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.units"]], "write() (mdanalysis.coordinates.crd.crdwriter method)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.write"]], "dcdreader (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter"]], "mdanalysis.coordinates.dcd": [[51, "module-MDAnalysis.coordinates.DCD"]], "otherwriter() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.close"]], "close() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.copy"]], "dimensions (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dt"]], "frame (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next"]], "next_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.dcd.dcdreader static method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.time"]], "timeseries() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.timeseries"]], "totaltime (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.totaltime"]], "transformations (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.transformations"]], "units (mdanalysis.coordinates.dcd.dcdreader attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.units"]], "units (mdanalysis.coordinates.dcd.dcdwriter attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.units"]], "write() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.write"]], "configreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader"]], "historyreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader"]], "mdanalysis.coordinates.dlpoly": [[52, "module-MDAnalysis.coordinates.DLPoly"]], "close() (mdanalysis.coordinates.dlpoly.historyreader method)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.close"]], "units (mdanalysis.coordinates.dlpoly.configreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader.units"]], "units (mdanalysis.coordinates.dlpoly.historyreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.units"]], "dmsreader (class in mdanalysis.coordinates.dms)": [[53, "MDAnalysis.coordinates.DMS.DMSReader"]], "mdanalysis.coordinates.dms": [[53, "module-MDAnalysis.coordinates.DMS"]], "units (mdanalysis.coordinates.dms.dmsreader attribute)": [[53, "MDAnalysis.coordinates.DMS.DMSReader.units"]], "fhiaimsreader (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader"]], "fhiaimswriter (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter"]], "mdanalysis.coordinates.fhiaims": [[54, "module-MDAnalysis.coordinates.FHIAIMS"]], "otherwriter() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.OtherWriter"]], "writer() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_transformations"]], "aux_list (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.check_slice_indices"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.close"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.copy"]], "dt (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.dt"]], "fmt (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.fmt"]], "frame (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next"]], "next_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.fhiaims.fhiaimsreader class method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rename_aux"]], "rewind() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.set_aux_attribute"]], "time (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.time"]], "timeseries() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.timeseries"]], "totaltime (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.totaltime"]], "transformations (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.transformations"]], "units (mdanalysis.coordinates.fhiaims.fhiaimsreader attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.units"]], "units (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.units"]], "write() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.write"]], "gmsreader (class in mdanalysis.coordinates.gms)": [[55, "MDAnalysis.coordinates.GMS.GMSReader"]], "mdanalysis.coordinates.gms": [[55, "module-MDAnalysis.coordinates.GMS"]], "close() (mdanalysis.coordinates.gms.gmsreader method)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.close"]], "n_atoms (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.n_atoms"]], "runtyp (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.runtyp"]], "units (mdanalysis.coordinates.gms.gmsreader attribute)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.units"]], "groreader (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROReader"]], "growriter (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROWriter"]], "mdanalysis.coordinates.gro": [[56, "module-MDAnalysis.coordinates.GRO"]], "writer() (mdanalysis.coordinates.gro.groreader method)": [[56, "MDAnalysis.coordinates.GRO.GROReader.Writer"]], "fmt (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.fmt"]], "units (mdanalysis.coordinates.gro.groreader attribute)": [[56, "MDAnalysis.coordinates.GRO.GROReader.units"]], "units (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.units"]], "write() (mdanalysis.coordinates.gro.growriter method)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.write"]], "gsdpicklable (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDPicklable"]], "gsdreader (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDReader"]], "mdanalysis.coordinates.gsd": [[57, "module-MDAnalysis.coordinates.GSD"]], "otherwriter() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.copy"]], "dt (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.dt"]], "frame (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_descriptions"]], "gsd_pickle_open() (in module mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.gsd_pickle_open"]], "iter_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.n_frames"]], "next() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next"]], "next_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.gsd.gsdreader class method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.time"]], "timeseries() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.timeseries"]], "totaltime (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.totaltime"]], "transformations (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.transformations"]], "units (mdanalysis.coordinates.gsd.gsdreader attribute)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.units"]], "h5mdreader (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader"]], "h5mdwriter (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter"]], "h5md_version (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.H5MD_VERSION"]], "h5pypicklable (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5PYPicklable"]], "mdanalysis.coordinates.h5md": [[58, "module-MDAnalysis.coordinates.H5MD"]], "otherwriter() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.Writer"]], "_reopen() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader._reopen"]], "add_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.close"]], "close() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.copy"]], "data_blacklist (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.data_blacklist"]], "dt (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.dt"]], "frame (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_descriptions"]], "has_forces (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_forces"]], "has_forces (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_forces"]], "has_positions (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_positions"]], "has_positions (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_positions"]], "has_valid_coordinates() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_valid_coordinates"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_velocities"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_velocities"]], "iter_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.n_frames"]], "next() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next"]], "next_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.h5md.h5mdreader static method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.time"]], "timeseries() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.timeseries"]], "totaltime (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.totaltime"]], "transformations (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.transformations"]], "units (mdanalysis.coordinates.h5md.h5mdreader attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.units"]], "units (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.units"]], "write() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.write"]], "inpreader (class in mdanalysis.coordinates.inpcrd)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader"]], "mdanalysis.coordinates.inpcrd": [[59, "module-MDAnalysis.coordinates.INPCRD"]], "parse_n_atoms() (mdanalysis.coordinates.inpcrd.inpreader static method)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.parse_n_atoms"]], "units (mdanalysis.coordinates.inpcrd.inpreader attribute)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.units"]], "datareader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader"]], "datawriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter"]], "dcdreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter"]], "dumpreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader"]], "mdanalysis.coordinates.lammps": [[60, "module-MDAnalysis.coordinates.LAMMPS"]], "otherwriter() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.OtherWriter"]], "writer() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_transformations"]], "aux_list (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.check_slice_indices"]], "close() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.close"]], "close() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.close"]], "close() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.close"]], "close() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.close"]], "close() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_dimensions_to_unitcell"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.copy"]], "dimensions (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.dt"]], "dt (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dt"]], "dt (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.dt"]], "frame (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.frame"]], "frame (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.frame"]], "frame (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.has_valid_coordinates"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next"]], "next() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next"]], "next() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next"]], "next_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.datareader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dcdreader static method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dumpreader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rename_aux"]], "rewind() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.set_aux_attribute"]], "time (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.time"]], "time (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.time"]], "time (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.time"]], "timeseries() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.timeseries"]], "totaltime (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.totaltime"]], "transformations (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.transformations"]], "units (mdanalysis.coordinates.lammps.datareader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.units"]], "units (mdanalysis.coordinates.lammps.datawriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.units"]], "units (mdanalysis.coordinates.lammps.dcdreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.units"]], "units (mdanalysis.coordinates.lammps.dcdwriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.units"]], "units (mdanalysis.coordinates.lammps.dumpreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.units"]], "write() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.write"]], "write() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.write"]], "mdanalysis.coordinates.mmtf": [[61, "module-MDAnalysis.coordinates.MMTF"]], "mmtfreader (class in mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.MMTFReader"]], "fetch_mmtf() (in module mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.fetch_mmtf"]], "mdanalysis.coordinates.mol2": [[62, "module-MDAnalysis.coordinates.MOL2"]], "mol2reader (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader"]], "mol2writer (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer"]], "close() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.close"]], "encode_block() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.encode_block"]], "units (mdanalysis.coordinates.mol2.mol2reader attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader.units"]], "units (mdanalysis.coordinates.mol2.mol2writer attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.units"]], "mdanalysis.coordinates.namdbin": [[63, "module-MDAnalysis.coordinates.NAMDBIN"]], "namdbinreader (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader"]], "namdbinwriter (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter"]], "writer() (mdanalysis.coordinates.namdbin.namdbinreader method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.Writer"]], "parse_n_atoms() (mdanalysis.coordinates.namdbin.namdbinreader static method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.parse_n_atoms"]], "units (mdanalysis.coordinates.namdbin.namdbinreader attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.units"]], "units (mdanalysis.coordinates.namdbin.namdbinwriter attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter.units"]], "conect() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CONECT"]], "cryst1() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CRYST1"]], "end() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.END"]], "endmdl() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.ENDMDL"]], "extendedpdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader"]], "header() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.HEADER"]], "mdanalysis.coordinates.pdb": [[64, "module-MDAnalysis.coordinates.PDB"]], "model() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.MODEL"]], "multipdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.MultiPDBWriter"]], "otherwriter() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.OtherWriter"]], "pdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBReader"]], "pdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter"]], "remark() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.REMARK"]], "title() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.TITLE"]], "writer() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.Writer"]], "writer() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.Writer"]], "_check_pdb_coordinates() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._check_pdb_coordinates"]], "_update_frame() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._update_frame"]], "_write_pdb_bonds() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_pdb_bonds"]], "_write_timestep() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_timestep"]], "add_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_transformations"]], "aux_list (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.check_slice_indices"]], "close() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.close"]], "convert_forces_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.copy"]], "dt (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.dt"]], "frame (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next"]], "next_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.pdb.extendedpdbreader class method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rename_aux"]], "rewind() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.set_aux_attribute"]], "time (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.time"]], "timeseries() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.timeseries"]], "totaltime (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.totaltime"]], "transformations (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.transformations"]], "units (mdanalysis.coordinates.pdb.extendedpdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbwriter attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.units"]], "write() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write"]], "write_all_timesteps() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write_all_timesteps"]], "mdanalysis.coordinates.pdbqt": [[65, "module-MDAnalysis.coordinates.PDBQT"]], "pdbqtreader (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader"]], "pdbqtwriter (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter"]], "writer() (mdanalysis.coordinates.pdbqt.pdbqtreader method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.Writer"]], "close() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.close"]], "units (mdanalysis.coordinates.pdbqt.pdbqtreader attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.units"]], "units (mdanalysis.coordinates.pdbqt.pdbqtwriter attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.units"]], "write() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.write"]], "mdanalysis.coordinates.pqr": [[66, "module-MDAnalysis.coordinates.PQR"]], "pqrreader (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRReader"]], "pqrwriter (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter"]], "writer() (mdanalysis.coordinates.pqr.pqrreader method)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.Writer"]], "units (mdanalysis.coordinates.pqr.pqrreader attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.units"]], "units (mdanalysis.coordinates.pqr.pqrwriter attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.units"]], "write() (mdanalysis.coordinates.pqr.pqrwriter method)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.write"]], "mdanalysis.coordinates.tng": [[67, "module-MDAnalysis.coordinates.TNG"]], "tngreader (class in mdanalysis.coordinates.tng)": [[67, "MDAnalysis.coordinates.TNG.TNGReader"]], "writer() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.Writer"]], "additional_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.additional_blocks"]], "blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.blocks"]], "close() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.close"]], "n_frames (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.n_frames"]], "parse_n_atoms() (mdanalysis.coordinates.tng.tngreader static method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.parse_n_atoms"]], "special_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.special_blocks"]], "units (mdanalysis.coordinates.tng.tngreader attribute)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.units"]], "ld_library_path": [[68, "index-0"], [68, "index-1"]], "mdanalysis.coordinates.trj": [[68, "module-MDAnalysis.coordinates.TRJ"]], "ncdfpicklable (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFPicklable"]], "ncdfreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader"]], "ncdfwriter (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter"]], "trjreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader"]], "writer() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.Writer"]], "close() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.close"]], "close() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.close"]], "close() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.close"]], "is_periodic() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.is_periodic"]], "n_frames (mdanalysis.coordinates.trj.trjreader property)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.trj.ncdfreader static method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.parse_n_atoms"]], "units (mdanalysis.coordinates.trj.ncdfreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.units"]], "units (mdanalysis.coordinates.trj.ncdfwriter attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.units"]], "units (mdanalysis.coordinates.trj.trjreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.units"]], "mdanalysis.coordinates.trr": [[69, "module-MDAnalysis.coordinates.TRR"]], "otherwriter() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.OtherWriter"]], "trrreader (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRReader"]], "trrwriter (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter"]], "writer() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_transformations"]], "aux_list (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.check_slice_indices"]], "close() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.close"]], "close() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.copy"]], "dt (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.dt"]], "frame (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.n_frames"]], "next() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next"]], "next_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.trr.trrreader class method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rename_aux"]], "rewind() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.set_aux_attribute"]], "time (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.time"]], "timeseries() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.timeseries"]], "totaltime (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.totaltime"]], "transformations (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.transformations"]], "units (mdanalysis.coordinates.trr.trrreader attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.units"]], "units (mdanalysis.coordinates.trr.trrwriter attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.units"]], "write() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.write"]], "mdanalysis.coordinates.trz": [[70, "module-MDAnalysis.coordinates.TRZ"]], "trzreader (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader"]], "trzwriter (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter"]], "writer() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.Writer"]], "close() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.close"]], "close() (mdanalysis.coordinates.trz.trzwriter method)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.close"]], "delta (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.delta"]], "n_atoms (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_atoms"]], "n_frames (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.open_trajectory"]], "skip_timestep (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.skip_timestep"]], "ts (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.ts"]], "units (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.units"]], "units (mdanalysis.coordinates.trz.trzwriter attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.units"]], "mdanalysis.coordinates.txyz": [[71, "module-MDAnalysis.coordinates.TXYZ"]], "otherwriter() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.OtherWriter"]], "txyzreader (class in mdanalysis.coordinates.txyz)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader"]], "writer() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_transformations"]], "aux_list (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.check_slice_indices"]], "close() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.copy"]], "dt (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.dt"]], "frame (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_auxiliary"]], "n_atoms (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.n_atoms"]], "next() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next"]], "next_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.txyz.txyzreader class method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rename_aux"]], "rewind() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.set_aux_attribute"]], "time (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.time"]], "timeseries() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.timeseries"]], "totaltime (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.totaltime"]], "transformations (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.transformations"]], "units (mdanalysis.coordinates.txyz.txyzreader attribute)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.units"]], "mdanalysis.coordinates.xdr": [[72, "module-MDAnalysis.coordinates.XDR"]], "otherwriter() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.Writer"]], "xdrbasereader (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader"]], "xdrbasewriter (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter"]], "add_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.close"]], "close() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.copy"]], "dt (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.dt"]], "frame (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.n_frames"]], "next() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next"]], "next_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next_as_aux"]], "offsets_filename() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.offsets_filename"]], "parse_n_atoms() (mdanalysis.coordinates.xdr.xdrbasereader class method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.parse_n_atoms"]], "read_numpy_offsets() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.read_numpy_offsets"]], "remove_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.time"]], "timeseries() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.timeseries"]], "totaltime (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.totaltime"]], "transformations (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.transformations"]], "units (mdanalysis.coordinates.xdr.xdrbasereader attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.units"]], "units (mdanalysis.coordinates.xdr.xdrbasewriter attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.units"]], "write() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.write"]], "mdanalysis.coordinates.xtc": [[73, "module-MDAnalysis.coordinates.XTC"]], "otherwriter() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.Writer"]], "xtcreader (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCReader"]], "xtcwriter (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter"]], "add_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.close"]], "close() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.copy"]], "dt (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.dt"]], "frame (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.n_frames"]], "next() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next"]], "next_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.xtc.xtcreader class method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.time"]], "timeseries() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.timeseries"]], "totaltime (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.totaltime"]], "transformations (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.transformations"]], "units (mdanalysis.coordinates.xtc.xtcreader attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.units"]], "units (mdanalysis.coordinates.xtc.xtcwriter attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.units"]], "write() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.write"]], "mdanalysis.coordinates.xyz": [[74, "module-MDAnalysis.coordinates.XYZ"]], "writer() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.Writer"]], "xyzreader (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader"]], "xyzwriter (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter"]], "close() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.close"]], "close() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.close"]], "n_atoms (mdanalysis.coordinates.xyz.xyzreader property)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.n_atoms"]], "units (mdanalysis.coordinates.xyz.xyzreader attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.units"]], "units (mdanalysis.coordinates.xyz.xyzwriter attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.units"]], "write() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.write"]], "converterbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ConverterBase"]], "frameiteratorall (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorAll"]], "frameiteratorbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorBase"]], "frameiteratorindices (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorIndices"]], "frameiteratorsliced (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorSliced"]], "iobase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.IOBase"]], "mdanalysis.coordinates.base": [[75, "module-MDAnalysis.coordinates.base"]], "otherwriter() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.OtherWriter"]], "protoreader (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ProtoReader"]], "readerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ReaderBase"]], "singleframereaderbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase"]], "writer() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.Writer"]], "writer() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.Writer"]], "writer() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.Writer"]], "writerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.WriterBase"]], "add_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_transformations"]], "aux_list (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.aux_list"]], "aux_list (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.aux_list"]], "aux_list (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.check_slice_indices"]], "close() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.close"]], "close() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.close"]], "close() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.close"]], "close() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.close"]], "close() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.copy"]], "copy() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.copy"]], "dt (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.dt"]], "dt (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.dt"]], "dt (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.dt"]], "frame (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.frame"]], "frame (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.frame"]], "frame (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.frame"]], "get_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_auxiliary"]], "next() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next"]], "next() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next"]], "next() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next"]], "next_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.base.protoreader class method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.readerbase class method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.singleframereaderbase class method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rename_aux"]], "rewind() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rewind"]], "rewind() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rewind"]], "rewind() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.set_aux_attribute"]], "time (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.time"]], "time (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.time"]], "time (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.time"]], "timeseries() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.timeseries"]], "timeseries() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.timeseries"]], "timeseries() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.timeseries"]], "totaltime (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.totaltime"]], "totaltime (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.totaltime"]], "totaltime (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.totaltime"]], "transformations (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.transformations"]], "transformations (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.transformations"]], "transformations (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.transformations"]], "units (mdanalysis.coordinates.base.converterbase attribute)": [[75, "MDAnalysis.coordinates.base.ConverterBase.units"]], "units (mdanalysis.coordinates.base.iobase attribute)": [[75, "MDAnalysis.coordinates.base.IOBase.units"]], "units (mdanalysis.coordinates.base.readerbase attribute)": [[75, "MDAnalysis.coordinates.base.ReaderBase.units"]], "units (mdanalysis.coordinates.base.singleframereaderbase attribute)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.units"]], "units (mdanalysis.coordinates.base.writerbase attribute)": [[75, "MDAnalysis.coordinates.base.WriterBase.units"]], "write() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.write"]], "chainreader (class in mdanalysis.coordinates.chain)": [[76, "MDAnalysis.coordinates.chain.ChainReader"]], "mdanalysis.coordinates.chain": [[76, "module-MDAnalysis.coordinates.chain"]], "_apply() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._apply"]], "_get() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get"]], "_get_local_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_local_frame"]], "_get_same() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_same"]], "_read_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._read_frame"]], "active_reader (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.active_reader"]], "close() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.close"]], "compressed (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.compressed"]], "convert_pos_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_to_native"]], "frame (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.frame"]], "periodic (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.periodic"]], "time (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.time"]], "units (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.units"]], "chemfilespicklable (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesPicklable"]], "chemfilesreader (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesReader"]], "chemfileswriter (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesWriter"]], "max_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MAX_CHEMFILES_VERSION"]], "mdanalysis.coordinates.chemfiles": [[77, "module-MDAnalysis.coordinates.chemfiles"]], "min_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MIN_CHEMFILES_VERSION"]], "check_chemfiles_version() (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.check_chemfiles_version"]], "mdanalysis.coordinates.core": [[78, "module-MDAnalysis.coordinates.core"]], "get_reader_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_reader_for"]], "get_writer_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_writer_for"]], "reader() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.reader"]], "writer() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.writer"]], "mdanalysis.coordinates.__init__": [[79, "module-MDAnalysis.coordinates.__init__"]], "mdanalysis.coordinates.memory": [[80, "module-MDAnalysis.coordinates.memory"]], "memoryreader (class in mdanalysis.coordinates.memory)": [[80, "MDAnalysis.coordinates.memory.MemoryReader"]], "otherwriter() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.OtherWriter"]], "writer() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_transformations"]], "aux_list (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.check_slice_indices"]], "close() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.copy"]], "dt (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.dt"]], "frame (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.frame"]], "get_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_array"]], "get_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next"]], "next_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.memory.memoryreader static method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rename_aux"]], "rewind() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rewind"]], "set_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_array"]], "set_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_aux_attribute"]], "time (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.time"]], "timeseries() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.timeseries"]], "totaltime (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.totaltime"]], "transformations (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.transformations"]], "units (mdanalysis.coordinates.memory.memoryreader attribute)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.units"]], "mdanalysis.coordinates.null": [[81, "module-MDAnalysis.coordinates.null"]], "nullwriter (class in mdanalysis.coordinates.null)": [[81, "MDAnalysis.coordinates.null.NullWriter"]], "units (mdanalysis.coordinates.null.nullwriter attribute)": [[81, "MDAnalysis.coordinates.null.NullWriter.units"]], "mdanalysis.coordinates.timestep": [[83, "module-MDAnalysis.coordinates.timestep"]], "timestep (class in mdanalysis.coordinates.timestep)": [[83, "MDAnalysis.coordinates.timestep.Timestep"]], "__eq__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__eq__"]], "__getitem__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__getitem__"]], "__init__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__init__"]], "__iter__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__iter__"]], "_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._forces"]], "_pos (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._pos"]], "_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._velocities"]], "copy() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy"]], "copy_slice() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy_slice"]], "data (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.data"]], "dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dimensions"]], "dt (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dt"]], "dtype (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dtype"]], "forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.forces"]], "frame (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.frame"]], "from_coordinates() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_coordinates"]], "from_timestep() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_timestep"]], "has_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_forces"]], "has_positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_positions"]], "has_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_velocities"]], "n_atoms (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.n_atoms"]], "positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.positions"]], "time (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.time"]], "triclinic_dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.triclinic_dimensions"]], "velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.velocities"]], "volume (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.volume"]], "accessor (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.Accessor"]], "converterwrapper (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.ConverterWrapper"]], "mdanalysis.core.accessors": [[85, "module-MDAnalysis.core.accessors"]], "atom (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Atom"]], "atomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.AtomGroup"]], "mdanalysis.core.groups": [[86, "module-MDAnalysis.core.groups"]], "residue (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Residue"]], "residuegroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.ResidueGroup"]], "segment (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Segment"]], "segmentgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.SegmentGroup"]], "updatingatomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup"]], "accumulate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.accumulate"]], "align_principal_axis() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.align_principal_axis"]], "angle (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.angle"]], "asphericity() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asphericity"]], "asunique() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asunique"]], "asunique() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asunique"]], "asunique() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asunique"]], "atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.atoms"]], "atoms (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.atoms"]], "atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.atoms"]], "atoms (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.atoms"]], "atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.atoms"]], "atoms (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.atoms"]], "bbox() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bbox"]], "bbox() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bbox"]], "bbox() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bbox"]], "bfactor (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bfactor"]], "bfactors (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bfactors"]], "bfactors (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.bfactors"]], "bfactors (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.bfactors"]], "bfactors (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.bfactors"]], "bfactors (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.bfactors"]], "bond (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bond"]], "bonded_atoms (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bonded_atoms"]], "bsphere() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bsphere"]], "center() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center"]], "center() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center"]], "center() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center"]], "center_of_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_charge"]], "center_of_geometry() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_geometry"]], "center_of_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_mass"]], "centroid() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.centroid"]], "centroid() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.centroid"]], "centroid() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.centroid"]], "chi1_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.chi1_selection"]], "chi1_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.chi1_selections"]], "cmap (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.cmap"]], "concatenate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.concatenate"]], "convert_to (mdanalysis.core.groups.atomgroup attribute)": [[86, "MDAnalysis.core.groups.AtomGroup.convert_to"]], "copy() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.copy"]], "copy() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.copy"]], "copy() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.copy"]], "copy() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.copy"]], "difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.difference"]], "difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.difference"]], "difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.difference"]], "dihedral (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dihedral"]], "dimensions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dimensions"]], "dimensions (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.dimensions"]], "dimensions (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.dimensions"]], "dipole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_moment"]], "dipole_vector() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_vector"]], "force (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.force"]], "forces (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.forces"]], "fragindex (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragindex"]], "fragindices (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragindices"]], "fragment (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragment"]], "fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragments"]], "get_connections() (mdanalysis.core.groups.atom method)": [[86, "MDAnalysis.core.groups.Atom.get_connections"]], "get_connections() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.get_connections"]], "get_connections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.segment method)": [[86, "MDAnalysis.core.groups.Segment.get_connections"]], "get_connections() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.get_connections"]], "groupby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.groupby"]], "groupby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.groupby"]], "groupby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.groupby"]], "guess_bonds() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.guess_bonds"]], "gyration_moments() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.gyration_moments"]], "improper (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.improper"]], "intersection() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.intersection"]], "intersection() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.intersection"]], "intersection() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.intersection"]], "is_strict_subset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_subset"]], "is_strict_superset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_superset"]], "is_uptodate (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.is_uptodate"]], "isdisjoint() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.isdisjoint"]], "issubset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issubset"]], "issubset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issubset"]], "issubset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issubset"]], "issuperset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issuperset"]], "isunique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.isunique"]], "isunique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.isunique"]], "isunique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.isunique"]], "ix (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix"]], "ix (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix"]], "ix (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix"]], "ix (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix"]], "ix (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix"]], "ix (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix"]], "ix_array (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix_array"]], "ix_array (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix_array"]], "ix_array (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix_array"]], "ix_array (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix_array"]], "ix_array (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix_array"]], "ix_array (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix_array"]], "moment_of_inertia() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.moment_of_inertia"]], "n_atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_atoms"]], "n_fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_fragments"]], "n_residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_residues"]], "n_residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_residues"]], "n_residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_residues"]], "n_segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_segments"]], "n_segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_segments"]], "n_segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_segments"]], "omega_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.omega_selection"]], "omega_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.omega_selections"]], "pack_into_box() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.pack_into_box"]], "phi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.phi_selection"]], "phi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.phi_selections"]], "position (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.position"]], "positions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.positions"]], "principal_axes() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.principal_axes"]], "psi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.psi_selection"]], "psi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.psi_selections"]], "quadrupole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.radius_of_gyration"]], "residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.residues"]], "residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.residues"]], "residues (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.residues"]], "residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.residues"]], "rotate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotate"]], "rotate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotate"]], "rotate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotate"]], "rotateby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotateby"]], "segment (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.segment"]], "segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.segments"]], "segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.segments"]], "segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.segments"]], "select_atoms() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.select_atoms"]], "sequence() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.sequence"]], "shape_parameter() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.shape_parameter"]], "sort() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.sort"]], "split() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.split"]], "subtract() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.subtract"]], "subtract() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.subtract"]], "subtract() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.subtract"]], "symmetric_difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.symmetric_difference"]], "total_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_charge"]], "total_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_mass"]], "transform() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.transform"]], "transform() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.transform"]], "transform() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.transform"]], "translate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.translate"]], "translate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.translate"]], "translate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.translate"]], "ts (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ts"]], "union() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.union"]], "union() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.union"]], "union() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.union"]], "unique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.unique"]], "unique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.unique"]], "unique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.unique"]], "universe (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.universe"]], "universe (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.universe"]], "universe (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.universe"]], "unwrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.unwrap"]], "update_selection() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.update_selection"]], "ureybradley (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ureybradley"]], "velocities (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.velocities"]], "velocity (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.velocity"]], "wrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.wrap"]], "wrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.wrap"]], "wrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.wrap"]], "write() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.write"]], "mdanalysis.core.__init__": [[87, "module-MDAnalysis.core.__init__"]], "aromaticselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.AromaticSelection"]], "backboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BackboneSelection"]], "baseselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BaseSelection"]], "boolselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BoolSelection"]], "bynumselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByNumSelection"]], "byresselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByResSelection"]], "float_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FLOAT_PATTERN"]], "floatrangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FloatRangeSelection"]], "int_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.INT_PATTERN"]], "mdanalysis.core.selection": [[88, "module-MDAnalysis.core.selection"]], "nucleicbackboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicBackboneSelection"]], "nucleicselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSelection"]], "nucleicsugarselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSugarSelection"]], "propertyselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.PropertySelection"]], "proteinselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ProteinSelection"]], "range_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RANGE_PATTERN"]], "rangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RangeSelection"]], "residselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ResidSelection"]], "sameselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SameSelection"]], "selectionparser (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SelectionParser"]], "singlecharselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SingleCharSelection"]], "smartsselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SmartsSelection"]], "dtype (mdanalysis.core.selection.floatrangeselection attribute)": [[88, "MDAnalysis.core.selection.FloatRangeSelection.dtype"]], "dtype (mdanalysis.core.selection.rangeselection attribute)": [[88, "MDAnalysis.core.selection.RangeSelection.dtype"]], "expect() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.expect"]], "gen_selection_class() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.gen_selection_class"]], "grab_not_keywords() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.grab_not_keywords"]], "is_keyword() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.is_keyword"]], "join_separated_values() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.join_separated_values"]], "parse() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.parse"]], "return_empty_on_apply() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.return_empty_on_apply"]], "mdanalysis.core.topology": [[89, "module-MDAnalysis.core.topology"]], "topology (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.Topology"]], "transtable (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.TransTable"]], "add_residue() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Residue"]], "add_segment() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Segment"]], "add_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_TopologyAttr"]], "atoms2residues() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2residues"]], "atoms2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2segments"]], "copy() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.copy"]], "copy() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.copy"]], "del_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.del_TopologyAttr"]], "guessed_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.guessed_attributes"]], "make_downshift_arrays() (in module mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.make_downshift_arrays"]], "move_atom() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_atom"]], "move_residue() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_residue"]], "n_atoms (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_atoms"]], "n_residues (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_residues"]], "n_segments (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_segments"]], "read_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.read_attributes"]], "residues2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_1d"]], "residues2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_2d"]], "residues2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2segments"]], "segments2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_1d"]], "segments2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_2d"]], "segments2residues_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_1d"]], "segments2residues_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_2d"]], "size (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.size"]], "altlocs (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AltLocs"]], "angles (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Angles"]], "aromaticities (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities"]], "atomattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr"]], "atomstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr"]], "atomids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomids"]], "atomindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomindices"]], "atomnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomnames"]], "atomtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes"]], "bonds (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Bonds"]], "cmaps (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.CMaps"]], "chainids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs"]], "charges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Charges"]], "dihedrals (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Dihedrals"]], "elements (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Elements"]], "epsilon14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s"]], "epsilons (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilons"]], "formalcharges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges"]], "gbscreens (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.GBScreens"]], "icodes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ICodes"]], "impropers (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Impropers"]], "mdanalysis.core.topologyattrs": [[90, "module-MDAnalysis.core.topologyattrs"]], "masses (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Masses"]], "molnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Molnums"]], "moltypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Moltypes"]], "nonbondedindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices"]], "occupancies (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Occupancies"]], "rmin14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMin14s"]], "rmins (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMins"]], "rschirality (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RSChirality"]], "radii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Radii"]], "recordtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes"]], "resids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resids"]], "residueattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr"]], "residuestringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr"]], "resindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resindices"]], "resnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnames"]], "resnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnums"]], "segids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segids"]], "segindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segindices"]], "segmentattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr"]], "segmentstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr"]], "solventradii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii"]], "tempfactors (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors"]], "topologyattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr"]], "ureybradleys (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.UreyBradleys"]], "align_principal_axis() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.align_principal_axis"]], "asphericity() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.asphericity"]], "attrname (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.attrname"]], "bfactor() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor"]], "bfactor_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor_setter"]], "bfactors() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors"]], "bfactors_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors_setter"]], "bonded_atoms() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.bonded_atoms"]], "center_of_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.center_of_charge"]], "center_of_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.center_of_mass"]], "chi1_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selection"]], "chi1_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selections"]], "copy() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.copy"]], "dipole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_moment"]], "dipole_vector() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_vector"]], "dtype (mdanalysis.core.topologyattrs.altlocs attribute)": [[90, "MDAnalysis.core.topologyattrs.AltLocs.dtype"]], "dtype (mdanalysis.core.topologyattrs.aromaticities attribute)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomids attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomids.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.chainids attribute)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs.dtype"]], "dtype (mdanalysis.core.topologyattrs.charges attribute)": [[90, "MDAnalysis.core.topologyattrs.Charges.dtype"]], "dtype (mdanalysis.core.topologyattrs.elements attribute)": [[90, "MDAnalysis.core.topologyattrs.Elements.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilon14s attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilons attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilons.dtype"]], "dtype (mdanalysis.core.topologyattrs.formalcharges attribute)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges.dtype"]], "dtype (mdanalysis.core.topologyattrs.gbscreens attribute)": [[90, "MDAnalysis.core.topologyattrs.GBScreens.dtype"]], "dtype (mdanalysis.core.topologyattrs.icodes attribute)": [[90, "MDAnalysis.core.topologyattrs.ICodes.dtype"]], "dtype (mdanalysis.core.topologyattrs.masses attribute)": [[90, "MDAnalysis.core.topologyattrs.Masses.dtype"]], "dtype (mdanalysis.core.topologyattrs.molnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Molnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.moltypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Moltypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.nonbondedindices attribute)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices.dtype"]], "dtype (mdanalysis.core.topologyattrs.occupancies attribute)": [[90, "MDAnalysis.core.topologyattrs.Occupancies.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmin14s attribute)": [[90, "MDAnalysis.core.topologyattrs.RMin14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmins attribute)": [[90, "MDAnalysis.core.topologyattrs.RMins.dtype"]], "dtype (mdanalysis.core.topologyattrs.radii attribute)": [[90, "MDAnalysis.core.topologyattrs.Radii.dtype"]], "dtype (mdanalysis.core.topologyattrs.recordtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.resids attribute)": [[90, "MDAnalysis.core.topologyattrs.Resids.dtype"]], "dtype (mdanalysis.core.topologyattrs.resindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Resindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.segids attribute)": [[90, "MDAnalysis.core.topologyattrs.Segids.dtype"]], "dtype (mdanalysis.core.topologyattrs.segindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Segindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.solventradii attribute)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii.dtype"]], "dtype (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.dtype"]], "dtype (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.dtype"]], "fragindex() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindex"]], "fragindices() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindices"]], "fragment() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragment"]], "fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragments"]], "from_blank() (mdanalysis.core.topologyattrs.topologyattr class method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.from_blank"]], "get_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_atoms"]], "get_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_residues"]], "get_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_segments"]], "group (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.group"]], "gyration_moments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.gyration_moments"]], "is_guessed (mdanalysis.core.topologyattrs.topologyattr property)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.is_guessed"]], "moment_of_inertia() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.moment_of_inertia"]], "n_fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.n_fragments"]], "omega_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selection"]], "omega_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selections"]], "per_object (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.per_object"]], "phi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selection"]], "phi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selections"]], "principal_axes() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.principal_axes"]], "psi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selection"]], "psi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selections"]], "quadrupole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.radius_of_gyration"]], "sequence() (mdanalysis.core.topologyattrs.resnames method)": [[90, "MDAnalysis.core.topologyattrs.Resnames.sequence"]], "set_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomstringattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_atoms"]], "set_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residuestringattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_residues"]], "set_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentstringattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_segments"]], "shape_parameter() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.shape_parameter"]], "singular (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.singular"]], "top (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.top"]], "total_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.total_charge"]], "total_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.total_mass"]], "angle (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Angle"]], "bond (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Bond"]], "cmap (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.CMap"]], "dihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Dihedral"]], "improperdihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral"]], "mdanalysis.core.topologyobjects": [[91, "module-MDAnalysis.core.topologyobjects"]], "topologydict (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict"]], "topologygroup (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup"]], "topologyobject (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject"]], "ureybradley (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley"]], "angle() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.angle"]], "angles() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.angles"]], "atom1 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom1"]], "atom2 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom2"]], "atom3 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom3"]], "atom4 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom4"]], "atomgroup_intersection() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atomgroup_intersection"]], "atoms (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.atoms"]], "bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.bonds"]], "dihedral() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.dihedral"]], "dihedrals() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dihedrals"]], "distance() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.distance"]], "dump_contents() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dump_contents"]], "improper() (mdanalysis.core.topologyobjects.improperdihedral method)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral.improper"]], "indices (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.indices"]], "indices (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.indices"]], "keys() (mdanalysis.core.topologyobjects.topologydict method)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict.keys"]], "length() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.length"]], "partner() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.partner"]], "partner() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.partner"]], "selectbonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.selectBonds"]], "select_bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.select_bonds"]], "to_indices() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.to_indices"]], "topdict (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.topDict"]], "type (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.type"]], "types() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.types"]], "universe (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.universe"]], "value() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.value"]], "value() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.value"]], "value() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.value"]], "value() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.value"]], "values() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.values"]], "mdanalysis.core.universe": [[92, "module-MDAnalysis.core.universe"]], "merge() (in module mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Merge"]], "universe (class in mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Universe"]], "add_residue() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Residue"]], "add_segment() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Segment"]], "add_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_TopologyAttr"]], "add_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_angles"]], "add_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_bonds"]], "add_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_dihedrals"]], "add_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_impropers"]], "angles (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.angles"]], "atoms (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.atoms"]], "bonds (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.bonds"]], "coord (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.coord"]], "copy() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.copy"]], "del_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.del_TopologyAttr"]], "delete_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_angles"]], "delete_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_bonds"]], "delete_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_dihedrals"]], "delete_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_impropers"]], "dihedrals (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dihedrals"]], "dimensions (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dimensions"]], "empty() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.empty"]], "from_smiles() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.from_smiles"]], "impropers (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.impropers"]], "kwargs (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.kwargs"]], "load_new() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.load_new"]], "models (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.models"]], "residues (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.residues"]], "segments (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.segments"]], "select_atoms() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.select_atoms"]], "trajectory (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.trajectory"]], "transfer_to_memory() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.transfer_to_memory"]], "conversionwarning": [[94, "MDAnalysis.exceptions.ConversionWarning"]], "duplicatewarning": [[94, "MDAnalysis.exceptions.DuplicateWarning"]], "fileformatwarning": [[94, "MDAnalysis.exceptions.FileFormatWarning"]], "mdanalysis.exceptions": [[94, "module-MDAnalysis.exceptions"]], "missingdatawarning": [[94, "MDAnalysis.exceptions.MissingDataWarning"]], "nodataerror": [[94, "MDAnalysis.exceptions.NoDataError"]], "selectionerror": [[94, "MDAnalysis.exceptions.SelectionError"]], "selectionwarning": [[94, "MDAnalysis.exceptions.SelectionWarning"]], "streamwarning": [[94, "MDAnalysis.exceptions.StreamWarning"]], "atomneighborsearch (class in mdanalysis.lib.neighborsearch)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch"]], "mdanalysis.lib.neighborsearch": [[95, "module-MDAnalysis.lib.NeighborSearch"]], "search() (mdanalysis.lib.neighborsearch.atomneighborsearch method)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch.search"]], "mdanalysis.lib.c_distances": [[96, "module-MDAnalysis.lib.c_distances"]], "mdanalysis.lib.c_distances_openmp": [[97, "module-MDAnalysis.lib.c_distances_openmp"]], "mdanalysis.lib.correlations": [[98, "module-MDAnalysis.lib.correlations"]], "autocorrelation() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.autocorrelation"]], "correct_intermittency() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.correct_intermittency"]], "mdanalysis.lib.distances": [[99, "module-MDAnalysis.lib.distances"]], "apply_pbc() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.apply_PBC"]], "augment_coordinates() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.augment_coordinates"]], "calc_angles() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_angles"]], "calc_bonds() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_bonds"]], "calc_dihedrals() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_dihedrals"]], "capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.capped_distance"]], "distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.distance_array"]], "minimize_vectors() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.minimize_vectors"]], "self_capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_capped_distance"]], "self_distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_distance_array"]], "transform_rtos() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_RtoS"]], "transform_stor() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_StoR"]], "undo_augment() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.undo_augment"]], "dcdfile (class in mdanalysis.lib.formats.libdcd)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile"]], "mdanalysis.lib.formats.libdcd": [[100, "module-MDAnalysis.lib.formats.libdcd"]], "charmm_bitfield (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.charmm_bitfield"]], "close() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.close"]], "header (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.header"]], "open() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.open"]], "read() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.read"]], "readframes() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.readframes"]], "seek() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.seek"]], "tell() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.tell"]], "write() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write"]], "write_header() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write_header"]], "mdanalysis.lib.formats.libmdaxdr": [[101, "module-MDAnalysis.lib.formats.libmdaxdr"]], "trrfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile"]], "xtcfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.calc_offsets"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.calc_offsets"]], "close() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.close"]], "close() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.close"]], "offsets (mdanalysis.lib.formats.libmdaxdr.trrfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.offsets"]], "offsets (mdanalysis.lib.formats.libmdaxdr.xtcfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.offsets"]], "open() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.open"]], "open() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.open"]], "read() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read"]], "read() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read"]], "read_direct_x() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read_direct_x"]], "read_direct_xvf() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read_direct_xvf"]], "seek() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.seek"]], "seek() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.seek"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.set_offsets"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.set_offsets"]], "tell() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.tell"]], "tell() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.tell"]], "write() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.write"]], "write() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.write"]], "mdanalysis.lib.log": [[102, "module-MDAnalysis.lib.log"]], "nullhandler (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.NullHandler"]], "progressbar (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.ProgressBar"]], "clear_handlers() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.clear_handlers"]], "create() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.create"]], "emit() (mdanalysis.lib.log.nullhandler method)": [[102, "MDAnalysis.lib.log.NullHandler.emit"]], "start_logging() (in module mdanalysis)": [[102, "MDAnalysis.start_logging"]], "start_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.start_logging"]], "stop_logging() (in module mdanalysis)": [[102, "MDAnalysis.stop_logging"]], "stop_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.stop_logging"]], "mdanalysis.lib.mdamath": [[103, "module-MDAnalysis.lib.mdamath"]], "angle() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.angle"]], "box_volume() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.box_volume"]], "dihedral() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.dihedral"]], "find_fragments() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.find_fragments"]], "make_whole() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.make_whole"]], "norm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.norm"]], "normal() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.normal"]], "pdot() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pdot"]], "pnorm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pnorm"]], "sarrus_det() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.sarrus_det"]], "stp() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.stp"]], "triclinic_box() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_box"]], "triclinic_vectors() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_vectors"]], "fastns (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.FastNS"]], "mdanalysis.lib.nsgrid": [[104, "module-MDAnalysis.lib.nsgrid"]], "nsresults (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.NSResults"]], "get_pair_distances() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pair_distances"]], "get_pairs() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pairs"]], "search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.search"]], "self_search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.self_search"]], "bz2picklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BZ2Picklable"]], "bufferiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BufferIOPicklable"]], "fileiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.FileIOPicklable"]], "gzippicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.GzipPicklable"]], "mdanalysis.lib.picklable_file_io": [[105, "module-MDAnalysis.lib.picklable_file_io"]], "textiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.TextIOPicklable"]], "bz2_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.bz2_pickle_open"]], "gzip_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.gzip_pickle_open"]], "pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.pickle_open"]], "mdanalysis.lib.pkdtree": [[106, "module-MDAnalysis.lib.pkdtree"]], "periodickdtree (class in mdanalysis.lib.pkdtree)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree"]], "get_indices() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.get_indices"]], "pbc (mdanalysis.lib.pkdtree.periodickdtree property)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.pbc"]], "search() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search"]], "search_pairs() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_pairs"]], "search_tree() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_tree"]], "set_coords() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.set_coords"]], "calcrmsdrotationalmatrix() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix"]], "fastcalcrmsdandrotation() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.FastCalcRMSDAndRotation"]], "innerproduct() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.InnerProduct"]], "mdanalysis.lib.qcprot": [[107, "module-MDAnalysis.lib.qcprot"]], "arcball (class in mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.Arcball"]], "mdanalysis.lib.transformations": [[108, "module-MDAnalysis.lib.transformations"]], "arcball_nearest_axis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.arcball_nearest_axis"]], "compose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.compose_matrix"]], "concatenate_matrices() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.concatenate_matrices"]], "decompose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.decompose_matrix"]], "down() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.down"]], "drag() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.drag"]], "euler_from_quaternion() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.euler_from_quaternion"]], "getconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.getconstrain"]], "matrix() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.matrix"]], "next() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.next"]], "place() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.place"]], "projection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.projection_from_matrix"]], "quaternion_imag() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_imag"]], "quaternion_real() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_real"]], "reflection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.reflection_from_matrix"]], "rotation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotation_from_matrix"]], "rotaxis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotaxis"]], "scale_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.scale_from_matrix"]], "setaxes() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setaxes"]], "setconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setconstrain"]], "shear_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.shear_from_matrix"]], "translation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.translation_from_matrix"]], "$home": [[109, "index-1"]], "fortranreader (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRANReader"]], "fortran_format_regex (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRAN_format_regex"]], "mdanalysis.lib.util": [[109, "module-MDAnalysis.lib.util"]], "namedstream (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.NamedStream"]], "namespace (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.Namespace"]], "_deprecate (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util._Deprecate"]], "anyopen() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.anyopen"]], "asiterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.asiterable"]], "blocks_of() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.blocks_of"]], "cached() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.cached"]], "check_atomgroup_not_empty() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_atomgroup_not_empty"]], "check_box() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_box"]], "check_compressed_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_compressed_format"]], "check_coords() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_coords"]], "close() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.close"]], "closed (mdanalysis.lib.util.namedstream property)": [[109, "MDAnalysis.lib.util.NamedStream.closed"]], "conv_float() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.conv_float"]], "convert_aa_code() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.convert_aa_code"]], "dedent_docstring() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.dedent_docstring"]], "deprecate() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.deprecate"]], "filename() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.filename"]], "fileno() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.fileno"]], "fixedwidth_bins() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.fixedwidth_bins"]], "flatten_dict() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.flatten_dict"]], "flush() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.flush"]], "format_from_filename_extension() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.format_from_filename_extension"]], "get_ext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_ext"]], "get_weights() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_weights"]], "greedy_splitext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.greedy_splitext"]], "group_same_or_consecutive_integers() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.group_same_or_consecutive_integers"]], "guess_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.guess_format"]], "hasmethod() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.hasmethod"]], "isstream() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.isstream"]], "iterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.iterable"]], "ltruncate_int() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.ltruncate_int"]], "number_of_matches() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.number_of_matches"]], "openany() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.openany"]], "parse_fortran_format() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.parse_FORTRAN_format"]], "parse_residue() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.parse_residue"]], "read() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.read"]], "readable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readable"]], "readline() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readline"]], "realpath() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.realpath"]], "reset() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.reset"]], "seek() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seek"]], "seekable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seekable"]], "static_variables() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.static_variables"]], "store_init_arguments() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.store_init_arguments"]], "tell() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.tell"]], "truncate() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.truncate"]], "unique_int_1d() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_int_1d"]], "unique_rows() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_rows"]], "warn_if_not_unique() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.warn_if_not_unique"]], "which() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.which"]], "writable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.writable"]], "mdanalysis.lib": [[110, "module-MDAnalysis.lib"]], "duecredit_enable": [[112, "index-0"]], "mdanalysis.selections.base": [[114, "module-MDAnalysis.selections.base"]], "selectionwriterbase (class in mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.SelectionWriterBase"]], "__init__() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.__init__"]], "_translate() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._translate"]], "_write_head() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_head"]], "_write_tail() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_tail"]], "comment() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.comment"]], "join() (in module mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.join"]], "write() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.write"]], "mdanalysis.selections.charmm": [[115, "module-MDAnalysis.selections.charmm"]], "selectionwriter (class in mdanalysis.selections.charmm)": [[115, "MDAnalysis.selections.charmm.SelectionWriter"]], "close() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.close"]], "comment() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.continuation"]], "ext (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.ext"]], "format (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.format"]], "write() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write_preamble"]], "mdanalysis.selections.gromacs": [[116, "module-MDAnalysis.selections.gromacs"]], "selectionwriter (class in mdanalysis.selections.gromacs)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter"]], "close() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.close"]], "comment() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.continuation"]], "ext (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.ext"]], "format (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.format"]], "write() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write_preamble"]], "mdanalysis.selections.jmol": [[117, "module-MDAnalysis.selections.jmol"]], "selectionwriter (class in mdanalysis.selections.jmol)": [[117, "MDAnalysis.selections.jmol.SelectionWriter"]], "close() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.close"]], "comment() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.continuation"]], "default_numterms (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.default_numterms"]], "ext (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.ext"]], "format (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.format"]], "write() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write_preamble"]], "mdanalysis.selections.pymol": [[118, "module-MDAnalysis.selections.pymol"]], "selectionwriter (class in mdanalysis.selections.pymol)": [[118, "MDAnalysis.selections.pymol.SelectionWriter"]], "close() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.close"]], "comment() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.continuation"]], "ext (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.ext"]], "format (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.format"]], "write() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write_preamble"]], "mdanalysis.selections.vmd": [[119, "module-MDAnalysis.selections.vmd"]], "selectionwriter (class in mdanalysis.selections.vmd)": [[119, "MDAnalysis.selections.vmd.SelectionWriter"]], "close() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.close"]], "comment() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.continuation"]], "ext (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.ext"]], "format (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.format"]], "write() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write_preamble"]], "get_writer() (in module mdanalysis.selections)": [[120, "MDAnalysis.selections.get_writer"]], "crdparser (class in mdanalysis.topology.crdparser)": [[122, "MDAnalysis.topology.CRDParser.CRDParser"]], "mdanalysis.topology.crdparser": [[122, "module-MDAnalysis.topology.CRDParser"]], "close() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.parse"]], "units (mdanalysis.topology.crdparser.crdparser attribute)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.units"]], "mdanalysis.topology.dlpolyparser": [[123, "module-MDAnalysis.topology.DLPolyParser"]], "dmsparser (class in mdanalysis.topology.dmsparser)": [[124, "MDAnalysis.topology.DMSParser.DMSParser"]], "mdanalysis.topology.dmsparser": [[124, "module-MDAnalysis.topology.DMSParser"]], "close() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.parse"]], "units (mdanalysis.topology.dmsparser.dmsparser attribute)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.units"]], "extendedpdbparser (class in mdanalysis.topology.extendedpdbparser)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser"]], "mdanalysis.topology.extendedpdbparser": [[125, "module-MDAnalysis.topology.ExtendedPDBParser"]], "close() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.parse"]], "units (mdanalysis.topology.extendedpdbparser.extendedpdbparser attribute)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.units"]], "fhiaimsparser (class in mdanalysis.topology.fhiaimsparser)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser"]], "mdanalysis.topology.fhiaimsparser": [[126, "module-MDAnalysis.topology.FHIAIMSParser"]], "close() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.parse"]], "units (mdanalysis.topology.fhiaimsparser.fhiaimsparser attribute)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.units"]], "gmsparser (class in mdanalysis.topology.gmsparser)": [[127, "MDAnalysis.topology.GMSParser.GMSParser"]], "mdanalysis.topology.gmsparser": [[127, "module-MDAnalysis.topology.GMSParser"]], "close() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.parse"]], "units (mdanalysis.topology.gmsparser.gmsparser attribute)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.units"]], "groparser (class in mdanalysis.topology.groparser)": [[128, "MDAnalysis.topology.GROParser.GROParser"]], "mdanalysis.topology.groparser": [[128, "module-MDAnalysis.topology.GROParser"]], "close() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.close"]], "convert_forces_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.parse"]], "units (mdanalysis.topology.groparser.groparser attribute)": [[128, "MDAnalysis.topology.GROParser.GROParser.units"]], "gsdparser (class in mdanalysis.topology.gsdparser)": [[129, "MDAnalysis.topology.GSDParser.GSDParser"]], "mdanalysis.topology.gsdparser": [[129, "module-MDAnalysis.topology.GSDParser"]], "close() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.parse"]], "units (mdanalysis.topology.gsdparser.gsdparser attribute)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.units"]], "hoomdxmlparser (class in mdanalysis.topology.hoomdxmlparser)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser"]], "mdanalysis.topology.hoomdxmlparser": [[130, "module-MDAnalysis.topology.HoomdXMLParser"]], "close() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.close"]], "convert_forces_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.parse"]], "units (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser attribute)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.units"]], "itpparser (class in mdanalysis.topology.itpparser)": [[131, "MDAnalysis.topology.ITPParser.ITPParser"]], "mdanalysis.topology.itpparser": [[131, "module-MDAnalysis.topology.ITPParser"]], "close() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.parse"]], "units (mdanalysis.topology.itpparser.itpparser attribute)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.units"]], "dataparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser"]], "lammpsdumpparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.LammpsDumpParser"]], "mdanalysis.topology.lammpsparser": [[132, "module-MDAnalysis.topology.LAMMPSParser"]], "close() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.close"]], "convert_forces_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_to_native"]], "grab_datafile() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.grab_datafile"]], "parse() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.parse"]], "read_data_timestep() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.read_DATA_timestep"]], "units (mdanalysis.topology.lammpsparser.dataparser attribute)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.units"]], "mdanalysis.topology.mmtfparser": [[133, "module-MDAnalysis.topology.MMTFParser"]], "mmtfparser (class in mdanalysis.topology.mmtfparser)": [[133, "MDAnalysis.topology.MMTFParser.MMTFParser"]], "mdanalysis.topology.mol2parser": [[134, "module-MDAnalysis.topology.MOL2Parser"]], "mol2parser (class in mdanalysis.topology.mol2parser)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser"]], "close() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.close"]], "convert_forces_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.parse"]], "units (mdanalysis.topology.mol2parser.mol2parser attribute)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.units"]], "mdanalysis.topology.minimalparser": [[135, "module-MDAnalysis.topology.MinimalParser"]], "minimalparser (class in mdanalysis.topology.minimalparser)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser"]], "close() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.close"]], "convert_forces_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.parse"]], "units (mdanalysis.topology.minimalparser.minimalparser attribute)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.units"]], "mdanalysis.topology.pdbparser": [[136, "module-MDAnalysis.topology.PDBParser"]], "pdbparser (class in mdanalysis.topology.pdbparser)": [[136, "MDAnalysis.topology.PDBParser.PDBParser"]], "close() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.parse"]], "units (mdanalysis.topology.pdbparser.pdbparser attribute)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.units"]], "mdanalysis.topology.pdbqtparser": [[137, "module-MDAnalysis.topology.PDBQTParser"]], "pdbqtparser (class in mdanalysis.topology.pdbqtparser)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser"]], "close() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.parse"]], "units (mdanalysis.topology.pdbqtparser.pdbqtparser attribute)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.units"]], "mdanalysis.topology.pqrparser": [[138, "module-MDAnalysis.topology.PQRParser"]], "pqrparser (class in mdanalysis.topology.pqrparser)": [[138, "MDAnalysis.topology.PQRParser.PQRParser"]], "close() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_to_native"]], "guess_flavour() (mdanalysis.topology.pqrparser.pqrparser static method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.guess_flavour"]], "parse() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.parse"]], "units (mdanalysis.topology.pqrparser.pqrparser attribute)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.units"]], "mdanalysis.topology.psfparser": [[139, "module-MDAnalysis.topology.PSFParser"]], "psfparser (class in mdanalysis.topology.psfparser)": [[139, "MDAnalysis.topology.PSFParser.PSFParser"]], "close() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.close"]], "convert_forces_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.parse"]], "units (mdanalysis.topology.psfparser.psfparser attribute)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.units"]], "mdanalysis.topology.topparser": [[140, "module-MDAnalysis.topology.TOPParser"]], "topparser (class in mdanalysis.topology.topparser)": [[140, "MDAnalysis.topology.TOPParser.TOPParser"]], "close() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse"]], "parse_bonded() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_bonded"]], "parse_charges() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_charges"]], "parse_chunks() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_chunks"]], "parse_dihedrals() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_dihedrals"]], "parse_elements() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_elements"]], "parse_masses() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_masses"]], "parse_names() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_names"]], "parse_residx() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_residx"]], "parse_resnames() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_resnames"]], "parse_type_indices() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_type_indices"]], "parse_types() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_types"]], "parsesection_mapper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parsesection_mapper"]], "skipper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.skipper"]], "units (mdanalysis.topology.topparser.topparser attribute)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.units"]], "mdanalysis.topology.tprparser": [[141, "module-MDAnalysis.topology.TPRParser"]], "tprparser (class in mdanalysis.topology.tprparser)": [[141, "MDAnalysis.topology.TPRParser.TPRParser"]], "close() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.parse"]], "units (mdanalysis.topology.tprparser.tprparser attribute)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.units"]], "mdanalysis.topology.txyzparser": [[142, "module-MDAnalysis.topology.TXYZParser"]], "txyzparser (class in mdanalysis.topology.txyzparser)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser"]], "close() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.close"]], "convert_forces_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.parse"]], "units (mdanalysis.topology.txyzparser.txyzparser attribute)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.units"]], "mdanalysis.topology.xyzparser": [[143, "module-MDAnalysis.topology.XYZParser"]], "xyzparser (class in mdanalysis.topology.xyzparser)": [[143, "MDAnalysis.topology.XYZParser.XYZParser"]], "parse() (mdanalysis.topology.xyzparser.xyzparser method)": [[143, "MDAnalysis.topology.XYZParser.XYZParser.parse"]], "mdanalysis.topology.base": [[144, "module-MDAnalysis.topology.base"]], "topologyreaderbase (class in mdanalysis.topology.base)": [[144, "MDAnalysis.topology.base.TopologyReaderBase"]], "close() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.close"]], "convert_forces_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_to_native"]], "units (mdanalysis.topology.base.topologyreaderbase attribute)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.units"]], "mdanalysis.topology.core": [[145, "module-MDAnalysis.topology.core"]], "mdanalysis.topology.guessers": [[146, "module-MDAnalysis.topology.guessers"]], "get_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.get_atom_mass"]], "guess_angles() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_angles"]], "guess_aromaticities() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_aromaticities"]], "guess_atom_charge() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_charge"]], "guess_atom_element() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_element"]], "guess_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_mass"]], "guess_atom_type() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_type"]], "guess_bonds() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_bonds"]], "guess_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_dihedrals"]], "guess_gasteiger_charges() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_gasteiger_charges"]], "guess_improper_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_improper_dihedrals"]], "guess_masses() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_masses"]], "guess_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_types"]], "validate_atom_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.validate_atom_types"]], "mdanalysis.topology.__init__": [[147, "module-MDAnalysis.topology.__init__"]], "mdanalysis.topology.tables": [[148, "module-MDAnalysis.topology.tables"]], "table_atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_ATOMELEMENTS"]], "table_masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_MASSES"]], "table_vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_VDWRADII"]], "atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.atomelements"]], "kv2dict() (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.kv2dict"]], "masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.masses"]], "vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.vdwradii"]], "atom (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atom"]], "atomkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind"]], "atoms (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atoms"]], "box (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Box"]], "f_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGLES"]], "f_angres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRES"]], "f_angresz (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRESZ"]], "f_anharm_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANHARM_POL"]], "f_bham (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM"]], "f_bham_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM_LR"]], "f_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BONDS"]], "f_cbtdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CBTDIHS"]], "f_cmap (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CMAP"]], "f_com_pull (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COM_PULL"]], "f_connbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONNBONDS"]], "f_constr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTR"]], "f_constrnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTRNC"]], "f_coul14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL14"]], "f_coul_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_LR"]], "f_coul_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_RECIP"]], "f_coul_sr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_SR"]], "f_cross_bond_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_ANGLES"]], "f_cross_bond_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_BONDS"]], "f_cubicbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CUBICBONDS"]], "f_densityfitting (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DENSITYFITTING"]], "f_dhdl_con (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DHDL_CON"]], "f_dihres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRES"]], "f_dihresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRESVIOL"]], "f_dispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISPCORR"]], "f_disres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRES"]], "f_disresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRESVIOL"]], "f_dkdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DKDL"]], "f_dpd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DPD"]], "f_dvdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL"]], "f_dvdl_bonded (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_BONDED"]], "f_dvdl_coul (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_COUL"]], "f_dvdl_restraint (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_RESTRAINT"]], "f_dvdl_temperature (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_TEMPERATURE"]], "f_dvdl_vdw (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_VDW"]], "f_econserved (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ECONSERVED"]], "f_ekin (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EKIN"]], "f_epot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EPOT"]], "f_eqm (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EQM"]], "f_etot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ETOT"]], "f_fbposres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FBPOSRES"]], "f_fenebonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FENEBONDS"]], "f_fourdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FOURDIHS"]], "f_g96angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96ANGLES"]], "f_g96bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96BONDS"]], "f_gb12 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB12"]], "f_gb13 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB13"]], "f_gb14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB14"]], "f_gbpol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GBPOL"]], "f_harmonic (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_HARMONIC"]], "f_idihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_IDIHS"]], "f_linear_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LINEAR_ANGLES"]], "f_lj (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ"]], "f_lj14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ14"]], "f_ljc14_q (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC14_Q"]], "f_ljc_pairs_nb (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC_PAIRS_NB"]], "f_lj_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_LR"]], "f_lj_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_RECIP"]], "f_morse (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_MORSE"]], "f_npsolvation (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NPSOLVATION"]], "f_nre (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NRE"]], "f_orires (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRES"]], "f_oriresdev (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRESDEV"]], "f_pdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDIHS"]], "f_pdispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDISPCORR"]], "f_pidihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PIDIHS"]], "f_polarization (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POLARIZATION"]], "f_posres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POSRES"]], "f_pres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PRES"]], "f_quartic_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_QUARTIC_ANGLES"]], "f_rbdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RBDIHS"]], "f_restrangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRANGLES"]], "f_restrbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRBONDS"]], "f_restrdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRDIHS"]], "f_rf_excl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RF_EXCL"]], "f_settle (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_SETTLE"]], "f_tabangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABANGLES"]], "f_tabbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDS"]], "f_tabbondsnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDSNC"]], "f_tabdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABDIHS"]], "f_temp (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TEMP"]], "f_thole_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_THOLE_POL"]], "f_urey_bradley (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_UREY_BRADLEY"]], "f_vsite1 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE1"]], "f_vsite2 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2"]], "f_vsite2fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2FD"]], "f_vsite3 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3"]], "f_vsite3fad (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FAD"]], "f_vsite3fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FD"]], "f_vsite3out (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3OUT"]], "f_vsite4fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FD"]], "f_vsite4fdn (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FDN"]], "f_vsiten (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITEN"]], "f_vtemp_nolongerused (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VTEMP_NOLONGERUSED"]], "f_water_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_WATER_POL"]], "ilist (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Ilist"]], "interactionkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind"]], "mdanalysis.topology.tpr": [[149, "module-MDAnalysis.topology.tpr"]], "mdanalysis.topology.tpr.obj": [[149, "module-MDAnalysis.topology.tpr.obj"]], "mdanalysis.topology.tpr.setting": [[149, "module-MDAnalysis.topology.tpr.setting"]], "mdanalysis.topology.tpr.utils": [[149, "module-MDAnalysis.topology.tpr.utils"]], "molblock (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Molblock"]], "moleculekind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind"]], "mtop (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Mtop"]], "params (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Params"]], "supported_versions (in module mdanalysis.topology.tpr)": [[149, "MDAnalysis.topology.tpr.SUPPORTED_VERSIONS"]], "supported_versions (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.SUPPORTED_VERSIONS"]], "tpxunpacker (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker"]], "tpxunpacker2020 (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020"]], "tpxheader (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader"]], "atnr (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.atnr"]], "atomnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atomnames"]], "atomnumber (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.atomnumber"]], "atoms (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atoms"]], "bbox (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bBox"]], "bf (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bF"]], "bir (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bIr"]], "btop (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bTop"]], "bv (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bV"]], "bx (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bX"]], "define_unpack_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.define_unpack_real"]], "do_atom() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atom"]], "do_atoms() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atoms"]], "do_block() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_block"]], "do_blocka() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_blocka"]], "do_ffparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ffparams"]], "do_harm() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_harm"]], "do_ilists() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ilists"]], "do_iparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_iparams"]], "do_molblock() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_molblock"]], "do_moltype() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_moltype"]], "do_mtop() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_mtop"]], "do_resinfo() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_resinfo"]], "do_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_rvec"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.do_string"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.do_string"]], "do_symstr() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symstr"]], "do_symtab() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symtab"]], "element_symbol (mdanalysis.topology.tpr.obj.atomkind property)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind.element_symbol"]], "extract_box_info() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.extract_box_info"]], "fep_state (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fep_state"]], "fgen (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fgen"]], "fileversion_err() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.fileVersion_err"]], "file_tag (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.file_tag"]], "from_unpacker() (mdanalysis.topology.tpr.utils.tpxunpacker2020 class method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.from_unpacker"]], "ftupd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.ftupd"]], "fudgeqq (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.fudgeQQ"]], "functype (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.functype"]], "fver (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fver"]], "iatoms (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.iatoms"]], "ik (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.ik"]], "interaction_types (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.interaction_types"]], "lamb (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.lamb"]], "m (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.m"]], "mb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.mB"]], "molb_natoms_mol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_natoms_mol"]], "molb_nmol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nmol"]], "molb_nposres_xa (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xA"]], "molb_nposres_xb (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xB"]], "molb_type (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_type"]], "moltypes (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.moltypes"]], "natoms (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.natoms"]], "ndo_int() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_int"]], "ndo_ivec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_ivec"]], "ndo_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_real"]], "ndo_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_rvec"]], "ngtc (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ngtc"]], "nmolblock (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmolblock"]], "nmoltype (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmoltype"]], "nr (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nr"]], "nr (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.nr"]], "nres (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nres"]], "ntypes (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.ntypes"]], "number_of_atoms() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_atoms"]], "number_of_residues() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_residues"]], "precision (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.precision"]], "process() (mdanalysis.topology.tpr.obj.interactionkind method)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind.process"]], "ptype (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.ptype"]], "q (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.q"]], "qb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.qB"]], "read_tpxheader() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.read_tpxheader"]], "rel (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.rel"]], "remap_angles() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_angles"]], "remap_bonds() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_bonds"]], "remap_dihe() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_dihe"]], "remap_impr() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_impr"]], "reppow (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.reppow"]], "resind (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.resind"]], "resnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.resnames"]], "size (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.size"]], "sizeoftprbody (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.sizeOfTprBody"]], "tp (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.tp"]], "type (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.type"]], "typeb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.typeB"]], "typeb (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.typeB"]], "unpack_fstring() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_fstring"]], "unpack_int64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_int64"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uchar"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_uchar"]], "unpack_uint64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uint64"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_ushort"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_ushort"]], "v (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.v"]], "ver_str (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ver_str"]], "mdanalysis.transformations": [[151, "module-MDAnalysis.transformations"]], "mdanalysis.transformations.base": [[152, "module-MDAnalysis.transformations.base"]], "omp_num_threads": [[152, "index-0"]], "transformationbase (class in mdanalysis.transformations.base)": [[152, "MDAnalysis.transformations.base.TransformationBase"]], "mdanalysis.transformations.boxdimensions": [[153, "module-MDAnalysis.transformations.boxdimensions"]], "set_dimensions (class in mdanalysis.transformations.boxdimensions)": [[153, "MDAnalysis.transformations.boxdimensions.set_dimensions"]], "mdanalysis.transformations.fit": [[154, "module-MDAnalysis.transformations.fit"]], "fit_rot_trans (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_rot_trans"]], "fit_translation (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_translation"]], "mdanalysis.transformations.nojump": [[155, "module-MDAnalysis.transformations.nojump"]], "nojump (class in mdanalysis.transformations.nojump)": [[155, "MDAnalysis.transformations.nojump.NoJump"]], "mdanalysis.transformations.positionaveraging": [[156, "module-MDAnalysis.transformations.positionaveraging"]], "positionaverager (class in mdanalysis.transformations.positionaveraging)": [[156, "MDAnalysis.transformations.positionaveraging.PositionAverager"]], "mdanalysis.transformations.rotate": [[157, "module-MDAnalysis.transformations.rotate"]], "rotateby (class in mdanalysis.transformations.rotate)": [[157, "MDAnalysis.transformations.rotate.rotateby"]], "mdanalysis.transformations.translate": [[158, "module-MDAnalysis.transformations.translate"]], "center_in_box (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.center_in_box"]], "translate (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.translate"]], "mdanalysis.transformations.wrap": [[159, "module-MDAnalysis.transformations.wrap"]], "unwrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.unwrap"]], "wrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.wrap"]], "mdanalysis_base_units (in module mdanalysis.units)": [[160, "MDAnalysis.units.MDANALYSIS_BASE_UNITS"]], "mdanalysis.units": [[160, "module-MDAnalysis.units"]], "chargeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.chargeUnit_factor"]], "constants (in module mdanalysis.units)": [[160, "MDAnalysis.units.constants"]], "conversion_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.conversion_factor"]], "convert() (in module mdanalysis.units)": [[160, "MDAnalysis.units.convert"]], "densityunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.densityUnit_factor"]], "forceunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.forceUnit_factor"]], "get_conversion_factor() (in module mdanalysis.units)": [[160, "MDAnalysis.units.get_conversion_factor"]], "lengthunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.lengthUnit_factor"]], "speedunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.speedUnit_factor"]], "timeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.timeUnit_factor"]], "unit_types (in module mdanalysis.units)": [[160, "MDAnalysis.units.unit_types"]], "water (in module mdanalysis.units)": [[160, "MDAnalysis.units.water"]], "mdanalysis.version": [[161, "module-MDAnalysis.version"]], "__version__ (in module mdanalysis.version)": [[161, "MDAnalysis.version.__version__"]], "mdanalysis.visualization.streamlines": [[162, "module-MDAnalysis.visualization.streamlines"]], "generate_streamlines() (in module mdanalysis.visualization.streamlines)": [[162, "MDAnalysis.visualization.streamlines.generate_streamlines"]], "mdanalysis.visualization.streamlines_3d": [[163, "module-MDAnalysis.visualization.streamlines_3D"]], "generate_streamlines_3d() (in module mdanalysis.visualization.streamlines_3d)": [[163, "MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["documentation_pages/analysis/align", "documentation_pages/analysis/atomicdistances", "documentation_pages/analysis/base", "documentation_pages/analysis/bat", "documentation_pages/analysis/contacts", "documentation_pages/analysis/data", "documentation_pages/analysis/density", "documentation_pages/analysis/dielectric", "documentation_pages/analysis/diffusionmap", "documentation_pages/analysis/dihedrals", "documentation_pages/analysis/distances", "documentation_pages/analysis/encore", "documentation_pages/analysis/encore/bootstrap", "documentation_pages/analysis/encore/clustering", "documentation_pages/analysis/encore/confdistmatrix", "documentation_pages/analysis/encore/covariance", "documentation_pages/analysis/encore/dimensionality_reduction", "documentation_pages/analysis/encore/similarity", "documentation_pages/analysis/encore/utils", "documentation_pages/analysis/gnm", "documentation_pages/analysis/hbond_autocorrel", "documentation_pages/analysis/hbond_autocorrel_deprecated", "documentation_pages/analysis/helix_analysis", "documentation_pages/analysis/hole2", "documentation_pages/analysis/hydrogenbonds", "documentation_pages/analysis/leaflet", "documentation_pages/analysis/legacy/x3dna", "documentation_pages/analysis/legacy_modules", "documentation_pages/analysis/lineardensity", "documentation_pages/analysis/msd", "documentation_pages/analysis/nucleicacids", "documentation_pages/analysis/nuclinfo", "documentation_pages/analysis/pca", "documentation_pages/analysis/polymer", "documentation_pages/analysis/psa", "documentation_pages/analysis/rdf", "documentation_pages/analysis/rms", "documentation_pages/analysis/waterdynamics", "documentation_pages/analysis/wbridge_analysis", "documentation_pages/analysis_modules", "documentation_pages/auxiliary/EDR", "documentation_pages/auxiliary/XVG", "documentation_pages/auxiliary/base", "documentation_pages/auxiliary/core", "documentation_pages/auxiliary/init", "documentation_pages/auxiliary_modules", "documentation_pages/converters", "documentation_pages/converters/OpenMM", "documentation_pages/converters/ParmEd", "documentation_pages/converters/RDKit", "documentation_pages/coordinates/CRD", "documentation_pages/coordinates/DCD", "documentation_pages/coordinates/DLPoly", "documentation_pages/coordinates/DMS", "documentation_pages/coordinates/FHIAIMS", "documentation_pages/coordinates/GMS", "documentation_pages/coordinates/GRO", "documentation_pages/coordinates/GSD", "documentation_pages/coordinates/H5MD", "documentation_pages/coordinates/INPCRD", "documentation_pages/coordinates/LAMMPS", "documentation_pages/coordinates/MMTF", "documentation_pages/coordinates/MOL2", "documentation_pages/coordinates/NAMDBIN", "documentation_pages/coordinates/PDB", "documentation_pages/coordinates/PDBQT", "documentation_pages/coordinates/PQR", "documentation_pages/coordinates/TNG", "documentation_pages/coordinates/TRJ", "documentation_pages/coordinates/TRR", "documentation_pages/coordinates/TRZ", "documentation_pages/coordinates/TXYZ", "documentation_pages/coordinates/XDR", "documentation_pages/coordinates/XTC", "documentation_pages/coordinates/XYZ", "documentation_pages/coordinates/base", "documentation_pages/coordinates/chain", "documentation_pages/coordinates/chemfiles", "documentation_pages/coordinates/core", "documentation_pages/coordinates/init", "documentation_pages/coordinates/memory", "documentation_pages/coordinates/null", "documentation_pages/coordinates/pickle_readers", "documentation_pages/coordinates/timestep", "documentation_pages/coordinates_modules", "documentation_pages/core/accessors", "documentation_pages/core/groups", "documentation_pages/core/init", "documentation_pages/core/selection", "documentation_pages/core/topology", "documentation_pages/core/topologyattrs", "documentation_pages/core/topologyobjects", "documentation_pages/core/universe", "documentation_pages/core_modules", "documentation_pages/exceptions", "documentation_pages/lib/NeighborSearch", "documentation_pages/lib/c_distances", "documentation_pages/lib/c_distances_openmp", "documentation_pages/lib/correlations", "documentation_pages/lib/distances", "documentation_pages/lib/formats/libdcd", "documentation_pages/lib/formats/libmdaxdr", "documentation_pages/lib/log", "documentation_pages/lib/mdamath", "documentation_pages/lib/nsgrid", "documentation_pages/lib/picklable_file_io", "documentation_pages/lib/pkdtree", "documentation_pages/lib/qcprot", "documentation_pages/lib/transformations", "documentation_pages/lib/util", "documentation_pages/lib_modules", "documentation_pages/overview", "documentation_pages/references", "documentation_pages/selections", "documentation_pages/selections/base", "documentation_pages/selections/charmm", "documentation_pages/selections/gromacs", "documentation_pages/selections/jmol", "documentation_pages/selections/pymol", "documentation_pages/selections/vmd", "documentation_pages/selections_modules", "documentation_pages/topology", "documentation_pages/topology/CRDParser", "documentation_pages/topology/DLPolyParser", "documentation_pages/topology/DMSParser", "documentation_pages/topology/ExtendedPDBParser", "documentation_pages/topology/FHIAIMSParser", "documentation_pages/topology/GMSParser", "documentation_pages/topology/GROParser", "documentation_pages/topology/GSDParser", "documentation_pages/topology/HoomdXMLParser", "documentation_pages/topology/ITPParser", "documentation_pages/topology/LAMMPSParser", "documentation_pages/topology/MMTFParser", "documentation_pages/topology/MOL2Parser", "documentation_pages/topology/MinimalParser", "documentation_pages/topology/PDBParser", "documentation_pages/topology/PDBQTParser", "documentation_pages/topology/PQRParser", "documentation_pages/topology/PSFParser", "documentation_pages/topology/TOPParser", "documentation_pages/topology/TPRParser", "documentation_pages/topology/TXYZParser", "documentation_pages/topology/XYZParser", "documentation_pages/topology/base", "documentation_pages/topology/core", "documentation_pages/topology/guessers", "documentation_pages/topology/init", "documentation_pages/topology/tables", "documentation_pages/topology/tpr_util", "documentation_pages/topology_modules", "documentation_pages/trajectory_transformations", "documentation_pages/transformations/base", "documentation_pages/transformations/boxdimensions", "documentation_pages/transformations/fit", "documentation_pages/transformations/nojump", "documentation_pages/transformations/positionaveraging", "documentation_pages/transformations/rotate", "documentation_pages/transformations/translate", "documentation_pages/transformations/wrap", "documentation_pages/units", "documentation_pages/version", "documentation_pages/visualization/streamlines", "documentation_pages/visualization/streamlines_3D", "documentation_pages/visualization_modules", "index"], "filenames": ["documentation_pages/analysis/align.rst", "documentation_pages/analysis/atomicdistances.rst", "documentation_pages/analysis/base.rst", "documentation_pages/analysis/bat.rst", "documentation_pages/analysis/contacts.rst", "documentation_pages/analysis/data.rst", "documentation_pages/analysis/density.rst", "documentation_pages/analysis/dielectric.rst", "documentation_pages/analysis/diffusionmap.rst", "documentation_pages/analysis/dihedrals.rst", "documentation_pages/analysis/distances.rst", "documentation_pages/analysis/encore.rst", "documentation_pages/analysis/encore/bootstrap.rst", "documentation_pages/analysis/encore/clustering.rst", "documentation_pages/analysis/encore/confdistmatrix.rst", "documentation_pages/analysis/encore/covariance.rst", "documentation_pages/analysis/encore/dimensionality_reduction.rst", "documentation_pages/analysis/encore/similarity.rst", "documentation_pages/analysis/encore/utils.rst", "documentation_pages/analysis/gnm.rst", "documentation_pages/analysis/hbond_autocorrel.rst", "documentation_pages/analysis/hbond_autocorrel_deprecated.rst", "documentation_pages/analysis/helix_analysis.rst", "documentation_pages/analysis/hole2.rst", "documentation_pages/analysis/hydrogenbonds.rst", "documentation_pages/analysis/leaflet.rst", "documentation_pages/analysis/legacy/x3dna.rst", "documentation_pages/analysis/legacy_modules.rst", "documentation_pages/analysis/lineardensity.rst", "documentation_pages/analysis/msd.rst", "documentation_pages/analysis/nucleicacids.rst", "documentation_pages/analysis/nuclinfo.rst", "documentation_pages/analysis/pca.rst", "documentation_pages/analysis/polymer.rst", "documentation_pages/analysis/psa.rst", "documentation_pages/analysis/rdf.rst", "documentation_pages/analysis/rms.rst", "documentation_pages/analysis/waterdynamics.rst", "documentation_pages/analysis/wbridge_analysis.rst", "documentation_pages/analysis_modules.rst", "documentation_pages/auxiliary/EDR.rst", "documentation_pages/auxiliary/XVG.rst", "documentation_pages/auxiliary/base.rst", "documentation_pages/auxiliary/core.rst", "documentation_pages/auxiliary/init.rst", "documentation_pages/auxiliary_modules.rst", "documentation_pages/converters.rst", "documentation_pages/converters/OpenMM.rst", "documentation_pages/converters/ParmEd.rst", "documentation_pages/converters/RDKit.rst", "documentation_pages/coordinates/CRD.rst", "documentation_pages/coordinates/DCD.rst", "documentation_pages/coordinates/DLPoly.rst", "documentation_pages/coordinates/DMS.rst", "documentation_pages/coordinates/FHIAIMS.rst", "documentation_pages/coordinates/GMS.rst", "documentation_pages/coordinates/GRO.rst", "documentation_pages/coordinates/GSD.rst", "documentation_pages/coordinates/H5MD.rst", "documentation_pages/coordinates/INPCRD.rst", "documentation_pages/coordinates/LAMMPS.rst", "documentation_pages/coordinates/MMTF.rst", "documentation_pages/coordinates/MOL2.rst", "documentation_pages/coordinates/NAMDBIN.rst", "documentation_pages/coordinates/PDB.rst", "documentation_pages/coordinates/PDBQT.rst", "documentation_pages/coordinates/PQR.rst", "documentation_pages/coordinates/TNG.rst", "documentation_pages/coordinates/TRJ.rst", "documentation_pages/coordinates/TRR.rst", "documentation_pages/coordinates/TRZ.rst", "documentation_pages/coordinates/TXYZ.rst", "documentation_pages/coordinates/XDR.rst", "documentation_pages/coordinates/XTC.rst", "documentation_pages/coordinates/XYZ.rst", "documentation_pages/coordinates/base.rst", "documentation_pages/coordinates/chain.rst", "documentation_pages/coordinates/chemfiles.rst", "documentation_pages/coordinates/core.rst", "documentation_pages/coordinates/init.rst", "documentation_pages/coordinates/memory.rst", "documentation_pages/coordinates/null.rst", "documentation_pages/coordinates/pickle_readers.rst", "documentation_pages/coordinates/timestep.rst", "documentation_pages/coordinates_modules.rst", "documentation_pages/core/accessors.rst", "documentation_pages/core/groups.rst", "documentation_pages/core/init.rst", "documentation_pages/core/selection.rst", "documentation_pages/core/topology.rst", "documentation_pages/core/topologyattrs.rst", "documentation_pages/core/topologyobjects.rst", "documentation_pages/core/universe.rst", "documentation_pages/core_modules.rst", "documentation_pages/exceptions.rst", "documentation_pages/lib/NeighborSearch.rst", "documentation_pages/lib/c_distances.rst", "documentation_pages/lib/c_distances_openmp.rst", "documentation_pages/lib/correlations.rst", "documentation_pages/lib/distances.rst", "documentation_pages/lib/formats/libdcd.rst", "documentation_pages/lib/formats/libmdaxdr.rst", "documentation_pages/lib/log.rst", "documentation_pages/lib/mdamath.rst", "documentation_pages/lib/nsgrid.rst", "documentation_pages/lib/picklable_file_io.rst", "documentation_pages/lib/pkdtree.rst", "documentation_pages/lib/qcprot.rst", "documentation_pages/lib/transformations.rst", "documentation_pages/lib/util.rst", "documentation_pages/lib_modules.rst", "documentation_pages/overview.rst", "documentation_pages/references.rst", "documentation_pages/selections.rst", "documentation_pages/selections/base.rst", "documentation_pages/selections/charmm.rst", "documentation_pages/selections/gromacs.rst", "documentation_pages/selections/jmol.rst", "documentation_pages/selections/pymol.rst", "documentation_pages/selections/vmd.rst", "documentation_pages/selections_modules.rst", "documentation_pages/topology.rst", "documentation_pages/topology/CRDParser.rst", "documentation_pages/topology/DLPolyParser.rst", "documentation_pages/topology/DMSParser.rst", "documentation_pages/topology/ExtendedPDBParser.rst", "documentation_pages/topology/FHIAIMSParser.rst", "documentation_pages/topology/GMSParser.rst", "documentation_pages/topology/GROParser.rst", "documentation_pages/topology/GSDParser.rst", "documentation_pages/topology/HoomdXMLParser.rst", "documentation_pages/topology/ITPParser.rst", "documentation_pages/topology/LAMMPSParser.rst", "documentation_pages/topology/MMTFParser.rst", "documentation_pages/topology/MOL2Parser.rst", "documentation_pages/topology/MinimalParser.rst", "documentation_pages/topology/PDBParser.rst", "documentation_pages/topology/PDBQTParser.rst", "documentation_pages/topology/PQRParser.rst", "documentation_pages/topology/PSFParser.rst", "documentation_pages/topology/TOPParser.rst", "documentation_pages/topology/TPRParser.rst", "documentation_pages/topology/TXYZParser.rst", "documentation_pages/topology/XYZParser.rst", "documentation_pages/topology/base.rst", "documentation_pages/topology/core.rst", "documentation_pages/topology/guessers.rst", "documentation_pages/topology/init.rst", "documentation_pages/topology/tables.rst", "documentation_pages/topology/tpr_util.rst", "documentation_pages/topology_modules.rst", "documentation_pages/trajectory_transformations.rst", "documentation_pages/transformations/base.rst", "documentation_pages/transformations/boxdimensions.rst", "documentation_pages/transformations/fit.rst", "documentation_pages/transformations/nojump.rst", "documentation_pages/transformations/positionaveraging.rst", "documentation_pages/transformations/rotate.rst", "documentation_pages/transformations/translate.rst", "documentation_pages/transformations/wrap.rst", "documentation_pages/units.rst", "documentation_pages/version.rst", "documentation_pages/visualization/streamlines.rst", "documentation_pages/visualization/streamlines_3D.rst", "documentation_pages/visualization_modules.rst", "index.rst"], "titles": ["4.2.1. Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align", "4.2.4. Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances", "4.1.1. Analysis building blocks \u2014 MDAnalysis.analysis.base", "4.2.8. Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat", "4.2.2. Native contacts analysis \u2014 MDAnalysis.analysis.contacts", "4.11.1. Analysis data files", "4.8.1. Generating densities from trajectories \u2014 MDAnalysis.analysis.density", "4.8.4. Dielectric \u2014 MDAnalysis.analysis.dielectric", "4.9.1. Diffusion map \u2014 MDAnalysis.analysis.diffusionmap", "4.7.1.3. Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals", "4.2.3. Distance analysis \u2014 MDAnalysis.analysis.distances", "4.2.7. ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore", "4.2.7.1.6. bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap", "4.2.7.1.2. Clustering", "4.2.7.1.4. Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix", "4.2.7.1.5. Covariance calculation \u2014 encore.covariance", "4.2.7.1.3. Dimensionality reduction", "4.2.7.1.1. Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity", "4.2.7.1.7. Utility functions for ENCORE", "4.7.1.1. Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm", "4.3.2. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel", "4.3.4. Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)", "4.7.1.2. HELANAL \u2014 analysis of protein helices", "4.4.1. HOLE analysis \u2014 MDAnalysis.analysis.hole2", "4.3.1. Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis", "4.4.2. Leaflet identification \u2014 MDAnalysis.analysis.leaflet", "4.10.1.1.1. Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna", "4.10.1. MDAnalysis.analysis.legacy \u2014 Legacy analysis code", "4.8.2. Linear Density \u2014 MDAnalysis.analysis.lineardensity", "4.7.2.2. Mean Squared Displacement \u2014 MDAnalysis.analysis.msd", "4.5.2. Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids", "4.5.1. Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo", "4.9.2. Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca", "4.6.1. Polymer analysis \u2014 MDAnalysis.analysis.polymer", "4.2.6. Calculating path similarity \u2014 MDAnalysis.analysis.psa", "4.7.2.1. Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf", "4.2.5. Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms", "4.8.3. Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics", "4.3.3. Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis", "4. Analysis modules", "10.5. EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR", "10.4. XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG", "10.2. Auxiliary Readers \u2014 MDAnalysis.auxiliary.base", "10.3. Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core", "10.1. Auxiliary Readers \u2014 MDAnalysis.auxiliary", "10. Auxiliary modules", "7. Converter modules", "7.5. OpenMM topology parser MDAnalysis.converters.OpenMMParser", "7.1. ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser", "7.3. RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser", "6.2. CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD", "6.3. DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD", "6.4. DL_Poly format reader MDAnalysis.coordinates.DLPoly", "6.5. DESRES file format \u2014 MDAnalysis.coordinates.DMS", "6.25. FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS", "6.6. GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS", "6.8. GRO file format \u2014 MDAnalysis.coordinates.GRO", "6.7. GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD", "6.9. H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD", "6.10. INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD", "6.11. LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS", "6.12. MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF", "6.13. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "6.14. NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN", "6.15. PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB", "6.16. PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT", "6.17. PQR file format \u2014 MDAnalysis.coordinates.PQR", "6.18. TNG trajectory files \u2014 MDAnalysis.coordinates.TNG", "6.19. AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ", "6.20. TRR trajectory files \u2014 MDAnalysis.coordinates.TRR", "6.21. TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ", "6.22. TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ", "6.34. XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR", "6.23. XTC trajectory files \u2014 MDAnalysis.coordinates.XTC", "6.24. XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ", "6.30. Base classes \u2014 MDAnalysis.coordinates.base", "6.33. ChainReader \u2014 MDAnalysis.coordinates.chain", "6.27. Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles", "6.31. Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core", "6.1. Trajectory Readers and Writers \u2014 MDAnalysis.coordinates", "6.26. Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory", "6.28. Null output \u2014 MDAnalysis.coordinates.null", "6.32. Serialization of Coordinate Readers", "6.29. Timestep Class \u2014 MDAnalysis.coordinates.timestep", "6. Coordinates modules", "7.7. AtomGroup accessors \u2014 MDAnalysis.core.accessors", "11.2.2. Core objects: Containers \u2014 MDAnalysis.core.groups", "11.1. Core functions of MDAnalysis", "11.4.1. Atom selection Hierarchy \u2014 MDAnalysis.core.selection", "11.3.1. Core Topology object \u2014 MDAnalysis.core.topology", "11.3.3. Topology attribute objects \u2014 MDAnalysis.core.topologyattrs", "11.3.2. Core Topology Objects \u2014 MDAnalysis.core.topologyobjects", "11.2.1. Core object: Universe \u2014 MDAnalysis.core.universe", "11. Core modules", "16. Custom exceptions and warnings \u2014 MDAnalysis.exceptions", "13.2.3. Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch", "13.2.2.1. Distance calculation library \u2014 MDAnalysis.lib.c_distances", "13.2.2.2. Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp", "13.2.11. Correlations utilities \u2014 MDAnalysis.lib.correlations", "13.2.1. Fast distance array computation \u2014 MDAnalysis.lib.distances", "13.3.2. Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd", "13.3.1. Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr", "13.2.6. Setting up logging \u2014 MDAnalysis.lib.log", "13.2.7. Mathematical helper functions \u2014 MDAnalysis.lib.mdamath", "13.2.4. Neighbor search library \u2014 MDAnalysis.lib.nsgrid", "13.2.14. Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io", "13.2.5. PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree", "13.2.9. Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot", "13.2.8. Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations", "13.2.10. Helper functions \u2014 MDAnalysis.lib.util", "13. Library functions \u2014 MDAnalysis.lib", "1. Overview over MDAnalysis", "17. References", "3. Selection commands", "9.2.6. Base classes for the selection writers", "9.2.4. CHARMM selections", "9.2.3. Gromacs selections", "9.2.5. Jmol selections", "9.2.2. PyMOL selections", "9.2.1. VMD selections", "9. Selection exporters", "2. The topology system", "5.2. CRD topology parser", "5.3. DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser", "5.4. DESRES Molecular Structure file format topology parser", "5.16. Extended PDB topology parser", "5.5. FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser", "5.6. GAMESS Topology Parser", "5.7. GRO topology parser", "5.8. GSD topology parser", "5.9. HOOMD XML topology parser", "5.10. ITP topology parser", "5.11. LAMMPSParser", "5.13. MMTF Topology Parser", "5.14. MOL2 file format \u2014 MDAnalysis.coordinates.MOL2", "5.12. Minimal topology parser", "5.15. PDB Topology Parser", "5.17. PDBQT topology parser", "5.18. PQR topology parser", "5.19. PSF topology parser", "5.20. AMBER PRMTOP topology parser", "5.21. Gromacs portable run input TPR format parser", "5.22. TXYZ topology parser", "5.23. XYZ Topology Parser", "5.24. Base topology reader classes \u2014 MDAnalysis.topology.base", "5.25. Common functions for topology building \u2014 MDAnalysis.topology.core", "5.26. Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers", "5.1. Topology readers \u2014 MDAnalysis.topology", "5.27. MDAnalysis topology tables", "5.28. Utility functions for the TPR topology parser", "5. Topology modules", "8. Trajectory transformations (\u201con-the-fly\u201d transformations)", "8.5.1. Transformations Base Class \u2014 MDAnalysis.transformations.base", "8.6.7. Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions", "8.6.4. Fitting transformations \u2014 MDAnalysis.transformations.fit", "8.6.6. No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump", "8.6.3. Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging", "8.6.2. Trajectory rotation \u2014 MDAnalysis.transformations.rotate", "8.6.1. Trajectory translation \u2014 MDAnalysis.transformations.translate", "8.6.5. Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap", "15. Constants and unit conversion \u2014 MDAnalysis.units", "14. Version information for MDAnalysis - MDAnalysis.version", "12.1.1. Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines", "12.1.2. Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D", "12. Visualization modules", "MDAnalysis documentation"], "terms": {"author": [0, 1, 3, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 58, 80, 98, 107, 108, 162, 163], "oliv": [0, 6, 9, 23, 34, 36], "beckstein": [0, 6, 9, 23, 34, 36, 111, 112], "joshua": [0, 107], "adelman": [0, 107], "year": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 107, 162, 163], "2010": [0, 107, 108, 112, 160], "2013": [0, 4, 23, 26, 51, 112], "copyright": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163], "gnu": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 68, 80, 98, 104, 162, 163, 165], "public": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 30, 31, 32, 33, 34, 36, 37, 38, 80, 98, 104, 107, 110, 112, 161, 162, 163, 165], "licens": [0, 1, 3, 6, 7, 8, 9, 11, 19, 20, 21, 22, 23, 24, 26, 29, 31, 32, 33, 34, 36, 37, 38, 80, 98, 162, 163, 165], "v3": [0, 1, 6, 7, 11, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 37, 38, 49, 162, 163], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 120, 125, 129, 130, 131, 132, 135, 136, 138, 139, 140, 141, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "modul": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 20, 21, 22, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 88, 92, 95, 98, 102, 104, 106, 108, 111, 120, 141, 144, 145, 147, 148, 149, 151, 165], "contain": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 49, 51, 54, 55, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 84, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 125, 130, 131, 136, 139, 140, 147, 148, 149, 150, 151, 153, 162, 163, 164, 165], "target": [0, 6], "structur": [0, 2, 4, 5, 6, 8, 9, 14, 15, 19, 22, 23, 25, 30, 31, 32, 34, 35, 36, 37, 38, 46, 49, 53, 56, 62, 67, 78, 79, 83, 84, 85, 86, 91, 92, 93, 98, 100, 110, 111, 112, 113, 125, 126, 134, 136, 137, 140, 141, 142, 143, 146, 147, 148, 150, 154, 165], "refer": [0, 3, 4, 5, 6, 8, 10, 15, 19, 20, 23, 24, 26, 29, 30, 31, 32, 34, 36, 37, 38, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 83, 86, 88, 89, 90, 92, 98, 99, 103, 104, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 154, 155, 162, 164, 165], "thei": [0, 2, 4, 5, 6, 9, 12, 20, 27, 28, 29, 32, 34, 37, 38, 40, 44, 48, 49, 58, 60, 64, 67, 68, 72, 73, 75, 76, 79, 83, 84, 86, 88, 90, 91, 92, 100, 101, 109, 110, 111, 113, 130, 131, 134, 136, 145, 146, 147, 150, 151, 155], "us": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 129, 130, 131, 132, 134, 135, 136, 137, 138, 140, 141, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "fast": [0, 8, 10, 25, 29, 36, 37, 68, 72, 80, 101, 102, 110, 112, 165], "qcp": [0, 8, 36, 110, 111], "algorithm": [0, 8, 17, 22, 23, 29, 34, 36, 38, 39, 49, 58, 67, 92, 99, 103, 110, 146, 155, 165], "calcul": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 87, 90, 91, 95, 98, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 155, 156, 157, 158, 159, 160], "root": [0, 2, 3, 8, 29, 32, 34, 39, 58, 62, 65, 102, 109], "mean": [0, 2, 3, 4, 6, 8, 13, 15, 17, 18, 20, 23, 24, 26, 32, 34, 35, 37, 39, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 82, 86, 89, 91, 98, 99, 100, 101, 103, 105, 112, 113, 129, 149, 152, 153, 154, 155, 156, 157, 158, 159], "squar": [0, 2, 7, 8, 12, 17, 18, 32, 34, 37, 39, 58, 107, 112], "distanc": [0, 2, 3, 4, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20, 23, 24, 25, 32, 34, 35, 36, 37, 38, 86, 88, 91, 98, 104, 106, 109, 110, 111, 113, 146, 148, 151], "rmsd": [0, 2, 8, 14, 16, 17, 34, 39, 40, 110, 111, 112, 149, 154], "between": [0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 22, 23, 24, 29, 30, 32, 34, 35, 36, 38, 40, 42, 44, 45, 49, 51, 54, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 76, 78, 79, 80, 83, 85, 86, 90, 91, 92, 94, 99, 100, 103, 104, 105, 106, 107, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 146, 147, 150, 151, 155, 160, 162, 163], "two": [0, 1, 2, 8, 10, 11, 13, 16, 17, 23, 24, 25, 26, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 78, 80, 85, 86, 89, 90, 91, 93, 98, 99, 102, 103, 104, 107, 108, 112, 113, 135, 146, 147, 151, 155], "set": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 101, 104, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 150, 151, 152, 154, 155, 156, 157, 158, 159, 162, 163, 165], "theobald2005": [0, 8, 36, 107], "rotat": [0, 3, 6, 14, 22, 34, 36, 37, 86, 92, 103, 107, 108, 112, 151, 154], "matrix": [0, 4, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 25, 32, 34, 86, 103, 107, 108, 109, 110, 112], "r": [0, 3, 4, 8, 9, 22, 23, 29, 32, 35, 36, 37, 38, 49, 57, 58, 68, 77, 79, 86, 90, 95, 99, 100, 101, 105, 107, 108, 109, 111, 112, 113, 149], "minim": [0, 3, 25, 36, 48, 79, 99, 110, 147, 150, 154, 165], "liu2010": [0, 107], "pleas": [0, 1, 4, 6, 8, 9, 11, 14, 17, 23, 24, 25, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 49, 58, 68, 74, 75, 99, 101, 107, 109, 112, 113, 140, 141, 151, 164, 165], "cite": [0, 8, 11, 17, 29, 32, 36, 39, 112, 165], "when": [0, 2, 4, 6, 8, 10, 11, 13, 17, 23, 24, 26, 29, 32, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 99, 100, 102, 103, 104, 105, 106, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 121, 134, 136, 141, 147, 151, 152, 155, 156, 157, 159, 160, 161, 165], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 128, 129, 131, 132, 133, 135, 136, 138, 140, 141, 144, 145, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "typic": [0, 6, 9, 10, 19, 23, 25, 26, 34, 35, 39, 46, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 86, 90, 91, 92, 99, 100, 106, 107, 109, 111, 113, 120, 147, 150, 155, 156], "one": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 92, 98, 99, 100, 101, 104, 105, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 130, 131, 135, 140, 141, 146, 147, 151, 155, 156, 160, 164, 165], "select": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 78, 79, 80, 83, 86, 87, 90, 91, 92, 94, 100, 109, 110, 111, 162, 163, 165], "group": [0, 1, 3, 4, 6, 7, 8, 10, 13, 14, 17, 19, 20, 24, 25, 28, 32, 34, 35, 36, 37, 38, 49, 50, 58, 64, 66, 79, 80, 83, 88, 90, 91, 92, 93, 95, 98, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 146, 148, 151, 154, 158, 159, 162, 163], "atom": [0, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 103, 104, 106, 109, 111, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 148, 149, 150, 154, 155, 157, 158, 159, 165], "c": [0, 2, 3, 9, 13, 16, 19, 23, 30, 33, 35, 36, 37, 38, 40, 49, 51, 52, 54, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 83, 86, 88, 90, 91, 98, 99, 100, 103, 104, 107, 108, 109, 111, 112, 113, 141, 148, 149, 153, 160], "alpha": [0, 9, 10, 22, 23, 31, 36, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 113, 153], "transform": [0, 2, 6, 8, 29, 32, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 88, 92, 99, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "appli": [0, 2, 6, 8, 10, 13, 19, 23, 25, 32, 36, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 91, 92, 99, 103, 108, 109, 113, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159], "current": [0, 6, 8, 9, 13, 17, 23, 29, 32, 36, 37, 38, 40, 41, 42, 44, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 86, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 131, 140, 141, 146, 147, 149, 156], "frame": [0, 1, 2, 3, 4, 6, 8, 9, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 82, 83, 86, 92, 98, 100, 101, 102, 105, 108, 109, 111, 113, 114, 115, 116, 117, 118, 119, 150, 151, 155, 156, 162, 163], "trajectori": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 20, 24, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 42, 45, 47, 48, 49, 50, 52, 54, 56, 62, 64, 65, 66, 71, 75, 76, 78, 81, 82, 83, 84, 86, 92, 95, 102, 105, 106, 109, 110, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 152, 153, 154, 159, 160, 162, 163, 165], "obtain": [0, 2, 6, 9, 13, 16, 17, 23, 25, 32, 36, 43, 44, 58, 64, 66, 68, 70, 79, 86, 87, 90, 103, 104, 112, 134, 136, 140, 165], "alignto": 0, "aligntraj": [0, 6, 17, 34, 36], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "do": [0, 1, 4, 6, 9, 10, 14, 17, 23, 34, 36, 38, 40, 44, 58, 64, 67, 70, 74, 75, 76, 79, 81, 82, 84, 86, 102, 109, 110, 111, 134, 147, 150, 152, 154, 155], "individu": [0, 10, 11, 17, 19, 23, 26, 29, 34, 35, 39, 42, 44, 58, 76, 79, 86, 92, 109, 111, 114, 115, 116, 117, 118, 119, 120, 133, 164, 165], "respect": [0, 4, 6, 29, 34, 36, 37, 83, 86, 88, 99, 108, 154], "show": [0, 2, 4, 6, 7, 8, 9, 17, 19, 20, 23, 26, 28, 29, 32, 33, 35, 36, 37, 102, 111, 113, 134], "how": [0, 2, 8, 10, 12, 13, 16, 17, 23, 25, 32, 37, 39, 42, 49, 51, 58, 60, 62, 67, 68, 74, 75, 79, 86, 87, 100, 101, 102, 109, 111, 113, 160, 165], "step": [0, 1, 2, 3, 4, 6, 8, 9, 16, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44, 48, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 92, 98, 99, 100, 101, 147, 151, 155, 160], "manual": [0, 6, 17, 23, 68, 77, 88, 102, 111, 141, 151, 156], "explain": [0, 32, 40], "intermedi": [0, 23, 36, 102, 109, 160], "comput": [0, 1, 2, 3, 6, 7, 8, 10, 11, 13, 14, 17, 22, 24, 28, 30, 31, 32, 34, 35, 36, 37, 38, 54, 58, 67, 79, 86, 87, 90, 98, 103, 104, 107, 109, 110, 112, 155, 156, 160], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 50, 54, 55, 56, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "requir": [0, 2, 3, 8, 13, 14, 15, 17, 20, 23, 24, 29, 32, 33, 34, 36, 39, 41, 44, 49, 50, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 74, 75, 78, 79, 80, 83, 85, 86, 91, 92, 94, 98, 99, 103, 106, 109, 113, 135, 137, 140, 149, 151, 152, 164], "lib": [0, 1, 2, 3, 6, 8, 9, 10, 24, 29, 30, 32, 36, 37, 57, 58, 68, 72, 77, 82, 83, 86, 88, 91], "qcprot": [0, 8, 36, 110, 111, 112], "implement": [0, 2, 4, 6, 8, 11, 13, 15, 16, 17, 25, 28, 29, 34, 36, 42, 50, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 84, 86, 91, 98, 99, 102, 104, 105, 106, 107, 108, 109, 110, 112, 120, 141, 146, 147, 149, 150, 165], "exampl": [0, 1, 5, 6, 7, 8, 11, 13, 14, 16, 17, 19, 23, 25, 27, 28, 29, 32, 33, 34, 35, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 66, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 100, 101, 102, 103, 105, 108, 109, 110, 112, 113, 119, 120, 129, 131, 132, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 165], "file": [0, 1, 3, 6, 8, 9, 13, 14, 16, 17, 18, 20, 24, 26, 29, 32, 34, 36, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 55, 57, 68, 70, 75, 76, 77, 78, 79, 80, 81, 84, 86, 90, 92, 94, 100, 101, 102, 104, 105, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 162, 163, 165], "provid": [0, 1, 2, 4, 6, 7, 8, 9, 10, 13, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 88, 89, 92, 98, 99, 101, 103, 104, 105, 106, 109, 110, 111, 112, 113, 120, 134, 138, 147, 154, 157, 165], "part": [0, 5, 8, 13, 20, 23, 26, 29, 32, 34, 38, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 108, 111, 113, 120, 140], "test": [0, 1, 3, 4, 8, 9, 13, 16, 17, 20, 22, 23, 26, 27, 29, 32, 33, 34, 36, 38, 39, 47, 48, 49, 51, 54, 58, 60, 68, 69, 72, 73, 75, 77, 79, 80, 81, 84, 85, 86, 91, 92, 99, 109, 111, 121, 131, 140, 162, 163], "suit": [0, 1, 8, 13, 16, 17, 23, 29, 32, 39, 111], "variabl": [0, 1, 5, 8, 13, 16, 29, 32, 40, 58, 67, 68, 74, 79, 98, 109, 112, 152], "psf": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 24, 26, 32, 34, 36, 49, 64, 65, 80, 86, 92, 109, 111, 113, 121, 147, 150], "dcd": [0, 2, 3, 4, 8, 13, 16, 17, 19, 22, 23, 26, 32, 34, 36, 49, 58, 73, 79, 80, 84, 86, 92, 109, 110, 111], "pdb_small": [0, 86], "For": [0, 1, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 37, 38, 39, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 82, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 104, 106, 109, 110, 111, 112, 113, 120, 131, 132, 140, 141, 146, 147, 151, 152, 156, 160], "all": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 86, 87, 88, 89, 90, 91, 92, 93, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 109, 111, 112, 113, 114, 129, 130, 132, 134, 140, 141, 142, 143, 144, 146, 147, 151, 152, 153, 155, 157, 158, 159, 160, 162, 163, 165], "further": [0, 4, 19, 20, 24, 25, 26, 27, 31, 34, 36, 38, 40, 42, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 102, 105, 113, 120, 141, 142], "execut": [0, 1, 3, 7, 23, 26, 38, 48, 76, 109], "first": [0, 2, 3, 4, 6, 8, 9, 13, 17, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 86, 90, 91, 92, 100, 101, 103, 104, 108, 109, 113, 120, 131, 146, 147, 148, 151, 156, 161, 162, 163, 165], "import": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 16, 17, 20, 22, 23, 24, 26, 27, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 46, 47, 48, 49, 58, 60, 62, 64, 66, 68, 77, 78, 80, 85, 86, 89, 90, 91, 92, 100, 101, 102, 103, 108, 109, 110, 111, 121, 129, 131, 132, 141, 146, 151, 157, 162, 163, 164], "mda": [0, 1, 2, 3, 4, 7, 8, 9, 20, 22, 23, 25, 29, 32, 33, 34, 35, 36, 37, 40, 46, 47, 48, 49, 56, 58, 60, 77, 79, 80, 85, 86, 89, 92, 103, 109, 111, 120, 129, 131, 132, 146, 153, 154, 159], "from": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164, 165], "datafil": [0, 1, 2, 3, 4, 7, 8, 9, 13, 16, 17, 20, 22, 23, 26, 29, 32, 33, 34, 35, 36, 40, 47, 48, 49, 77, 80, 85, 86, 92, 109, 111, 121, 131, 146], "In": [0, 2, 3, 6, 8, 13, 14, 17, 20, 23, 24, 29, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 84, 86, 88, 89, 90, 92, 98, 99, 100, 102, 104, 105, 108, 109, 111, 112, 113, 114, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 150, 151, 155, 156, 160, 161], "simplest": [0, 17, 24, 92], "case": [0, 1, 6, 7, 8, 10, 14, 17, 23, 24, 28, 29, 34, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 85, 86, 88, 90, 92, 98, 99, 102, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 155, 156, 160], "we": [0, 1, 2, 3, 4, 6, 8, 9, 13, 16, 17, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 82, 88, 91, 100, 102, 109, 110, 111, 112, 113, 138, 140, 146, 148, 151, 160, 161, 165], "simpli": [0, 6, 13, 16, 17, 23, 25, 38, 68, 79, 80, 86, 88, 92, 109, 112, 146, 147, 156], "ref": [0, 2, 9, 32, 36, 107, 154], "univers": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 61, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 87, 90, 91, 93, 103, 105, 107, 108, 109, 111, 113, 121, 125, 129, 131, 132, 133, 136, 144, 146, 147, 149, 150, 151, 154], "mobil": [0, 2, 34, 36, 38], "select_atom": [0, 2, 3, 4, 6, 8, 9, 20, 25, 32, 33, 34, 35, 36, 37, 48, 49, 58, 62, 64, 79, 80, 86, 87, 88, 90, 92, 109, 111, 113, 120, 154], "name": [0, 2, 3, 4, 6, 9, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 42, 44, 46, 49, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 85, 86, 87, 88, 90, 92, 93, 102, 105, 109, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 126, 127, 129, 130, 131, 132, 133, 136, 137, 139, 140, 141, 142, 143, 144, 147, 148, 149, 162, 163], "ca": [0, 2, 4, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 32, 34, 36, 58, 64, 86, 88, 90, 111, 113, 148], "posit": [0, 2, 3, 6, 7, 8, 9, 10, 13, 19, 22, 23, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 87, 90, 92, 95, 99, 100, 101, 102, 103, 104, 105, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 151, 152, 155, 156, 158, 159, 160], "28": [0, 62, 112, 141, 148, 149], "20178579474479": 0, "note": [0, 4, 6, 10, 13, 16, 17, 19, 20, 23, 24, 26, 28, 29, 31, 32, 33, 34, 36, 37, 38, 47, 48, 49, 50, 51, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 80, 86, 89, 90, 91, 92, 93, 99, 100, 101, 102, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 151, 152, 155, 159], "translat": [0, 3, 6, 32, 36, 58, 60, 76, 86, 89, 90, 99, 108, 114, 148, 151, 154, 159], "have": [0, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 20, 23, 24, 26, 27, 29, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 84, 85, 86, 87, 88, 90, 91, 92, 98, 99, 100, 103, 109, 110, 112, 113, 120, 123, 125, 131, 134, 136, 138, 140, 141, 146, 147, 151, 152, 156, 159, 161, 165], "been": [0, 2, 3, 4, 6, 7, 8, 13, 16, 17, 19, 20, 23, 28, 32, 33, 34, 35, 36, 38, 39, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 72, 73, 74, 75, 78, 79, 80, 86, 88, 92, 101, 102, 103, 109, 112, 113, 132, 146, 159, 165], "remov": [0, 2, 4, 6, 8, 9, 10, 19, 20, 21, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 41, 51, 54, 56, 58, 60, 62, 64, 68, 69, 72, 73, 74, 75, 78, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 102, 109, 113, 114, 132, 133, 136, 148, 154, 156], "order": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 17, 18, 19, 23, 24, 26, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 76, 79, 80, 81, 83, 86, 88, 89, 90, 91, 92, 98, 100, 105, 109, 111, 147, 149, 151, 164], "look": [0, 4, 10, 23, 29, 32, 38, 40, 42, 66, 78, 79, 100, 109, 130, 131, 140, 146, 165], "pure": [0, 7, 33, 64, 91, 141], "need": [0, 2, 6, 9, 17, 19, 23, 26, 29, 32, 36, 39, 40, 41, 44, 46, 48, 49, 51, 55, 56, 64, 68, 74, 75, 76, 77, 78, 79, 82, 84, 85, 86, 88, 93, 99, 100, 104, 105, 109, 125, 135, 136, 147, 150, 152, 155, 160, 165], "superimpos": [0, 6, 14, 34, 36, 108], "centr": [0, 23, 25, 28], "mass": [0, 3, 6, 14, 15, 17, 18, 19, 24, 28, 34, 36, 48, 49, 58, 60, 86, 87, 88, 90, 92, 103, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 143, 146, 147, 148, 149, 154, 157, 158, 159, 160], "geometri": [0, 9, 22, 23, 25, 28, 34, 36, 54, 86, 112, 113, 154, 157, 158], "center": [0, 3, 6, 13, 14, 19, 23, 28, 35, 36, 37, 86, 90, 103, 106, 107, 108, 111, 113, 154, 157, 158, 159], "true": [0, 1, 2, 4, 6, 7, 8, 9, 13, 14, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 102, 103, 104, 106, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "21": [0, 8, 23, 37, 64, 65, 112, 149, 160], "892591663632704": 0, "ha": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 19, 20, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 86, 88, 90, 92, 99, 100, 102, 103, 105, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 161, 164, 165], "onli": [0, 2, 3, 4, 6, 9, 13, 16, 17, 19, 20, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 109, 110, 113, 114, 125, 126, 129, 131, 135, 136, 137, 140, 143, 147, 154, 156, 161], "done": [0, 1, 6, 9, 13, 16, 17, 29, 38, 42, 49, 56, 64, 79, 80, 91, 99, 102, 114, 115, 116, 117, 118, 119, 146, 157, 158], "superposit": [0, 6, 36, 107, 110, 112, 154], "If": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 34, 36, 37, 38, 39, 40, 42, 43, 44, 46, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 125, 130, 131, 134, 135, 136, 140, 141, 147, 149, 151, 154, 155, 156, 157, 158, 161, 165], "you": [0, 4, 6, 8, 9, 13, 16, 17, 19, 20, 22, 23, 27, 28, 29, 32, 34, 36, 37, 38, 39, 46, 48, 49, 51, 58, 62, 68, 74, 77, 85, 86, 88, 92, 99, 100, 102, 105, 106, 107, 111, 112, 113, 125, 131, 136, 146, 152, 155, 161, 165], "want": [0, 4, 6, 17, 23, 27, 37, 38, 40, 48, 56, 58, 68, 85, 86, 92, 120, 140, 146, 165], "also": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 23, 24, 26, 28, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 99, 100, 101, 102, 103, 104, 106, 108, 109, 110, 111, 112, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 150, 151, 155, 156, 160, 165], "keyword": [0, 1, 2, 3, 4, 6, 9, 10, 13, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 99, 102, 109, 110, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 151], "6": [0, 2, 3, 4, 5, 6, 9, 23, 26, 29, 31, 34, 36, 37, 40, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 78, 80, 86, 89, 91, 92, 99, 100, 103, 104, 108, 109, 113, 131, 140, 141, 142, 148, 149, 153, 156, 159, 160], "809396586471815": 0, "while": [0, 4, 13, 16, 29, 32, 35, 36, 41, 49, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 80, 86, 92, 104, 106, 122, 134, 142, 146], "rotation_matrix": [0, 2, 86, 108], "mobile0": 0, "center_of_mass": [0, 6, 86, 90, 111], "ref0": 0, "809396586471805": 0, "arrai": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 35, 36, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 95, 100, 101, 103, 104, 106, 107, 108, 110, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 151, 154, 157, 158, 162, 163, 165], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "14514539": 0, "27259113": 0, "95111876": 0, "88652593": 0, "46267112": 0, "00268642": 0, "43932289": 0, "84358136": 0, "30881368": 0, "put": [0, 13, 18, 92], "togeth": [0, 2, 5, 13, 16, 23, 31, 34, 38, 58, 60, 76, 80, 86, 90, 92, 146, 151, 152, 155, 159, 165], "onto": [0, 2, 8, 9, 32, 86, 99], "atomgroup": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 20, 23, 25, 28, 29, 30, 32, 33, 34, 35, 36, 46, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 74, 75, 77, 79, 80, 83, 86, 87, 88, 90, 91, 92, 93, 94, 95, 99, 103, 109, 111, 113, 114, 115, 116, 117, 118, 119, 146, 147, 151, 154, 156, 157, 158, 159], "3341": [0, 109, 111], "write": [0, 6, 17, 18, 19, 23, 25, 26, 34, 36, 48, 49, 50, 51, 54, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 84, 86, 87, 90, 92, 100, 101, 102, 104, 105, 109, 110, 114, 115, 116, 117, 118, 119, 151, 160, 165], "mobile_on_ref": 0, "pdb": [0, 4, 5, 9, 10, 24, 25, 26, 34, 37, 44, 49, 51, 54, 57, 58, 60, 61, 62, 65, 66, 69, 71, 72, 73, 75, 79, 80, 82, 84, 86, 90, 92, 105, 109, 111, 113, 133, 146, 147, 150, 154, 165], "To": [0, 1, 2, 4, 6, 9, 17, 23, 24, 25, 29, 32, 34, 35, 37, 39, 40, 42, 44, 49, 56, 58, 60, 62, 75, 76, 79, 86, 87, 89, 90, 92, 99, 102, 106, 113, 115, 116, 117, 118, 119, 129, 131, 140, 146, 147, 152, 155, 165], "singl": [0, 2, 3, 4, 8, 10, 13, 16, 17, 19, 22, 23, 29, 33, 34, 35, 36, 37, 40, 44, 49, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 74, 75, 76, 78, 80, 82, 86, 88, 89, 90, 92, 98, 99, 100, 101, 103, 109, 110, 111, 113, 114, 146, 147, 148, 150, 151], "protein": [0, 4, 6, 8, 9, 11, 13, 16, 17, 19, 23, 24, 26, 32, 34, 35, 36, 37, 38, 48, 58, 61, 64, 79, 80, 86, 87, 90, 92, 98, 109, 111, 112, 113, 120, 154, 155], "weight": [0, 8, 13, 14, 15, 17, 19, 34, 36, 38, 58, 86, 107, 109, 122, 154, 157], "809396586471809": 0, "chang": [0, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 107, 108, 109, 113, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 154, 156, 157, 158, 159, 160, 161], "so": [0, 6, 10, 13, 16, 17, 20, 23, 24, 29, 33, 35, 36, 37, 38, 42, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 82, 86, 91, 99, 102, 103, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 151, 154, 155, 156, 158, 159, 160], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 164, 165], "optim": [0, 13, 20, 34, 36, 99, 107, 108, 109, 112, 151], "whole": [0, 3, 6, 7, 9, 17, 26, 32, 36, 38, 64, 68, 79, 80, 83, 86, 87, 103, 148, 151, 154, 155, 165], "1ake": [0, 36], "trj": [0, 34, 60, 79, 82, 84], "4ake": [0, 36, 66, 86, 111, 113], "filenam": [0, 3, 5, 6, 14, 17, 19, 23, 25, 26, 34, 36, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 86, 92, 94, 100, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 147], "rmsfit": 0, "run": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 48, 55, 58, 80, 86, 88, 109, 111, 113, 147, 150, 152, 165], "object": [0, 2, 8, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 28, 30, 34, 35, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 88, 95, 100, 101, 102, 104, 105, 106, 108, 109, 110, 111, 113, 114, 121, 122, 124, 125, 126, 128, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 149, 151, 153, 158, 162, 163, 165], "It": [0, 2, 3, 6, 8, 9, 13, 15, 17, 18, 20, 22, 23, 24, 25, 26, 28, 29, 32, 36, 37, 38, 39, 40, 44, 48, 49, 50, 57, 58, 62, 64, 65, 68, 69, 72, 75, 77, 79, 81, 82, 83, 85, 86, 90, 98, 100, 105, 109, 111, 112, 113, 139, 146, 150, 151, 162, 163, 165], "possibl": [0, 2, 4, 6, 8, 9, 10, 17, 20, 23, 24, 25, 29, 38, 40, 49, 56, 57, 58, 64, 65, 67, 68, 76, 77, 79, 80, 86, 88, 90, 92, 94, 99, 100, 102, 109, 112, 113, 146, 147, 148, 151, 157, 160], "arbitrari": [0, 2, 3, 6, 9, 10, 18, 23, 25, 26, 29, 30, 32, 34, 36, 58, 67, 83, 86, 88, 99, 100, 101, 109], "map": [0, 12, 13, 14, 23, 32, 34, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 88, 89, 90, 91, 92, 99, 106, 109], "base": [0, 3, 4, 6, 8, 9, 11, 13, 14, 15, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 44, 45, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 76, 77, 78, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 99, 100, 103, 104, 105, 107, 109, 110, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, 150, 151, 154, 155, 156, 157, 158, 159], "sequenc": [0, 17, 23, 26, 34, 36, 38, 64, 65, 75, 76, 79, 86, 90, 92, 103, 108, 109, 114, 125, 149, 151], "allow": [0, 2, 3, 5, 6, 9, 13, 16, 17, 20, 23, 24, 28, 29, 30, 32, 35, 36, 37, 40, 41, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 79, 80, 81, 82, 86, 87, 88, 91, 92, 94, 95, 98, 102, 104, 105, 106, 109, 110, 111, 113, 120, 129, 134, 141, 148, 165], "homolog": 0, "wild": 0, "type": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 48, 49, 50, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 120, 122, 125, 126, 127, 128, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 148, 149, 153, 154, 155, 156, 157, 158, 159, 160], "mutant": 0, "wa": [0, 3, 9, 20, 21, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 42, 48, 49, 51, 54, 55, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 104, 109, 113, 114, 146, 147, 154, 156, 157, 158, 159], "aln": 0, "would": [0, 6, 20, 23, 32, 38, 40, 49, 51, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 86, 92, 110, 113, 146, 151, 155, 156, 160, 165], "produc": [0, 10, 23, 26, 33, 34, 36, 37, 41, 44, 51, 58, 86, 90, 100, 102, 105, 132, 135, 162, 163], "appropri": [0, 6, 8, 25, 29, 35, 36, 38, 40, 42, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 79, 80, 86, 88, 90, 91, 92, 103, 109, 113, 114, 120, 160], "fasta2select": [0, 34, 36], "feed": [0, 23, 26], "result": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 90, 91, 92, 98, 99, 103, 104, 106, 107, 108, 109, 111, 113, 146, 147, 151, 154], "dictionari": [0, 2, 4, 6, 17, 18, 19, 20, 23, 26, 28, 34, 36, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 69, 70, 71, 72, 73, 75, 79, 80, 88, 91, 109, 147, 148], "seldict": 0, "see": [0, 1, 2, 3, 6, 7, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 36, 37, 38, 39, 42, 44, 47, 49, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 82, 86, 88, 90, 92, 94, 98, 99, 101, 102, 103, 109, 113, 120, 132, 136, 140, 141, 146, 148, 149, 150, 151, 152, 160, 162, 163, 164, 165], "document": [0, 2, 5, 6, 13, 14, 26, 31, 34, 35, 39, 42, 58, 60, 64, 65, 67, 68, 76, 77, 78, 82, 99, 102, 108, 142, 151, 164], "advanc": [0, 44, 79, 86, 92, 110], "version": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 149, 152, 154, 156, 157, 158, 159, 160, 165], "10": [0, 2, 3, 4, 8, 9, 11, 13, 15, 17, 19, 23, 24, 25, 26, 29, 30, 31, 32, 34, 36, 37, 38, 44, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 91, 92, 98, 102, 103, 104, 106, 108, 109, 111, 112, 113, 136, 141, 148, 149, 155, 160, 162, 163], "now": [0, 2, 4, 6, 8, 9, 10, 19, 20, 23, 28, 29, 30, 32, 33, 34, 36, 37, 42, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, 83, 85, 86, 88, 90, 91, 92, 94, 95, 99, 102, 103, 109, 113, 114, 132, 133, 134, 136, 138, 140, 141, 146, 149], "exclus": [0, 20, 23, 35, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 104, 105, 141], "access": [0, 1, 2, 3, 5, 6, 9, 18, 21, 23, 24, 25, 28, 29, 30, 34, 38, 39, 40, 42, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 85, 86, 88, 90, 91, 92, 94, 99, 104, 105, 109, 110, 111, 113, 135, 147, 165], "16": [0, 11, 12, 13, 14, 15, 16, 17, 19, 26, 27, 32, 34, 36, 56, 58, 61, 64, 65, 78, 80, 83, 86, 89, 92, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 133, 138, 147, 148, 149, 162, 165], "rms_fit_trj": 0, "deprec": [0, 4, 6, 8, 9, 19, 23, 24, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 51, 54, 56, 58, 60, 69, 72, 73, 74, 75, 80, 86, 90, 91, 102, 109, 132, 133, 136], "favor": [0, 36, 86], "17": [0, 5, 22, 26, 34, 36, 37, 38, 51, 57, 60, 64, 65, 68, 86, 91, 92, 112, 129, 141, 142, 148, 149], "none": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 99, 100, 101, 102, 103, 105, 106, 108, 109, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 149, 152, 153, 154, 155, 156, 157, 158, 159], "subselect": [0, 9, 86, 113], "tol_mass": [0, 34, 36], "1": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 102, 103, 104, 105, 108, 109, 111, 112, 113, 127, 131, 132, 134, 136, 138, 140, 141, 143, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163], "strict": [0, 66, 86, 90, 91, 98], "fals": [0, 1, 2, 4, 6, 8, 9, 13, 14, 17, 20, 23, 25, 26, 32, 34, 35, 36, 37, 38, 40, 42, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 98, 102, 104, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 152, 155, 156, 157, 158, 163], "match_atom": 0, "sourc": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 85, 86, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 105, 106, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "perform": [0, 2, 3, 4, 6, 8, 9, 11, 14, 17, 18, 19, 20, 23, 24, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 88, 98, 99, 102, 103, 106, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 152, 154, 157, 162, 163], "spatial": [0, 34, 35, 58, 106, 154], "follow": [0, 2, 3, 6, 13, 16, 17, 19, 20, 24, 29, 34, 38, 39, 40, 42, 44, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 99, 100, 102, 103, 104, 108, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 156, 160, 165], "wai": [0, 2, 4, 6, 8, 9, 13, 14, 19, 23, 24, 25, 29, 37, 40, 42, 49, 68, 75, 76, 79, 82, 85, 92, 108, 110, 111, 113, 114, 115, 116, 117, 118, 119, 135, 151, 154], "A": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 17, 19, 22, 23, 24, 25, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 44, 51, 53, 54, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 75, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 103, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 131, 134, 138, 140, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "sel1": [0, 34, 36], "sel2": [0, 34, 36], "befor": [0, 2, 3, 4, 6, 10, 13, 14, 17, 24, 32, 36, 38, 39, 42, 44, 58, 64, 65, 68, 74, 75, 79, 86, 89, 90, 92, 98, 100, 101, 106, 107, 109, 113, 114, 138, 149, 151, 156, 157, 158], "its": [0, 3, 4, 8, 12, 13, 19, 23, 29, 32, 34, 37, 38, 40, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 81, 82, 85, 86, 88, 90, 92, 99, 103, 104, 105, 109, 112, 113, 120, 148, 151, 154], "coincid": [0, 99], "below": [0, 4, 5, 10, 17, 23, 29, 31, 32, 34, 36, 40, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 85, 86, 102, 113, 120, 131], "explan": [0, 29, 58, 109, 148], "deriv": [0, 2, 6, 7, 11, 17, 38, 42, 44, 75, 79, 83, 92, 102, 109, 114, 144, 147], "shift": [0, 26, 86, 99, 104, 159], "behavior": [0, 34, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 92, 109, 113], "through": [0, 4, 6, 10, 11, 17, 20, 21, 23, 24, 25, 35, 38, 40, 41, 44, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 80, 83, 85, 86, 88, 92, 99, 109, 111, 113, 122, 147, 159, 165], "construct": [0, 6, 8, 13, 19, 20, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 85, 88, 92, 99, 104, 106, 109, 121, 147, 151], "alreadi": [0, 6, 7, 8, 23, 32, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 106, 113], "match": [0, 13, 16, 20, 23, 30, 34, 36, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 77, 80, 86, 88, 90, 91, 154], "should": [0, 2, 3, 4, 6, 8, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 38, 42, 44, 49, 51, 56, 58, 60, 61, 62, 64, 66, 74, 75, 79, 82, 84, 86, 88, 89, 90, 91, 95, 99, 102, 104, 105, 106, 109, 115, 116, 117, 118, 119, 130, 132, 133, 140, 141, 146, 147, 148, 155], "therefor": [0, 2, 6, 14, 17, 26, 27, 58, 64, 68, 74, 86, 103, 109, 140, 146], "preserv": [0, 8, 32, 34, 56, 60, 62, 64, 86], "exact": [0, 4, 17, 23, 29, 34, 68, 86], "either": [0, 4, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 28, 34, 36, 38, 40, 42, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 91, 92, 98, 99, 100, 101, 103, 105, 106, 109, 110, 111, 113, 122, 132, 140, 147, 151, 158, 159, 165], "ani": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 23, 24, 25, 26, 28, 29, 33, 34, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 81, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 102, 103, 104, 105, 106, 109, 110, 112, 113, 120, 126, 127, 129, 131, 132, 136, 146, 147, 151, 152, 160, 165], "other": [0, 2, 3, 4, 6, 8, 9, 13, 16, 17, 19, 23, 25, 26, 28, 29, 30, 32, 34, 37, 38, 39, 40, 41, 42, 46, 47, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 103, 105, 109, 110, 113, 131, 132, 140, 146, 147, 148, 151, 152, 156, 160, 163, 165], "new": [0, 1, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 46, 47, 48, 49, 50, 51, 52, 54, 57, 58, 60, 61, 62, 63, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 83, 84, 85, 86, 88, 89, 90, 91, 92, 94, 98, 99, 100, 101, 103, 104, 105, 108, 109, 111, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 152, 160, 165], "made": [0, 4, 5, 6, 8, 9, 15, 17, 19, 25, 32, 49, 78, 79, 80, 86, 88, 91, 92, 98, 109, 113, 147, 151], "sort": [0, 23, 24, 26, 32, 33, 38, 45, 86, 88, 89, 90, 91, 109, 113], "index": [0, 2, 6, 8, 23, 24, 25, 26, 28, 29, 30, 32, 34, 36, 37, 38, 41, 42, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 89, 90, 91, 99, 101, 109, 114, 115, 116, 117, 118, 119, 120, 129, 140, 141, 147, 148, 165], "destroi": 0, "correspond": [0, 3, 6, 8, 9, 12, 13, 18, 23, 25, 32, 34, 36, 37, 38, 39, 42, 43, 49, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 98, 99, 102, 104, 106, 109, 112, 113, 129, 149, 154, 156, 157], "safest": 0, "mix": [0, 38], "string": [0, 4, 6, 8, 9, 10, 13, 14, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 42, 48, 57, 58, 61, 62, 64, 66, 68, 77, 78, 79, 80, 85, 86, 88, 90, 92, 100, 102, 105, 108, 110, 113, 114, 115, 116, 117, 118, 119, 120, 132, 134, 140, 141, 148, 149, 154, 161, 162, 163], "paramet": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "str": [0, 2, 3, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 34, 35, 36, 37, 38, 40, 41, 42, 50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 85, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 105, 106, 109, 112, 113, 115, 117, 120, 131, 138, 144, 148, 154, 158, 162, 163], "dict": [0, 2, 3, 4, 6, 9, 13, 17, 18, 20, 23, 25, 26, 29, 30, 32, 34, 36, 38, 40, 42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 81, 83, 86, 88, 89, 91, 92, 100, 102, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 160], "tupl": [0, 4, 6, 10, 18, 19, 20, 26, 32, 34, 35, 36, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 80, 86, 89, 90, 91, 92, 98, 102, 103, 108, 109, 140, 146, 147, 149, 151], "option": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 19, 20, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "oper": [0, 2, 6, 18, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 86, 88, 91, 99, 100, 103, 104, 106, 109, 110, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 159], "valid": [0, 8, 9, 32, 34, 35, 36, 42, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 104, 109, 136, 141, 142, 148], "ident": [0, 17, 20, 32, 34, 36, 56, 57, 86, 91, 92, 108, 109, 129, 147], "where": [0, 1, 5, 6, 7, 8, 15, 17, 18, 19, 20, 23, 29, 32, 33, 34, 35, 36, 37, 38, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 88, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 109, 111, 113, 132, 140, 146, 151, 154, 155, 157, 160], "return": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 95, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "clustalw": [0, 34, 36], "stamp": [0, 2, 23, 34, 36], "2": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 105, 108, 109, 112, 113, 131, 132, 133, 134, 136, 140, 141, 142, 144, 146, 147, 148, 149, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, 163, 165], "3": [0, 2, 3, 4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 18, 20, 21, 23, 24, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 80, 83, 86, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 112, 113, 131, 132, 133, 136, 140, 141, 146, 147, 148, 149, 151, 156, 157, 158, 159, 160, 162, 163, 165], "gener": [0, 1, 5, 12, 13, 14, 17, 18, 19, 20, 22, 23, 24, 27, 32, 34, 35, 36, 38, 39, 40, 44, 47, 51, 57, 58, 60, 61, 62, 64, 69, 72, 73, 75, 77, 79, 80, 81, 86, 88, 90, 91, 92, 99, 101, 104, 106, 108, 109, 111, 112, 113, 129, 130, 133, 138, 140, 146, 147, 155, 160, 162, 163, 165], "equival": [0, 6, 18, 22, 24, 29, 36, 37, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 81, 86, 105, 106, 113, 141], "each": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 89, 90, 91, 92, 98, 99, 102, 103, 104, 107, 109, 111, 114, 120, 131, 140, 146, 147, 148, 154, 157, 159], "list": [0, 2, 3, 4, 6, 9, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 62, 64, 65, 66, 67, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 101, 102, 103, 104, 108, 111, 112, 113, 114, 120, 122, 125, 126, 127, 128, 130, 136, 137, 140, 141, 142, 143, 146, 147, 148, 151, 157, 160, 165], "defin": [0, 2, 3, 4, 6, 13, 16, 17, 20, 23, 24, 25, 28, 34, 36, 37, 38, 40, 44, 51, 56, 58, 60, 64, 65, 68, 74, 75, 78, 79, 86, 90, 91, 92, 99, 100, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 131, 140, 144, 146, 147, 149, 151, 152, 154, 157, 158, 160], "describ": [0, 2, 3, 11, 13, 15, 16, 17, 18, 23, 25, 29, 31, 34, 36, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 83, 84, 86, 88, 89, 90, 91, 92, 102, 103, 104, 109, 111, 112, 113, 120, 138, 141, 150, 151, 161], "under": [0, 17, 23, 25, 26, 34, 36, 37, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 80, 86, 92, 98, 99, 102, 104, 109, 119, 147, 151, 165], "bool": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 38, 40, 42, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 90, 91, 92, 95, 99, 100, 102, 103, 106, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152, 153, 154, 155, 156, 157, 158, 159], "whether": [0, 9, 13, 14, 16, 17, 20, 23, 24, 26, 34, 40, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 86, 88, 90, 102, 105, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "default": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 16, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 39, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 54, 56, 57, 58, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 99, 100, 102, 103, 105, 106, 109, 113, 114, 115, 116, 117, 118, 119, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163, 164], "array_lik": [0, 2, 3, 6, 9, 10, 14, 15, 17, 18, 23, 29, 30, 32, 33, 34, 36, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 106, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 154, 157], "choos": [0, 6, 8, 20, 23, 32, 34, 76, 79, 86, 88, 90, 154, 158], "With": [0, 6, 15, 20, 26, 34, 36, 37, 40, 46, 76, 98, 154, 157], "weigh": [0, 34, 36, 154, 157], "equal": [0, 1, 8, 13, 18, 23, 32, 34, 36, 37, 38, 44, 58, 88, 91, 98, 99, 102, 109, 154, 157, 162], "float": [0, 4, 6, 7, 8, 10, 13, 15, 16, 17, 19, 20, 23, 24, 25, 28, 31, 32, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 80, 83, 86, 88, 90, 92, 95, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 113, 146, 148, 149, 153, 154, 157, 160, 162, 163], "same": [0, 1, 2, 3, 4, 6, 9, 10, 12, 13, 14, 16, 17, 20, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 38, 39, 40, 44, 48, 49, 51, 54, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 91, 92, 98, 99, 100, 103, 104, 108, 109, 113, 120, 129, 146, 147, 149, 154, 156, 157, 159], "length": [0, 2, 3, 6, 8, 10, 13, 14, 17, 19, 20, 22, 23, 24, 29, 30, 32, 33, 34, 36, 38, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 81, 83, 86, 89, 90, 91, 92, 99, 100, 103, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 153, 154, 155, 157, 160], "element": [0, 3, 6, 12, 13, 14, 16, 17, 18, 23, 32, 34, 36, 37, 38, 48, 49, 58, 64, 74, 86, 89, 90, 98, 104, 109, 113, 114, 122, 125, 127, 134, 136, 137, 140, 141, 142, 148, 149, 154, 157], "reject": [0, 25, 34, 36], "differ": [0, 1, 2, 3, 4, 6, 8, 11, 13, 16, 17, 19, 20, 23, 24, 25, 32, 34, 36, 37, 38, 42, 44, 49, 51, 54, 55, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 82, 83, 85, 86, 90, 91, 92, 100, 108, 109, 111, 112, 113, 120, 125, 136, 141, 147, 151, 160], "more": [0, 1, 2, 3, 4, 8, 9, 10, 11, 13, 16, 17, 23, 24, 25, 32, 34, 36, 37, 38, 39, 40, 42, 44, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 87, 90, 92, 99, 100, 101, 102, 104, 105, 108, 109, 110, 111, 113, 140, 141, 146, 147, 151, 155, 163, 165], "than": [0, 3, 4, 6, 8, 9, 10, 15, 17, 19, 20, 23, 24, 32, 34, 36, 37, 38, 41, 42, 50, 56, 58, 64, 66, 68, 74, 76, 80, 86, 90, 91, 92, 98, 99, 103, 104, 105, 109, 113, 146, 149, 155], "Will": [0, 4, 6, 8, 9, 17, 18, 20, 24, 28, 32, 33, 35, 36, 38, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 92, 103], "rais": [0, 2, 3, 6, 9, 23, 26, 29, 30, 32, 36, 40, 42, 43, 44, 49, 51, 54, 56, 57, 58, 59, 60, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 92, 94, 101, 102, 103, 105, 108, 109, 113, 120, 134, 136, 144, 146, 156, 160], "selectionerror": [0, 36, 88, 94], "doe": [0, 3, 6, 13, 14, 23, 24, 29, 32, 34, 36, 37, 58, 60, 63, 64, 66, 68, 69, 76, 77, 79, 81, 83, 86, 90, 92, 94, 99, 100, 102, 103, 109, 113, 120, 130, 137, 140, 150, 152, 155], "try": [0, 20, 23, 42, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 78, 80, 82, 84, 109, 130, 132, 141, 146, 161], "prepar": [0, 92], "drop": [0, 17, 57, 86, 109], "residu": [0, 3, 6, 9, 10, 19, 23, 25, 28, 30, 31, 32, 35, 36, 37, 38, 48, 64, 65, 66, 79, 85, 86, 88, 89, 90, 92, 94, 95, 109, 111, 113, 122, 124, 125, 126, 127, 129, 130, 131, 133, 136, 138, 139, 140, 141, 143, 147, 158, 159], "non": [0, 2, 3, 6, 8, 9, 17, 23, 24, 25, 29, 30, 32, 33, 36, 38, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 80, 86, 88, 102, 103, 104, 105, 106, 108, 109, 113, 114, 115, 116, 117, 118, 119, 125, 140, 155, 156], "get_matching_atom": 0, "detail": [0, 4, 6, 7, 8, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 38, 49, 51, 58, 60, 64, 74, 78, 79, 89, 101, 102, 109, 110, 113, 140, 141, 147, 151, 165], "e": [0, 2, 4, 6, 9, 13, 17, 18, 23, 24, 25, 26, 28, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 88, 90, 91, 92, 98, 99, 100, 102, 103, 104, 108, 109, 110, 111, 112, 113, 114, 136, 140, 146, 147, 148, 149, 151, 152, 153, 156, 157, 160, 161, 162, 163, 165], "context": [0, 23, 44, 48, 57, 58, 64, 68, 75, 77, 79, 100, 101, 105, 109, 120, 152], "rest": [0, 3, 6, 149], "ligand": [0, 3, 6, 19, 35, 38, 77, 92], "surround": 0, "water": [0, 6, 7, 8, 10, 20, 23, 24, 39, 86, 87, 92, 98, 111, 112, 113, 131, 149, 160], "old_rmsd": 0, "new_rmsd": 0, "after": [0, 1, 2, 3, 6, 8, 10, 17, 18, 20, 23, 24, 26, 32, 34, 35, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 85, 86, 90, 92, 102, 105, 106, 109, 113, 140, 146, 148, 151, 156, 157, 161], "effici": [0, 1, 10, 18, 34, 64, 67, 68, 72, 102, 112, 147], "method": [0, 2, 3, 4, 6, 7, 8, 9, 11, 13, 15, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 33, 35, 36, 37, 38, 40, 42, 46, 49, 51, 54, 55, 56, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 99, 100, 101, 102, 104, 106, 107, 108, 109, 111, 112, 113, 114, 120, 135, 144, 146, 147, 149, 151, 155, 158], "ad": [0, 1, 2, 3, 4, 6, 9, 10, 13, 16, 17, 19, 23, 24, 26, 28, 29, 30, 32, 36, 37, 42, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 82, 83, 86, 88, 89, 90, 91, 92, 98, 99, 101, 102, 103, 109, 131, 132, 134, 136, 137, 138, 140, 141, 142, 144, 146, 148, 151], "toggl": [0, 38, 92, 141], "8": [0, 2, 4, 9, 26, 31, 34, 36, 37, 40, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 77, 80, 83, 86, 88, 90, 91, 92, 99, 103, 109, 113, 114, 115, 116, 117, 118, 119, 125, 136, 141, 147, 148, 149, 159, 160, 162, 163], "check": [0, 4, 6, 9, 10, 13, 19, 20, 23, 31, 32, 33, 34, 36, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 76, 77, 80, 86, 91, 99, 104, 146, 151, 152, 153, 154, 155, 156, 157, 158, 159], "includ": [0, 1, 3, 5, 9, 11, 13, 17, 23, 24, 25, 29, 32, 34, 36, 38, 42, 44, 48, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 86, 88, 89, 92, 98, 99, 102, 105, 108, 109, 113, 120, 131, 137, 141, 147, 149, 151, 165], "work": [0, 2, 4, 6, 8, 9, 10, 11, 13, 16, 17, 18, 23, 28, 31, 36, 37, 38, 39, 40, 49, 51, 54, 57, 58, 60, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 83, 86, 94, 99, 102, 103, 104, 105, 109, 111, 112, 113, 114, 120, 131, 141, 146, 151, 154, 159, 165], "incomplet": [0, 9, 27], "lenient": 0, "wherea": [0, 8, 32, 34, 86, 109, 110], "old": [0, 51, 79, 85, 86, 92, 109, 147], "kwarg": [0, 1, 2, 3, 4, 6, 7, 8, 9, 13, 14, 16, 18, 23, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 90, 91, 92, 109, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 146, 152], "replac": [0, 6, 12, 23, 57, 86, 92, 98, 99, 105, 109, 146, 147], "mass_weight": [0, 34, 36], "sinc": [0, 4, 6, 8, 9, 14, 17, 19, 21, 23, 24, 28, 32, 33, 34, 35, 36, 38, 39, 49, 51, 64, 68, 74, 75, 80, 86, 90, 113, 140, 155], "instead": [0, 2, 3, 4, 6, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 90, 91, 92, 95, 98, 99, 100, 101, 103, 104, 109, 113, 114, 115, 116, 117, 118, 119, 120, 125, 136, 147, 151, 158], "prefix": [0, 23, 34, 86, 102, 113], "rmsfit_": 0, "forc": [0, 20, 30, 31, 39, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 84, 86, 88, 91, 92, 99, 101, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "in_memori": [0, 17, 36, 37, 80, 92], "both": [0, 2, 3, 4, 6, 9, 10, 14, 17, 23, 24, 26, 29, 30, 32, 34, 36, 38, 40, 49, 53, 55, 57, 60, 64, 68, 71, 79, 86, 91, 98, 101, 102, 111, 112, 113, 129, 132, 139, 140, 163], "must": [0, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 17, 18, 20, 23, 24, 26, 29, 32, 34, 36, 38, 40, 42, 44, 49, 51, 54, 58, 60, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 98, 99, 103, 104, 105, 106, 107, 109, 113, 114, 140, 144, 146, 151, 154, 156, 160], "instanc": [0, 2, 3, 4, 6, 7, 8, 9, 13, 16, 17, 18, 23, 25, 28, 29, 32, 33, 34, 35, 36, 39, 40, 42, 43, 44, 51, 54, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 85, 86, 87, 90, 91, 92, 99, 100, 102, 104, 105, 109, 111, 113, 114, 140, 144, 147, 149, 151, 158, 162, 163, 164, 165], "output": [0, 2, 6, 13, 14, 17, 18, 19, 23, 26, 32, 34, 35, 36, 40, 49, 50, 51, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 84, 85, 86, 88, 90, 99, 102, 103, 104, 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 127, 147, 156], "format": [0, 3, 4, 6, 10, 13, 14, 15, 16, 17, 18, 23, 25, 26, 34, 37, 38, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 55, 57, 58, 59, 61, 64, 65, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 80, 81, 83, 84, 86, 90, 91, 92, 94, 99, 102, 103, 104, 108, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 144, 146, 148, 149, 150, 161, 165], "determin": [0, 3, 4, 6, 8, 9, 10, 13, 18, 22, 23, 24, 25, 26, 29, 32, 33, 34, 38, 42, 44, 58, 64, 78, 79, 86, 90, 92, 99, 103, 107, 109, 112, 146, 156], "extens": [0, 4, 6, 17, 23, 25, 34, 44, 50, 58, 64, 65, 66, 67, 68, 76, 77, 78, 79, 84, 86, 92, 109, 110, 115, 116, 117, 118, 119, 131, 147, 150, 161], "One": [0, 2, 3, 6, 13, 16, 23, 24, 25, 26, 34, 37, 38, 48, 86, 92, 100, 113, 151, 160], "save": [0, 3, 4, 6, 7, 8, 10, 14, 17, 18, 20, 26, 28, 29, 32, 34, 36, 37, 51, 57, 58, 60, 62, 64, 68, 72, 73, 77, 82, 99, 100, 101, 105], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 51, 54, 55, 56, 57, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 114, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 149, 151, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "altern": [0, 6, 9, 17, 19, 22, 23, 24, 28, 32, 41, 44, 49, 61, 64, 65, 86, 91, 92, 103, 109, 113, 120, 133, 151], "np": [0, 2, 3, 4, 5, 6, 8, 17, 20, 23, 24, 26, 28, 29, 32, 34, 36, 37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 89, 92, 99, 100, 101, 103, 107, 108, 109, 113, 146, 148, 151, 162, 163], "savetxt": [0, 4, 28, 36], "subdomain": [0, 104], "against": [0, 17, 68, 91, 104], "written": [0, 2, 6, 14, 17, 19, 23, 34, 38, 40, 48, 50, 51, 54, 56, 58, 60, 62, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 79, 82, 83, 86, 90, 92, 100, 101, 102, 103, 105, 109, 114, 115, 116, 117, 118, 119, 120, 138, 141, 147, 151, 165], "prepend": [0, 34], "toler": [0, 4, 86, 88, 162, 163], "given": [0, 3, 4, 5, 6, 7, 8, 9, 13, 14, 16, 17, 20, 23, 24, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 95, 98, 100, 101, 105, 109, 113, 131, 135, 140, 146, 149, 151, 154, 155, 156, 157, 158, 159, 161], "find": [0, 9, 10, 13, 19, 20, 23, 24, 25, 32, 34, 38, 40, 42, 43, 51, 60, 76, 82, 86, 89, 95, 100, 109, 110, 113, 130, 140, 146], "fail": [0, 6, 26, 28, 38, 49, 58, 64, 66, 68, 72, 82, 84, 86, 94, 103, 109, 144], "t": [0, 2, 4, 7, 17, 20, 22, 24, 29, 30, 32, 34, 36, 37, 38, 40, 42, 44, 47, 48, 49, 51, 54, 55, 57, 58, 59, 60, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 89, 90, 98, 99, 101, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 152, 155, 156, 157, 158, 159, 160], "found": [0, 2, 9, 19, 20, 23, 24, 25, 34, 38, 40, 42, 43, 49, 58, 64, 69, 76, 77, 78, 85, 86, 88, 90, 92, 107, 109, 110, 131, 146, 147, 165], "overwrit": [0, 20, 35, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "perman": [0, 37, 92], "switch": [0, 4, 9, 24, 38, 40, 104], "memori": [0, 8, 10, 13, 14, 18, 29, 36, 37, 40, 41, 42, 44, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 84, 86, 89, 92, 109, 146, 156], "place": [0, 6, 9, 14, 17, 23, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 89, 92, 99, 101, 103, 107, 108, 109, 110, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "which": [0, 2, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17, 18, 19, 20, 23, 24, 25, 29, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 80, 83, 85, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 111, 112, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 164, 165], "improv": [0, 15, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "substanti": [0, 80], "some": [0, 4, 8, 9, 17, 20, 23, 26, 28, 32, 37, 38, 39, 40, 42, 47, 48, 49, 58, 60, 64, 67, 68, 75, 77, 78, 79, 82, 86, 88, 90, 103, 108, 109, 110, 134, 145, 146, 147, 149, 151, 160, 164, 165], "out": [0, 4, 17, 22, 23, 32, 36, 37, 38, 39, 40, 42, 44, 45, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 92, 102, 108, 114, 140, 147, 160, 161, 164, 165], "ignor": [0, 6, 13, 16, 18, 23, 42, 44, 58, 62, 64, 65, 74, 79, 80, 81, 83, 86, 90, 91, 92, 102, 103, 113, 125, 131, 132, 134, 136, 140, 146, 148], "verbos": [0, 2, 3, 4, 6, 7, 8, 9, 13, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 80, 92, 102], "logger": [0, 38, 102], "inform": [0, 8, 9, 13, 16, 17, 20, 23, 24, 25, 33, 34, 37, 38, 42, 49, 51, 54, 56, 58, 60, 64, 65, 66, 67, 68, 69, 72, 73, 74, 75, 79, 82, 83, 86, 89, 90, 92, 99, 100, 101, 103, 109, 113, 121, 122, 125, 126, 127, 129, 131, 132, 136, 137, 138, 139, 140, 141, 142, 143, 145, 147, 150, 164, 165], "progress": [0, 2, 3, 4, 6, 7, 8, 9, 14, 23, 28, 29, 30, 32, 33, 35, 36, 37, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 92, 102], "reference_atom": [0, 103], "mobile_atom": 0, "insid": [0, 2, 5, 20, 23, 37, 79, 82, 86, 88, 91, 98, 104, 110, 112, 120, 151, 159], "rmsd_align": 0, "valu": [0, 2, 3, 4, 6, 8, 9, 13, 14, 16, 17, 20, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 152, 160, 162, 163], "least": [0, 2, 3, 4, 6, 8, 9, 13, 15, 19, 23, 25, 29, 30, 32, 36, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 76, 80, 105, 107, 109, 125, 136, 141], "minimim": 0, "numpi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 26, 28, 29, 30, 33, 34, 35, 36, 37, 38, 40, 41, 44, 51, 52, 54, 58, 60, 69, 72, 73, 75, 78, 79, 83, 86, 87, 88, 89, 90, 91, 92, 99, 103, 104, 108, 109, 111, 146, 151, 152, 163, 165], "ndarrai": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 19, 20, 23, 24, 28, 29, 30, 33, 34, 35, 36, 40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 90, 91, 92, 99, 101, 103, 104, 106, 107, 108, 109, 111, 146], "alia": [0, 4, 6, 9, 23, 24, 28, 30, 32, 33, 35, 36, 38, 86, 88, 90, 149], "attribut": [0, 2, 3, 4, 6, 7, 9, 18, 19, 20, 23, 24, 26, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 88, 89, 91, 92, 93, 99, 100, 101, 106, 109, 111, 113, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, 146, 147, 151, 152, 160], "reflect": [0, 32, 76, 78, 83, 86, 104, 108, 109, 113], "upon": [0, 20, 58, 60, 74, 75, 76, 77, 91, 92, 102, 144, 146, 151], "recommend": [0, 2, 24, 38, 58, 64, 109, 110, 111, 113, 146, 165], "wrap": [0, 2, 3, 6, 13, 16, 18, 29, 36, 60, 64, 86, 90, 105, 106, 109, 151, 155, 157, 158], "statement": [0, 32, 79, 109, 114], "final": [0, 4, 6, 9, 13, 16, 17, 18, 20, 28, 32, 37, 38, 49, 56, 64, 74, 86, 89, 91, 106, 111, 113], "guarante": [0, 6, 24, 66, 103, 109], "restor": [0, 6], "log": [0, 2, 3, 6, 9, 17, 29, 30, 32, 36, 38, 79, 110, 147], "level": [0, 5, 23, 58, 72, 75, 77, 88, 89, 95, 102, 105, 109], "except": [0, 23, 26, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 80, 83, 86, 88, 90, 92, 109, 110, 147, 151], "represent": [0, 14, 18, 23, 34, 38, 51, 54, 56, 60, 70, 79, 91, 92, 103, 119, 120, 125, 136, 137], "remaind": [0, 111], "python": [0, 2, 6, 17, 23, 26, 39, 40, 46, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 83, 85, 86, 87, 88, 90, 100, 101, 102, 105, 107, 108, 109, 110, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 151, 164, 165], "session": [0, 68, 111], "memoryread": [0, 36, 78, 79, 92], "alwai": [0, 2, 4, 6, 13, 16, 17, 26, 32, 33, 36, 40, 49, 50, 51, 54, 57, 58, 60, 62, 64, 66, 68, 69, 70, 71, 72, 73, 75, 79, 80, 86, 90, 92, 108, 109, 111, 113, 138, 146, 147, 151, 160], "treat": [0, 6, 19, 22, 24, 37, 38, 42, 58, 61, 76, 86, 91, 92, 103, 111, 131, 140, 147, 162, 163], "had": [0, 35, 155], "directori": [0, 23, 26, 34, 72, 105, 111, 112, 131], "19": [0, 9, 10, 32, 35, 60, 64, 65, 68, 75, 76, 80, 86, 90, 91, 92, 94, 98, 99, 103, 104, 109, 132, 140, 148, 149, 160], "support": [0, 2, 4, 6, 10, 17, 18, 23, 26, 28, 35, 36, 37, 41, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 84, 86, 88, 92, 99, 100, 101, 105, 109, 110, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 154, 160, 165], "start": [0, 1, 2, 3, 4, 6, 8, 9, 16, 18, 20, 23, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 78, 79, 80, 83, 87, 92, 100, 102, 109, 111, 113, 138, 141, 147, 148, 156, 165], "stop": [0, 2, 3, 4, 6, 8, 9, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 39, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 92, 100, 102], "These": [0, 1, 2, 4, 5, 9, 17, 28, 29, 32, 34, 35, 36, 37, 40, 51, 54, 56, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 88, 90, 99, 100, 101, 104, 105, 106, 131, 156, 164], "pass": [0, 2, 3, 4, 6, 8, 9, 10, 13, 14, 16, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 46, 47, 48, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 98, 102, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147], "store": [0, 2, 3, 4, 5, 6, 8, 9, 13, 14, 19, 23, 25, 28, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 49, 51, 52, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 91, 100, 101, 104, 107, 109, 129, 137, 147, 148, 156, 160], "averagestructur": 0, "ref_fram": [0, 34, 36], "averag": [0, 2, 4, 7, 17, 20, 23, 26, 29, 33, 34, 35, 36, 37, 42, 98, 102, 111, 151], "u": [0, 1, 2, 3, 4, 6, 8, 9, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 44, 48, 49, 51, 54, 55, 56, 57, 58, 60, 62, 64, 68, 69, 71, 72, 73, 75, 77, 79, 80, 85, 86, 87, 88, 90, 91, 92, 102, 103, 109, 111, 112, 113, 120, 121, 129, 131, 132, 146, 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160], "third": [0, 3, 37, 38, 86, 90, 91, 103, 140, 156], "av": 0, "averaged_univers": 0, "int": [0, 1, 2, 3, 6, 9, 12, 13, 14, 16, 17, 18, 20, 23, 24, 26, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 42, 49, 50, 51, 54, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 88, 89, 90, 92, 95, 98, 99, 100, 101, 102, 103, 106, 107, 109, 110, 113, 140, 148, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "dtype": [0, 6, 10, 58, 83, 86, 88, 89, 90, 95, 99, 103, 104, 106, 109, 113, 146, 151], "per": [0, 6, 13, 16, 17, 23, 24, 32, 34, 36, 37, 38, 58, 60, 66, 83, 86, 90, 92, 103, 114, 115, 116, 117, 118, 119, 152, 160], "b": [0, 2, 3, 4, 6, 9, 10, 13, 18, 23, 26, 29, 32, 35, 36, 37, 38, 51, 54, 58, 60, 64, 65, 68, 69, 72, 73, 75, 79, 80, 83, 86, 88, 89, 91, 99, 103, 108, 109, 111, 112, 113, 146, 147, 148, 149, 153, 160], "3x3": [0, 86, 103], "vector": [0, 3, 31, 32, 33, 34, 37, 51, 54, 56, 79, 83, 86, 90, 91, 99, 100, 101, 103, 108, 109, 111, 153, 157, 158], "overlap": [0, 32, 37, 76, 86, 92, 146], "mathbf": [0, 33, 35, 36, 37, 86, 90, 103], "mathsf": [0, 86, 90], "cdot": [0, 28, 32, 33, 37, 86, 90, 99, 103, 146], "n": [0, 3, 8, 9, 10, 15, 16, 17, 18, 19, 20, 23, 25, 29, 32, 33, 34, 35, 36, 37, 38, 49, 54, 56, 58, 60, 66, 74, 86, 88, 90, 98, 99, 102, 103, 104, 106, 107, 108, 109, 111, 112, 113, 116, 140, 146, 148, 149, 156, 160, 162], "shape": [0, 3, 4, 10, 12, 13, 15, 17, 20, 25, 32, 34, 35, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 83, 86, 89, 90, 91, 99, 100, 101, 103, 104, 106, 107, 108, 109, 112, 153, 157, 163], "g": [0, 2, 6, 8, 9, 17, 18, 23, 24, 25, 26, 28, 30, 34, 35, 36, 37, 38, 39, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 99, 100, 102, 108, 109, 110, 111, 112, 113, 114, 120, 136, 140, 147, 149, 151, 152, 153, 157, 160, 161, 165], "core": [0, 6, 7, 8, 12, 13, 14, 16, 17, 18, 20, 23, 25, 34, 36, 39, 44, 45, 46, 47, 48, 49, 58, 64, 66, 79, 80, 83, 84, 95, 103, 105, 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 125, 136, 146, 147, 148, 150, 159, 162, 163], "size": [0, 4, 6, 12, 13, 14, 17, 18, 19, 23, 25, 29, 32, 34, 35, 37, 40, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80, 89, 90, 91, 98, 99, 107, 108, 109, 140, 149, 155, 158, 163], "argument": [0, 1, 2, 3, 4, 6, 8, 9, 10, 13, 16, 17, 18, 23, 25, 26, 29, 30, 31, 32, 34, 36, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 84, 85, 86, 88, 90, 92, 99, 102, 104, 105, 106, 108, 109, 113, 120, 131, 132, 135, 146, 147, 148, 149, 150, 151, 157], "mdanalysistest": [0, 2, 3, 4, 7, 9, 35, 40, 49, 77, 80, 84, 86, 146, 165], "tpr": [0, 2, 6, 23, 24, 36, 58, 77, 80, 86, 92, 113, 147, 150], "trr": [0, 23, 72, 73, 76, 77, 79, 84, 92, 101, 111], "copi": [0, 18, 36, 42, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 92, 104, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "backbon": [0, 5, 8, 9, 31, 32, 33, 36, 86, 88, 90, 111, 113], "47681": [0, 77, 85], "user": [0, 2, 6, 8, 9, 28, 32, 34, 36, 38, 40, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 84, 86, 88, 92, 99, 107, 109, 110, 113, 118, 120, 140, 146, 147, 150, 151, 154, 157, 158], "complet": [0, 3, 6, 17, 32, 44, 46, 64, 91, 92, 100, 111, 112, 147, 156, 165], "probabl": [0, 6, 11, 17, 37, 68, 84, 86, 98, 150], "interest": [0, 6, 9, 20, 32, 35, 36, 37, 38, 40, 41, 42, 44, 75, 76, 84, 93, 98, 109, 150, 165], "develop": [0, 57, 76, 81, 82, 84, 88, 89, 93, 99, 108, 109, 110, 111, 145, 150, 152, 161, 165], "normal": [0, 3, 6, 17, 18, 19, 23, 29, 34, 35, 38, 46, 71, 79, 82, 83, 86, 88, 92, 100, 101, 103, 108, 109, 112, 114, 151, 155, 162, 163], "_fit_to": 0, "mobile_coordin": 0, "ref_coordin": [0, 36], "mobile_com": 0, "ref_com": 0, "xyz": [0, 3, 28, 29, 37, 54, 56, 71, 77, 79, 84, 92, 100, 101, 111, 142, 147, 150, 165], "min_rmsd": 0, "minimum": [0, 6, 10, 13, 17, 23, 35, 58, 86, 91, 92, 99, 102, 104, 106, 107, 125, 129, 136, 137, 146, 147, 162, 163], "assum": [0, 3, 6, 13, 17, 23, 25, 33, 34, 36, 37, 38, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 74, 75, 78, 79, 80, 92, 119, 136, 146], "depend": [0, 4, 6, 7, 11, 13, 14, 17, 29, 37, 39, 40, 42, 44, 49, 57, 58, 60, 67, 70, 79, 86, 90, 98, 99, 100, 105, 106, 109, 110, 112, 113, 115, 116, 117, 118, 119, 131, 147, 152, 155, 160, 165], "origin": [0, 3, 6, 8, 12, 13, 16, 17, 22, 23, 24, 32, 34, 38, 44, 49, 51, 54, 56, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 82, 83, 86, 91, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 112, 113, 131, 138, 148, 163], "directli": [0, 2, 4, 6, 13, 16, 19, 20, 34, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 85, 86, 90, 92, 95, 100, 101, 107, 109, 113, 134, 151], "x": [0, 5, 6, 13, 17, 20, 23, 24, 28, 29, 33, 34, 36, 37, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 76, 79, 80, 83, 86, 88, 90, 98, 99, 100, 101, 103, 104, 105, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 160, 162, 163], "accord": [0, 3, 17, 23, 32, 34, 36, 38, 54, 58, 60, 71, 86, 90, 91, 99, 103, 109, 111, 113, 122, 141], "bar": [0, 2, 3, 6, 9, 29, 30, 32, 33, 36, 80, 102, 108], "_": [0, 17, 29, 33, 34, 36, 37, 44, 58, 86, 90, 102, 103, 141], "text": [0, 6, 17, 23, 34, 36, 57, 58, 68, 74, 77, 79, 105, 109, 148], "fastafilenam": 0, "is_align": 0, "ref_resid": 0, "target_resid": 0, "ref_offset": 0, "target_offset": 0, "alnfilenam": 0, "treefilenam": 0, "clustalw2": 0, "fasta": [0, 86, 90], "un": [0, 75, 76, 88, 92], "second": [0, 3, 17, 23, 25, 30, 31, 32, 34, 35, 37, 38, 40, 41, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 102, 103, 109, 113, 147, 156, 160], "pairwis": [0, 8, 14, 34, 103], "suffix": [0, 6, 17, 34, 50, 59, 63, 68, 79, 89, 92, 109, 161], "unless": [0, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 102, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "specifi": [0, 3, 6, 8, 9, 13, 14, 15, 16, 17, 23, 24, 26, 28, 31, 34, 37, 38, 40, 42, 44, 46, 50, 51, 54, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 77, 79, 80, 86, 88, 89, 92, 98, 99, 101, 102, 104, 105, 106, 108, 109, 113, 125, 132, 134, 147, 149, 159], "resid": [0, 3, 6, 9, 10, 31, 35, 36, 37, 38, 49, 50, 56, 64, 72, 79, 86, 88, 90, 92, 99, 103, 109, 113, 122, 124, 125, 128, 131, 132, 133, 134, 136, 137, 138, 139, 141, 147, 149], "complic": [0, 86, 87, 113], "number": [0, 1, 2, 3, 4, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 29, 30, 32, 34, 35, 36, 37, 38, 40, 42, 44, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 100, 101, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 122, 125, 129, 130, 135, 136, 137, 140, 141, 146, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163], "input": [0, 6, 7, 9, 10, 11, 12, 13, 14, 17, 23, 25, 26, 28, 32, 33, 34, 35, 36, 42, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 86, 90, 92, 94, 98, 99, 105, 107, 109, 111, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 144, 147, 150, 151, 158, 160], "gap": [0, 8, 76, 98], "due": [0, 9, 17, 26, 29, 34, 35, 38, 49, 51, 54, 57, 58, 60, 66, 69, 72, 73, 74, 75, 79, 82, 99, 106, 140], "miss": [0, 9, 56, 64, 68, 74, 76, 79, 92, 94, 98, 103, 109, 133, 136, 140], "appear": [0, 6, 20, 38, 55, 60, 74, 76, 86, 91, 103, 118, 119, 120, 134, 147, 155, 159], "topologi": [0, 3, 9, 13, 16, 17, 20, 23, 24, 25, 30, 34, 38, 46, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 88, 92, 105, 109, 110, 111, 113, 132, 134, 151, 162, 163, 165], "tabl": [0, 38, 49, 78, 84, 86, 89, 92, 99, 141, 145, 146, 150, 160], "combin": [0, 13, 16, 24, 26, 34, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 92, 99, 113, 120, 140, 141, 152, 153, 154, 155, 156, 157, 158, 159], "path": [0, 23, 24, 26, 39, 40, 44, 58, 77, 86, 90, 105, 109, 112, 162, 163], "add": [0, 2, 3, 6, 9, 10, 20, 29, 30, 32, 36, 38, 39, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 80, 82, 83, 86, 89, 90, 92, 109, 129, 131, 140, 146, 151, 152, 161, 165], "column": [0, 2, 3, 18, 32, 34, 36, 37, 38, 41, 44, 60, 62, 64, 65, 66, 71, 74, 76, 80, 134, 138, 142], "get": [0, 1, 8, 13, 17, 19, 23, 34, 36, 40, 41, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 87, 89, 90, 91, 101, 102, 103, 109, 111, 140, 151], "clustal": 0, "substitut": [0, 64, 65, 86, 94, 109], "guid": [0, 2, 58, 74, 113, 146, 160], "tree": [0, 13, 88, 106], "newick": 0, "dnd": 0, "binari": [0, 3, 14, 23, 26, 40, 51, 60, 63, 67, 70, 79, 98, 105, 109, 111], "select_dict": 0, "immedi": [0, 79, 83, 92, 111, 151], "sequence_align": 0, "program": [0, 22, 23, 34, 39, 64, 100, 109, 112, 120], "creat": [0, 2, 4, 7, 8, 9, 10, 12, 13, 16, 17, 20, 25, 26, 28, 34, 35, 36, 37, 38, 40, 42, 43, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 66, 69, 70, 71, 72, 73, 75, 77, 79, 82, 83, 86, 88, 89, 90, 91, 92, 99, 100, 102, 104, 105, 106, 109, 110, 111, 113, 114, 115, 116, 117, 118, 119, 120, 122, 125, 126, 127, 129, 130, 131, 134, 135, 136, 137, 138, 139, 142, 143, 144, 146, 147, 149, 152, 155], "arg": [0, 2, 4, 6, 14, 18, 23, 28, 38, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 85, 86, 92, 109, 148], "kwd": [0, 23, 58], "global": [0, 13, 36, 58, 86, 90, 113, 151], "needleman": 0, "wunsch": 0, "bio": [0, 64, 86, 90], "pairwisealign": 0, "dynam": [0, 6, 29, 34, 39, 58, 79, 86, 102, 104, 108, 111, 112, 121, 155, 165], "tune": [0, 25, 58], "suitabl": [0, 6, 23, 34, 38, 88, 113, 146, 155], "similar": [0, 2, 10, 12, 13, 14, 29, 32, 37, 38, 39, 66, 79, 81, 86, 99, 100, 101, 102, 104, 112, 130, 141], "low": [0, 8, 10, 13, 72, 75, 77], "special": [0, 6, 8, 67, 78, 79, 88, 92, 98, 100, 106, 114, 115, 116, 117, 118, 119, 148, 151], "tool": [0, 19, 23, 28, 30, 33, 35, 48, 51, 62, 69, 80, 98, 114, 120, 162, 163], "muscl": 0, "tcoffe": 0, "match_scor": 0, "score": [0, 17, 32], "mismatch_penalti": 0, "penalti": 0, "gap_penalti": 0, "open": [0, 4, 19, 23, 26, 36, 42, 44, 55, 57, 62, 68, 70, 71, 72, 74, 76, 77, 79, 82, 86, 100, 101, 103, 105, 109, 111, 112, 114, 141], "high": [0, 6, 8, 10, 13, 32, 38, 44, 58, 86, 110, 113], "compact": [0, 23, 38, 147], "highli": [0, 24, 29, 68], "might": [0, 4, 13, 16, 38, 40, 49, 51, 68, 75, 76, 86, 91, 104, 113, 146, 148, 159, 160], "gapextension_penalti": 0, "extend": [0, 2, 32, 37, 38, 40, 41, 42, 44, 50, 58, 75, 79, 86, 90, 113, 136, 139, 147, 149, 150], "top": [0, 6, 32, 58, 62, 66, 68, 90, 102, 114, 115, 116, 117, 118, 119, 120, 131, 134, 140, 147], "begin": [0, 6, 37, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 102, 109], "end": [0, 2, 13, 16, 23, 32, 37, 38, 42, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 102, 109, 111, 113, 146], "prefer": [0, 13, 23, 37, 58], "your": [0, 2, 9, 17, 23, 26, 29, 36, 38, 39, 48, 51, 58, 68, 74, 87, 91, 99, 102, 112, 151], "alig": 0, "mode": [0, 6, 13, 17, 19, 50, 57, 58, 64, 65, 66, 68, 69, 77, 100, 101, 102, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120], "mismatch_scor": 0, "open_gap_scor": 0, "extend_gap_scor": 0, "seq": [0, 86, 90, 113, 114], "highest": [0, 86, 90], "topalign": 0, "bioinformat": [0, 9, 38, 112], "workflow": [0, 2, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "biopython": 0, "4": [0, 2, 3, 4, 5, 6, 8, 9, 11, 13, 17, 19, 24, 26, 30, 34, 35, 36, 37, 38, 40, 42, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 75, 80, 86, 87, 89, 90, 91, 92, 99, 101, 102, 103, 104, 107, 108, 109, 112, 113, 131, 140, 141, 142, 146, 147, 148, 149, 159, 160], "pairwise2": 0, "globalm": 0, "usebio": 0, "residuegroup": [0, 9, 25, 28, 86, 90, 92, 94, 95, 109], "releas": [0, 23, 38, 40, 49, 75, 86, 104, 109, 112, 140, 141, 151, 161, 165], "ag1": [0, 1, 35, 86, 99], "ag2": [0, 1, 35, 86, 99, 113], "take": [0, 2, 6, 9, 10, 13, 16, 23, 25, 26, 29, 30, 31, 32, 35, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 99, 102, 103, 109, 111, 113, 120, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 151], "g1": [0, 35, 107], "g2": [0, 35, 107], "consist": [0, 3, 6, 19, 36, 37, 64, 80, 86, 88, 92, 105, 111, 113, 147, 148], "etc": [0, 2, 3, 6, 9, 23, 29, 30, 32, 34, 36, 37, 39, 42, 58, 60, 70, 79, 91, 92, 102, 111, 116, 130, 147, 148], "veri": [0, 17, 23, 27, 37, 38, 58, 64, 66, 68, 80, 86, 101, 102, 109, 111, 113, 146], "simplist": 0, "basi": [0, 20, 22, 24, 34, 66, 75, 112], "discard": [0, 38, 78], "compar": [0, 4, 9, 11, 17, 25, 32, 34, 36, 49, 73, 79, 83, 86, 91, 109, 156], "consid": [0, 1, 6, 8, 10, 13, 17, 19, 20, 23, 24, 26, 36, 37, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 91, 92, 98, 102, 104, 109, 113, 146, 160], "start_log": [0, 38, 102], "about": [0, 3, 4, 8, 9, 16, 34, 37, 38, 44, 58, 67, 69, 73, 86, 90, 100, 102, 108, 126, 127, 140, 143, 151], "mismatch": 0, "attempt": [0, 6, 20, 23, 32, 38, 42, 43, 44, 56, 58, 64, 74, 92, 102, 109, 140, 160], "slice": [0, 2, 3, 6, 9, 17, 23, 26, 29, 30, 32, 36, 39, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 83, 86, 91, 113], "error": [0, 8, 9, 17, 23, 26, 29, 36, 57, 58, 82, 86, 89, 92, 94, 99, 109, 111, 113, 155], "tol": [0, 13], "could": [0, 4, 8, 19, 20, 24, 32, 68, 78, 80, 92, 104, 109, 110, 122, 132, 140], "profile2": 0, "too": [0, 9, 23, 42, 49, 86, 88, 91, 92, 113, 165], "expens": [0, 17, 32], "renam": [0, 23, 28, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "check_same_atom": 0, "possibli": [0, 10, 25, 36, 38, 68, 110, 111, 147], "xu": [1, 60, 98], "hong": 1, "chen": 1, "2023": [1, 141, 165], "class": [1, 6, 7, 11, 13, 14, 16, 17, 18, 19, 28, 30, 33, 35, 39, 41, 42, 43, 45, 46, 50, 52, 53, 55, 65, 66, 67, 68, 69, 72, 73, 76, 78, 82, 84, 87, 88, 90, 91, 93, 95, 100, 101, 103, 106, 108, 110, 111, 115, 116, 117, 118, 119, 120, 121, 145, 148, 150, 153, 154, 155, 156, 157, 158, 159], "over": [1, 2, 3, 4, 6, 8, 17, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 36, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 78, 79, 80, 83, 86, 98, 100, 101, 102, 103, 105, 109, 121, 147, 154, 156, 159], "specif": [1, 2, 3, 15, 23, 26, 29, 34, 35, 38, 39, 49, 51, 54, 57, 58, 60, 62, 64, 66, 67, 69, 71, 72, 73, 75, 79, 80, 86, 94, 99, 109, 110, 112, 120, 140, 149, 151, 152, 160, 164, 165], "n_atom": [1, 32, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 83, 86, 87, 88, 89, 90, 92, 101, 113, 132, 135], "By": [1, 4, 6, 17, 19, 23, 26, 34, 41, 47, 48, 49, 50, 51, 54, 56, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 90, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 160], "period": [1, 3, 4, 6, 10, 20, 25, 29, 35, 36, 54, 58, 68, 76, 79, 86, 88, 91, 95, 99, 103, 104, 106, 110, 113, 141, 146, 155, 162, 163], "boundari": [1, 3, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 99, 104, 106, 109, 146, 155, 162, 163], "condit": [1, 4, 6, 7, 10, 20, 25, 29, 35, 36, 58, 79, 86, 88, 91, 95, 104, 106, 131, 146], "easili": [1, 2, 9, 14, 17, 79, 86, 110, 111, 156], "turn": [1, 2, 3, 6, 9, 17, 23, 29, 30, 32, 36, 44, 56, 89, 113, 140], "off": [1, 4, 8, 9, 16, 23, 25, 38, 40, 56, 67, 72, 103, 104, 113], "time": [1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 17, 19, 20, 23, 24, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 91, 92, 98, 99, 100, 101, 102, 103, 104, 105, 109, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 151, 160], "function": [1, 2, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 22, 24, 26, 29, 31, 33, 37, 38, 39, 44, 45, 46, 48, 49, 51, 54, 57, 58, 60, 61, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 84, 85, 86, 88, 90, 91, 93, 100, 101, 104, 105, 106, 111, 112, 113, 120, 132, 140, 141, 146, 148, 150, 154, 157, 158, 159, 161, 162, 163], "gro": [1, 9, 20, 23, 37, 46, 48, 79, 84, 85, 86, 92, 111, 113, 141, 147, 150, 162, 163], "xtc": [1, 2, 6, 9, 36, 37, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 75, 76, 79, 80, 84, 86, 92, 101, 111, 162, 163], "101": [1, 37, 65, 148], "105": [1, 112], "4001": 1, "4005": 1, "100": [1, 12, 16, 17, 20, 22, 23, 29, 37, 44, 58, 79, 86, 109, 125, 141, 148, 149, 160], "4000": 1, "choic": [1, 8, 13, 16, 32, 79, 86, 99], "my_dist": 1, "our": [1, 8, 20, 23, 29, 32, 37, 48, 58, 146], "37": [1, 19, 34, 66, 88, 148, 149], "80813681": 1, "33": [1, 23, 64, 65, 114, 149], "2594864": 1, "34": [1, 34, 64, 65, 108, 149, 163], "93676414": 1, "51183299": 1, "96340209": 1, "27": [1, 64, 65, 86, 141, 148, 149, 160], "11746625": 1, "31": [1, 26, 38, 64, 65, 107, 112, 148, 149], "19878079": 1, "69439435": 1, "32": [1, 30, 31, 104, 112, 148, 149], "63446126": 1, "10451345": 1, "23": [1, 48, 64, 65, 83, 108, 109, 141, 149, 160], "27210749": 1, "30": [1, 8, 13, 36, 37, 62, 102, 148, 149, 160], "38714688": 1, "48269361": 1, "91444505": 1, "84583838": 1, "18": [1, 23, 37, 56, 62, 64, 65, 86, 109, 112, 132, 136, 137, 138, 140, 148, 149, 155, 160], "40607922": 1, "39": [1, 64, 65, 148, 149], "21993135": 1, "33468192": 1, "41": [1, 3, 64, 65, 86, 149], "0133789": 1, "46885946": 1, "26": [1, 37, 64, 65, 66, 86, 112, 141, 148, 149], "26006981": 1, "9966713": 1, "14991106": 1, "38": [1, 64, 65, 149], "13423586": 1, "95451427": 1, "83845081": 1, "66255735": 1, "35": [1, 2, 4, 6, 23, 67, 148, 149], "59335027": 1, "8926705": 1, "27175056": 1, "51994763": 1, "12161091": 1, "56481743": 1, "36": [1, 66, 112, 148, 149], "8488121": 1, "75278065": 1, "27275501": 1, "7831456": 1, "74359073": 1, "54893794": 1, "76495816": 1, "76272761": 1, "31816555": 1, "81588421": 1, "82491432": 1, "890219": 1, "20012515": 1, "40": [1, 6, 29, 37, 64, 65, 148, 149], "00563374": 1, "83857688": 1, "77886735": 1, "45775864": 1, "without": [1, 18, 37, 40, 44, 49, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 82, 86, 88, 90, 92, 106, 109, 112, 131, 135, 141, 147], "enter": [1, 114, 115, 116, 117, 118, 119], "pbc": [1, 4, 6, 20, 25, 29, 38, 48, 85, 86, 90, 91, 104, 106, 151, 157], "my_dists_nopbc": 1, "482695": 1, "21992825": 1, "0133757": 1, "99666906": 1, "14990985": 1, "13423708": 1, "95451311": 1, "66255625": 1, "27174827": 1, "51": [1, 35, 148, 149], "86981409": 1, "48": [1, 64, 65, 148, 149], "10347964": 1, "39570072": 1, "49": [1, 148, 149], "14423513": 1, "50": [1, 6, 9, 13, 17, 20, 32, 37, 112, 148, 149], "44804292": 1, "56": [1, 149], "39657447": 1, "n_frame": [1, 8, 9, 29, 32, 51, 54, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 92, 100], "5": [1, 2, 3, 4, 6, 8, 9, 13, 15, 16, 17, 19, 22, 23, 24, 25, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 105, 107, 108, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 159, 160], "think": [2, 4, 38], "analysisbas": [2, 19, 30, 34, 35, 36, 37, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "subclass": [2, 6, 44, 68, 75, 79, 86, 88, 90, 91, 92, 94, 102, 134, 152], "inherit": [2, 44, 82, 92, 105, 151, 154, 156, 157, 158, 159], "common": [2, 6, 29, 38, 45, 55, 60, 64, 68, 75, 76, 79, 84, 86, 90, 92, 100, 103, 109, 112, 113, 132, 150, 151], "api": [2, 4, 8, 29, 34, 36, 42, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 76, 80, 83, 84, 85, 86, 105, 108, 161], "make": [2, 6, 7, 23, 24, 29, 36, 38, 40, 42, 49, 51, 58, 68, 76, 79, 80, 82, 83, 85, 86, 90, 92, 98, 102, 103, 105, 109, 110, 111, 113, 133, 144, 145, 155, 160, 161, 162, 163, 165], "mani": [2, 9, 12, 13, 23, 29, 32, 37, 51, 60, 75, 79, 87, 89, 99, 109, 110, 112, 132, 146], "addit": [2, 4, 13, 17, 18, 19, 20, 29, 30, 31, 34, 36, 38, 39, 40, 42, 43, 44, 51, 54, 56, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 88, 91, 100, 102, 103, 106, 109, 113, 120, 147, 150, 161, 164], "featur": [2, 22, 32, 36, 58, 66, 68, 89, 92, 98, 109], "automat": [2, 6, 14, 17, 18, 33, 38, 39, 40, 49, 50, 56, 58, 60, 64, 68, 72, 78, 79, 80, 85, 86, 88, 91, 99, 102, 104, 109, 112, 113, 120, 151, 156, 160, 165], "avail": [2, 13, 14, 15, 16, 18, 20, 22, 23, 26, 32, 34, 35, 39, 40, 44, 46, 49, 51, 54, 57, 58, 60, 62, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 84, 85, 86, 88, 89, 91, 92, 100, 106, 109, 113, 120, 133, 141, 146, 147, 151, 161, 162, 163, 165], "progressbar": [2, 3, 6, 9, 29, 30, 32, 36, 102], "point": [2, 3, 5, 6, 8, 9, 13, 19, 20, 23, 29, 33, 34, 37, 38, 58, 79, 86, 88, 90, 99, 102, 103, 106, 108, 113, 148, 156, 157, 158], "instanti": [2, 104], "kept": [2, 23, 56, 57, 86, 132, 159], "fix": [2, 6, 13, 28, 36, 57, 58, 60, 68, 74, 75, 76, 79, 80, 86, 91, 100, 104, 111, 113, 161], "being": [2, 3, 4, 6, 13, 17, 20, 24, 25, 30, 32, 34, 37, 38, 56, 58, 64, 67, 76, 79, 80, 82, 89, 95, 98, 101, 103, 147, 151, 155, 156], "abl": [2, 23, 79, 85], "enabl": [2, 14, 34, 38, 39, 41, 42, 44, 58, 64, 67, 72, 99, 102, 104, 106, 109, 163], "shown": [2, 5, 6, 9, 26, 29, 40, 72, 109, 121, 151], "estim": [2, 11, 13, 15, 17, 20, 29, 102], "remain": [2, 6, 13, 20, 37, 38, 44, 74, 79, 84, 86, 92, 102, 108, 109, 112, 150, 154], "until": [2, 8, 32, 38, 44, 49, 64, 79, 86, 88, 140], "kind": [2, 31, 79, 86, 92, 146], "item": [2, 19, 34, 86, 89, 90, 91, 102, 149], "via": [2, 5, 8, 20, 24, 28, 35, 40, 58, 68, 91, 99, 109, 111, 112, 133, 140, 155, 160], "decid": [2, 64], "what": [2, 6, 20, 23, 29, 76, 82, 92, 109, 111], "seri": [2, 3, 4, 34, 36, 38, 40, 90, 108, 111], "analyz": [2, 3, 4, 5, 6, 9, 19, 26, 29, 30, 31, 32, 34, 36, 37, 60, 76, 102, 111, 165], "rm": [2, 8, 34, 39, 107, 112], "9": [2, 9, 13, 20, 21, 23, 24, 26, 30, 31, 34, 38, 51, 54, 56, 57, 58, 60, 62, 64, 65, 66, 69, 71, 72, 73, 75, 80, 86, 90, 91, 92, 99, 105, 109, 113, 127, 132, 134, 136, 138, 141, 143, 144, 146, 148, 149, 160], "boolean": [2, 3, 4, 6, 9, 13, 29, 30, 32, 36, 37, 44, 58, 75, 79, 83, 86, 88, 90, 99, 104, 146, 152], "plot": [2, 4, 5, 6, 8, 16, 20, 23, 24, 26, 28, 29, 33, 34, 35, 36, 37, 40, 41, 111, 162, 163], "y": [2, 5, 6, 23, 29, 33, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 99, 103, 108, 109, 113, 132, 148, 162, 163], "doc": [2, 6, 26, 58, 86, 102, 109], "matplotlib": [2, 4, 5, 8, 9, 16, 20, 23, 26, 29, 33, 34, 36, 37, 40, 162, 164], "pyplot": [2, 4, 5, 8, 9, 20, 23, 26, 29, 34, 36, 37, 40, 162], "plt": [2, 4, 5, 8, 9, 16, 20, 29, 35, 36, 37, 40], "xlabel": [2, 4, 8, 23, 37], "p": [2, 17, 20, 23, 25, 26, 34, 36, 37, 38, 40, 41, 42, 44, 47, 51, 52, 53, 54, 55, 56, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 83, 86, 88, 109, 112, 113, 146, 148, 157, 160, 162, 163], "ylabel": [2, 4, 8, 23, 37], "\u00e5": [2, 4, 6, 20, 23, 24, 38, 51, 54, 60, 64, 66, 68, 80, 83, 86, 90, 98, 153, 160], "_single_fram": 2, "chapter": [2, 111], "own": [2, 8, 9, 13, 23, 39, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 79, 83, 85, 87, 101, 109, 112, 151, 152], "essenti": [2, 6, 32, 93, 109, 112, 147], "almost": [2, 51, 60, 79, 92, 113], "aim": [2, 17, 79, 84, 147, 150], "useabl": 2, "analysisfromfunct": [2, 80], "analysis_class": 2, "simpl": [2, 8, 17, 19, 23, 26, 29, 39, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 74, 75, 79, 80, 86, 87, 92, 94, 98, 102, 108, 109, 110, 111, 112, 120, 147, 151, 160], "wrapper": [2, 13, 16, 100, 101, 102, 106, 110], "even": [2, 6, 10, 23, 60, 75, 92, 99, 108, 112, 113, 141, 147, 161], "easier": [2, 28, 36, 38, 40, 105], "fulli": [2, 58, 79], "multi": [2, 20, 23, 38, 64, 75, 78, 79, 86, 90, 137, 140, 148, 152, 155], "design": [2, 3, 4, 13, 18, 79, 91, 109, 152], "templat": [2, 90, 152], "analys": [2, 3, 6, 9, 16, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30, 32, 33, 36, 37, 38, 86, 90, 98, 151, 164], "care": [2, 39, 66, 104], "up": [2, 4, 10, 13, 19, 23, 24, 26, 29, 32, 34, 37, 38, 42, 51, 54, 56, 58, 60, 64, 66, 69, 72, 73, 75, 76, 78, 79, 80, 86, 90, 92, 98, 99, 100, 106, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 134, 136, 146, 151, 152, 156], "reader": [2, 29, 43, 45, 47, 48, 49, 50, 51, 54, 56, 58, 59, 60, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 76, 78, 83, 84, 92, 100, 105, 109, 125, 132, 135, 136, 140, 141, 149, 150], "iter": [2, 3, 4, 6, 13, 14, 17, 23, 25, 26, 32, 33, 36, 38, 41, 42, 49, 51, 54, 55, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 83, 86, 92, 100, 101, 102, 109, 111, 149, 153, 156], "offer": [2, 29, 91], "meter": [2, 102], "_prepar": 2, "_conclud": 2, "pre": [2, 4, 13, 16, 20, 34, 98, 101, 149, 160, 161], "post": [2, 100, 103], "process": [2, 6, 19, 20, 23, 26, 29, 34, 38, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 100, 109, 136, 149, 155, 159], "coordin": [2, 6, 8, 10, 14, 15, 16, 17, 19, 22, 23, 26, 29, 32, 34, 35, 36, 39, 40, 42, 44, 47, 48, 49, 86, 87, 90, 92, 99, 100, 101, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 147, 150, 151, 154, 155, 157, 158, 159, 162, 163, 165], "readerbas": [2, 40, 42, 60, 75, 79, 92], "debug": [2, 38, 102], "timestep": [2, 10, 17, 24, 29, 32, 33, 37, 38, 42, 44, 48, 51, 54, 55, 56, 57, 58, 60, 62, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 82, 84, 86, 92, 95, 99, 103, 104, 106, 109, 110, 132, 151, 153, 154, 155, 156, 157, 158, 159], "exist": [2, 4, 8, 17, 20, 23, 34, 35, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 80, 81, 83, 86, 89, 90, 92, 99, 101, 105, 109, 114, 115, 116, 117, 118, 119, 120, 146, 151], "call": [2, 4, 6, 8, 10, 13, 16, 17, 18, 20, 23, 24, 29, 32, 34, 38, 42, 44, 51, 54, 56, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 82, 85, 86, 87, 88, 92, 98, 99, 100, 101, 102, 104, 107, 109, 111, 113, 135, 147, 149, 151, 152, 156], "indic": [2, 3, 6, 9, 13, 14, 17, 20, 23, 26, 29, 30, 32, 34, 36, 37, 38, 40, 41, 44, 49, 51, 54, 57, 58, 60, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 89, 90, 91, 92, 94, 98, 99, 100, 103, 104, 106, 109, 113, 120, 129, 132, 140, 147, 161], "newanalysi": 2, "def": [2, 4, 38, 85, 109, 151, 152], "__init__": [2, 42, 44, 68, 75, 79, 83, 85, 110, 114, 151, 152], "self": [2, 8, 44, 58, 70, 75, 79, 83, 85, 86, 104, 109, 112, 151, 152], "super": [2, 44, 75, 152], "_paramet": 2, "_ag": 2, "begun": 2, "data": [2, 3, 6, 8, 9, 11, 13, 17, 18, 23, 24, 26, 28, 29, 32, 33, 34, 35, 36, 37, 38, 41, 42, 43, 44, 45, 47, 48, 49, 51, 54, 55, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 83, 84, 85, 86, 89, 91, 92, 93, 94, 98, 100, 103, 105, 108, 110, 111, 112, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 149, 151, 162, 163, 164], "example_result": 2, "move": [2, 20, 21, 23, 26, 29, 38, 42, 44, 48, 50, 51, 54, 56, 57, 58, 60, 64, 65, 66, 69, 70, 71, 72, 73, 75, 79, 80, 85, 86, 89, 90, 99, 102, 103, 108, 109, 147, 148, 155, 157, 158, 159, 160], "some_funct": [2, 152], "append": [2, 34, 38, 72, 77, 79, 86, 92, 105, 114, 115, 116, 117, 118, 119, 120], "onc": [2, 6, 20, 22, 38, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 92, 100, 102, 109, 112, 113, 156], "finish": [2, 18, 23, 79], "normalis": [2, 38], "here": [2, 6, 8, 13, 16, 17, 24, 28, 32, 34, 37, 40, 42, 48, 56, 62, 64, 84, 86, 90, 91, 100, 104, 109, 140, 146, 150], "asarrai": 2, "sum": [2, 3, 6, 20, 32, 34, 36, 38, 76, 86, 90, 108, 162], "afterward": [2, 72, 86, 152], "like": [2, 4, 6, 10, 23, 28, 32, 38, 40, 49, 51, 54, 55, 57, 58, 60, 62, 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 79, 80, 81, 83, 86, 90, 92, 95, 100, 101, 102, 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, 118, 119, 125, 140, 147, 151, 152, 157, 158], "na": [2, 20, 23, 108, 109, 148], "20": [2, 4, 6, 20, 24, 25, 29, 33, 37, 60, 61, 62, 64, 65, 68, 83, 86, 90, 98, 99, 102, 103, 109, 133, 134, 146, 148, 149, 160, 162, 163], "print": [2, 3, 4, 7, 13, 14, 17, 22, 23, 28, 33, 37, 38, 39, 40, 44, 58, 62, 68, 77, 79, 85, 86, 92, 100, 101, 102, 105, 109, 111, 113, 146, 155, 156], "kei": [2, 6, 20, 26, 28, 34, 38, 40, 42, 44, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 88, 89, 91, 92, 99, 109, 113, 148], "progressbar_kwarg": [2, 3, 6, 9, 29, 30, 32, 36], "skip": [2, 3, 6, 9, 23, 29, 30, 32, 36, 44, 51, 60, 64, 76, 79, 80, 83, 100, 102, 103, 140], "integ": [2, 3, 6, 9, 10, 13, 17, 23, 29, 30, 32, 36, 51, 54, 57, 58, 60, 64, 65, 66, 69, 71, 72, 73, 75, 80, 88, 89, 100, 101, 104, 105, 109, 113, 129, 147, 148, 149], "valueerror": [2, 3, 6, 9, 29, 30, 32, 36, 42, 43, 44, 49, 50, 51, 54, 57, 58, 60, 64, 66, 68, 69, 70, 71, 72, 73, 75, 76, 78, 80, 85, 86, 88, 90, 92, 94, 103, 105, 108, 109, 134, 144, 146, 160], "custom": [2, 3, 4, 6, 8, 9, 29, 30, 32, 36, 38, 58, 74, 79, 82, 85, 92, 102, 109, 114, 146, 151, 157], "regard": [2, 3, 6, 9, 23, 29, 30, 32, 36, 38, 58, 75], "full": [2, 3, 6, 9, 13, 17, 19, 29, 30, 32, 34, 36, 39, 40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 66, 67, 68, 69, 71, 72, 73, 75, 79, 80, 92, 107, 109, 132, 135, 147, 161, 165], "abil": [2, 3, 6, 9, 24, 29, 30, 32, 36, 68], "modifi": [2, 3, 6, 9, 13, 16, 24, 29, 30, 32, 36, 38, 47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 86, 99, 103, 107, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151, 153, 159], "descript": [2, 3, 6, 9, 13, 17, 18, 23, 26, 29, 30, 32, 36, 42, 44, 51, 54, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 98, 99, 107, 112, 151], "tqdm": [2, 3, 6, 9, 29, 30, 32, 36, 102], "callabl": [2, 4, 13, 18, 23, 34, 86], "evalu": [2, 11, 17, 20, 37, 58, 86, 88, 99, 104, 106, 113], "simul": [2, 4, 6, 7, 8, 10, 11, 13, 16, 17, 19, 28, 29, 30, 32, 36, 37, 38, 40, 41, 44, 47, 48, 51, 57, 64, 67, 68, 76, 79, 86, 87, 92, 95, 99, 100, 105, 106, 111, 112, 120, 129, 147, 153, 155, 160, 162, 163], "timeseri": [2, 4, 24, 29, 36, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 98], "align": [2, 6, 10, 14, 17, 20, 23, 32, 34, 36, 37, 39, 44, 45, 58, 66, 86, 90, 110, 111, 112, 154, 158], "rot": [2, 107], "former": [2, 33, 80, 82, 86, 98], "value_kei": 2, "sklearn": [2, 13, 16, 17], "util": [2, 11, 12, 13, 14, 16, 17, 29, 36, 57, 82, 88, 105, 110, 125, 150], "bunch": 2, "scikit": [2, 13, 16, 39, 151], "learn": [2, 13, 16, 32, 39, 151], "attributeerror": [2, 3, 94], "assign": [2, 4, 6, 8, 12, 13, 23, 24, 30, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 79, 80, 86, 92, 109, 113, 134, 136, 140, 147, 163], "librari": [2, 13, 23, 46, 51, 58, 60, 67, 68, 75, 77, 79, 102, 108, 151, 165], "style": [2, 23, 51, 60, 79, 111, 140, 151], "rotationmatrix": 2, "decor": [2, 88, 102], "soohaeng": 3, "yoo": 3, "willow": 3, "david": [3, 9, 36, 67, 108, 112], "minh": 3, "2020": [3, 22, 23, 29, 98, 141, 149], "v2": [3, 8, 9, 19, 23, 26, 29, 36, 80, 98, 104], "higher": [3, 8, 28, 30, 38, 99, 100, 103], "interconvert": 3, "cartesian": [3, 6, 28, 34, 56, 83, 86, 90, 100], "intern": [3, 6, 10, 19, 22, 34, 44, 76, 83, 86, 88, 89, 90, 91, 98, 99, 100, 101, 102, 103, 109, 113, 125, 136, 137, 140, 141, 146], "system": [3, 6, 7, 8, 10, 19, 20, 23, 25, 26, 29, 31, 33, 35, 40, 48, 49, 51, 56, 58, 60, 61, 62, 64, 66, 67, 69, 72, 73, 79, 83, 86, 88, 89, 90, 91, 92, 99, 102, 103, 107, 109, 111, 112, 125, 131, 136, 138, 139, 140, 147, 154, 155, 162, 163], "chang2003": 3, "redund": [3, 86, 113], "correl": [3, 24, 32, 35, 37, 51, 60, 110, 112], "degre": [3, 20, 24, 31, 38, 51, 60, 64, 65, 68, 80, 83, 86, 90, 91, 99, 103, 109, 153, 157], "freedom": 3, "3n": [3, 32, 34], "improp": [3, 60, 86, 90, 91, 92, 129, 130, 131, 139, 140, 141, 146, 149], "hikiri2016": 3, "pair": [3, 4, 13, 16, 17, 20, 23, 24, 26, 30, 31, 34, 35, 86, 90, 99, 103, 104, 106, 147, 148, 149], "central": [3, 83, 93, 99, 106, 109], "four": [3, 17, 90, 91, 99, 125, 147], "d": [3, 4, 6, 10, 24, 29, 30, 31, 34, 35, 37, 38, 86, 88, 89, 90, 98, 99, 103, 109, 111, 112, 146, 149, 157], "plane": [3, 23, 86, 90, 91, 99, 103, 108, 146, 147, 154, 163], "anoth": [3, 6, 10, 32, 35, 37, 38, 46, 79, 83, 85, 86, 87, 91, 92, 99, 100, 101, 106, 111, 113, 114, 120, 155, 160], "share": [3, 14, 30, 35, 58, 67, 75, 79, 80, 86, 90, 92, 131, 132], "primari": [3, 29, 79, 86, 90, 99, 103, 106, 121, 159], "raw": [3, 20, 32, 35, 37, 58, 61, 79, 80, 83, 92, 98, 100, 105, 148], "definit": [3, 4, 8, 20, 29, 37, 47, 55, 64, 65, 74, 75, 86, 90, 91, 93, 103, 140], "reduc": [3, 8, 16, 17, 23, 32, 58, 73, 102, 104], "molecul": [3, 6, 7, 8, 10, 23, 24, 35, 36, 37, 38, 46, 54, 60, 62, 74, 86, 90, 92, 98, 103, 113, 130, 131, 134, 151, 155, 159, 160, 162, 163], "six": [3, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 89, 99], "extern": [3, 26, 39, 79, 86, 92, 94, 113, 114, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159], "space": [3, 6, 8, 11, 16, 17, 23, 32, 36, 40, 58, 64, 66, 73, 74, 79, 83, 86, 99, 109, 113, 132, 139, 148, 162, 163], "three": [3, 6, 11, 17, 20, 23, 26, 28, 32, 38, 54, 56, 58, 66, 76, 79, 83, 89, 90, 91, 92, 99, 103, 147], "": [3, 6, 9, 13, 16, 22, 23, 29, 32, 34, 36, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 74, 75, 76, 79, 80, 85, 86, 88, 90, 92, 95, 98, 99, 100, 103, 107, 108, 109, 112, 113, 114, 115, 116, 117, 118, 119, 148, 149, 150, 160, 162, 163], "axi": [3, 20, 23, 29, 32, 33, 34, 36, 37, 86, 90, 91, 99, 103, 104, 108, 157, 162, 163], "convent": [3, 10, 29, 34, 35, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 90, 91, 99, 100, 102, 104, 106, 140], "polar": [3, 23, 112, 149], "phi": [3, 5, 9, 86, 90], "azimuth": 3, "theta": [3, 37], "omega": [3, 86, 90], "adapt": 3, "algdock": 3, "minh2020": 3, "dihedr": [3, 5, 39, 60, 86, 90, 91, 92, 99, 103, 113, 129, 130, 131, 139, 140, 141, 146], "calc_dihedr": [3, 9, 99], "adenyl": [3, 9, 36, 111], "kinas": [3, 9, 36, 111], "adk": [3, 4, 9, 13, 16, 17, 36, 111], "within": [3, 4, 6, 7, 9, 10, 19, 20, 23, 24, 25, 32, 35, 37, 38, 40, 42, 44, 47, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 87, 88, 90, 91, 92, 95, 98, 99, 102, 104, 106, 109, 111, 113, 131, 133, 140, 144, 146, 159], "selected_residu": 3, "code": [3, 15, 22, 23, 26, 29, 34, 36, 38, 39, 40, 44, 51, 56, 61, 62, 64, 65, 79, 81, 85, 86, 87, 90, 92, 94, 99, 100, 101, 102, 103, 108, 110, 112, 113, 130, 132, 134, 138, 145, 146, 148, 151, 152, 160, 164], "snippet": 3, "previou": [3, 6, 9, 13, 17, 20, 30, 37, 38, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 82, 86, 90, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 149, 156], "reconstruct": 3, "close": [3, 4, 8, 17, 19, 23, 26, 29, 32, 36, 38, 42, 44, 47, 48, 49, 51, 52, 54, 55, 57, 58, 60, 62, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 86, 91, 99, 100, 101, 105, 108, 109, 111, 112, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146], "allclos": [3, 108], "atol": [3, 86, 88], "1e": [3, 13, 86, 88, 160], "pi": [3, 35, 99, 103, 108], "12": [3, 8, 23, 34, 37, 48, 54, 58, 62, 64, 65, 86, 109, 112, 114, 140, 148, 149, 160, 162, 163], "good": [3, 37, 67, 102], "disk": [3, 17, 23, 36, 58, 68, 72, 73, 109], "load": [3, 5, 6, 7, 8, 14, 17, 18, 20, 26, 29, 32, 34, 36, 40, 44, 57, 62, 64, 68, 69, 72, 73, 79, 80, 83, 86, 87, 92, 105, 111, 121, 129], "again": [3, 20, 23, 72, 99, 147, 155], "npy": 3, "rnew": 3, "o": [3, 8, 9, 15, 20, 23, 33, 38, 39, 46, 54, 58, 75, 77, 79, 82, 84, 86, 88, 91, 99, 104, 109, 110, 111, 112, 113, 146, 148], "ag": [3, 9, 29, 35, 49, 58, 64, 80, 85, 86, 90, 91, 92, 113, 148, 152, 154, 157, 158, 159], "initial_atom": 3, "belong": [3, 13, 16, 17, 20, 24, 32, 36, 76, 86, 89, 90, 91, 92, 103, 111, 113, 140, 147], "unavail": [3, 92], "mai": [3, 6, 13, 23, 24, 29, 34, 35, 37, 38, 40, 42, 44, 49, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 79, 80, 86, 90, 92, 98, 99, 102, 105, 109, 113, 120, 125, 146, 152, 155, 157, 161, 165], "guess": [3, 20, 23, 24, 43, 44, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 77, 78, 80, 86, 89, 90, 91, 92, 99, 103, 109, 120, 122, 123, 124, 125, 126, 127, 128, 130, 131, 133, 134, 136, 137, 138, 140, 143, 147, 148, 150, 160], "guess_bond": [3, 20, 86, 92, 103, 146, 148], "associ": [3, 6, 13, 17, 19, 36, 39, 40, 42, 51, 54, 58, 60, 64, 69, 72, 73, 75, 77, 86, 90, 109, 112, 151], "whose": [3, 8, 17, 32, 34, 38, 60, 165], "heaviest": 3, "termin": [3, 38, 100, 102, 109], "recalcul": [3, 6, 17, 72], "nframe": [3, 29, 80], "row": [3, 8, 14, 18, 22, 24, 34, 38, 99, 109], "initi": [3, 6, 8, 13, 18, 20, 23, 32, 36, 38, 39, 44, 51, 54, 57, 58, 60, 64, 67, 68, 69, 71, 72, 73, 74, 75, 78, 79, 80, 86, 90, 92, 99, 102, 104, 106, 108, 109, 114, 147, 149, 156], "next": [3, 4, 24, 26, 29, 37, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 82, 100, 101, 108, 113, 120, 140], "r_": [3, 29], "01": [3, 11, 17, 48, 88, 112, 132], "a_": [3, 33], "012": [3, 65], "bat_fram": 3, "convers": [3, 6, 10, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 99, 108, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "dimens": [3, 6, 8, 10, 16, 17, 23, 29, 30, 32, 34, 51, 54, 56, 58, 60, 62, 64, 66, 68, 69, 72, 73, 75, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 109, 151, 155, 158], "proper": [3, 34, 75, 109, 141, 147, 149], "oppos": [3, 34], "around": [3, 6, 10, 13, 24, 29, 35, 37, 58, 64, 86, 87, 88, 91, 95, 98, 99, 103, 106, 109, 113, 138], "properti": [3, 6, 22, 29, 30, 31, 34, 42, 49, 51, 54, 55, 57, 58, 60, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 80, 83, 85, 86, 87, 88, 89, 90, 91, 92, 98, 106, 109, 113, 129, 147, 149], "read": [3, 6, 23, 32, 39, 40, 41, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 82, 83, 84, 86, 89, 90, 92, 106, 109, 110, 111, 113, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 142, 143, 144, 147, 149, 150, 151, 160, 165], "chia": 3, "en": [3, 14, 40, 103, 109, 149], "michael": [3, 9, 34], "j": [3, 4, 8, 9, 10, 13, 14, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 37, 38, 98, 99, 104, 107, 108, 111, 112, 148, 160], "potter": 3, "k": [3, 8, 9, 10, 13, 16, 23, 26, 34, 36, 76, 86, 88, 90, 99, 107, 112, 148], "gilson": 3, "molecular": [3, 8, 9, 16, 23, 29, 32, 37, 53, 60, 67, 79, 90, 104, 108, 111, 112, 121, 147, 150, 155, 165], "configur": [3, 9, 10, 34, 36, 51, 58, 99, 102, 104], "integr": [3, 17, 20, 26, 29, 48, 51, 58, 60, 67, 70, 72, 79, 100], "journal": [3, 8, 9, 11, 15, 16, 17, 19, 23, 29, 30, 31, 34, 37, 67, 98, 108, 112, 155, 160], "physic": [3, 6, 8, 29, 37, 58, 98, 112, 160], "chemistri": [3, 29, 30, 31, 37, 67, 90, 160], "107": [3, 38, 98, 112, 148], "1048": 3, "1055": 3, "2003": [3, 9, 15, 16, 26], "doi": [3, 4, 8, 9, 11, 17, 19, 23, 26, 29, 30, 31, 32, 34, 36, 37, 38, 67, 98, 108, 111, 112, 148, 155, 160, 162, 163], "1021": [3, 19, 29, 30, 31, 37, 98, 112, 148, 155], "jp027149c": 3, "simon": [3, 9], "hikiri": 3, "takashi": 3, "yoshidom": 3, "mitsunori": 3, "ikeguchi": 3, "entropi": 3, "chemic": [3, 8, 19, 29, 30, 31, 37, 98, 146, 155], "theori": [3, 29, 90, 98, 155], "5990": 3, "6000": 3, "2016": [3, 8, 32, 36, 80, 107, 112, 141, 149], "pmid": [3, 19, 30, 31], "27951672": 3, "ac": [3, 19, 38, 98, 148, 155], "jctc": [3, 98, 155], "6b00563": 3, "l": [3, 6, 8, 19, 25, 29, 34, 36, 86, 99, 107, 109, 112, 160], "alchem": 3, "grid": [3, 6, 19, 23, 99, 104, 110, 162, 163], "dock": [3, 62, 134], "bind": [3, 6, 35, 38, 68], "free": [3, 26, 58, 79], "energi": [3, 4, 40, 47, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 80, 98, 149, 160], "flexibl": [3, 17, 23, 36, 51, 58, 80, 86, 90, 105, 165], "rigid": [3, 55, 74], "receptor": 3, "7": [3, 6, 9, 19, 23, 26, 31, 32, 34, 35, 36, 40, 47, 48, 49, 51, 54, 56, 57, 58, 60, 62, 64, 65, 69, 71, 72, 73, 75, 76, 78, 80, 83, 86, 90, 94, 98, 102, 103, 109, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 149, 156, 159, 160, 161, 165], "715": 3, "730": 3, "http": [3, 8, 9, 14, 15, 23, 29, 30, 31, 38, 58, 62, 67, 88, 102, 103, 107, 108, 109, 140, 160, 165], "org": [3, 8, 9, 23, 29, 30, 31, 38, 58, 67, 102, 103, 108, 109, 140, 160, 165], "1002": [3, 9, 30, 31, 38, 67, 112, 160], "jcc": [3, 30, 31, 67, 112], "26036": 3, "q": [4, 17, 18, 23, 26, 34, 65, 66, 79, 86, 88, 90, 108, 149], "conform": [4, 9, 12, 13, 14, 16, 17, 19, 30, 31, 34, 49, 56, 64, 66, 92, 112], "closer": [4, 42], "radiu": [4, 23, 35, 37, 66, 79, 86, 88, 90, 95, 106, 108, 111, 113, 141, 147, 163], "fraction": [4, 38, 54, 60, 99], "metric": [4, 8, 34, 102], "well": [4, 11, 13, 17, 18, 38, 39, 51, 75, 79, 80, 86, 94, 98, 99, 100, 101, 104, 106, 108, 111, 134, 146, 147], "hard": [4, 56, 68, 86, 113, 145, 146, 148, 160], "cut": [4, 16, 25, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "count": [4, 6, 10, 19, 20, 24, 34, 35, 37, 38, 79, 162, 163], "soft": 4, "potenti": [4, 13, 16, 24, 38, 40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 109, 111, 141, 149], "larg": [4, 6, 9, 23, 25, 34, 35, 36, 38, 42, 66, 68, 101, 112, 162, 163], "soft_cut_q": 4, "cannot": [4, 6, 9, 23, 26, 29, 43, 49, 58, 60, 66, 68, 70, 78, 79, 82, 86, 90, 109, 129, 151], "apart": [4, 155], "total": [4, 13, 24, 32, 34, 38, 42, 44, 48, 51, 54, 57, 58, 60, 64, 69, 70, 71, 72, 73, 75, 79, 80, 83, 86, 87, 89, 90, 98, 102, 113, 149], "divid": [4, 6, 17, 19, 34, 36, 68, 104, 109, 140], "As": [4, 6, 32, 34, 38, 40, 42, 44, 51, 56, 58, 60, 62, 74, 76, 86, 92, 98, 113, 121, 140, 147, 148, 151, 160, 161], "unzip": [4, 111], "salt": [4, 38], "bridg": [4, 10, 24, 39], "enzym": 4, "transit": [4, 36, 111], "crude": [4, 23], "nh": [4, 20, 38, 148], "nz": [4, 38, 54], "ly": [4, 10, 38, 86, 99, 103, 104, 109, 113], "oe": 4, "od": [4, 38], "asp": [4, 38], "glu": [4, 38, 113], "littl": [4, 70, 99, 101, 148], "bit": [4, 62, 68, 100, 101, 104, 134, 148], "harder": [4, 37], "problem": [4, 8, 13, 29, 32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 94, 113, 161], "real": [4, 6, 54, 60, 64, 65, 66, 99, 108, 109, 111], "sel_bas": 4, "resnam": [4, 6, 9, 20, 24, 37, 38, 48, 49, 50, 56, 64, 65, 86, 88, 90, 92, 109, 113, 122, 124, 125, 128, 131, 133, 134, 136, 137, 138, 139, 140, 141, 147, 149], "sel_acid": 4, "separ": [4, 12, 13, 16, 17, 23, 26, 33, 34, 35, 37, 41, 42, 64, 66, 79, 86, 88, 92, 99, 109, 113, 120, 132, 139, 147, 148], "eg": [4, 61, 86, 88, 89, 92, 113], "crystal": [4, 86, 113, 148], "acid": [4, 9, 26, 38, 86, 88, 90, 109, 112], "basic": [4, 6, 9, 17, 19, 32, 40, 54, 75, 79, 82, 87, 102, 104, 113, 122, 128, 130, 141, 160], "ca1": 4, "refgroup": 4, "averav": 4, "average_contact": 4, "fig": [4, 9, 29, 36, 162, 163], "ax": [4, 5, 6, 8, 9, 22, 23, 26, 28, 29, 33, 34, 36, 86, 90, 108, 162, 163], "subplot": [4, 8, 9, 37], "titl": [4, 37, 64, 68, 70, 109], "2f": 4, "graph": [4, 9, 23, 25, 26, 33, 37], "state": [4, 13, 17, 19, 28, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 107, 108, 111, 112], "disappear": [4, 24, 98], "wise": [4, 10, 34], "fashion": [4, 38, 160], "clear": [4, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 111], "movi": [4, 64], "adk_zipper_cartoon": 4, "avi": 4, "suggest": [4, 6], "cutoff": [4, 8, 9, 10, 19, 24, 25, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 99, 104, 106, 113], "coars": [4, 38, 149], "grain": [4, 149], "dim": [4, 16, 28, 36, 153], "project": [4, 17, 32, 39, 99, 108, 110], "franklin2007": 4, "q1q2": 4, "f": [4, 6, 8, 24, 32, 33, 34, 44, 51, 52, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 77, 80, 100, 101, 104, 105, 108, 109, 111, 112, 146, 148, 160], "figsiz": [4, 9, 34, 36, 37], "figaspect": [4, 9], "label": [4, 23, 29, 34, 36, 38, 68, 147, 161], "legend": [4, 23, 36], "loc": [4, 36], "best": [4, 8, 9, 13, 23, 25, 29, 34, 36, 58, 108, 114], "pathwai": [4, 23, 34, 112], "minactionpath": 4, "form": [4, 10, 13, 17, 19, 20, 23, 24, 26, 34, 37, 38, 40, 68, 83, 86, 90, 91, 92, 95, 99, 103, 106, 108, 109, 111, 146, 147, 157], "prescrib": [4, 18, 64], "is_any_clos": 4, "r0": [4, 108], "dist": [4, 10, 34, 38, 99], "nc": [4, 68, 79, 92, 148, 149], "bound": [4, 17, 32, 38, 58, 86, 102, 104, 109], "ylim": 4, "hard_cut_q": 4, "beta": [4, 10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 141, 153], "lambda_const": 4, "best2013": 4, "r_0": 4, "frac": [4, 7, 20, 25, 29, 33, 36, 37, 86, 90, 98, 103, 160, 162], "lambda": [4, 16, 58, 69, 80, 86, 99, 101, 140], "reason": [4, 8, 17, 23, 39, 58, 68, 109, 147], "unitless": [4, 130], "angstrom": [4, 6, 20, 25, 28, 48, 49, 50, 51, 52, 54, 55, 59, 60, 62, 63, 64, 65, 66, 68, 71, 74, 79, 81, 86, 95, 113, 151, 160, 162, 163], "robert": [4, 38, 107], "gerhard": [4, 29], "hummer": [4, 29], "william": [4, 160], "eaton": 4, "fold": [4, 99, 112], "mechan": [4, 25], "atomist": [4, 111], "proceed": [4, 112], "nation": 4, "academi": 4, "scienc": [4, 8, 9, 13, 29, 108, 112], "110": [4, 141, 149], "44": [4, 86, 148, 149], "17874": 4, "17879": 4, "1073": 4, "pna": 4, "1311599110": 4, "radius_cut_q": 4, "unus": [4, 19, 36, 64, 68, 140], "fullfil": 4, "joel": 4, "franklin": 4, "patric": 4, "koehl": 4, "sebastian": 4, "doniach": 4, "marc": 4, "delaru": 4, "maximum": [4, 6, 10, 12, 13, 14, 15, 16, 17, 20, 24, 32, 37, 38, 49, 56, 58, 60, 64, 76, 86, 98, 99, 102, 106, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, 163], "likelihood": [4, 15, 17], "scale": [4, 6, 8, 17, 29, 60, 68, 102, 108, 146], "local": [4, 8, 22, 58, 76, 86, 131], "harmon": [4, 8, 11, 17, 141, 149], "landscap": 4, "nucleic": [4, 26, 86, 88, 113], "research": [4, 26, 39], "suppl_2": 4, "w477": 4, "w482": 4, "2007": [4, 13, 19, 108, 112, 160], "1093": [4, 26], "nar": [4, 26, 148], "gkm342": 4, "contact_matrix": [4, 10], "suppli": [4, 6, 7, 8, 9, 10, 13, 16, 17, 23, 25, 26, 28, 29, 32, 34, 35, 38, 43, 44, 51, 54, 56, 58, 60, 64, 69, 72, 73, 74, 75, 78, 79, 86, 92, 99, 103, 104, 109, 144, 146, 147], "alloc": [4, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 83, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "correct": [4, 24, 29, 32, 33, 36, 38, 49, 51, 58, 70, 79, 86, 90, 91, 99, 109, 146, 147, 151, 157], "fill": [4, 6, 10, 14, 20, 23, 36, 79, 99, 102, 132], "increas": [4, 6, 8, 17, 23, 34, 49, 58, 76, 86, 106, 109, 113, 146, 161], "hard_cut": 4, "basekwarg": 4, "observ": [4, 19, 20, 24, 38, 58, 86, 90, 98, 109, 160], "standard": [4, 6, 9, 13, 15, 17, 18, 23, 25, 26, 28, 31, 38, 42, 49, 50, 51, 54, 57, 58, 60, 64, 65, 68, 69, 71, 72, 73, 75, 77, 79, 80, 86, 102, 105, 109, 111, 113, 125, 136, 139, 147, 149, 160, 162], "signatur": [4, 34, 79, 107], "func": [4, 23, 86, 88, 109, 114], "2d": [4, 10, 29, 30, 34, 86, 90, 99, 109, 163, 164], "accept": [4, 6, 8, 10, 17, 23, 25, 29, 32, 78, 85, 86, 90, 99, 109, 113], "soft_cut": 4, "radius_cut": 4, "mdanalysi": [5, 15, 18, 22, 39, 45, 46, 82, 84, 93, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 124, 125, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 149, 150, 164], "experiment": [5, 11, 17, 36, 49, 68, 79, 147], "theoret": [5, 29], "packag": [5, 26, 27, 29, 34, 39, 40, 46, 51, 53, 58, 67, 68, 77, 79, 82, 85, 99, 109, 111, 112, 113, 114, 120, 124, 140, 150, 160, 164, 165], "literatur": [5, 6, 165], "rama_ref": [5, 9], "ramachandran": 5, "histogram": [5, 6, 23, 25, 28, 35, 37, 109], "were": [5, 6, 9, 10, 28, 32, 37, 42, 48, 49, 51, 56, 58, 64, 68, 75, 86, 87, 88, 90, 91, 92, 99, 107, 109, 112, 113, 120], "500": [5, 9, 13, 37, 48, 108], "taken": [5, 6, 9, 10, 17, 23, 29, 36, 37, 38, 40, 66, 70, 74, 79, 86, 90, 91, 95, 99, 104, 106, 109, 113, 148, 151, 158, 160], "lovell2003": [5, 9], "psi": [5, 9, 86, 90], "angl": [5, 20, 22, 24, 37, 38, 39, 40, 51, 60, 68, 80, 83, 86, 90, 91, 92, 99, 103, 108, 109, 113, 129, 130, 131, 139, 140, 141, 146, 149, 153, 157], "meshgrid": 5, "arang": [5, 29, 109, 163], "180": [5, 38, 51, 86, 90, 91, 99, 103, 113, 148], "z": [5, 6, 8, 13, 23, 29, 34, 37, 51, 54, 58, 60, 64, 65, 66, 69, 72, 73, 74, 75, 79, 86, 88, 90, 99, 103, 108, 109, 113, 132, 149, 151, 163], "contourf": 5, "15000": 5, "draw": [5, 17], "contour": [5, 9], "90": [5, 9, 83, 104, 109, 148, 149, 153, 157], "99": [5, 9, 38, 49, 50, 56, 125, 136], "figur": [5, 9, 29, 34, 36, 37, 68, 79, 162, 163], "region": [5, 6, 9, 17, 37, 98, 99], "janin_ref": [5, 9], "janin": [5, 86, 90], "chi_1": [5, 9], "chi_2": [5, 9], "sidechain": [5, 9, 86, 90], "360": [5, 23], "600": 5, "98": [5, 9, 111, 112, 148, 149], "2011": [6, 8, 19, 30, 31, 37, 107, 112], "repres": [6, 8, 13, 14, 20, 23, 29, 32, 33, 34, 35, 37, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 83, 86, 88, 89, 90, 91, 92, 98, 99, 103, 108, 109, 140, 146, 147], "volumetr": 6, "particular": [6, 13, 16, 17, 20, 23, 31, 34, 42, 44, 51, 71, 79, 84, 86, 91, 94, 99, 104, 113, 154, 160], "density_from_univers": 6, "density_from_pdb": 6, "bfactor2rmsf": 6, "solvent": [6, 35, 86, 92], "densityanalysi": 6, "unit": [6, 23, 28, 37, 40, 41, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 81, 83, 90, 92, 94, 99, 100, 102, 103, 106, 108, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 146, 148, 153, 155, 157, 158, 159], "cell": [6, 10, 28, 29, 51, 54, 56, 58, 60, 61, 64, 68, 79, 80, 83, 86, 90, 92, 95, 99, 103, 104, 106, 146, 153, 155, 157, 158, 159], "necessari": [6, 12, 23, 34, 42, 44, 48, 64, 75, 78, 82, 92, 99, 100, 103, 113, 140], "orient": [6, 37, 79, 108, 111, 149, 154, 165], "box": [6, 10, 19, 36, 40, 51, 54, 56, 58, 60, 64, 66, 67, 68, 79, 86, 95, 99, 100, 101, 103, 104, 106, 109, 113, 132, 146, 149, 151, 155], "practic": [6, 29, 40, 41], "compon": [6, 16, 17, 25, 39, 67, 69, 86, 89, 90, 103, 107, 112, 147, 162, 163, 165], "broken": [6, 86, 159], "across": [6, 36, 38, 86, 89, 98, 111, 113, 115, 116, 117, 118, 119, 153, 155], "remap": 6, "closest": [6, 42, 44], "solut": [6, 13, 20, 25, 35, 68, 108], "triclin": [6, 10, 51, 54, 56, 60, 83, 85, 86, 99, 103, 104, 109], "dodecahedron": 6, "truncat": [6, 56, 58, 109], "octahedron": 6, "studi": [6, 29, 37], "artifact": 6, "ow": [6, 38, 86, 92, 113, 131], "delta": [6, 31, 35, 37, 51, 60, 68, 70, 79, 100, 109], "convert_dens": 6, "tip4p": [6, 38, 92, 111, 160], "export": [6, 26, 58, 112, 113, 114, 165], "dx": [6, 162], "doubl": [6, 16, 19, 20, 23, 49, 63, 86, 90, 103, 146, 152], "oxygen": [6, 20, 31, 38, 49, 86, 87, 113], "measur": [6, 11, 17, 20, 30, 32, 33, 34, 38, 60, 103, 160], "rel": [6, 13, 23, 29, 36, 75, 82, 86, 88, 90, 99, 109, 110, 113, 149, 160, 165], "model": [6, 16, 17, 19, 23, 24, 29, 33, 47, 64, 74, 79, 89, 92, 98, 108, 111, 112, 133, 134, 137, 147, 160], "ambient": 6, "opendx": 6, "compat": [6, 36, 37, 74, 80, 86, 109, 149, 161, 165], "vmd": [6, 24, 25, 51, 64, 74, 86, 88, 100, 114, 120, 146, 165], "chimera": 6, "pymol": [6, 25, 86, 114, 120, 165], "manner": [6, 34, 37, 38, 76, 79, 146, 161], "metadata": [6, 13, 14, 17, 18, 58, 67, 86, 90, 161], "pad": [6, 23], "gridcent": 6, "xdim": 6, "ydim": 6, "zdim": 6, "3d": [6, 23, 29, 34, 54, 58, 92, 108, 162, 164], "updatingatomgroup": [6, 29, 86, 113], "everi": [6, 16, 17, 23, 32, 37, 44, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 79, 80, 82, 86, 92, 98, 102, 104, 106, 111, 113, 114, 131, 147, 151, 155], "bin": [6, 23, 26, 28, 35, 37, 109], "\u00e5ngstr\u00f6m": [6, 54, 60, 68, 160], "float32": [6, 10, 79, 83, 86, 92, 99, 103, 104, 109, 151], "edg": [6, 23, 28, 35, 49, 58, 103, 155], "empti": [6, 13, 42, 48, 51, 58, 60, 64, 66, 74, 75, 77, 79, 80, 86, 88, 91, 92, 94, 95, 102, 105, 109, 113, 114, 115, 116, 117, 118, 119, 133, 134, 136, 140, 141, 148, 149], "incorrectli": [6, 24, 66], "userwarn": [6, 136, 147], "pmda": 6, "parallel": [6, 14, 18, 23, 37, 82, 86, 99, 103, 110, 112, 113, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163], "gridbox": 6, "static": [6, 7, 37, 38, 51, 58, 59, 60, 63, 67, 68, 80, 86, 108, 109, 113, 138, 148], "h": [6, 20, 22, 23, 24, 26, 33, 38, 62, 86, 88, 91, 97, 102, 109, 113, 141, 146, 148, 149], "heavi": [6, 86, 90], "updat": [6, 16, 23, 24, 25, 28, 31, 38, 39, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 91, 102, 108, 111, 112, 113, 146, 165], "situat": [6, 37, 120], "limit": [6, 23, 26, 32, 36, 40, 51, 54, 57, 58, 60, 64, 68, 69, 72, 73, 75, 76, 88, 102, 147, 151, 152, 154, 156, 157, 158, 159, 163], "although": [6, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 75, 76, 79, 80, 86, 90, 104, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "respons": [6, 76], "ensur": [6, 19, 36, 37, 38, 58, 64, 75, 76, 79, 86, 89, 98, 104, 109, 111, 113], "encompass": [6, 104], "convert": [6, 10, 26, 29, 34, 40, 51, 54, 56, 57, 58, 60, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 79, 80, 85, 86, 88, 92, 94, 99, 101, 103, 108, 109, 111, 113, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 147, 148, 160], "invers": [6, 32, 108], "cubic": [6, 64, 141, 149], "bulk": [6, 160], "recov": [6, 108, 140], "underli": [6, 64, 68, 75, 77, 78, 79, 80, 83, 86, 90, 92, 98, 109], "probability_dens": 6, "similarli": [6, 18, 23, 25, 34, 35, 64, 75, 79, 85, 91, 99, 105], "multipli": [6, 86, 90, 101, 140], "volum": [6, 28, 37, 79, 83, 103, 148, 160], "dv": [6, 149], "voxel": 6, "prod": 6, "atom_count_histogram": 6, "thank": [6, 85, 112, 165], "fact": [6, 37, 38, 57, 86, 91], "griddata": 6, "just": [6, 13, 16, 17, 18, 23, 36, 38, 42, 46, 49, 51, 60, 64, 65, 80, 86, 88, 91, 92, 109, 111, 113], "site": [6, 35, 68, 77, 146, 149], "certain": [6, 17, 18, 23, 37, 38, 44, 79, 86, 91, 111, 113], "vicin": [6, 10, 99, 106], "near_wat": 6, "156": 6, "157": [6, 148], "305": [6, 148], "d_site": 6, "small": [6, 10, 13, 17, 19, 23, 29, 38, 49, 62, 88, 109], "explicitli": [6, 13, 16, 27, 40, 49, 50, 58, 60, 64, 68, 76, 78, 79, 92, 147, 150], "lig": 6, "com": [6, 8, 9, 11, 23, 62, 67, 86, 90, 108, 109, 149, 165], "ligand_select": 6, "extract": [6, 16, 23, 29, 37, 38, 40, 64, 68, 80, 91, 108, 109, 112, 132, 140], "ligand_com": 6, "abov": [6, 9, 19, 23, 24, 29, 37, 40, 44, 51, 56, 57, 58, 60, 64, 66, 69, 71, 72, 73, 75, 79, 86, 102, 113, 146, 151, 162, 163], "ligand_wat": 6, "d_water": 6, "_set_user_grid": 6, "smin": 6, "smax": 6, "helper": [6, 72, 78, 110, 140], "umin": 6, "umax": 6, "staticmethod": [6, 79], "main": [6, 38, 49, 73, 148], "creation": [6, 42, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80, 91, 92, 144, 151], "regular": [6, 42, 44, 86, 88, 105, 109, 113, 141, 147], "lower": [6, 8, 17, 23, 25, 38, 41, 44, 58, 86, 90, 103, 109, 147], "upper": [6, 17, 23, 25, 34, 79, 109], "along": [6, 20, 23, 24, 28, 29, 32, 34, 37, 79, 86, 90, 99, 103, 106, 107, 108, 109, 147, 151], "meaning": [6, 76, 79, 86], "isdens": 6, "make_dens": 6, "nm": [6, 37, 47, 56, 58, 60, 67, 69, 70, 73, 79, 149, 160], "otherwis": [6, 8, 13, 18, 24, 29, 32, 36, 40, 42, 44, 58, 64, 66, 68, 79, 80, 86, 90, 92, 104, 105, 108, 109, 146], "touch": [6, 68], "histogramdd": 6, "1d": [6, 10, 23, 26, 36, 86, 90, 99, 103, 109], "front": [6, 13, 16], "left": [6, 8, 20, 24, 32, 33, 36, 68, 86, 88, 98, 100, 109, 113], "corner": [6, 86, 113], "convert_length": 6, "manipul": [6, 8, 36, 79, 83, 92, 110, 111, 165], "constructor": [6, 13, 18, 26, 60, 64, 68, 74, 91, 105, 109, 149], "hold": [6, 40, 44, 64, 79, 80, 83, 89, 104], "annot": [6, 34, 64], "readabl": [6, 40, 109], "understand": [6, 49, 67, 86, 93, 104, 109], "known": [6, 29, 43, 58, 79, 109, 111, 141, 160], "issu": [6, 8, 26, 27, 40, 42, 49, 51, 58, 60, 64, 68, 74, 79, 80, 86, 89, 99, 109, 113, 133, 136, 140, 141, 147, 152, 165], "griddataformat": 6, "right": [6, 20, 23, 33, 36, 54, 64, 74, 82, 86, 90, 109, 113], "awai": [6, 38, 86, 113], "becaus": [6, 10, 12, 32, 34, 36, 38, 40, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 75, 76, 79, 80, 86, 91, 92, 103, 109, 112, 113, 114, 115, 116, 117, 118, 119, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 160], "reliabl": [6, 32, 68, 79, 99, 151], "detect": [6, 49, 51, 57, 58, 60, 68, 78, 92, 109, 120, 122, 140, 156], "conveni": [6, 18, 23, 32, 34, 40, 44, 68, 86, 92, 114, 151, 160], "less": [6, 8, 19, 20, 23, 24, 32, 34, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 98, 99, 103, 146], "demonstr": [6, 29, 88], "itself": [6, 13, 17, 18, 23, 24, 26, 35, 40, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 109, 110, 111, 113, 120], "algebra": [6, 86, 113], "subtract": [6, 13, 36, 86], "saniti": 6, "sure": [6, 31, 42, 58, 82, 86, 90, 113, 165], "ndindex": 6, "check_compat": 6, "arithmet": 6, "scalar": [6, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 103, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "resampl": [6, 12, 17], "typeerror": [6, 36, 58, 78, 79, 80, 86, 90, 92, 109], "particl": [6, 10, 19, 29, 35, 37, 57, 58, 67, 86, 92, 98, 99, 104, 106, 129, 149, 155, 162, 163], "spc": [6, 38, 86, 113, 160], "tip3p": [6, 38, 160], "997": [6, 160], "cm": [6, 23, 28, 148, 160], "molar": [6, 160], "mol": [6, 23, 28, 47, 49, 62, 67, 68, 69, 111, 160], "runtimeerror": [6, 23, 58, 136], "unknown": [6, 134, 136, 137, 140, 150], "go": [6, 23, 32, 36, 86, 113], "back": [6, 13, 29, 32, 46, 48, 49, 58, 68, 78, 86, 92, 99, 106, 108, 109, 140, 156, 159, 160], "uniti": 6, "round": [6, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "multipl": [6, 13, 16, 20, 22, 23, 26, 34, 38, 41, 44, 58, 60, 64, 76, 77, 78, 79, 86, 90, 92, 100, 102, 105, 109, 112, 113, 114, 115, 116, 117, 118, 119, 151, 160, 162, 163], "default_format": 6, "file_format": [6, 86], "typequot": 6, "deduc": [6, 51, 54, 57, 58, 59, 60, 63, 64, 68, 69, 71, 72, 73, 75, 76, 78, 80, 109, 137, 138], "preced": [6, 32, 38, 42, 78, 86, 88, 102, 113], "visual": [6, 17, 23, 26, 29, 33, 102, 112, 114, 120, 151], "pickl": [6, 26, 34, 57, 58, 68, 75, 76, 77, 82, 86, 92, 100, 101, 105, 109], "simpler": 6, "charact": [6, 51, 56, 60, 64, 65, 66, 70, 88, 100, 102, 105, 108, 109, 113, 115, 116, 117, 118, 119, 125, 146], "quot": 6, "parser": [6, 46, 86, 88, 90, 92, 93, 113, 132, 144, 145, 147, 148, 150], "namd": [6, 23, 51, 63, 64, 79, 92, 100, 111, 139, 147, 150, 165], "gridforc": 6, "backend": [6, 10, 110, 151, 152], "mdff": 6, "expect": [6, 17, 20, 32, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 88, 102, 108, 109, 113, 132, 146, 148, 153, 157], "appeas": 6, "them": [6, 9, 13, 16, 23, 27, 30, 32, 34, 40, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 74, 75, 76, 79, 80, 86, 91, 92, 99, 110, 111, 112, 113, 131, 146, 147, 156, 164], "interpol": [6, 114, 115, 116, 117, 118, 119], "spline": 6, "x1": [6, 17, 163], "x2": [6, 17, 49], "y1": [6, 163], "y2": 6, "z1": [6, 163], "z2": 6, "interpolation_spline_ord": 6, "cach": [6, 32, 49, 58, 91, 109], "better": [6, 19, 20, 36, 38, 49, 91, 92, 122, 151, 154, 157], "whenev": [6, 44, 79, 80], "recomput": 6, "interpolation_cv": 6, "todo": [6, 89, 98, 117], "usag": [6, 10, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 91, 111, 148], "xx": 6, "yy": 6, "zz": 6, "mgrid": [6, 163], "75": [6, 23, 32, 34, 35, 58, 148, 149], "96": [6, 148, 163], "150": [6, 24, 65, 148], "ff": [6, 66, 140], "neg": [6, 13, 17, 34, 36, 49, 51, 54, 58, 60, 69, 72, 73, 75, 86, 89, 103, 109, 113, 129, 140], "especi": [6, 23, 38, 51, 68, 75, 86, 90, 109, 160], "scipi": [6, 10, 17, 20, 29, 34, 68, 106, 111, 112, 160, 164], "ndimag": 6, "map_coordin": 6, "constant": [6, 7, 8, 10, 20, 29, 42, 44, 79, 113, 149, 153, 155], "wherebi": 6, "outsid": [6, 23, 44, 86, 99, 102, 103, 104], "beyond": [6, 9, 29, 86, 90, 106], "rather": [6, 15, 17, 23, 37, 41, 66, 74, 80, 86, 90, 146, 159], "nearest": [6, 8, 13, 34, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 108], "elimin": [6, 113], "extrud": 6, "spline_filt": 6, "reset": [6, 57, 77, 90, 105, 109, 156], "irrevoc": 6, "warn": [6, 9, 28, 40, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 92, 109, 113, 140, 155, 156], "noth": [6, 23, 38, 89, 109, 151], "harm": 6, "othergrid": 6, "resample_factor": 6, "factor": [6, 13, 20, 29, 64, 65, 68, 86, 90, 92, 102, 108, 122, 146, 147, 160], "n_i": [6, 19, 25], "fewer": [6, 13, 68], "alter": [6, 17, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 90, 102], "rang": [6, 10, 23, 24, 35, 37, 39, 42, 44, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 80, 86, 88, 98, 99, 102, 103, 104, 109, 113, 165], "creep": 6, "steadili": 6, "inward": 6, "extent": [6, 163], "regener": 6, "sai": [6, 36, 79, 85, 89, 109, 151], "portabl": [6, 112, 147, 150], "footnot": [6, 23, 109], "accomplish": 6, "compound": [6, 64, 86, 90, 159], "fragment": [6, 28, 33, 49, 60, 86, 90, 103, 113, 159], "fit": [6, 8, 14, 20, 23, 29, 33, 34, 36, 39, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109, 111, 149, 151, 165], "properli": [6, 34, 36, 42, 61, 64, 75, 76, 79, 111, 150], "omit": [6, 40, 51, 54, 57, 58, 60, 62, 64, 66, 69, 71, 72, 73, 75, 78, 80, 105, 134], "clearli": [6, 23, 66], "actual": [6, 10, 17, 23, 29, 32, 34, 40, 79, 102, 109, 140, 149], "mattia": 7, "felic": 7, "palermo": [7, 34], "philip": [7, 19, 23, 112], "loch": 7, "2022": [7, 30, 141, 155], "dielectricconst": [7, 112], "temperatur": [7, 40, 48, 51, 54, 57, 58, 60, 64, 65, 69, 70, 71, 72, 73, 75, 80, 149, 160], "300": [7, 13, 19, 38, 48, 109, 162, 163], "make_whol": [7, 86, 103], "dipol": [7, 37, 86, 90, 112], "moment": [7, 23, 64, 68, 74, 79, 80, 86, 90, 112, 113, 129, 146], "boldsymbol": [7, 86, 90], "m": [7, 10, 15, 16, 17, 22, 23, 34, 37, 38, 86, 99, 103, 108, 109, 112, 149, 160], "sum_i": [7, 86, 90], "q_i": [7, 86, 90], "r_i": [7, 86, 90], "charg": [7, 24, 28, 49, 58, 60, 64, 65, 66, 79, 86, 90, 92, 113, 124, 127, 130, 131, 132, 133, 134, 136, 137, 138, 139, 140, 141, 146, 147, 149, 160], "varepsilon": 7, "langl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "rangl": [7, 17, 20, 29, 33, 35, 36, 37, 98], "varepsilon_": 7, "v": [7, 9, 34, 37, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 88, 90, 103, 108, 112, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 148, 149, 155], "k_b": 7, "tin": 7, "foil": 7, "usual": [7, 9, 39, 40, 48, 49, 68, 73, 77, 79, 90, 92, 103, 109, 140], "electrostat": 7, "handl": [7, 11, 17, 38, 49, 50, 51, 54, 55, 57, 58, 60, 62, 63, 64, 68, 69, 71, 72, 73, 75, 76, 77, 78, 79, 82, 86, 88, 89, 90, 100, 103, 104, 105, 106, 125, 129, 136], "ewald": 7, "summat": 7, "techniqu": 7, "neumann1983": [7, 112], "kelvin": [7, 48], "disabl": [7, 38, 49, 56, 58, 64, 78, 102], "gain": 7, "speedup": [7, 58, 99], "direct": [7, 23, 26, 28, 29, 32, 34, 35, 37, 40, 54, 58, 67, 68, 72, 89, 99, 108, 131, 156, 157, 162, 163], "e\u00e5": [7, 86, 90], "m2": 7, "fluct": 7, "fluctuat": [7, 36, 112], "ep": [7, 13, 17, 34], "eps_mean": 7, "psf_triclin": 7, "dcd_triclin": 7, "diel": 7, "eugen": 8, "hruska": 8, "john": [8, 32, 36, 162, 163], "detlef": [8, 32, 36], "linear": [8, 9, 29, 32, 33, 39], "reduct": [8, 11, 17, 32], "eigenvector": [8, 19, 32, 86, 90], "collect": [8, 13, 17, 23, 26, 38, 75, 78, 79, 88, 89, 91, 103, 112, 151], "largest": [8, 25, 34, 162, 163], "eigenvalu": [8, 19, 32, 86, 90], "domin": [8, 19], "fundament": [8, 111], "difficult": [8, 26], "complex": [8, 17, 24, 38, 49, 95, 103, 106, 109, 165], "storag": [8, 23, 58, 67, 101], "sampl": [8, 9, 12, 13, 17, 20, 23, 29, 30, 31, 32, 36, 79], "equilibr": 8, "irrelev": 8, "porte2008": 8, "coifman2006": 8, "ferguson2011": 8, "rohrdanz2011": 8, "decompos": [8, 38, 108], "leav": [8, 17, 23, 24, 37, 98, 102], "epsilon": [8, 31, 90], "involv": [8, 24, 38, 86, 91, 99, 106, 140, 149], "neighbor": [8, 13, 19, 34, 35, 99, 106, 110], "trial": 8, "approach": [8, 19, 29, 38, 79, 98, 99, 105, 152, 153, 154, 155, 156, 157, 158, 159, 165], "dmap": 8, "embed": [8, 16, 17], "explicit": [8, 49, 76, 78, 99], "relationship": 8, "dimension": [8, 11, 14, 17, 24, 26, 29, 32, 37, 86], "howev": [8, 17, 23, 24, 32, 38, 40, 49, 50, 56, 58, 60, 72, 75, 76, 79, 80, 84, 86, 90, 92, 99, 113, 132, 147, 150, 151, 156, 159, 161], "isometri": 8, "vice": [8, 38, 89], "versa": [8, 38, 89], "emb": 8, "most": [8, 9, 23, 32, 34, 42, 49, 57, 58, 60, 66, 68, 75, 76, 77, 78, 79, 80, 84, 86, 90, 93, 103, 105, 109, 110, 111, 113, 114, 141, 150, 155, 159, 165], "relev": [8, 20, 40, 74, 83, 86, 99, 106], "diminish": 8, "rate": [8, 16, 17, 98, 102], "fall": [8, 42, 44, 64, 67, 68, 78, 99], "spectral": 8, "somewhat": [8, 68], "appar": 8, "equilibrium": [8, 29], "upper_limit": 8, "n_eigenvector": 8, "tight_layout": [8, 9], "num_eigenvector": 8, "inspect": [8, 23, 29, 32, 36, 109], "interpret": [8, 51, 100, 108, 109, 111, 148], "task": [8, 14, 102, 165], "approxim": [8, 23, 26, 29, 32, 34, 49, 58, 141], "euclidean": [8, 34, 36, 103], "diffusion_spac": 8, "anisotrop": 8, "kernel": [8, 17, 141], "decomposit": 8, "distancematrix": 8, "md": [8, 32, 37, 39, 49, 51, 53, 57, 60, 64, 70, 79, 92, 100, 112, 124, 147, 148, 150, 160, 162, 163], "rememb": [8, 86], "cost": [8, 104], "interv": [8, 32, 34, 51, 58, 60, 86, 99, 102, 103], "exclud": [8, 20, 23, 29, 35, 51, 54, 57, 58, 60, 64, 67, 69, 71, 72, 73, 75, 86, 88, 92], "symmetr": [8, 17, 18, 23, 32, 34, 127], "give": [8, 13, 29, 34, 36, 37, 38, 40, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 91, 92, 99, 100, 105, 109, 111, 113, 151], "entir": [8, 19, 37, 38, 58, 80, 86, 102, 138, 146], "1eo": 8, "subject": [8, 20], "dist_matrix": 8, "ij": [8, 20, 34], "zero": [8, 17, 18, 34, 37, 51, 56, 58, 64, 74, 86, 90, 92, 99, 100, 101, 102, 103, 109, 130, 140], "diagon": [8, 17, 18, 99, 109], "often": [8, 29, 58, 60, 68, 79, 86, 98, 109, 113, 131, 147, 151], "calcrmsdrotationalmatrix": [8, 36, 107], "publish": [8, 11, 17, 36, 112, 165], "port": 8, "ben": 8, "herbst": 8, "willi": 8, "hereman": 8, "st\u00e9fan": 8, "van": [8, 23, 67, 108, 146, 148], "der": [8, 23, 67, 146, 148], "walt": 8, "introduct": [8, 32, 111], "11": [8, 10, 11, 17, 23, 26, 34, 36, 37, 50, 52, 53, 55, 56, 60, 62, 64, 65, 66, 68, 70, 74, 75, 76, 77, 83, 86, 91, 99, 103, 108, 109, 112, 113, 114, 130, 141, 148, 149, 160, 161], "2008": [8, 26, 112], "ronald": [8, 108], "coifman": 8, "st\u00e9phane": 8, "lafon": 8, "2006": [8, 108], "wavelet": 8, "url": [8, 9, 29, 67, 108, 109], "www": [8, 9, 15, 23, 62, 88, 108, 109, 165], "sciencedirect": [8, 9, 108], "articl": [8, 9, 29, 108], "pii": [8, 9, 108], "s1063520306000546": 8, "1016": [8, 9, 23, 98, 108, 111, 112], "acha": 8, "04": [8, 108, 148], "006": [8, 65], "andrew": 8, "ferguson": 8, "athanassio": 8, "panagiotopoulo": 8, "ioanni": 8, "kevrekidi": 8, "pablo": 8, "debenedetti": 8, "nonlinear": 8, "letter": [8, 23, 64, 65, 66, 86, 90, 109], "509": 8, "s0009261411004957": 8, "cplett": 8, "066": 8, "mari": 8, "rohrdanz": 8, "wenwei": 8, "zheng": 8, "mauro": 8, "maggioni": 8, "cecilia": 8, "clementi": 8, "reaction": [8, 23, 49], "134": [8, 30, 31, 86], "124116": 8, "1063": [8, 29, 37, 98], "3569857": 8, "dougla": [8, 36, 107, 112], "theobald": [8, 36, 107, 112], "rapid": [8, 107, 112], "quaternion": [8, 107, 110, 112], "characterist": [8, 20, 107, 112], "polynomi": [8, 37, 107, 112], "acta": [8, 34, 107, 108, 112], "crystallographica": [8, 107, 108, 112], "section": [8, 13, 17, 23, 36, 44, 58, 60, 64, 79, 86, 93, 108, 127, 131, 132, 134, 140, 141, 147], "61": [8, 64, 65, 107, 112, 148, 149, 162], "478": [8, 107, 112], "480": [8, 66, 107, 112], "jul": 8, "2005": [8, 23, 107, 108, 112], "1107": [8, 108], "s0108767305015266": 8, "henri": 9, "mull": 9, "2018": [9, 29, 33, 38, 112, 141], "desir": [9, 26, 29, 38, 39, 41, 48, 51, 54, 57, 58, 60, 61, 64, 69, 71, 72, 73, 75, 78, 79, 80, 91, 102, 104, 106, 109, 156, 162, 163], "re": [9, 58, 62, 79, 86, 92, 108, 109, 110, 113, 131, 148], "phi_select": [9, 86, 90], "quick": [9, 165], "classic": [9, 68], "ramachandran1963": 9, "unlik": [9, 17, 37, 57, 58, 60, 67, 68, 77, 79, 86, 105], "those": [9, 13, 14, 24, 32, 34, 35, 38, 44, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 113, 140, 141], "repeat": [9, 13, 16, 20, 38, 99, 109], "Then": [9, 23, 38, 42, 49, 149], "built": [9, 23, 57, 58, 68, 91, 105, 106, 149], "color": [9, 16, 23, 34, 162], "marker": 9, "background": [9, 77, 86, 90], "margin": 9, "yourself": [9, 109, 113], "prone": 9, "duplic": [9, 38, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 91, 94, 99, 106, 109, 113], "altloc": [9, 49, 64, 65, 86, 90, 113, 125, 133, 137, 146, 147], "janin1978": 9, "side": [9, 19, 23, 33, 64, 75, 86, 99, 103, 155, 159], "chain": [9, 22, 33, 35, 38, 64, 65, 66, 84, 92, 113], "furthermor": [9, 35, 79], "carefulli": [9, 23, 27, 38, 51, 146], "filter": [9, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102, 162, 163], "messag": [9, 13, 18, 23, 72, 102, 109], "few": [9, 18, 23, 32, 78, 86, 88, 92, 113], "mull2018": 9, "len": [9, 18, 34, 35, 38, 55, 62, 64, 74, 75, 86, 101, 102, 109, 113], "content": [9, 28, 32, 36, 40, 41, 64, 67, 74, 79, 83, 86, 90, 91, 92, 97, 109, 121, 132, 159], "c_name": [9, 30, 86, 90], "n_name": [9, 86, 90], "ca_nam": [9, 86, 90], "check_protein": 9, "legitim": 9, "carbon": [9, 22, 23, 86, 90, 98, 113, 148], "subset": [9, 23, 24, 26, 32, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 83, 86, 147], "suffic": 9, "polym": [9, 22, 113], "peptid": [9, 86, 90, 111], "cx": 9, "nt": [9, 38], "scope": [9, 29], "last": [9, 17, 23, 29, 34, 36, 37, 38, 42, 44, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 82, 86, 98, 102, 103, 105, 106, 108, 109, 111, 114, 138, 156, 162, 163], "still": [9, 18, 27, 37, 49, 51, 57, 58, 68, 77, 82, 85, 86, 90, 98, 104, 105, 109], "n_residu": [9, 86, 89, 90, 92], "activ": [9, 23, 65, 79, 99, 106], "scatter": [9, 16], "select_remov": 9, "ala": [9, 86, 113], "cy": [9, 38], "gly": [9, 86, 92, 113], "pro": 9, "ser": [9, 38], "thr": [9, 38, 113], "val": [9, 88, 90, 140], "select_protein": 9, "amino": [9, 30, 86, 90, 109], "adjust": [9, 13, 38, 48, 86, 90, 102], "enough": [9, 20], "locat": [9, 23, 34, 40, 41, 42, 64, 65, 86, 111, 113], "chi1": [9, 86, 90], "chi2": 9, "ramakrishnan": 9, "sasisekharan": 9, "stereochemistri": 9, "polypeptid": 9, "biologi": [9, 11, 17, 23, 34], "95": [9, 23, 32, 86, 148], "1963": 9, "s0022283663800236": 9, "s0022": 9, "2836": 9, "63": [9, 148, 149], "80023": 9, "jo\u00ebl": 9, "shoshanna": 9, "wodak": 9, "levitt": 9, "bernard": 9, "maigret": 9, "125": [9, 65], "357": 9, "386": 9, "1978": [9, 108], "0022283678904084": 9, "0022": 9, "78": [9, 64, 148, 149], "90408": 9, "technic": [9, 68, 109], "report": [9, 16, 19, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 80, 165], "spidal": 9, "summer": 9, "reu": 9, "figshar": 9, "journal_contribut": 9, "technical_report_spidal_summer_reu_2018_dihedral_analysis_in_mdanalysi": 9, "6957296": 9, "6084": 9, "m9": 9, "v1": [9, 108, 162], "lovel": 9, "ian": 9, "w": [9, 19, 23, 32, 34, 36, 38, 56, 58, 60, 64, 77, 79, 100, 101, 105, 108, 109, 112, 114, 115, 116, 117, 118, 119, 120, 148], "davi": 9, "bryan": 9, "arendal": 9, "iii": [9, 108], "paul": [9, 23, 24, 98, 108], "de": [9, 105], "bakker": 9, "word": [9, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 113], "prisant": 9, "jane": 9, "richardson": 9, "\u03c8": 9, "\u03c6": 9, "c\u03b2": 9, "deviat": [9, 23, 26, 28, 34, 36, 66, 162], "437": 9, "450": 9, "prot": [9, 38, 48], "10286": 9, "rapidli": [10, 141], "sub": [10, 60, 69, 72, 73, 92, 149, 151], "awar": [10, 86, 104], "interfac": [10, 13, 16, 23, 26, 37, 58, 79, 80, 99, 105, 107, 109, 112, 118, 121], "member": [10, 13, 89, 91, 92, 109, 165], "search": [10, 19, 23, 38, 86, 99, 106, 110, 146, 165], "bigger": [10, 17, 19], "fulfil": 10, "criterion": [10, 34, 38, 111], "coord": [10, 14, 23, 74, 86, 87, 92, 99, 103, 104, 106, 146, 147], "15": [10, 23, 25, 35, 64, 65, 83, 86, 98, 109, 113, 148, 149], "returntyp": 10, "contact": [10, 19, 38, 95, 106, 107, 111, 148], "There": [10, 29, 49, 55, 67, 74, 75, 78, 79, 89, 103, 120, 151], "slower": [10, 68], "larger": [10, 56, 64, 66, 76, 86, 88, 89, 98, 99, 109, 146], "spars": [10, 25], "lil_matrix": 10, "account": [10, 23, 25, 29, 35, 36, 38, 86, 90, 95, 99, 106, 113, 140], "suppress_progmet": 10, "progress_meter_freq": 10, "offset": [10, 68, 69, 72, 73, 79, 82, 100, 101, 102, 109], "id": [10, 13, 17, 24, 31, 34, 37, 38, 44, 56, 60, 64, 66, 86, 90, 91, 98, 108, 109, 113, 122, 131, 132, 133, 137, 139, 140, 147, 149], "facilit": [10, 44, 79], "comparison": [10, 11, 29, 34, 36, 86, 88, 99, 112, 113, 148], "resids_a": 10, "resids_b": 10, "distance_arrai": [10, 25, 99], "union": [10, 40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 95, 99, 103, 106], "_scalartype_co": [10, 99, 103, 106], "serial": [10, 64, 65, 66, 84, 86, 96, 99, 104, 105, 109, 110, 113, 125, 137, 149, 151], "imag": [10, 35, 60, 86, 91, 99, 103, 104, 106, 110, 113, 159], "orthogon": [10, 32, 48, 60, 64, 65, 86, 99, 104, 108, 109, 155], "float64": [10, 90, 99, 103, 107, 108, 146], "prealloc": [10, 99], "speed": [10, 13, 19, 29, 38, 79, 86, 99, 102, 106, 108, 110, 160, 162], "unitcel": [10, 51, 54, 58, 60, 64, 65, 69, 72, 73, 74, 75, 79, 80, 83, 86, 99, 100, 103, 106, 109], "lx": [10, 86, 99, 103, 104, 109], "lz": [10, 86, 99, 103, 104, 109], "gamma": [10, 31, 51, 54, 58, 60, 64, 65, 69, 72, 73, 75, 79, 80, 83, 86, 90, 99, 103, 104, 108, 109, 153], "avoid": [10, 36, 38, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 88, 99, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 156], "repeatedli": [10, 23, 99, 109], "openmp": [10, 97, 99, 110, 152], "acceler": [10, 108], "13": [10, 11, 17, 23, 33, 35, 56, 64, 65, 76, 83, 86, 99, 102, 109, 149], "hint": [10, 99, 109], "self_distance_arrai": [10, 99], "loop": [10, 13, 16, 49, 99, 102, 103], "matteo": [11, 12, 13, 14, 15, 16, 17], "tiberti": [11, 12, 13, 14, 15, 16, 17, 112], "wouter": [11, 12, 13, 14, 15, 16, 17, 80], "boomsma": [11, 12, 13, 14, 15, 16, 17, 80, 112], "tone": [11, 12, 13, 14, 15, 16, 17], "bengtsen": [11, 12, 13, 14, 15, 16, 17, 112], "2015": [11, 17, 33, 34, 37, 98, 112], "2017": [11, 38], "maintain": [11, 27, 29, 38, 39, 80, 82, 89], "gmail": 11, "mtiberti": 11, "github": [11, 23, 38, 80, 99, 165], "\u1d43lindorff": 11, "larsen2009": [11, 17], "\u1d43tiberti2015": 11, "facil": [11, 17, 18], "cluster": [11, 17, 34, 111], "multivari": [11, 17], "distribut": [11, 17, 18, 23, 37, 39, 55, 104, 111], "converg": [11, 13, 17, 29, 32, 112], "he": [11, 17, 148], "ce": [11, 17, 148], "dre": [11, 17], "ces_converg": [11, 17], "dres_converg": [11, 17], "confdistmatrix": [11, 12], "covari": [11, 17, 32], "bootstrap": [11, 17], "procedur": [11, 13, 16, 20, 23, 49], "kresten": [11, 17], "lindorff": [11, 17, 112], "larsen": [11, 17, 112], "jesper": [11, 17], "ferkinghoff": [11, 17], "borg": [11, 17], "plo": [11, 17, 34, 112], "ONE": [11, 17], "2009": [11, 17, 111, 148], "1371": [11, 17, 34, 112], "pone": [11, 17], "0004203": [11, 17], "elena": [11, 17], "papaleo": [11, 17, 112], "softwar": [11, 17, 26, 51, 58, 91, 112, 113], "quantit": [11, 17, 112], "pcbi": [11, 17, 34, 112], "1004415": [11, 17, 112], "matric": [12, 13, 14, 16, 34, 103, 110], "encor": [12, 14, 39, 112], "bootstrapped_matrix": 12, "ensemble_assign": [12, 17], "drawn": [12, 17, 23, 32], "repetit": [12, 108], "triangularmatrix": [12, 13, 14, 16, 17, 18], "dissimilar": [12, 14, 34], "long": [12, 17, 23, 29, 37, 76, 86, 90, 102, 109, 161], "this_m": 12, "get_distance_matrix_bootstrap_sampl": 12, "distance_matrix": [12, 13, 16, 17], "ncore": [12, 13, 16, 17], "independ": [12, 37, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 83, 86, 90, 92, 98, 110], "get_ensemble_bootstrap_sampl": 12, "serv": [13, 16, 64], "variou": [13, 16, 25, 29, 33, 36, 47, 58, 60, 67, 79, 87, 92, 110, 145, 147], "interchang": [13, 16], "ensembl": [13, 15, 16, 28, 29, 34, 39, 86, 111, 112], "affinitypropagationn": [13, 17], "allow_collapsed_result": [13, 16, 17], "thereof": [13, 16, 79], "merg": [13, 16, 17, 18, 36, 80, 86, 92, 99], "keep": [13, 16, 17, 23, 44, 50, 58, 65, 66, 79, 86, 90, 91, 102, 103, 109, 149, 155], "track": [13, 16, 58, 86, 91], "outer": [13, 16, 25, 86, 90, 113], "explor": [13, 16, 17, 111], "fly": [13, 16, 17, 36, 55, 76, 79, 109, 152], "sever": [13, 16, 22, 24, 29, 74, 76, 86], "collaps": [13, 16, 17], "clusterscollect": [13, 17], "clusteringcollect": 13, "dcd2": [13, 16, 17], "ens1": [13, 16, 17], "ens2": [13, 16, 17], "cluster_collect": 13, "illustr": [13, 16, 17, 82], "dbscan": [13, 17], "membership": [13, 89, 90], "breviti": [13, 34], "ensemble_membership": [13, 16], "elem_list": 13, "centroid": [13, 17, 23, 86, 162, 163], "idn": 13, "4th": [13, 99], "implicitli": [13, 86], "get_centroid": 13, "get_id": 13, "nativ": [13, 16, 23, 39, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 77, 79, 80, 82, 111, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 152], "instal": [13, 16, 17, 23, 26, 29, 34, 39, 40, 58, 67, 68, 99, 111, 112], "affinitypropag": 13, "damp": 13, "max_it": [13, 49], "convergence_it": 13, "affin": [13, 16, 17], "propag": [13, 16, 17], "unchang": [13, 44, 48, 76, 109], "achiev": [13, 24, 29, 38, 82, 109], "add_nois": 13, "nois": 13, "min_sampl": 13, "auto": [13, 34, 51, 58, 60, 68, 88, 102, 114, 115, 116, 117, 118, 119], "leaf_siz": 13, "neighborhood": [13, 16], "ball_tre": 13, "kd_tree": 13, "brute": [13, 99], "nearestneighbor": 13, "pointwis": 13, "leaf": [13, 106], "balltre": 13, "ckdtree": [13, 106], "affect": [13, 32, 49, 86], "queri": [13, 83, 86, 88, 91, 95, 104, 106, 113], "natur": [13, 17, 26, 38], "sample_weight": 13, "n_sampl": 13, "inhibit": 13, "absolut": [13, 17, 54, 86, 88, 90, 108, 109, 113, 129, 162, 163], "kmean": [13, 17], "n_cluster": 13, "n_init": 13, "init": [13, 75, 79, 109, 155], "0001": 13, "random_st": 13, "copy_x": 13, "seed": [13, 163], "consecut": [13, 24, 25, 34, 37, 49, 64, 86, 98, 109, 113], "term": [13, 40, 49, 86, 91, 113, 114, 140], "inertia": [13, 86, 90], "random": [13, 23, 26, 29, 72, 79, 82, 108, 109], "smart": [13, 23, 49, 86, 88, 113], "k_init": 13, "gaussian": [13, 17, 19], "varianc": [13, 32], "n_featur": [13, 32], "increment": [13, 38, 66, 114, 115, 116, 117, 118, 119, 147, 161], "declar": [13, 109], "randomst": 13, "numer": [13, 29, 36, 40, 60, 86, 88, 91, 105, 113, 160], "accur": [13, 29, 32, 49, 146], "introduc": [13, 35, 44, 64, 89, 149, 161], "accepts_distance_matrix": 13, "encode_centroid_info": 13, "cluster_centers_indic": 13, "cython": [13, 16, 82, 91, 99, 103, 104, 107, 110], "perturb": 13, "affinityprop": 13, "lam": 13, "max_iter": 13, "ap": [13, 37], "paper": [13, 16, 39, 67, 108, 112], "brendan": 13, "frei": [13, 108], "delbert": 13, "dueck": 13, "toronto": 13, "315": 13, "972": 13, "976": 13, "februari": 13, "triangular": [13, 14, 16, 18, 109], "notic": [13, 14, 17], "asymmetr": [13, 51, 54, 58, 60, 69, 72, 73, 75], "much": [13, 17, 58, 79, 111, 151], "reach": [13, 17, 23, 38, 42, 44, 49, 88], "ye": [13, 112, 141], "conformational_distance_matrix": 14, "conf_dist_funct": 14, "superimposition_select": 14, "n_job": [14, 18], "pairwise_align": 14, "max_nbyt": 14, "set_rmsd_matrix_el": 14, "superimposit": 14, "build": [14, 20, 25, 28, 41, 68, 89, 91, 92, 111, 114, 122, 125, 128, 130, 131, 136, 137, 139, 140, 141, 146, 150, 161], "dataset": [14, 40, 41, 49, 58], "threshold": [14, 34, 42, 58, 99], "worker": [14, 18], "trigger": [14, 86, 109], "autom": [14, 23, 109], "temp_fold": 14, "joblib": 14, "readthedoc": 14, "io": [14, 58, 68, 79, 102, 105, 109, 120], "latest": [14, 58, 165], "html": [14, 62, 102, 108, 109, 140], "conf_dist_matrix": 14, "get_distance_matrix": [14, 17], "load_matrix": [14, 17], "save_matrix": [14, 17], "superimposition_subset": 14, "conf_dist_arg": 14, "conf_dist_kwarg": 14, "retriev": [14, 32, 91], "themselv": [14, 84, 150], "signific": [14, 66, 109], "npz": [14, 17, 18, 34, 72], "bi": [14, 148], "flatten": [14, 15, 23, 34, 54, 56, 109], "meant": [14, 64], "syntax": [14, 40, 46, 86, 109, 113], "rmsdmat": 14, "fit_coord": 14, "fit_weight": 14, "trm_indic": [14, 18], "corrispond": 14, "major": [14, 18, 31, 161], "analysi": [15, 18, 41, 44, 48, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 79, 80, 86, 87, 90, 98, 102, 107, 109, 111, 112, 114, 151, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 165], "covariance_matrix": 15, "shrinkage_covariance_estim": 15, "ml_covariance_estim": 15, "chose": [15, 17], "uniform": [15, 23, 68, 108], "cov_mat": 15, "reference_coordin": 15, "coordiant": [15, 66, 99], "shrinkage_paramet": 15, "shrinkag": [15, 17], "stock": 15, "applic": [15, 30, 31, 34, 35, 37, 47, 57, 58, 60, 86, 94, 102, 104, 109, 113, 155], "portfolio": 15, "ledoit": 15, "wolf": 15, "empir": 15, "financ": 15, "matlab": [15, 34], "olivi": 15, "hi": [15, 38], "websit": 15, "net": [15, 86, 90], "ole2_abstract": 15, "htm": [15, 88, 108], "nump": 15, "stochasticproximityembeddingn": [16, 17], "stochast": [16, 17, 112], "proxim": [16, 17], "princip": [16, 17, 39, 69, 86, 90, 112], "red": [16, 23], "blue": [16, 23, 34, 57], "principalcomponentanalysi": [16, 17], "pca": [16, 39], "distance_cutoff": 16, "min_lam": 16, "max_lam": 16, "ncycl": 16, "nstep": 16, "10000": 16, "cycl": [16, 23, 102], "At": [16, 23, 29, 38, 64, 68, 80, 86, 105, 113, 129, 146, 148], "stochasticproxemb": 16, "stochasticproximityembed": 16, "rco": 16, "maxlam": 16, "minlam": 16, "stressfreq": 16, "dmitrii": 16, "rassokhin": 16, "dimitri": 16, "agrafioti": [16, 107, 112], "rule": [16, 58, 86, 90, 103, 113], "graphic": [16, 23, 108, 119, 120], "22": [16, 23, 34, 48, 64, 65, 88, 98, 114, 148, 149], "133": [16, 34, 37], "140": [16, 148], "spe": [16, 17], "compos": [16, 34, 149], "lern": 16, "stress": 16, "\u1d47lindorff": 17, "\u1d47tiberti2015": 17, "38279540": 17, "04524205": 17, "computation": [17, 29], "68070702": 17, "reus": [17, 62], "densiti": [17, 23, 35, 39, 149, 160, 162], "rmsd_matrix": 17, "merge_univers": [17, 18], "later": [17, 19, 23, 58, 80, 86, 90, 101, 106, 113, 149, 165], "dimensionality_reduct": 17, "reduce_dimension": 17, "necessarili": [17, 33, 80, 113], "exactli": [17, 32, 68, 79, 102], "twice": [17, 20, 104], "jensen": 17, "shannon": 17, "diverg": 17, "ln": 17, "signifi": 17, "contrast": [17, 86, 113], "kullback": 17, "leibler": 17, "unbound": 17, "cov_estim": 17, "estimate_error": 17, "bootstrapping_sampl": 17, "calc_diagon": 17, "likelyhood": 17, "ml": 17, "thu": [17, 28, 34, 38, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 90, 98, 110, 151, 155, 156], "estimat": 17, "comparis": 17, "d_": 17, "kl": 17, "int_": 17, "infti": [17, 20, 29], "x_i": [17, 86], "_p": 17, "denot": 17, "everyth": [17, 23, 38, 86, 102, 111, 165], "6889": 17, "89729056": 17, "greater": [17, 20, 24, 34, 38, 58, 86, 104, 113], "doesn": [17, 64, 83, 86, 99, 104, 109, 130], "anymor": 17, "clustering_method": 17, "clusteringmethod": 17, "latter": [17, 34, 35, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 102], "arrang": [17, 38, 109], "ens3": 17, "elabor": 17, "partit": [17, 108], "popul": [17, 20, 68, 75, 92, 109, 126, 127, 136, 143], "likewis": [17, 34, 99, 113], "45": [17, 148, 149], "20447236": 17, "25331629": 17, "dimensionality_reduction_method": 17, "dimensionalityreductionmethod": 17, "nsampl": [17, 20], "1000": [17, 20, 36, 37, 79, 86, 88, 101, 102, 113, 160], "simlar": 17, "reduced_coordin": 17, "pca_method": 17, "original_ensembl": 17, "window_s": 17, "window": [17, 20, 29, 37, 98, 102, 108, 119, 120], "gradual": 17, "number_of_fram": 17, "preference_valu": 17, "split": [17, 36, 37, 49, 58, 76, 86, 88, 92, 103, 109, 132, 138, 140, 152, 153, 154, 155, 156, 157, 158, 159], "ces_conv": 17, "48194205": 17, "40284672": 17, "31699026": 17, "25220447": 17, "19829817": 17, "14642725": 17, "09911411": 17, "05667391": 17, "clustering_ensemble_similar": 17, "cc": [17, 58], "ens1_id": 17, "ens2_id": 17, "discret": [17, 34, 98], "dj": 17, "cumulative_clustering_ensemble_similar": 17, "ens1_id_min": 17, "ens2_id_min": 17, "join": [17, 38, 88, 109, 114], "compris": [17, 34], "cumulative_gen_kde_pdf": 17, "embedded_spac": 17, "nensembl": 17, "ens_id_min": 17, "ens_id_max": 17, "kde": 17, "distinguish": [17, 147], "stage": 17, "stat": [17, 29, 102], "gaussian_kd": 17, "mixtur": [17, 79], "embedded_ensembl": 17, "dimred_ensemble_similar": 17, "kde1": 17, "resamples1": 17, "kde2": 17, "resamples2": 17, "ln_p1_exp_p1": 17, "ln_p2_exp_p2": 17, "ln_p1p2_exp_p1": 17, "ln_p1p2_exp_p2": 17, "continu": [17, 20, 24, 34, 37, 48, 76, 92, 98, 108, 113, 115, 116, 117, 118, 119], "liebler": 17, "dkl": 17, "_q": 17, "discrete_jensen_shannon_diverg": 17, "pa": [17, 148], "pb": [17, 148], "discrete_kullback_leibler_diverg": 17, "p_a": 17, "p_b": 17, "akin": 17, "dres_conv": 17, "gen_kde_pdf": 17, "harmonic_ensemble_similar": 17, "sigma1": 17, "sigma2": 17, "dhe": 17, "prepare_ensembles_for_convergence_increasing_window": 17, "fed": [17, 34], "divis": [17, 67], "tmp_ensembl": 17, "write_output": 17, "base_fnam": 17, "header": [17, 60, 64, 68, 71, 79, 83, 100, 105, 110, 115, 116, 117, 118, 119, 132, 149], "dat": [17, 19, 148], "nice": 17, "stdout": 17, "concaten": [17, 29, 76, 86, 89, 99, 105, 108, 113], "basenam": 17, "parallelcalcul": 18, "request": [18, 50, 78, 79, 102, 156, 165], "nrun": [18, 20], "__call__": [18, 85, 151, 154, 157, 158, 159], "multiprocess": [18, 151, 162, 163], "manag": [18, 23, 44, 57, 58, 64, 68, 75, 77, 79, 91, 100, 101, 102, 105, 106, 112, 120, 151, 152], "queue": 18, "fetch": [18, 61, 91], "loadfil": 18, "behav": [18, 23, 44, 81, 86, 91, 100, 101, 113], "memor": 18, "though": [18, 23, 38, 44, 60, 76, 141], "as_arrai": 18, "loadz": 18, "fname": [18, 100, 101], "compress": [18, 34, 50, 55, 58, 63, 64, 65, 66, 67, 68, 73, 74, 76, 79, 101, 105, 109, 111], "savez": [18, 20], "indec": 18, "yield": [18, 33, 41, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 101], "trm_indices_diag": 18, "trm_indices_nodiag": 18, "cutil": 18, "purermsd": 18, "coordsi": 18, "coordsj": 18, "atomsn": 18, "summass": 18, "benjamin": [19, 112], "hall": [19, 112], "ucl": 19, "uk": [19, 38, 55, 127], "hall2007": 19, "cookbook": 19, "gnmexampl": 19, "gnmanalysi": 19, "reportvector": 19, "txt": 19, "zip": [19, 37, 99, 111], "outputfil": 19, "samantha": [19, 112], "kay": [19, 112], "andi": [19, 112], "pang": [19, 112], "rafael": [19, 112], "perera": [19, 112], "biggin": [19, 112], "character": [19, 29, 98, 112], "frequenc": [19, 24, 38, 112], "american": [19, 30, 31], "societi": [19, 30, 31, 108], "129": [19, 112, 141, 149], "11394": [19, 112], "11401": [19, 112], "17715919": 19, "ja071797i": 19, "bonus_group": 19, "novel": [19, 98, 112], "monitor": [19, 20, 102], "identifi": [19, 24, 25, 26, 29, 34, 44, 51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 79, 80, 90, 104, 109, 130, 147, 150], "enm": 19, "popular": [19, 64, 79], "drug": 19, "lead": [19, 29, 38, 42, 51, 54, 56, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 109, 148, 151], "No": [19, 36, 57, 60, 78, 85, 109, 136, 138, 146, 148, 149, 151], "closecontactgnmanalysi": 19, "generate_output": 19, "privat": [19, 44], "_generate_output": 19, "parent": [19, 38, 44, 58, 85, 89], "generate_kirchoff": 19, "kirchhoff": 19, "neighbour": [19, 35, 49, 104], "kirchoff": 19, "sqrt": [19, 36, 86, 90, 103, 162], "n_j": 19, "massweight": 19, "entri": [19, 26, 28, 30, 35, 40, 44, 56, 60, 64, 66, 79, 86, 89, 90, 91, 92, 99, 106, 109, 114, 115, 116, 117, 118, 119, 136, 140, 160], "generate_grid": 19, "6x": 19, "smallish": 19, "order_list": 19, "scrambl": 19, "backup_fil": 19, "richard": [20, 21, 29, 33, 98], "gower": [20, 21, 33, 98, 112], "2014": [20, 21, 23, 26, 37, 67, 98, 112, 162, 163], "hbond": [20, 24, 38, 39, 48, 98], "c_x": 20, "startpoint": 20, "t_0": [20, 29, 37, 98], "geometr": [20, 24, 34, 37, 38, 86], "criteria": [20, 24, 51, 54, 58, 60, 69, 72, 73, 75], "lifetim": [20, 24, 37, 72, 98], "behaviour": [20, 37, 38, 42, 49, 51, 56, 68, 78, 86, 88, 91, 98, 109, 113, 156], "h_": 20, "subscript": 20, "intermitt": [20, 24, 37, 110], "attach": [20, 40, 42, 79, 86, 90, 92, 109], "whilst": [20, 68, 79, 98], "break": [20, 34, 60, 86, 103, 159], "subsequ": [20, 24, 29, 64, 80, 104, 151, 155], "reform": 20, "tau_x": 20, "int_0": [20, 35], "dt": [20, 29, 37, 42, 44, 51, 54, 55, 57, 58, 60, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 83, 88], "exponenti": [20, 33, 102], "expon": 20, "a_1": 20, "exp": [20, 33, 88, 160], "tau_1": 20, "a_2": 20, "tau_2": 20, "a_3": 20, "tau_3": 20, "expoenti": 20, "a_n": 20, "limits_": 20, "a_i": [20, 33], "gowers2015": [20, 98], "donor": [20, 24, 38, 149], "acceptor": [20, 24, 38, 149], "wish": [20, 23, 48, 74, 92, 99], "find_hydrogen_donor": 20, "waterpsf": 20, "waterdcd": 20, "isn": [20, 32, 58, 105], "present": [20, 23, 24, 37, 48, 49, 50, 51, 54, 56, 57, 58, 60, 62, 64, 67, 69, 71, 72, 73, 74, 75, 79, 80, 83, 86, 89, 90, 91, 98, 103, 125, 130, 131, 134, 136, 138, 140], "sol": [20, 23, 24, 37, 38, 48, 56, 86, 92, 131, 149], "dummi": [20, 92, 148], "address": [20, 58], "hidx": 20, "aidx": 20, "permit": [20, 109], "consider": [20, 24, 29, 98], "strictli": [20, 56, 58, 76, 83], "intermolecular": [20, 148], "dist_crit": 20, "angle_crit": 20, "sample_tim": 20, "control": [20, 23, 26, 29, 38, 42, 49, 88, 105, 108, 113, 141, 151], "curv": [20, 34], "a1": [20, 35, 65], "tau1": [20, 37], "tau2": [20, 37], "a2": [20, 35, 65], "tau3": 20, "tau": [20, 24, 29, 37, 98], "solv": [20, 32], "130": [20, 113], "gather": [20, 23], "reli": [20, 66, 75, 98, 146], "frequent": [20, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trz_psf": [20, 33], "trz": [20, 33, 79, 82, 84], "hn": [20, 38], "hb_ac": 20, "hydrogenbondautocorrel": 20, "bond_typ": 20, "equat": [20, 155], "grab": 20, "ro": 20, "time_cut": 20, "connect": [20, 25, 34, 35, 38, 64, 65, 71, 86, 90, 91, 92, 99, 109, 111, 137, 138, 141, 142, 147, 149], "ie": [20, 33, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 86, 91, 92, 103, 146], "mask": [20, 35, 68, 75, 79, 86, 109], "amount": [20, 32, 38, 48, 68, 90, 151], "versionchang": [20, 23, 34, 38, 60, 64, 86, 89, 90, 91, 107, 144, 146], "save_result": [20, 34], "p_guess": 20, "decai": [20, 33, 37], "leastsq": 20, "coeffici": [20, 29, 33, 37, 48, 155], "defit": 20, "tripl": [20, 49, 103, 108], "infodict": 20, "mesg": 20, "ier": 20, "hydrogenbond": [21, 37, 39, 112], "lili": [22, 23], "wang": [22, 23], "bansal2000": 22, "sugeta1967": 22, "quantifi": [22, 34, 112], "c\u03b1": 22, "twist": [22, 26], "rise": [22, 26, 37], "virtual": [22, 76, 86, 92, 108, 146, 149], "torsion": [22, 31, 39, 65, 91, 141, 147], "helix": [22, 112], "bend": [22, 141], "success": [22, 49, 57, 58, 68, 77, 82, 105, 108], "sugeta": 22, "miyazawa": 22, "1967": 22, "bond": [22, 23, 31, 32, 33, 35, 37, 38, 40, 48, 49, 60, 62, 64, 71, 85, 86, 90, 91, 92, 98, 99, 103, 112, 113, 125, 129, 130, 131, 133, 134, 136, 139, 140, 141, 142, 146, 149, 150, 159], "biopolym": 22, "673": 22, "679": 22, "bansal": [22, 112], "kumar": [22, 34, 112], "velavan": [22, 112], "2000": [22, 79, 108, 112], "characteris": [22, 112], "biomol": [22, 112], "struct": [22, 112], "dyn": [22, 112], "811": [22, 112, 148], "819": [22, 112], "helix_analysi": 22, "hel": 22, "resnum": [22, 36, 49, 86, 90, 92, 113, 122, 133, 141, 147], "161": 22, "187": [22, 51], "summari": [22, 112], "helanal2": 22, "160": [22, 36, 111], "200": [22, 44, 49, 108, 148], "230": 22, "carri": [22, 37, 39, 108, 160, 164], "hel_xyz": 22, "ref_axi": 22, "smart1993": 23, "smart1996": 23, "ion": [23, 37, 109, 113, 146], "channel": [23, 86, 90, 165], "pore": 23, "transport": [23, 29], "stelzl2014": 23, "holeprogram": 23, "osmart": 23, "apach": 23, "ex": 23, "pdb_hole": 23, "profil": [23, 27, 28, 111], "create_vmd_surfac": 23, "visualis": [23, 33], "tk": 23, "consol": [23, 37, 102], "sphpdb": 23, "sph": 23, "waal": [23, 146, 148], "radii": [23, 38, 66, 86, 90, 129, 130, 138, 146, 147, 148], "vdwradii_fil": 23, "simple2": 23, "rad": [23, 99], "symlink": 23, "infil": 23, "keep_fil": 23, "delet": [23, 64, 92], "wrong": [23, 51, 88, 108, 109, 113, 146], "mind": [23, 57, 86], "holeanalysi": 23, "cpoint": 23, "cvect": 23, "becom": [23, 32, 33, 35, 40, 56, 68, 80, 86, 109, 137, 157, 160], "runtim": [23, 68], "multipdb_hol": 23, "h2": [23, 24, 31, 49, 62], "delete_temporary_fil": 23, "temporari": [23, 86], "sos_triangl": 23, "displai": [23, 58, 80, 91, 102, 109, 112], "triangul": 23, "anim": 23, "hole_surfac": 23, "tcl": [23, 86, 119, 120], "hole_surface_subsampl": 23, "command": [23, 26, 39, 60, 86, 92, 111, 112, 120, 165], "stride": [23, 67, 79, 109], "inclus": [23, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 98, 113], "come": [23, 38, 64, 79, 92, 111, 146, 151], "prmtop": [23, 24, 68, 147, 150], "frame0": 23, "trim": 23, "line": [23, 24, 29, 37, 41, 51, 54, 56, 57, 58, 60, 64, 66, 68, 69, 71, 72, 73, 74, 75, 80, 99, 100, 101, 102, 105, 109, 114, 115, 116, 117, 118, 119, 125, 131, 136, 137, 138, 140, 148, 162, 163], "menu": 23, "beg": 23, "render": [23, 34, 86], "caviti": [23, 37], "pdbfile": [23, 26, 47, 92], "card": [23, 50, 79, 111, 122, 147], "brookhaven": [23, 26, 79, 111, 147], "databank": [23, 26, 111], "someth": [23, 26, 37, 44, 102, 109, 114], "hetatm": [23, 64, 65, 66, 86, 90, 136, 137, 138], "record": [23, 38, 44, 51, 60, 62, 64, 65, 68, 74, 83, 86, 90, 102, 113, 134, 136, 137, 138, 140, 146, 147, 148], "infile_text": 23, "outfil": 23, "pars": [23, 26, 40, 48, 49, 56, 60, 62, 64, 67, 86, 88, 93, 113, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 142, 143, 144, 146, 147, 162, 163], "collect_hol": 23, "sphpdb_file": 23, "sphere": [23, 37, 86, 113], "occup": [23, 49, 64, 65, 90, 125, 133, 136, 137, 147], "qss": 23, "dot": [23, 103, 108, 109, 113], "sph_process": 23, "simple2_rad": 23, "bare": 23, "suffici": [23, 37, 38, 44, 51, 60, 80, 88, 146], "tmpdir": 23, "shorten": 23, "purpos": [23, 109], "tight": [23, 102], "constrict": 23, "smaller": [23, 28, 32, 34, 64, 66, 98, 104], "end_radiu": 23, "center_of_geometri": [23, 25, 86], "55": [23, 38, 49, 64, 65, 86, 92, 105, 146, 148, 149], "li": [23, 86, 99, 104, 106, 148], "gramicidin": 23, "great": [23, 80], "sensit": [23, 34, 49, 86, 113, 131], "easi": [23, 40, 102, 112], "lie": [23, 86, 99, 103], "Or": [23, 44, 83, 86], "counter": [23, 102], "ignore_residu": 23, "refin": 23, "far": [23, 156], "infal": 23, "random_se": 23, "dai": 23, "reproduc": 23, "dure": [23, 38, 40, 41, 44, 49, 72, 74, 77, 82, 86, 90, 104, 106, 109, 129, 155, 156], "wildcard": 23, "hand": [23, 37, 38, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80, 86, 89, 90, 114], "output_level": 23, "contemporari": 23, "ditto": 23, "plu": 23, "conduct": [23, 165], "mirror": [23, 108], "charmm": [23, 30, 31, 50, 51, 60, 64, 66, 68, 79, 86, 88, 92, 100, 111, 113, 114, 120, 122, 139, 140, 146, 147, 148, 150, 160, 165], "tag": [23, 34, 39, 54, 102, 165], "grep": 23, "dcd_step": 23, "dcd_iniskip": 23, "recarrai": [23, 26, 38], "picki": 23, "doubt": 23, "diagnost": 23, "mdakit": 23, "wat": 23, "tip": 23, "hoh": 23, "cl": [23, 83, 109, 148], "write_input_fil": 23, "logfil": [23, 26, 102], "inp": 23, "arrau": 23, "versionad": [23, 60, 83, 86, 90, 91, 92, 98, 138, 144, 146], "bin_radii": 23, "width": [23, 28, 34, 56, 66, 74, 102, 109], "monoton": [23, 58, 76], "rightmost": [23, 108], "min": [23, 51, 54, 58, 60, 69, 72, 73, 75, 104, 109], "max": [23, 29, 34, 51, 54, 58, 60, 69, 72, 73, 75, 86, 88, 100, 104, 109, 113, 162], "dot_dens": 23, "no_water_color": 23, "one_water_color": 23, "green": [23, 29], "double_water_color": 23, "smooth": [23, 102], "facet": 23, "mont": [23, 160], "carlo": [23, 160], "flat": [23, 34, 38, 107, 149, 162], "field": [23, 30, 31, 37, 40, 41, 54, 56, 64, 65, 66, 68, 74, 79, 86, 88, 105, 111, 113, 125, 132, 133, 134, 140, 149, 162, 163], "guess_cpoint": 23, "histogram_radii": 23, "aggreg": [23, 38, 58], "min_radiu": 23, "over_order_paramet": 23, "order_paramet": 23, "ordereddict": 23, "cmap": [23, 86, 90, 91, 149], "viridi": 23, "linestyl": 23, "y_shift": 23, "legend_loc": 23, "zeta": [23, 31], "displac": [23, 32, 37, 39, 112, 162, 163], "clearer": 23, "plot3d": [23, 26], "r_max": 23, "stack": [23, 26, 35], "axes3d": 23, "plot3d_order_paramet": 23, "mpl_toolkit": 23, "mplot3d": 23, "plot_mean_profil": 23, "fill_alpha": 23, "n_std": 23, "opac": 23, "area": 23, "plot_order_paramet": 23, "aa": [23, 36, 38, 88, 109, 111, 148, 162], "goodfellow": 23, "wallac": 23, "biophys": [23, 98, 112], "65": [23, 32, 148, 149], "2455": 23, "2460": 23, "1993": 23, "s0006": 23, "3495": 23, "93": [23, 148, 149], "81293": 23, "joseph": [23, 162, 163], "neduvelil": 23, "xiaonan": 23, "mark": [23, 76, 120, 162, 163], "sansom": [23, 112, 162, 163], "14": [23, 28, 36, 48, 60, 64, 65, 78, 83, 86, 113, 148, 149, 160], "354": 23, "1996": [23, 37, 148], "s0263": 23, "7855": 23, "97": [23, 148], "00009": 23, "luka": 23, "stelzl": 23, "fowler": 23, "gate": 23, "occlud": 23, "laci": 23, "426": [23, 65], "735": 23, "751": 23, "jmb": [23, 111], "024": [23, 65], "andcr": 23, "eat": 23, "extra": [23, 38, 66, 70, 92, 147], "principl": [23, 68, 80], "patchi": 23, "recogn": [23, 58, 60, 64, 68, 78, 79, 84, 86, 88, 109, 141, 146, 149, 150], "overcom": 23, "check_and_fix_long_filenam": 23, "max_length": 23, "70": [23, 148, 149], "make_symlink": 23, "relpath": 23, "safe": [23, 58, 75], "short": [23, 29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 89, 90, 111], "tmp": 23, "curdir": 23, "trick": [23, 32], "recompil": 23, "run_hol": 23, "set_up_hole_input": 23, "write_simplerad2": 23, "nremark": 23, "57": [23, 86, 149], "ob": 23, "amber": [23, 38, 59, 79, 84, 88, 90, 92, 131, 146, 147, 148, 150, 160, 165], "weiner": 23, "et": [23, 148], "al": [23, 108, 148], "1984": [23, 90], "jac": [23, 112], "vol": 23, "106": [23, 148], "pp765": 23, "768": 23, "nvdwr": 23, "85": [23, 148, 149], "00": [23, 62, 65, 102, 109], "asn": [23, 38], "gln": [23, 38, 113], "odd": [23, 56, 108], "xplor": [23, 92, 111, 139, 147], "e2": [23, 86, 90], "d2": 23, "lone": [23, 109], "sulphur": 23, "lp": [23, 33], "funni": 23, "hydrat": [23, 113], "hill": 23, "2001": 23, "81": [23, 109, 149], "hydrogen": [23, 31, 33, 37, 38, 48, 49, 62, 86, 92, 98, 112, 113, 140, 146], "ga": [23, 108, 148], "1h": 23, "2h": 23, "3h": 23, "molqpt": 23, "nbond": 23, "2002": [23, 32], "smith": [24, 98, 112], "2019": [24, 98, 112, 141], "plugin": [24, 74, 100], "donors_sel": 24, "hydrogens_sel": 24, "acceptors_sel": 24, "d_h_cutoff": 24, "d_a_cutoff": 24, "d_h_a_angle_cutoff": 24, "update_select": [24, 38, 86], "hba": 24, "tip3": 24, "h1": [24, 49, 62, 146], "oh2": [24, 37, 38, 87], "guess_hydrogen": 24, "guess_acceptor": 24, "prior": [24, 34, 76, 98, 141], "slightli": [24, 58, 79], "protein_hydrogens_sel": 24, "protein_acceptors_sel": 24, "water_hydrogens_sel": 24, "water_acceptors_sel": 24, "tau_timeseri": [24, 37, 98], "correctli": [24, 29, 32, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 91, 109, 112, 125, 136], "absent": [24, 54, 86, 98, 113], "identif": [24, 31, 38, 39], "interact": [24, 37, 38, 90, 91, 111, 112, 140, 141, 149, 151], "count_by_id": 24, "uniqu": [24, 27, 34, 51, 86, 89, 90, 109, 113, 140, 160], "occurr": 24, "count_by_tim": 24, "count_by_typ": 24, "max_charg": 24, "o1": [24, 65], "potential_acceptor": 24, "capabl": [24, 27, 68, 79, 135], "particip": [24, 38], "quickli": [24, 32, 66], "guess_donor": 24, "potential_donor": 24, "max_mass": 24, "min_charg": 24, "min_mass": 24, "potential_hydrogen": 24, "tau_max": [24, 37, 98], "window_step": [24, 98], "autocorrel": [24, 33, 37, 39, 110], "hydrogenbondlifetim": 24, "That": [24, 29, 36, 37, 42], "yet": [24, 37, 58, 88, 94, 108, 152], "autcorrel": 24, "leafletfind": 25, "michaud": [25, 112, 165], "agrawal2011": [25, 112, 165], "lipid": [25, 37, 86, 98, 111, 112, 113, 120, 162, 163], "bilay": [25, 98, 111, 120], "planar": 25, "undul": 25, "vesicl": [25, 163], "membran": [25, 37, 98, 111, 112, 154, 162, 163], "inner": [25, 32, 86, 107, 108, 113], "radius_of_gyr": [25, 86, 90, 111], "script": [25, 66, 111, 117, 118, 151, 160], "mdanalysiscookbook": 25, "optimize_cutoff": 25, "slow": [25, 37, 49, 68, 101, 102, 106], "heurist": [25, 109], "phosphat": 25, "subgraph": 25, "head": 25, "po4": [25, 162, 163], "deem": 25, "fastest": [25, 105], "routin": [25, 56, 99], "leaflet0": 25, "leaflet1": 25, "longer": [25, 38, 48, 52, 64, 68, 70, 74, 86, 113, 131, 140], "component_index": 25, "groups_it": 25, "write_select": [25, 86], "pml": [25, 86, 118, 120], "ndx": [25, 86, 116, 120], "gromac": [25, 29, 38, 40, 41, 44, 56, 58, 67, 69, 72, 73, 76, 79, 86, 88, 92, 103, 104, 110, 111, 114, 120, 128, 131, 138, 147, 148, 149, 150, 162, 163, 165], "selectionwrit": [25, 114, 115, 116, 117, 118, 119, 120], "dmin": 25, "dmax": 25, "max_imbal": 25, "disconnect": 25, "n_0": 25, "n_1": 25, "mathrm": [25, 28, 86, 90, 160], "pick": [25, 69, 72, 73, 108, 120], "balanc": 25, "scan": [25, 60], "stepsiz": 25, "optimum": 25, "die": 25, "realli": [25, 38, 68, 149], "ought": 25, "robust": 25, "elizabeth": [26, 30, 31], "den": [26, 30, 31, 111, 112], "restrict": [26, 37, 79, 103, 109, 141, 149], "unmaintain": 26, "906": 26, "help": [26, 109, 111, 113], "lu2003": 26, "lu2008": 26, "xiang": 26, "jun": 26, "lu": [26, 148], "wilma": 26, "olson": 26, "3dna": 26, "rebuild": [26, 49], "5108": 26, "5121": 26, "09": [26, 111, 160], "gkg680": 26, "versatil": 26, "protocol": [26, 40, 75, 100, 101], "1213": 26, "1227": 26, "1038": 26, "nprot": 26, "104": [26, 112], "dna": 26, "x3dnatraj": 26, "pdb_x3dna": 26, "bashrc": 26, "x3dna_ensembl": 26, "355d": 26, "bp": [26, 31], "basepair": [26, 30, 31], "shear": [26, 108], "stretch": 26, "stagger": 26, "buckl": 26, "propel": 26, "slide": [26, 49], "tilt": 26, "roll": [26, 92], "xdna_ensembl": 26, "opt": 26, "instruct": [26, 29, 32, 39, 58, 99], "x3dna_param": 26, "bp_step": 26, "par": 26, "deal": [26, 44, 46, 79, 129, 134, 147], "outdir": 26, "gzip": [26, 58, 64, 68, 74, 79, 105, 109, 111], "mean_std": 26, "bass": 26, "png": [26, 34, 162, 163], "parameter_nam": 26, "cpickl": 26, "sorted_profiles_it": 26, "std": 26, "understood": [26, 79, 86, 90, 113], "sequenti": [26, 34, 56, 66, 79, 90, 113, 137, 147, 155, 156], "run_x3dna": 26, "applicationerror": [26, 94], "regularli": 27, "nevertheless": [27, 72], "sometim": [27, 29, 38, 64, 72, 83, 151], "discuss": [27, 68, 79, 89, 108, 112, 141, 162, 163, 165], "743": 27, "x3dna": 27, "helicoid": 27, "orthoromb": 28, "canon": [28, 79, 86, 113], "nvt": 28, "binsiz": 28, "25": [28, 32, 64, 65, 66, 86, 108, 148, 149], "segment": [28, 29, 31, 35, 76, 86, 88, 89, 90, 92, 94, 95, 113, 122, 124, 126, 127, 133, 141, 143, 147, 159], "resolut": [28, 86, 113, 163], "mass_dens": 28, "mass_density_stddev": 28, "charge_dens": 28, "charge_density_stddev": 28, "po": [28, 54, 56, 148], "pos_std": 28, "char": [28, 95, 109], "char_std": 28, "slice_volum": 28, "hist_bin_edg": 28, "futur": [28, 29, 49, 86, 113, 140, 148, 160], "lden": 28, "bug": [28, 68, 104, 161, 165], "caus": [28, 40, 42, 74, 86, 103, 113, 159], "previous": [28, 32, 39, 40, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 106, 146, 160], "histrogram": 28, "onward": [28, 142, 151], "docstr": [28, 34, 109], "hugo": 29, "macdermott": 29, "opeskin": 29, "einstein": [29, 155], "relat": [29, 34, 38, 40, 86, 99, 108, 155], "brownian": 29, "motion": [29, 32, 112, 154, 155], "behind": [29, 111], "maginn2018": 29, "express": [29, 54, 86, 88, 113], "formula": [29, 112, 160], "bigg": 29, "sum_": [29, 35, 36, 37, 86, 90], "t_": 29, "vari": [29, 42, 58, 64, 77, 129], "lag": [29, 37, 98, 102], "le": [29, 86, 90, 149], "tau_": 29, "therebi": 29, "maxim": [29, 34], "intens": 29, "fourier": [29, 141, 149], "fft": 29, "calandri2011": [29, 112], "buyl2018": [29, 112], "tidynam": [29, 112], "importerror": [29, 40, 67, 68], "citat": [29, 164], "unwrap": [29, 36, 60, 86, 90, 103, 151, 157], "despit": [29, 91, 156], "plan": [29, 109], "meantim": 29, "gmx": 29, "trjconv": 29, "nojump": [29, 151], "flag": [29, 60, 67, 75, 80, 83, 86, 100, 106, 109, 131, 140, 147, 154], "movement": [29, 36, 37, 44], "undergo": 29, "walk": 29, "random_walk": 29, "random_walk_topo": 29, "einsteinmsd": 29, "msd_type": 29, "let": [29, 34, 58], "lagtim": 29, "lc": 29, "black": 29, "slope": 29, "middl": 29, "ballist": 29, "poorli": [29, 51], "confirm": 29, "reccomend": 29, "loglog": 29, "d_d": 29, "lim_": 29, "60": [29, 36, 47, 64, 65, 149], "linregress": 29, "start_tim": 29, "start_index": 29, "end_tim": 29, "linear_model": 29, "end_index": 29, "stderr": [29, 102], "dim_fac": 29, "msd1": 29, "msd2": 29, "u1": [29, 92, 160, 162], "u2": [29, 48, 80, 92, 160], "combined_msd": 29, "msds_by_particl": 29, "average_msd": 29, "replica": 29, "jump": [29, 37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 151], "artifici": 29, "inflat": 29, "henc": [29, 44, 47, 48, 49, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 76, 79, 80, 84, 100, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 150, 160], "elaps": [29, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "addition": [29, 37, 42, 44, 67, 100, 101], "finit": 29, "effect": [29, 32, 35, 47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 81, 92, 109, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 151], "emploi": [29, 51, 92, 99], "yeh2004": 29, "von": 29, "b\u00fclow2020": 29, "review": 29, "pitfal": 29, "kubo": 29, "prove": 29, "judici": 29, "incorpor": [29, 86, 90], "edward": [29, 37], "maginn": 29, "messerli": 29, "daniel": [29, 67], "carlson": 29, "roe": 29, "elliot": 29, "viscos": 29, "live": 29, "6324": 29, "dec": [29, 62], "livecomsjourn": 29, "php": 29, "livecom": 29, "view": [29, 80, 83, 91, 109], "v1i1e6324": 29, "33011": 29, "chul": 29, "yeh": [29, 37], "108": [29, 37, 112], "15873": 29, "15879": 29, "2004": [29, 37, 112], "jp0477147": 29, "s\u00f6ren": 29, "b\u00fclow": 29, "jakob": 29, "t\u00f3ma": 29, "bullerjahn": 29, "systemat": 29, "pressur": [29, 40, 67, 70, 149, 155], "153": 29, "021101": 29, "0008316": 29, "xy": [29, 99, 154], "yz": [29, 154], "xz": [29, 154], "n_particl": 29, "lescouli": 30, "licenc": [30, 104, 107, 108, 165], "\u1d47denning2011": 30, "\u1d47denning2012": 30, "deva": [30, 31], "priyakumar": [30, 31], "lennart": [30, 31], "nilsson": [30, 31], "alexand": [30, 31], "mackerel": [30, 31], "jr": [30, 31], "impact": [30, 31, 102], "hydroxyl": [30, 31, 38], "rna": [30, 31], "1929": [30, 31], "1943": [30, 31], "21777": [30, 31], "intrins": [30, 31, 90, 99], "contribut": [30, 31, 32, 38, 39, 68], "heterogen": [30, 31, 98], "2800": [30, 31], "2806": [30, 31], "2012": [30, 31], "22242623": [30, 31], "ja211328g": [30, 31], "nucpairdist": 30, "selection1": [30, 38], "selection2": [30, 38], "superclass": 30, "pair_dist": 30, "watsoncrickdist": 30, "strand1": 30, "strand2": 30, "n1_name": 30, "n1": [30, 31, 88, 109], "n3_name": 30, "n3": [30, 31, 38, 88], "g_name": 30, "a_nam": 30, "u_nam": 30, "t_name": 30, "watson": [30, 31], "crick": [30, 31], "nitrogen": [30, 31, 86, 113], "guanin": 30, "adenin": 30, "uracil": 30, "thymin": 30, "cytosin": [30, 38], "strand": 30, "chi": 31, "AS": 31, "cp": 31, "c2": [31, 62, 86, 88, 113], "o2": [31, 38, 65, 88], "n6": [31, 88], "o4": [31, 65, 88], "o6": [31, 88], "n4": [31, 88], "\u1d43denning2011": 31, "\u1d43denning2012": 31, "question": [31, 58, 109, 165], "wc_pair": 31, "seg1": 31, "seg2": 31, "failur": 31, "occur": [31, 35, 36, 82, 86, 113, 134], "minor_pair": 31, "minor": [31, 161], "groov": 31, "major_pair": 31, "phase_cp": 31, "seg": [31, 86, 113], "pseudo": [31, 104, 108, 109], "ribos": 31, "pucker": 31, "ring": [31, 49, 86, 113, 140], "phase_a": 31, "tor": 31, "tors_alpha": 31, "tors_beta": 31, "tors_gamma": 31, "tors_delta": 31, "tors_ep": 31, "tors_zeta": 31, "tors_chi": 31, "c1": [31, 62, 88], "hydroxyl_angl": 31, "pseudo_dihe_baseflip": 31, "bp1": 31, "bp2": 31, "seg3": 31, "flip": [31, 38, 98], "segid1": 31, "segid": [31, 49, 64, 65, 66, 86, 88, 89, 90, 111, 113, 122, 124, 125, 131, 133, 136, 137, 138, 139, 141, 147], "segid2": 31, "segid3": 31, "descend": [32, 34], "cumulated_vari": 32, "ratio": [32, 34], "significantli": [32, 73], "psf_pca": 32, "retain": [32, 49, 75, 76, 82, 109], "percent": 32, "cumul": [32, 35, 76], "ith": 32, "n_pc": 32, "pca_spac": 32, "n_compon": 32, "conclus": 32, "decreas": 32, "p_compon": 32, "percentag": [32, 38, 58, 102], "chosen": [32, 37, 64, 78, 86, 90, 113], "sped": [32, 80], "precalcul": 32, "0th": [32, 34], "mean_atom": 32, "did": [32, 58], "cumulative_overlap": [32, 112], "subspac": 32, "yang2008": [32, 112], "mutual": [32, 34], "project_single_fram": 32, "anchor": [32, 86, 103], "pc": [32, 55], "extrapol": 32, "atomselect": [32, 118, 119, 120], "captur": [32, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75], "_i": [32, 33, 35, 36, 86, 90], "w_": 32, "textbf": 32, "3r": 32, "broadcast": 32, "fanci": [32, 58, 75], "index_extrapol": 32, "add_transform": [32, 36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 151, 152, 153, 154, 155, 156, 159], "rmsip": [32, 112], "product": [32, 36, 86, 90, 103, 107], "amadei1999": [32, 112], "leo": [32, 112], "macias2004": [32, 112], "first_interv": 32, "second_interv": 32, "last_interv": 32, "38147609331128324": 32, "17478244043688052": 32, "cosine_cont": 32, "cosin": [32, 37, 51], "hess2002": 32, "pca_compon": 32, "agreement": 32, "disagr": 32, "berk": 32, "hess": 32, "phy": [32, 112, 148], "rev": 32, "031910": 32, "mar": 32, "1103": 32, "physrev": 32, "transpos": [32, 36, 108], "commonli": [33, 64, 155], "persistencelength": 33, "persist": [33, 34, 58, 72], "decorrel": 33, "co": [33, 37, 38, 51, 112, 148, 160], "theta_": 33, "approx": 33, "l_b": 33, "l_p": 33, "bond_autocorrel": 33, "lb": 33, "predict": 33, "sort_backbon": 33, "melt": 33, "polyamid": [33, 98], "sorted_backbon": 33, "bb": [33, 36, 111], "persistence_length": 33, "perform_fit": 33, "fit_exponential_decai": 33, "rearrang": [33, 56], "sean": 34, "seyler": [34, 112], "hausdorff": 34, "fr\u00e9chet": 34, "seyler2015": 34, "nonneg": 34, "snapshot": [34, 78], "loos": [34, 66, 74], "speak": 34, "glanc": 34, "pattern": [34, 49, 58, 111], "triangl": 34, "inequ": 34, "psanalysistutori": 34, "outlin": 34, "heat": [34, 48], "dendrogram": 34, "hierarch": 34, "avishek": 34, "thorp": [34, 112], "macromolecular": [34, 61, 79, 107, 112, 133, 147], "1004568": [34, 112], "sqnorm": 34, "zeroth": 34, "get_msd_matrix": 34, "msd": [34, 37, 39, 112], "n_p": 34, "n_q": 34, "msd_matrix": 34, "m_": 34, "p_i": 34, "q_j": 34, "get_coord_ax": 34, "1st": [34, 99], "2nd": [34, 99], "get_path_metric_func": 34, "path_metr": 34, "l2": 34, "norm": [34, 35, 99, 103, 111], "revers": [34, 40, 91, 155], "halv": 34, "mid": [34, 86, 103, 159], "half": [34, 86, 99, 104, 155], "778663899862152": 34, "directed_hausdorff": 34, "earli": 34, "taha2015": 34, "abdel": 34, "aziz": 34, "taha": 34, "allan": 34, "hanburi": 34, "ieee": 34, "transact": 34, "machin": [34, 70, 99], "intellig": 34, "2153": 34, "2163": 34, "1109": 34, "tpami": 34, "2408351": 34, "hausdorff_wavg": 34, "5669644353703447": 34, "avg": 34, "obei": 34, "hausdorff_avg": 34, "bias": 34, "toward": [34, 160], "5669646575869005": 34, "hausdorff_neighbor": 34, "farthest": 34, "sens": [34, 35, 144], "discrete_frechet": 34, "778663984013591": 34, "frechet": 34, "842901117711383": 34, "fr\u00e8chet1906": 34, "alt1995": 34, "eiter1994": 34, "eiter1997": 34, "mauric": 34, "fr\u00e8chet": 34, "sur": 34, "quelqu": 34, "du": [34, 88], "fonctionnel": 34, "rendiconti": 34, "del": [34, 44, 102, 109], "circolo": 34, "matematico": 34, "di": [34, 80, 149], "1884": 34, "1940": 34, "72": [34, 83, 86, 148, 149], "1906": 34, "1007": 34, "bf03018603": 34, "helmut": 34, "alt": 34, "godau": 34, "polygon": 34, "05": [34, 49, 86, 88, 98, 108], "01n02": 34, "91": [34, 148, 149], "1995": 34, "1142": 34, "s0218195995000064": 34, "thoma": [34, 108], "eiter": 34, "heikki": 34, "mannila": 34, "1994": [34, 37, 108], "informatica": 34, "109": 34, "1997": 34, "s002360050075": 34, "dist_mat_to_vec": 34, "path_select": 34, "psanalysi": 34, "selection_str": 34, "u_origin": 34, "u_refer": 34, "u_fit": 34, "fit_to_refer": 34, "postfix": [34, 102], "_fit": 34, "rmsdfile": 34, "targetdir": 34, "refactor": [34, 36, 86, 90], "get_num_atom": 34, "to_path": 34, "unpack": [34, 109, 149], "top_nam": 34, "newtraj_nam": 34, "topology_trajectori": 34, "els": [34, 38, 49, 64, 66, 68, 86, 107, 109], "overridden": 34, "psapair": 34, "npath": 34, "compute_nearest_neighbor": 34, "nearest_neighbor": 34, "find_hausdorff_pair": 34, "overal": 34, "hausdorff_pair": 34, "encapsul": 34, "among": [34, 104], "math": [34, 37, 86, 108, 110], "ext": [34, 50, 109, 115, 116, 117, 118, 119, 139], "summar": 34, "matrix_id": 34, "pair_id": 34, "th": [34, 35, 37, 83, 99, 103, 148], "psadata": 34, "dist_mat": 34, "ward": 34, "count_sort": 34, "distance_sort": 34, "no_plot": 34, "no_label": 34, "color_threshold": 34, "heatmap": 34, "hierarchi": [34, 58, 93], "linkag": [34, 38], "squareform": 34, "link": [34, 38, 40, 68, 99, 112, 140], "node": [34, 38, 103, 130], "tm": [34, 148], "dgram": 34, "generate_path": 34, "infix": 34, "insert": [34, 64, 65, 68, 90, 125, 138], "trj_fit": 34, "subdirectori": 34, "xxx": [34, 148], "_psa": 34, "000": [34, 62, 125, 136], "999": [34, 50, 56, 66, 86, 125, 136, 148], "get_num_path": 34, "get_pairwise_dist": 34, "vectorform": 34, "get_path": 34, "psa_pair": 34, "run_pairs_analysi": 34, "psa_path": 34, "pkl": 34, "save_path": 34, "labels": 34, "uses": 34, "pdf": [34, 36, 37, 62, 108], "matshow": 34, "vertic": 34, "inch": 34, "font": 34, "colorbar": 34, "dist_matrix_clu": 34, "reorder": 34, "tick1on": 34, "tick2on": 34, "label1on": 34, "label2on": 34, "tick1lin": 34, "tick2lin": 34, "label1": 34, "label2": 34, "upstream": [34, 67], "2493": 34, "plot_annotated_heatmap": 34, "annot_s": 34, "imshow": 34, "seaborn": 34, "pip": [34, 39, 58, 112], "conda": [34, 39, 68], "plot_nearest_neighbor": 34, "idx": [34, 38, 89], "multiplot": 34, "aspect_ratio": 34, "height": [34, 102], "partial": [34, 60, 65, 79, 92, 136, 137, 140, 146, 147, 151], "nn": [34, 148], "hp": 34, "pp": [34, 112], "savez_compress": 34, "g_": 35, "ab": [35, 67, 86, 103, 105, 113], "n_": 35, "n_a": [35, 160], "n_b": 35, "_j": 35, "homogen": [35, 86, 110], "shell": [35, 38, 68, 86, 111], "dr": 35, "rho": [35, 36, 160], "solvat": [35, 38, 86, 90, 111], "r_1": [35, 146], "interrdf": 35, "nbin": [35, 109], "exclusion_block": 35, "exclude_sam": 35, "suppos": [35, 38, 51, 54, 58, 60, 69, 72, 73, 75, 155], "b1": 35, "b2": 35, "spheric": [35, 113, 163], "tile": 35, "intend": [35, 90, 102, 109], "interrdf_": 35, "superfl": 35, "opposit": [35, 86, 89, 99], "offici": [35, 54, 83], "cdf": 35, "get_cdf": 35, "gro_memprot": 35, "xtc_memprot": 35, "s1": [35, 108], "znd": 35, "289": 35, "s2": 35, "od1": [35, 38], "od2": [35, 38], "sphzone": [35, 37, 86, 113], "s3": 35, "291": 35, "292": 35, "s4": 35, "dotson": [36, 112], "rmsf": 36, "coordinat": 36, "investig": [36, 98], "lid": 36, "nmp": 36, "crd": [36, 68, 79, 84, 86, 92, 109, 111, 147, 150], "groupselect": 36, "29": [36, 148, 149, 160], "121": [36, 148, 149], "214": [36, 111], "122": [36, 65, 141, 149], "159": 36, "59": [36, 148, 149], "add_subplot": [36, 162], "111": [36, 162], "set_xlabel": [36, 162], "set_ylabel": [36, 162], "savefig": [36, 162, 163], "rmsd_all_core_lid_nmp_ref1ak": 36, "impli": [36, 54], "w_i": 36, "forward": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "838544558398293": 36, "weights_groupselect": 36, "impos": 36, "correspondingli": [36, 44], "get_weight": [36, 109], "scheme": [36, 58, 151], "rotation": 36, "overflow": 36, "underflow": 36, "rho_i": 36, "welford1962": 36, "tran": [36, 86, 90, 99, 108], "not_protein": 36, "center_in_box": [36, 158], "prealign": 36, "asel": [36, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "reshap": [36, 108, 109], "load_new": [36, 79, 80, 92], "afc": [36, 51, 60, 80], "calpha": [36, 64, 111], "rmsfer": 36, "welford": 36, "technometr": 36, "419": [36, 112], "420": 36, "1962": 36, "1080": [36, 37, 112], "00401706": 36, "10490022": 36, "quiet": 36, "alejandro": [37, 98, 112], "bernardin": [37, 98, 112], "relax": [37, 79], "wor": 37, "yeh1999": 37, "hbl": 37, "rapaport1983": 37, "angular": [37, 98], "grigera1996": 37, "br\u00f3dka1994": 37, "surviv": [37, 98], "sp": [37, 109], "liu2004": 37, "araya": [37, 98, 112], "secchi2014": [37, 98], "milischuk2011": 37, "nanopor": 37, "yu": [37, 60], "ling": 37, "chung": 37, "yuan": 37, "mou": 37, "liquid": 37, "103": [37, 141, 149], "3699": 37, "3705": 37, "1999": [37, 112], "jp984584r": 37, "rapaport": 37, "1151": 37, "1162": 37, "1983": [37, 112], "00268978300102931": 37, "raul": [37, 98], "grigera": 37, "susana": 37, "kalko": 37, "jorg": 37, "fischbarg": 37, "wall": [37, 99], "langmuir": 37, "154": 37, "158": [37, 148], "la9408681": 37, "aleksand": 37, "br\u00f3dka": 37, "diffus": [37, 39, 112, 155, 162, 163], "82": [37, 148, 149], "1075": 37, "1078": 37, "00268979400100764": 37, "pu": [37, 107, 112, 148], "liu": [37, 107, 112], "bern": 37, "On": [37, 38, 42, 51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 77, 80, 82, 86, 105, 112, 149], "confin": [37, 64], "fluid": [37, 90, 112], "vapor": 37, "6595": 37, "6602": 37, "jp0375057": 37, "anatoli": 37, "milischuk": 37, "branka": 37, "ladanyi": 37, "silica": 37, "135": [37, 65], "174709": 37, "3657408": 37, "hbond_analysi": [37, 39, 98, 112], "hydrogenbondanalysi": 37, "stabl": [37, 86, 108], "byre": [37, 86, 113], "42": [37, 49, 56, 86, 92, 102, 113, 148, 149], "wor_analysi": 37, "readi": [37, 86], "wor_oh": 37, "wor_hh": 37, "wor_dip": 37, "oh": [37, 38], "131": [37, 148], "hh": [37, 148], "132": [37, 108, 148], "dip": 37, "t0": [37, 98, 108], "tf": 37, "dtmax": 37, "333": 37, "straight": [37, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "preferenti": 37, "electr": 37, "ad_analysi": 37, "ad_analysisoh": 37, "ad_analysishh": 37, "ad_analysisdip": 37, "graph0": 37, "graph1": 37, "graph2": 37, "travel": 37, "cylindr": [37, 86, 113], "zone": [37, 86, 113], "zmax": [37, 86, 104, 113, 163], "zmin": [37, 86, 104, 113, 163], "strong": 37, "weak": [37, 83], "cyzon": [37, 86, 113], "msd_analysi": 37, "sp_timeseri": 37, "exhibit": 37, "potassium": [37, 148], "hop": 37, "advis": [37, 104, 151], "reload": [37, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 102], "md100n": 37, "joined_sp_timeseri": 37, "o13": 37, "o14": 37, "new_sp": 37, "sp_timeseries_data": 37, "datapoint": [37, 98], "sp_data": 37, "t1": [37, 108], "x_axi": 37, "y_axi": 37, "cos_theta0": 37, "ang_distr0": 37, "cos_theta1": 37, "ang_distr1": 37, "msd_t0": 37, "msd_t1": 37, "tau_n": 37, "sp_tau1": 37, "sp_tau2": 37, "sp_tau_n": 37, "nproc": 37, "propos": 37, "c_": 37, "hat": [37, 86, 90, 103], "mathit": 37, "_2": [37, 103], "p_2": 37, "3x": 37, "legendr": 37, "crash": 37, "lg2": 37, "dipolar": 37, "know": [37, 38, 58, 75], "2ndt": 37, "frac1t": 37, "comment": [37, 38, 41, 62, 64, 71, 74, 114, 115, 116, 117, 118, 119, 134, 148], "py": [37, 58, 68, 82, 111, 112, 149, 151], "act": [37, 79, 86, 102], "classifi": 37, "zhiyi": 38, "wu": 38, "gtc": 38, "ox": 38, "xiki": 38, "tempula": 38, "simultan": 38, "water_select": 38, "120": 38, "forcefield": 38, "breadth": 38, "partner": [38, 91], "water2": 38, "sele1_acceptor": 38, "water1_donor": 38, "water1_donor_heavi": 38, "water1_acceptor": 38, "sele2_donor": 38, "sele2_donor_heavi": 38, "water2_acceptor": 38, "donor_proton": 38, "donor_heavy_atom": 38, "fourth": [38, 91, 140], "depth": [38, 89, 102], "network2timeseri": 38, "travers": [38, 103], "expand_timeseri": 38, "expand": [38, 77, 109], "familiar": 38, "generate_t": 38, "reformat": 38, "databas": [38, 89, 147], "datafram": 38, "120\u00ba": 38, "123": [38, 108, 109], "oc1": 38, "oc2": 38, "amber99sb": 38, "ildn": 38, "ne": [38, 148], "nh1": [38, 66], "nh2": 38, "nd2": 38, "sg": [38, 86, 90, 148], "cyh": 38, "ne2": 38, "oe1": 38, "oe2": 38, "nd1": 38, "presenc": [38, 67, 79, 91, 106], "hsd": 38, "hse": 38, "hsp": 38, "met": [38, 66, 86, 88], "sd": 38, "gregoret1991": 38, "og": [38, 86, 90], "og1": [38, 86, 90], "trp": 38, "ne1": 38, "tyr": [38, 113], "oi": 38, "sm": [38, 148], "opl": [38, 88, 111], "ambigu": [38, 148], "histidin": [38, 49], "carbohydr": 38, "glycam": 38, "inappropri": 38, "oneself": 38, "waterbridgeanalysis_otherff": 38, "default_donor": 38, "otherff": 38, "default_acceptor": 38, "lydia": 38, "gregoret": 38, "stephen": 38, "rader": 38, "fletterick": 38, "fred": 38, "cohen": 38, "sulfur": 38, "1991": [38, 108], "340090204": 38, "arginin": [38, 49], "aspart": 38, "exit": [38, 44, 79, 109, 114], "carboxyl": [38, 49], "asp3": 38, "hw1": [38, 92, 131], "hw2": [38, 92, 131], "sol2": 38, "arg1": 38, "customis": [38, 60, 91, 132], "sele1": 38, "ang": 38, "sele2": 38, "phase": 38, "sele1_index": 38, "sele1_heavy_index": 38, "atom2": [38, 74, 86, 91], "heavy_atom2": 38, "atom1": [38, 74, 86, 91], "heavy_atom1": 38, "sele2_index": 38, "sele2_heavy_index": 38, "s1_resnam": 38, "s1_resid": 38, "s1_name": 38, "s2_resnam": 38, "s2_resid": 38, "s2_name": 38, "analysis_func": 38, "proport": 38, "peopl": 38, "pai": 38, "attent": 38, "insist": 38, "shouldn": [38, 51, 60], "order_of_water_bridg": 38, "undesir": [38, 75], "s1_index": 38, "to_index": 38, "to_resnam": 38, "to_resid": 38, "to_nam": 38, "from_index": 38, "from_resnam": 38, "from_resid": 38, "from_nam": 38, "key1": 38, "key2": 38, "s2_index": 38, "wbridge_analysi": 38, "selection1_typ": 38, "update_water_select": 38, "filter_first": 38, "distance_typ": 38, "output_format": 38, "sele1_sele2": 38, "anyth": [38, 66, 68, 81, 88, 109, 146, 152], "consum": [38, 68], "20th": [38, 112], "domain": [38, 104, 155], "surfac": [38, 40, 86], "constantli": [38, 102], "tini": [38, 112], "engag": 38, "ideal": [38, 58, 98], "180\u00ba": 38, "fairli": [38, 58, 165], "150\u00ba": 38, "shall": 38, "donor_acceptor": 38, "farther": 38, "entiti": [38, 64], "tidi": 38, "atom_1": 38, "atom_2": 38, "_only_": 38, "r_cov": 38, "58": [38, 141, 148, 149, 163], "defaultdict": 38, "coval": 38, "meth": 38, "_get_bonded_hydrogens_list": 38, "timesteps_by_typ": 38, "exampleanalysismodul": 39, "analysis_obj": 39, "analysisclass": 39, "start_fram": [39, 162, 163], "stop_fram": 39, "caveat": 39, "hole2": 39, "hole": 39, "atomicdist": 39, "quantiti": [39, 74, 160], "psa": [39, 112], "bat": 39, "hbond_autocorrel": 39, "waterbridgeanalysi": 39, "leaflet": [39, 111, 120], "nuclinfo": 39, "nucleicacid": 39, "elast": [39, 112], "network": [39, 68, 102, 112], "gnm": [39, 112], "helan": [39, 112], "helic": 39, "radial": 39, "rdf": 39, "lineardens": 39, "waterdynam": [39, 98, 112], "dielectr": [39, 112], "diffusionmap": 39, "xdr": [40, 69, 73, 84, 110, 149], "pyedr": 40, "human": [40, 98, 112], "has_pyedr": 40, "availbl": [40, 67], "aux": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "some_edr_fil": 40, "newli": 40, "data_dict": 40, "gave": 40, "unit_dict": 40, "cf": [40, 148], "mdanalysis_base_unit": 40, "inconsist": [40, 76], "convert_unit": [40, 47, 48, 50, 51, 52, 53, 54, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76], "temp": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 149], "get_data": 40, "some_term": 40, "kinet": [40, 149], "all_term": 40, "auxread": [40, 41, 42, 43, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "aux_spec": [40, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "surf": 40, "surften": 40, "constr": [40, 149], "inconveni": 40, "epot": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 149], "surf_tens": 40, "tension": 40, "aux_edr": 40, "aux_edr_tpr": 40, "aux_edr_xtc": 40, "namespac": [40, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 88, 109, 164], "add_auxiliari": [40, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "525164": 40, "0625": 40, "3764": 40, "52734375": 40, "auxdata": [40, 43, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "1857": 40, "519287109375": 40, "initialis": [40, 41, 44, 90, 91, 102, 147], "_auxdata": [40, 44], "pathlib": 40, "posixpath": 40, "data_selector": [40, 41, 42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "_n_step": [40, 44], "exce": [40, 50, 86, 113], "gb": [40, 42, 149], "memory_limit": [40, 42], "keyerror": 40, "invalid": [40, 64, 103, 109, 136], "read_all_tim": [40, 41, 44], "edrstep": 40, "time_selector": [40, 41, 42, 44], "auxstep": [40, 41, 42, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "grace": 41, "xvgstep": 41, "xvgreader": [41, 42, 44], "xvgfileread": [41, 44], "footprint": [41, 44], "auxfileread": [41, 42, 44], "uncom": 41, "trail": [41, 64, 102, 109], "initial_tim": [42, 44], "constant_dt": [42, 44], "throughout": [42, 44, 92, 98], "represent_ts_a": [42, 44], "auxnam": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "veloc": [42, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 79, 80, 81, 83, 86, 92, 98, 101, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "deep": [42, 79, 83], "calc_repres": [42, 44], "frame_data": [42, 44], "frame_rep": [42, 44], "attach_auxiliari": 42, "coord_par": 42, "agnost": [42, 160], "xvg": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "edr": [42, 44, 45, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "nan": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 86, 90, 91, 99], "indici": 42, "get_descript": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "replic": [42, 68], "original_aux": 42, "new_aux": 42, "move_to_t": [42, 44], "n_step": [42, 44], "next_nonempty_fram": [42, 44], "read_t": [42, 44], "update_t": [42, 44], "recent": [42, 49, 51, 68, 141, 147], "rewind": [42, 44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80, 109], "step_to_fram": [42, 44], "return_time_diff": [42, 44], "time_frame_0": 42, "floor": [42, 44], "step_to_tim": [42, 44], "frame_index": 42, "time_diff": 42, "consant": 42, "austep": 42, "auxfil": [42, 44], "get_auxreader_for": [43, 44], "submodul": [44, 79, 147, 151], "protoread": [44, 75, 79, 92], "alongsid": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "accompani": [44, 58], "remark": [44, 51, 60, 64, 65, 66, 68, 74, 79, 100, 120, 147], "edrread": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "stand": 44, "alon": 44, "do_someth": 44, "10th": 44, "datatyp": [44, 58], "time_at_step": 44, "time_at_frame_0": 44, "pullforc": 44, "pull_forc": 44, "next_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "iter_as_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "particularli": [44, 66], "low_f": 44, "low_freq_aux_data": 44, "worri": [44, 86], "__iter__": [44, 75, 79, 83], "iter_auxiliari": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "get_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf_dt": 44, "settabl": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "set_aux_attribut": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "rename_aux": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullf": 44, "reload_aux": 44, "get_aux_descript": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "pullx": 44, "And": [44, 85], "descr": 44, "new_u": 44, "new_trajectori": 44, "_auxstep": 44, "_data": 44, "_dt": 44, "_initial_tim": 44, "_time_selector": 44, "_data_selector": 44, "_constant_dt": 44, "setup": [44, 58], "ausstep": 44, "_select_tim": 44, "selector": [44, 86, 88, 92, 113], "_select_data": 44, "overload": 44, "_empty_data": 44, "cap": [44, 104], "required_attr": 44, "__len__": [44, 79], "__getitem__": [44, 79, 83, 109], "reposit": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "_read_next_step": 44, "__enter__": 44, "__exit__": [44, 79], "__del__": [44, 75, 79], "__eq__": [44, 79, 83], "addion": 44, "stopiter": 44, "past": [44, 79], "_go_to_step": 44, "count_n_step": 44, "_restart": 44, "overwritten": [44, 64, 83, 91], "seek": [44, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100, 101, 105, 109, 160], "_reopen": [44, 58], "reopen": [44, 58], "recognis": [46, 58, 68, 88, 146], "parm": [46, 78, 85, 140], "pmd": [46, 48], "pgro": [46, 48], "load_fil": [46, 48], "ugro": 46, "convert_to": [46, 48, 49, 85, 86], "insensit": [46, 85, 86, 99], "pgro2": 46, "tab": [46, 66, 111, 149], "parmedpars": [46, 147], "rdkit": [46, 62, 85, 86, 88, 92, 113, 146], "rdkitpars": 46, "openmm": [46, 48], "openmmpars": 46, "accessor": 46, "app": [47, 48], "layer": [47, 86, 113], "pdbxfile": 47, "openmmtopologypars": 47, "convert_forces_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "inplac": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 86, 103, 107, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_forces_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "unmodifi": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_pos_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "modif": [47, 48, 49, 51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 76, 80, 82, 86, 103, 105, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "caller": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_time_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 76, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_from_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "convert_velocities_to_n": [47, 48, 49, 51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144], "openmmapptopologypars": 47, "openmmread": 47, "pdbx": 47, "openmmsimulationread": 47, "kj": [47, 67, 68, 69, 160], "openmmappread": 47, "prm7_ala2": 48, "rst7_ala2": 48, "prm": 48, "amberparm": 48, "3026": 48, "1003": 48, "3025": 48, "parametr": [48, 85], "prm_prot": 48, "mm": 48, "createsystem": 48, "nonbondedmethod": 48, "nocutoff": 48, "constraint": [48, 131, 141, 149], "implicitsolv": 48, "gbn2": 48, "langevinintegr": 48, "bath": 48, "picosecond": [48, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 80, 160], "friction": 48, "femtosecond": [48, 60, 160], "sim": 48, "setposit": 48, "minimizeenergi": 48, "maxiter": 48, "recogins": 48, "parmedread": [48, 78], "parmedconvert": 48, "neat": 48, "hmassrepartit": 48, "008": [48, 86, 148], "pmt": 48, "hmass": 48, "dalton": 48, "03399992": 48, "01799965": 48, "034": 48, "mgro": 48, "parmed_subset": 48, "obj": [48, 49, 51, 54, 56, 58, 60, 62, 64, 69, 72, 73, 74, 75, 79, 109, 149], "chem": [49, 62, 92, 107, 112, 148], "rdchem": 49, "atomid": [49, 90, 122, 123, 124, 128, 134, 138, 147], "atomnam": [49, 56, 66, 86, 90, 109, 113, 122, 123, 124, 126, 128, 134, 138, 140, 142, 143, 146, 148, 149], "aromat": [49, 88, 90, 146], "rschiral": [49, 88, 90], "atomtyp": [49, 62, 65, 90, 122, 123, 124, 126, 128, 129, 130, 134, 138, 140, 142, 143, 148], "chainid": [49, 50, 64, 65, 66, 90, 109, 113, 124, 125, 136, 137, 138, 147], "icod": [49, 64, 65, 86, 90, 133, 137, 147], "tempfactor": [49, 50, 64, 65, 86, 90, 92, 109, 122, 125, 133, 136, 137, 147], "getmonomerinfo": 49, "getaltloc": 49, "getisaromat": 49, "getchainid": 49, "getdoubleprop": 49, "_gasteigercharg": 49, "_tripospartialcharg": 49, "getsymbol": 49, "getinsertioncod": 49, "getidx": 49, "getmass": 49, "getnam": 49, "getprop": 49, "_triposatomnam": 49, "_cipcod": 49, "chiral": [49, 86, 88, 90, 113], "getoccup": 49, "getresiduenam": 49, "getresiduenumb": 49, "gettempfactor": 49, "_triposatomtyp": 49, "monomerinfo": 49, "rdkitread": [49, 92], "rdkitconvert": [49, 86, 88, 113], "molfrommol2fil": 49, "docking_pos": 49, "mol2": [49, 77, 79, 84, 147, 150], "removeh": [49, 62], "0x7fcebb958148": 49, "infer": [49, 76, 92], "chembl27": 49, "ongo": 49, "3339": 49, "benchmark": [49, 151], "atompdbresidueinfo": 49, "_mdanalysis_nam": 49, "segindic": [49, 88, 90], "getsegmentnumb": 49, "_mdanalysis_charg": 49, "getintprop": 49, "_mdanalysis_index": 49, "_mdanalysis_segid": 49, "_mdanalysis_typ": 49, "pdb_full": 49, "dm": [49, 79, 84, 124, 147, 160], "getatomwithidx": 49, "descriptors3d": 49, "aspher": [49, 86, 90, 112], "guesser": [49, 86, 140, 150], "guess_typ": [49, 146], "add_topologyattr": [49, 74, 89, 92, 146], "noimplicit": 49, "implicit": [49, 86], "scratch": 49, "set_converter_cache_s": 49, "bypass": 49, "hood": [49, 67, 147], "ugm": 49, "video": 49, "tackl": 49, "info": [49, 102], "accuraci": [49, 99, 101], "guidelin": 49, "prevent": 49, "conjug": 49, "_rebuild_conjugated_bond": 49, "inorgan": 49, "mostli": [49, 58, 90, 145], "_infer_bo_and_charg": 49, "formal": [49, 74, 86, 90, 113, 136], "don": [49, 86, 103, 109, 134, 138, 159], "valenc": 49, "unpair": 49, "electron": [49, 64, 66, 140, 160], "nue": 49, "ue": 49, "smallest": [49, 58], "rwmol": 49, "receiv": 49, "_standardize_pattern": 49, "recombin": 49, "x3": 49, "d4": 49, "v4": 49, "cterm": [49, 111], "h0": 49, "nterm": [49, 111], "keto": 49, "enol": 49, "sulfon": 49, "v6": 49, "anion": 49, "problemat": [49, 86, 103, 159], "goal": 49, "triplet": [49, 99, 147], "forth": 49, "kekul": 49, "cover": [49, 99, 109], "crdreader": 50, "formaterror": 50, "writer": [50, 51, 54, 56, 57, 58, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 77, 78, 80, 81, 84, 86, 109], "crdwriter": [50, 56], "wt": [50, 65, 66], "namedstream": [50, 62, 63, 94, 109, 114], "stream": [50, 57, 58, 62, 63, 64, 92, 94, 100, 105, 115], "noextend": 50, "regardless": [50, 51, 60, 92, 156, 160], "lammp": [51, 79, 84, 92, 100, 111, 132, 147, 165], "endian": [51, 60, 70, 79], "dcdreader": [51, 60, 79, 80, 111], "dcdwriter": [51, 60], "akma": [51, 58, 60, 68, 79, 160], "seamlessli": [51, 79], "watch": 51, "tri": [51, 58, 68, 79, 100, 109, 140], "wiki": [51, 103, 161], "dcdplugin": 51, "plor": 51, "c36b2": 51, "newer": [51, 140], "libdcd": [51, 60, 82, 110], "pyx": [51, 60, 101], "otherwrit": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "pull": [51, 54, 57, 58, 60, 64, 65, 69, 71, 72, 73, 75, 80, 126, 127, 143, 149], "ener": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "precis": [51, 54, 56, 57, 58, 60, 63, 64, 69, 71, 72, 73, 75, 79, 80, 91, 99, 101, 103, 104, 108, 113, 149], "term_dict": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "selected_fram": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_threshold": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "remove_auxiliari": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "some_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "another_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "this_transform": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "innermost": [51, 57, 58, 60, 64, 69, 71, 72, 73, 75], "transform_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "aux_list": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "check_slice_indic": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "clip": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 103], "unexpect": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 78, 80], "downstream": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 109], "randomli": [51, 54, 57, 58, 60, 64, 68, 69, 71, 72, 73, 75, 79, 80], "splice": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "discrep": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "held": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 86], "attrnam": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 88, 90], "gettabl": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "recreat": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99], "trajectory_1": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "trajectory_2": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "inter": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "lst": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "encount": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 99, 136], "pace": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "parse_n_atom": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 80, 135], "notimplementederror": [51, 54, 57, 58, 59, 60, 63, 64, 67, 68, 69, 71, 72, 73, 75, 79, 102, 120], "tom": [51, 54, 57, 58, 60, 62, 64, 69, 71, 72, 73, 75, 80], "rame": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "oordin": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80], "fac": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 80, 100], "nodataerror": [51, 58, 60, 79, 80, 83, 86, 89, 92, 94, 103], "totaltim": [51, 54, 57, 58, 60, 64, 69, 71, 72, 73, 75, 79, 80], "nsavc": [51, 60, 100], "istart": [51, 60, 100], "240": [51, 60, 100], "convert_dimensions_to_unitcel": [51, 54, 56, 58, 60, 69, 72, 73, 75, 79], "overriden": [51, 54, 58, 60, 69, 72, 73, 75, 79, 90], "has_valid_coordin": [51, 54, 58, 60, 69, 72, 73, 75], "dl": [52, 149, 150], "poli": [52, 150], "configread": 52, "config": [52, 79, 147, 165], "layout": [52, 58], "historyread": 52, "histori": [52, 79, 147, 152], "desmond": [53, 124, 147], "dmsreader": 53, "lattice_vector": 54, "matter": 54, "atom_frac": 54, "nx": 54, "ny": [54, 113, 148], "vx": 54, "vy": 54, "vz": 54, "speci": [54, 86, 90], "fhiaimsread": 54, "classmethod": [54, 57, 60, 64, 69, 71, 72, 73, 75, 79, 83, 90, 92, 149], "fmt": [54, 56, 109], "box_triclin": [54, 56], "8f": 54, "nlattice_vector": 54, "vel": [54, 56], "newlin": [54, 56, 64, 109, 114, 115, 116, 117, 118, 119, 148], "resourc": [55, 58, 67, 75, 151], "firefli": [55, 127], "approb": 55, "tweak": [55, 74, 102], "gmsreader": 55, "outfilenam": 55, "uncompress": [55, 105, 109], "foo": [55, 100, 101, 109], "bz2": [55, 63, 68, 74, 79, 105, 109], "gz": [55, 63, 68, 74, 79, 109], "decompress": [55, 109], "time_offset": [55, 74, 75, 83], "runtyp": 55, "renumb": [56, 66, 92], "reindex": [56, 64], "subsect": 56, "OR": 56, "groread": 56, "unk": 56, "decim": [56, 73, 91, 101, 109], "3dp": 56, "4dp": 56, "triclinic_dimens": [56, 83], "box_orthorhomb": 56, "5f": 56, "5d": 56, "3f": [56, 102], "xyz_v": 56, "4f": 56, "digit": [56, 64, 79, 109, 125, 147], "chop": 56, "nwo": 56, "ow2": 56, "orthorhomb": [56, 68, 86], "hoomd": [57, 79, 129, 147, 150], "gsdparser": [57, 129, 147], "gsdreader": [57, 82, 129], "picklabl": [57, 68, 109, 110], "hoomdtrajectori": 57, "gsdpicklabl": [57, 82], "schema": 57, "open_trajectori": [57, 58, 68, 70], "hoodm": 57, "fl": 57, "gsdfile": 57, "unpickl": [57, 58, 68, 75, 76, 77, 82, 86, 92, 105], "gsd_pickle_open": 57, "gsdfileobj": 57, "schema_vers": 57, "file_pickl": [57, 105], "dump": [57, 64, 86, 105, 132, 147], "picklable_file_io": [57, 58, 68, 77, 82, 109, 110], "fileiopickl": [57, 58, 68, 77, 82, 105], "bufferiopickl": [57, 58, 68, 77, 82, 105], "textiopickl": [57, 58, 68, 77, 82, 105], "gzippickl": [57, 58, 68, 77, 82, 105], "bz2picklabl": [57, 58, 68, 77, 82, 105], "byte": [57, 58, 68, 70, 77, 95, 100, 101, 102, 103, 105, 106, 109], "readlin": [57, 105, 109], "anyopen": [57, 82, 105, 109], "pickle_open": [57, 105], "bz2_pickle_open": [57, 105], "gzip_pickle_open": [57, 105], "rb": [57, 105, 148], "mpi": [58, 112], "wide": [58, 67], "h5mdreader": 58, "notat": [58, 65, 109, 113], "h5mdwriter": 58, "timeunit": [58, 60], "lengthunit": [58, 60, 160], "velocityunit": 58, "forceunit": 58, "arug": 58, "2884": 58, "contigu": [58, 109], "chunk": [58, 140], "output_contig": 58, "alpha_carbon": 58, "mpi4pi": 58, "driver": 58, "comm": 58, "mpio": 58, "comm_world": 58, "environ": [58, 68, 102, 109, 112, 152], "challeng": 58, "supercomput": 58, "successfulli": [58, 82], "openmpi": 58, "ubuntu": 58, "plai": [58, 106], "mpicc": 58, "ve": [58, 111], "implemen": 58, "env": [58, 68, 77], "hdf5_path": 58, "clean": [58, 102], "gcc": 58, "hdf5_dir": 58, "everyon": 58, "forum": 58, "overview": [58, 121], "gcmc": 58, "email": 58, "creator": 58, "group1": 58, "arrari": 58, "commun": [58, 68, 112, 165], "lost": 58, "cuboid": 58, "timstep": 58, "_particle_group": 58, "has_forc": [58, 79, 83], "has_posit": [58, 79, 83], "has_veloc": [58, 79, 83], "compression_opt": 58, "author_email": 58, "creator_vers": 58, "dev0": [58, 102, 161, 165], "parellel": 58, "violat": 58, "block": [58, 67, 79, 91, 102, 109, 111], "szip": 58, "lzf": 58, "tup": 58, "lowest": [58, 64, 77], "recogniz": 58, "wrote": 58, "__version__": [58, 161], "ioerror": [58, 68, 79, 101, 109, 144], "datset": 58, "enforc": [58, 64, 68, 76, 99, 106, 109], "\u00e5ngstrom": 58, "fine": 58, "piec": 58, "noncontigu": 58, "ill": 58, "thought": [58, 111], "drastic": 58, "apriori": 58, "diskspac": 58, "incom": 58, "explic": 58, "kib": 58, "mib": 58, "suboptim": 58, "mimic": [58, 149], "jakupovic2021": [58, 112], "led": 58, "10x": 58, "versu": 58, "additionali": 58, "h5md_version": 58, "data_blacklist": 58, "h5pypickl": [58, 82], "libver": 58, "userblock_s": 58, "swmr": 58, "rdcc_nslot": 58, "rdcc_nbyte": 58, "rdcc_w0": 58, "track_ord": 58, "fs_strategi": 58, "fs_persist": 58, "fs_threshold": 58, "fs_page_s": 58, "page_buf_s": 58, "min_meta_keep": 58, "min_raw_keep": 58, "lock": [58, 72], "alignment_threshold": 58, "alignment_interv": 58, "meta_block_s": 58, "readonli": 58, "legal": [58, 109], "sec2": 58, "stdio": 58, "ros3": 58, "earliest": 58, "v108": 58, "v110": 58, "v112": 58, "1024": 58, "preemption": 58, "polici": 58, "penal": 58, "flush": [58, 102, 109], "lru": 58, "preempt": 58, "slot": 58, "collis": 58, "hash": 58, "strategi": 58, "prime": 58, "thumb": 58, "521": 58, "h5": [58, 62], "get_config": 58, "fsm": 58, "vfd": 58, "page": [58, 62, 84, 104, 108, 112, 150, 161, 165], "4096": 58, "buffer": [58, 105, 109], "power": [58, 67, 111, 151], "evict": 58, "effort": 58, "hdf5_use_file_lock": 58, "overrid": [58, 99, 114, 131, 152, 158], "conjunct": 58, "portal": 58, "hdfgroup": 58, "h5p_set_align": 58, "h5p_set_meta_block_s": 58, "restart": [59, 79, 102, 156], "inpread": 59, "978": [60, 90], "888821e": [60, 160], "biomolecular": [60, 147], "lennard": [60, 140], "jone": [60, 140], "autodetect": [60, 68, 79, 92], "dumpread": 60, "ascii": [60, 79, 100, 102, 132, 147], "datapars": [60, 132], "lammps_real": 60, "nano": 60, "lammps_nano": 60, "take_this_fram": 60, "dcdfilenam": 60, "dataread": 60, "datawrit": 60, "atom_typ": [60, 146], "lammps_coordinate_convent": 60, "unwrap_imag": 60, "unscal": 60, "scaled_unwrap": 60, "whichev": [60, 86, 113], "xsu": 60, "ysu": 60, "zsu": 60, "zu": 60, "read_data": 60, "3383": 60, "transmiss": [61, 79, 133, 147], "quicker": [61, 133], "mmtfreader": [61, 78], "fetch_mmtf": 61, "pdb_id": 61, "rcsb": 61, "bank": 61, "4ucp": 61, "tripo": [62, 79, 134, 147], "gr": 62, "molecule_noh": 62, "cheminformat": 62, "toolkit": [62, 112, 165], "mol2read": 62, "statu": [62, 65, 134], "mol2writ": 62, "molfrompdbfil": 62, "moltomolfil": 62, "master": 62, "sybyl": [62, 134], "tripos_resourc": 62, "fileroot": 62, "mol2_format2": 62, "encode_block": 62, "substructur": 62, "crysin": 62, "dimensionless": 62, "mol2_format3": 62, "benzen": 62, "wed": 62, "1988": 62, "no_charg": [62, 134], "207": [62, 148], "091": 62, "414": 62, "394": [62, 111], "c3": [62, 88], "c4": [62, 88], "697": 62, "c5": [62, 88], "c6": [62, 88], "175": [62, 108], "353": 62, "936": 62, "h3": 62, "542": 62, "h4": 62, "781": 62, "939": 62, "h6": 62, "perm": 62, "coor": [63, 79], "namdbinread": 63, "namdbinwrit": 63, "denomin": 64, "exchang": [64, 86], "thath": 64, "calpha_onli": 64, "multifram": [64, 78, 79, 86], "calpha_traj": 64, "happen": [64, 68, 72, 86, 89, 92, 113, 147, 149], "pdbreader": [64, 82, 136], "pdbwriter": 64, "enhanc": [64, 79, 165], "multipdbwrit": 64, "pdbparser": [64, 125, 136], "retir": 64, "frill": [64, 65], "cryst1": [64, 65], "resseq": [64, 65, 109], "compnd": [64, 65], "bfactor": [64, 86, 90, 92, 113, 133, 136, 141], "expos": [64, 110, 141], "24": [64, 65, 100, 108, 141, 148, 149, 160], "47": [64, 65, 148, 149], "54": [64, 65, 148, 149], "achar": [64, 65], "46": [64, 65, 149], "66": [64, 65, 148, 149], "67": [64, 65, 83, 149], "76": [64, 65, 149], "unoffici": 64, "77": [64, 149], "lstring": [64, 65], "symbol": [64, 68, 141, 142, 149], "justifi": 64, "79": [64, 65, 148, 149], "80": [64, 65, 70, 113, 148, 149], "microscopi": 64, "unitari": 64, "2698": 64, "strip": [64, 109], "valus": 64, "aka": [64, 134], "bzip2": [64, 68, 74, 79, 105, 109, 111], "conect": [64, 86, 136], "endmdl": 64, "9999": 64, "record_typ": [64, 86, 136, 137], "accordingli": [64, 78, 86, 90, 109], "charat": 64, "2224": 64, "redindex": 64, "earlier": [64, 68], "100000": [64, 160], "remark_max_length": 64, "ones": [64, 78, 79, 86, 109, 111, 113, 141, 151], "_check_pdb_coordin": 64, "stringio": [64, 102, 109], "2512": 64, "_write_pdb_bond": 64, "_update_fram": 64, "_write_next_fram": [64, 72], "_write_timestep": 64, "nummdl": 64, "signal": 64, "traj": 64, "1753": 64, "2423": 64, "3144": 64, "spacegroup": 64, "zvalu": 64, "sanit": [64, 92], "2324": 64, "modelnumb": 64, "9998": 64, "write_all_timestep": 64, "extendedpdbread": [64, 125], "five": [64, 90, 91, 125], "reserv": [64, 92], "autodock": [65, 79, 137, 147], "pdbqtreader": 65, "gamm": 65, "partialchrg": 65, "gasteig": [65, 146], "peoe": 65, "nsc7810": 65, "inact": 65, "a7_7": 65, "c22_23": 65, "a9_9": 65, "a11_11": 65, "a17_17": 65, "c21_21": 65, "123456789": [65, 102], "inh": 65, "054": 65, "021": 65, "002": [65, 108, 160], "704": 65, "764": 65, "a3": 65, "975": 65, "431": 65, "a4": 65, "070": 65, "385": 65, "081": 65, "a5": 65, "062": 65, "073": 65, "238": [65, 148], "a6": 65, "306": 65, "456": 65, "226": [65, 148], "019": 65, "a7": 65, "885": 65, "114": [65, 148], "052": 65, "a8": [65, 109], "265": [65, 148], "621": 65, "449": 65, "a9": 65, "339": 65, "986": 65, "801": 65, "013": 65, "a10": 65, "176": [65, 111], "667": 65, "128": 65, "endroot": 65, "branch": 65, "a11": 65, "644": 65, "682": 65, "827": [65, 108], "a16": 65, "007": [65, 86, 148], "557": 65, "220": 65, "a12": 65, "522": 65, "485": 65, "882": 65, "a15": 65, "262": [65, 148], "209": [65, 148], "177": 65, "a17": 65, "144": [65, 148], "784": 65, "319": 65, "a14": 65, "981": 65, "910": 65, "a20": 65, "627": 65, "077": 65, "222": [65, 108, 148], "a13": 65, "749": 65, "912": [65, 91], "a19": 65, "777": 65, "285": 65, "267": 65, "a18": 65, "543": 65, "650": 65, "328": 65, "c21": 65, "834": 65, "113": [65, 148], "388": 65, "210": [65, 148], "774": 65, "915": 65, "581": 65, "oa": 65, "o3": [65, 88], "298": 65, "828": [65, 108], "237": [65, 148], "endbranch": 65, "c22": 65, "535": 65, "378": 65, "708": 65, "659": 65, "196": [65, 148], "059": 65, "torsdof": 65, "permiss": 65, "pdbqtwriter": 65, "spec": 65, "pdb2pqr": [66, 138], "adopt": 66, "apb": [66, 147], "whitespac": [66, 79, 88, 109, 113, 147, 148], "delimit": [66, 74, 88], "mandat": 66, "liber": 66, "recordnam": 66, "residuenam": 66, "residuenumb": 66, "shorter": [66, 70, 86, 146], "wildli": 66, "921": [66, 86], "307": [66, 86], "410": 66, "3000": 66, "8500": 66, "545": 66, "499": 66, "854": 66, "8000": 66, "hh11": 66, "042": [66, 86], "723": [66, 148], "4600": 66, "2245": 66, "white": [66, 79, 109, 148], "pqrreader": 66, "pqrwriter": 66, "lundborg2014": 67, "pytng": [67, 79], "has_pytng": 67, "virial": 67, "absenc": [67, 83, 98], "encourag": 67, "essenc": 67, "critic": 67, "henceforth": 67, "magnu": 67, "lundborg": 67, "rossen": 67, "apostolov": 67, "sp\u00e5ngberg": 67, "ander": 67, "g\u00e4rden\u00e4": 67, "spoel": 67, "erik": 67, "lindahl": 67, "260": [67, 109], "269": 67, "onlinelibrari": 67, "wilei": 67, "23495": 67, "tngreader": 67, "pend": 67, "additional_block": 67, "special_block": 67, "feedback": 68, "appreci": 68, "tracker": [68, 141, 165], "mailinglist": [68, 103], "Such": [68, 120], "ncdf": [68, 79], "ncdfreader": 68, "mmap": 68, "_veloc": [68, 79, 83], "_forc": [68, 79, 83], "angstroem": [68, 111], "faster": [68, 83, 86, 90, 103, 108, 146], "netcdf_fil": 68, "prevail": 68, "ncdfwriter": 68, "scale_factor": 68, "adher": [68, 165], "2323": 68, "cell_angl": 68, "2327": [68, 112], "ncdfpicklabl": [68, 82], "scale_tim": 68, "scale_cell_length": 68, "scale_cell_angl": 68, "scale_coordin": 68, "scale_veloc": 68, "scale_forc": 68, "kcal": [68, 160], "kilocalori": 68, "mole": 68, "455": [68, 112, 162, 163], "netcdf4": [68, 79], "compil": [68, 99], "506": 68, "traceback": 68, "scratch2": 68, "miniconda": 68, "py35": 68, "python3": [68, 77], "_netcdf4": 68, "cpython": 68, "35m": 68, "x86_64": 68, "linux": 68, "undefin": [68, 92, 99], "nc_inq_var_fletcher32": 68, "ldd": 68, "ld_library_path": 68, "hdf5": 68, "ld": 68, "obviou": 68, "unload": 68, "futurewarn": 68, "breach": 68, "ambertool": 68, "sander": 68, "echo": 68, "seen": [68, 156], "is_period": [68, 100], "maskandscal": 68, "64": [68, 109, 149], "fileobj": [68, 105], "trjreader": 68, "mdcrd": [68, 79], "crdbox": 68, "conflict": 68, "baseread": [69, 73], "trrreader": 69, "refresh_offset": [69, 72, 73], "lossless": [69, 73], "refresh": [69, 72, 73, 102], "trrwriter": 69, "ibisco": [70, 79], "yasp": [70, 79], "hardwar": 70, "architectur": [70, 99], "trzreader": [70, 82], "trzfilenam": 70, "weakref": 70, "_reader": 70, "_frame": [70, 79], "skip_timestep": [70, 79], "trzwriter": 70, "tinker": [71, 79, 142, 147], "arc": [71, 79, 108, 142, 147], "txyzread": 71, "libmdaxdr": [72, 82, 110], "xdrbaseread": 72, "_frame_to_t": 72, "hidden": [72, 112], "_offset": 72, "sync": 72, "writabl": [72, 109], "rebuilt": 72, "interprocesslock": 72, "xdrbasewrit": 72, "offsets_filenam": 72, "fileend": 72, "offset_filenam": 72, "read_numpy_offset": 72, "xtcreader": 73, "formart": 73, "advantag": [73, 109], "loss": 73, "xtcwriter": 73, "trjactori": 73, "xyzplugin": 74, "neither": [74, 109, 112], "nor": [74, 109], "xyzread": 74, "xyzwrit": 74, "whenc": [74, 109], "NOT": [74, 85, 103, 141], "blank": [74, 90, 92, 102], "atomn": 74, "molfil": [74, 100], "event": [74, 147], "consequ": [74, 92, 100, 155, 156], "invok": [74, 86, 113, 140], "default_remark": 74, "2692": 74, "frameiteratorbas": [75, 86], "resolv": 75, "frameiteratorsl": [75, 79], "frameiteratoral": 75, "frameiteratorindic": [75, 79], "singleframereaderbas": [75, 79, 92], "garbag": 75, "leak": 75, "mainli": 75, "inher": 75, "offload": 75, "_ts_kwarg": 75, "_read_first_fram": 75, "iobas": [75, 109], "reconstrunct": 75, "writerbas": [75, 79], "write_next_timestep": 75, "converterbas": 75, "bundl": 75, "primarili": [76, 84, 93, 98, 150], "backward": [76, 161], "ultim": 76, "stitch": 76, "part01": 76, "part02": 76, "part03": 76, "lammpsdump": [76, 79, 147], "__repr__": 76, "plain": [76, 148], "Not": [76, 79, 146], "_get_local_fram": 76, "indexerror": 76, "_appli": 76, "_get": 76, "attr": [76, 89, 92, 140], "_get_sam": 76, "verifi": [76, 86], "_read_fram": [76, 82], "active_read": 76, "interoper": [77, 120], "deleg": 77, "chemfilesread": 77, "anaconda3": 77, "mda3": 77, "adk_oplsaa": 77, "transpar": 77, "mol2_ligand": 77, "chemfiles_format": 77, "chemfileserror": 77, "chemfileswrit": 77, "writ": 77, "chemfilespickl": [77, 82], "min_chemfiles_vers": 77, "max_chemfiles_vers": 77, "check_chemfiles_vers": 77, "usabl": [77, 85, 114], "throw": 78, "ommit": 78, "get_writer_for": 78, "get_reader_for": [78, 79], "mmtf": [78, 79, 84, 92, 147, 150], "chainread": [78, 79, 84, 92], "format_hint": 78, "functionalityx": 78, "examin": 78, "nullwrit": [78, 81], "silent": [78, 79, 102], "mandatori": [78, 79, 157], "abstract": 79, "duck": 79, "simplifi": [79, 147], "factori": [79, 88], "analogi": 79, "indirectli": 79, "broad": 79, "emphasi": 79, "lossi": 79, "tng": [79, 84], "txyz": [79, 84, 147, 150], "gsd": [79, 82, 84, 147, 150], "gamess": [79, 84, 147, 150], "gm": [79, 84, 147], "semi": 79, "inpcrd": [79, 84], "restrt": 79, "netcdf": 79, "ent": [79, 147], "xpdb": [79, 125, 136, 147], "xpbd": [79, 147], "pdbqt": [79, 84, 147, 150], "pqr": [79, 84, 147, 150], "gromos96": [79, 147], "desr": [79, 84, 147, 150], "dl_poli": [79, 84, 147, 165], "dlpoli": [79, 84, 123], "namdbin": [79, 84], "fhiaim": [79, 84, 126, 147], "fhi": [79, 84, 147, 150], "h5md": [79, 82, 84, 112], "chemfil": [79, 82, 84], "_format_hint": 79, "_get_read": 79, "singlefram": 79, "250": [79, 108], "_init_unitcel": 79, "hook": 79, "_unitcel": 79, "miscellan": 79, "setter": 79, "_po": [79, 83], "ceas": 79, "__entry__": 79, "gracefulli": 79, "314": 79, "process_fram": 79, "100th": 79, "frameiter": 79, "extrem": 79, "sensibl": 79, "pico": [79, 160], "_aux": 79, "trajctori": 79, "trajectorywrit": 79, "delai": 79, "framewrit": 79, "blanket": 79, "wb": [80, 105], "ku": 80, "dk": [80, 149], "wouterboomsma": 80, "transfer": [80, 92], "straightforward": [80, 113], "Of": 80, "cours": [80, 129, 156], "decis": [80, 109], "transfer_to_memori": [80, 86, 92], "universe2": 80, "coordinate_arrai": 80, "acf": 80, "caf": 80, "fca": 80, "cfa": 80, "1041": 80, "_kwarg": [80, 109], "get_arrai": 80, "set_arrai": 80, "favour": [80, 91], "dev": [81, 161], "suppress": 81, "idea": [82, 111], "__getstate__": 82, "__setstate__": 82, "__reduce__": 82, "consult": [82, 99, 110], "tell": [82, 100, 101, 105, 109], "But": [82, 109], "mayb": [82, 146], "_seek": 82, "ing": 82, "_read_next_timestep": 82, "crucial": [82, 86, 113], "machineri": 82, "pickliabl": 82, "test_multiprocess": 82, "test_pickleio": 82, "uint64": 83, "has_": 83, "hardcod": 83, "from_coordin": 83, "from_timestep": 83, "weren": 83, "81138802": 83, "58312416": 83, "58049774": 83, "45159912": 83, "71": [83, 148, 149], "56504822": 83, "mdamath": [83, 109, 110], "triclinic_vector": [83, 103, 109], "copy_slic": 83, "sel": [83, 86, 119, 120], "new_t": [83, 151], "rework": 83, "concern": [84, 109, 110, 150], "null": [84, 100, 103], "programm": 84, "anyon": 84, "serializ": 84, "multiframereadertest": 84, "basereadertest": 84, "speechwrapp": 85, "person": 85, "whoami": 85, "am": [85, 148], "bob": 85, "hello": 85, "converterwrapp": [85, 86], "destin": [85, 102], "lowercas": 85, "metaclass": [85, 88], "magic": 85, "parmed_structur": 85, "11302": 85, "segmentgroup": [86, 90, 92, 94, 95, 109], "atom3": [86, 91], "aslic": 86, "ag_concat": 86, "conserv": [86, 149], "contrari": [86, 149], "synomym": 86, "ag_union": 86, "dedupl": [86, 109], "isdisjoint": 86, "issubset": 86, "is_strict_subset": 86, "issuperset": 86, "is_strict_superset": 86, "intersect": [86, 91, 113], "symmetric_differ": 86, "isol": [86, 113], "g_pickl": 86, "u_pickl": 86, "h_pickl": 86, "aforement": 86, "detach": 86, "reattach": 86, "unives": 86, "instant": [86, 92], "accumul": 86, "acuumul": 86, "contract": [86, 90], "molnum": [86, 90, 131, 147], "prop": [86, 88, 113], "align_principal_axi": [86, 90], "principal_ax": [86, 90], "topologyobject": [86, 93], "dima2004b": [86, 90, 112], "asuniqu": 86, "ix": [86, 89, 91, 108, 113], "int64": [86, 90, 99, 103, 109], "ag3": [86, 113], "bbox": [86, 149], "enclos": 86, "2x3": 86, "xmin": [86, 104, 109, 162, 163], "ymin": [86, 104, 162, 163], "xmax": [86, 104, 109, 162, 163], "ymax": [86, 104, 162, 163], "bsphere": 86, "xcen": 86, "ycen": 86, "zcen": 86, "intact": [86, 90], "center_of_charg": [86, 90], "vert": [86, 90], "m_i": [86, 90], "dipole_mo": [86, 90], "mu": [86, 90], "magnitud": [86, 90], "dipole_vector": [86, 90], "q_": [86, 90], "coc": [86, 90], "fragindic": [86, 90], "interconnect": [86, 90], "get_connect": 86, "typenam": 86, "topologygroup": [86, 91, 92], "ureybradlei": [86, 90, 91], "groupbi": 86, "topattr": 86, "010999999999999": 86, "462": 86, "116": [86, 141, 148, 149], "999000000000001": 86, "011": [86, 112, 148], "169": [86, 112, 162, 163], "vdwradii": [86, 92, 146, 148], "fudge_factor": [86, 92, 146], "lower_bound": [86, 92, 146], "vdw": [86, 146, 148], "guess_angl": [86, 146], "guess_dihedr": [86, 146], "mislead": 86, "gyration_mo": [86, 90], "gyrat": [86, 90, 111], "tensor": [86, 90], "dima2004a": [86, 90, 112], "principle_moments_of_gyr": [86, 90], "improperdihedr": [86, 91], "0a": 86, "shell1": 86, "shell2": 86, "superset": 86, "isuniqu": 86, "ix_arrai": 86, "moment_of_inertia": [86, 90], "big": [86, 90], "otim": [86, 90], "i_": [86, 90], "m_k": [86, 90], "delta_": [86, 90], "_k": [86, 90], "n_fragment": [86, 90], "n_segment": [86, 89, 90, 92], "pack_into_box": 86, "boxlength": 86, "l_i": 86, "lfloor": 86, "rfloor": 86, "e1": [86, 90], "e3": [86, 90], "axis_vector": [86, 90], "quadrupole_mo": [86, 90], "quadrupol": [86, 90], "gray1984": [86, 90], "traceless": [86, 90], "quadropol": [86, 90], "unsymmetr": [86, 90], "quadrupole_tensor": [86, 90], "tr": [86, 90, 109], "rightarrow": 86, "rotatebi": [86, 157], "othersel": 86, "rtol": [86, 88], "08": [86, 88, 108, 148], "rdkit_kwarg": [86, 88, 92, 113], "smarts_kwarg": [86, 88, 113], "selgroup": [86, 88], "isclos": [86, 88], "getsubstructmatch": [86, 88, 113], "preexist": 86, "parenthes": [86, 88, 113], "dmpc": [86, 113], "3420": [86, 113], "notho": 86, "1250": 86, "nucleicbackbon": [86, 113], "identfi": [86, 113], "esoter": [86, 113], "colon": [86, 109, 113], "163b": 86, "163": 86, "162": [86, 148], "sensic": [86, 113], "moltyp": [86, 90, 113, 131, 141, 147, 149], "protein_a": [86, 113], "daylight": [86, 113], "usechir": [86, 113], "maxmatch": [86, 88, 113], "occasion": [86, 90, 113], "stereocent": [86, 113], "formalcharg": [86, 90, 113, 125, 136], "aren": [86, 109, 113], "lysin": [86, 113], "alanin": [86, 113], "sphlayer": [86, 113], "cog": [86, 113], "isolay": [86, 113], "iso": [86, 160], "externalradiu": [86, 113], "cylind": [86, 113], "cylay": [86, 113], "innerradiu": [86, 113], "bynum": [86, 113], "entireti": [86, 113], "lazili": [86, 91, 101, 113], "fullgroup": [86, 113], "shape_paramet": [86, 90, 112], "superflu": [86, 90], "keyfunc": 86, "multidimension": 86, "447": 86, "741": 86, "595": [86, 108], "926": [86, 109], "632": 86, "619": 86, "046": 86, "argsort": 86, "total_charg": [86, 90], "total_mass": [86, 87, 90], "4x4": [86, 108], "pack": [86, 103, 159], "Be": [86, 148], "all_frag_atom": 86, "apply_pbc": [86, 99], "meaningless": 86, "euclidian": 86, "filenamefmt": 86, "trjname": 86, "pbd": 86, "trjname_fram": 86, "jmol": [86, 120], "spt": [86, 117, 120], "token": [86, 88], "s_": 86, "topologyattr": [86, 88, 89, 92, 93, 113], "groupbas": 86, "hoc": [86, 146, 148], "resindex": [86, 89, 90], "rg": [86, 90], "rg2": 86, "chi1_select": [86, 90], "cb_name": [86, 90], "cb": [86, 90], "cg_name": [86, 90], "cg": [86, 90, 131], "cg1": [86, 90], "omega_select": [86, 90], "ci": [86, 90, 99], "prolin": [86, 90], "psi_select": [86, 90], "seqrecord": [86, 90], "seqio": [86, 90], "myseq1": [86, 90], "myprotein": [86, 90], "record1": [86, 90], "record2": [86, 90], "iupac": [86, 90], "segindex": [86, 89, 90], "sg2": 86, "base_group": 86, "water_shel": [86, 87], "water_shell_prev": 86, "is_uptod": 86, "stale": 86, "caught": 86, "erron": 86, "date": [86, 165], "reevalu": 86, "componentbas": 86, "bonded_atom": [86, 90], "fragindex": [86, 90], "cg2": [86, 90], "1970": [86, 90], "singular": [86, 88, 90, 113], "plural": 86, "topology_fil": 87, "trajectory_fil": 87, "invis": 88, "aromaticselect": 88, "backboneselect": 88, "ot": 88, "termini": 88, "bb_atom": 88, "100x": 88, "baseselect": 88, "nucleobas": 88, "n9": 88, "n7": 88, "c8": 88, "n2": [88, 109], "c5m": 88, "base_atom": 88, "boolselect": 88, "bynumselect": 88, "byresselect": 88, "resindic": [88, 90], "2669": 88, "2672": 88, "float_pattern": [88, 113], "2e": 88, "floatrangeselect": 88, "int_pattern": [88, 113], "sign": [88, 104, 111], "nucleicbackboneselect": 88, "o5": 88, "nucleicselect": 88, "awk": 88, "resi": 88, "printf": 88, "top_all27_prot_na": 88, "rtf": 88, "ura": 88, "cyt": 88, "gua": 88, "thy": 88, "da": 88, "dc": [88, 149], "dg": 88, "nucl_r": 88, "nucleicsugarselect": 88, "sug_atom": 88, "propertyselect": 88, "proteinselect": 88, "prot_r": 88, "top_all27_prot_lipid": 88, "convert_aa_cod": [88, 109], "range_pattern": [88, 113], "rangeselect": 88, "residselect": 88, "sameselect": 88, "subkeyword": [88, 113], "selectionpars": 88, "recurs": 88, "descent": 88, "climb": 88, "engr": 88, "mun": 88, "theo": 88, "misc": 88, "exp_pars": 88, "nest": [88, 102, 109], "grammar": 88, "xpression": 88, "inari": 88, "nari": 88, "erm": 88, "anticip": 88, "selectstr": 88, "goe": 88, "singlecharselect": 88, "smartsselect": 88, "rdkit_warg": 88, "thrown": 88, "gen_selection_class": 88, "per_object": [88, 90], "codebas": 88, "_topologyattrmeta": 88, "_protostringselect": 88, "_selector": 88, "clash": 88, "resnameselect": 88, "_selectionmeta": 88, "grab_not_keyword": 88, "pop": 88, "hit": 88, "dequ": 88, "is_keyword": 88, "selectiondict": 88, "logicoper": 88, "eof": 88, "join_separated_valu": 88, "return_empty_on_appli": 88, "363": 89, "n_re": 89, "n_seg": 89, "atom_resindex": [89, 92], "residue_segindex": [89, 92], "heirarchi": 89, "add_residu": [89, 92], "new_attr": 89, "residx": 89, "_add_new": 89, "resiz": [89, 102], "add_seg": [89, 92], "wasn": 89, "deepcopi": [89, 90], "del_topologyattr": [89, 92], "guessed_attribut": 89, "read_attribut": 89, "transtabl": 89, "upward": 89, "downward": 89, "_1": [89, 103], "_2d": 89, "lazi": 89, "ra": [89, 148], "sr": [89, 148, 149], "atoms2residu": 89, "aix": 89, "rix": 89, "atoms2seg": 89, "move_atom": 89, "move_residu": 89, "residues2atoms_1d": 89, "residues2atoms_2d": 89, "raix": 89, "residues2seg": 89, "segments2atoms_1d": 89, "segments2atoms_2d": 89, "saix": 89, "segments2residues_1d": 89, "segments2residues_2d": 89, "srix": 89, "make_downshift_arrai": 89, "upshift": 89, "nparent": 89, "downshift": 89, "children": 89, "atom2r": 89, "never": [89, 155], "topologypars": 90, "grai": 90, "keith": 90, "gubbin": 90, "joslin": 90, "monograph": 90, "oxford": 90, "press": [90, 108], "york": 90, "isbn": 90, "855602": 90, "atomattr": 90, "get_atom": 90, "get_residu": 90, "child": [90, 114], "get_seg": 90, "set_atom": 90, "set_residu": 90, "set_seg": 90, "segmentattribut": 90, "atomstringattr": 90, "atomindic": 90, "unambigu": 90, "epsilon14": 90, "lj": [90, 140, 149], "gbscreen": 90, "born": 90, "screen": [90, 102], "imaginari": [90, 108], "nonbondedindic": 90, "nonbond": [90, 148], "rmin14": 90, "rmin": 90, "recordtyp": [90, 138], "residueattr": 90, "residuestringattr": 90, "segmentattr": 90, "segmentstringattr": 90, "solventradii": 90, "bfactor_sett": 90, "bfactors_sett": 90, "skeleton": 90, "coerc": 90, "from_blank": 90, "topologyattribut": [90, 92, 133, 136], "is_guess": [90, 91], "apex": [91, 147], "__slots__": 91, "coupl": 91, "span": [91, 99, 103], "improper_tors": 91, "topologydict": 91, "topdict": 91, "categoris": 91, "ethanol": [91, 92], "td": 91, "smartli": 91, "ever": 91, "bondidx": 91, "btype": 91, "tg2": 91, "tg": 91, "select_bond": 91, "atomgroup_intersect": 91, "shortcut": [91, 113], "overhaul": 91, "selectbond": 91, "from_indic": 91, "dump_cont": 91, "to_indic": [91, 92], "radian": [91, 99, 103, 108], "predefin": 91, "atom4": 91, "_topologi": [91, 146], "urei": [91, 141], "bradlei": [91, 141], "ti": [92, 148], "all_coordin": 92, "topology_format": [92, 131, 147, 150], "in_memory_step": 92, "topologyreaderbas": [92, 134, 144, 147], "nth": [92, 148], "traj1": 92, "traj2": 92, "newr": 92, "alias": [92, 133, 136], "add_angl": 92, "hashabl": 92, "add_bond": 92, "ow_hw1": 92, "ow_hw2": 92, "ow_mw": 92, "mw": [92, 148], "add_dihedr": 92, "add_improp": 92, "hasattr": 92, "delete_angl": 92, "delete_bond": 92, "delete_dihedr": 92, "delete_improp": 92, "from_smil": 92, "smile": 92, "addh": 92, "generate_coordin": 92, "numconf": 92, "allchem": 92, "embedmultipleconf": 92, "cco": 92, "etkdgv3": 92, "param": [92, 149, 152], "edit": [92, 109], "upto": 92, "relabel": 92, "u3": 92, "assert": [92, 109], "conversionwarn": 94, "duplicatewarn": [94, 109], "aris": 94, "fileformatwarn": 94, "missingdatawarn": 94, "selectionwarn": 94, "streamwarn": [94, 109], "everywher": [94, 107], "atomneighborsearch": 95, "atom_group": 95, "_supportsarrai": [95, 103, 106], "_nestedsequ": [95, 103, 106], "capped_dist": [95, 99], "atom_list": 95, "calc_dist": 97, "mateusz": 98, "bieniek": 98, "acount": 98, "inspir": [98, 104], "seemingli": 98, "dispar": 98, "cholesterol": 98, "flop": 98, "gu2019": 98, "survivalprob": 98, "paola": 98, "multiscal": 98, "142": 98, "224907": 98, "4922445": 98, "secchi": [98, 112], "toma": [98, 112], "perez": [98, 112], "acl": [98, 112], "seung": [98, 112], "gu": [98, 112], "kang": [98, 112], "tien": [98, 112], "huynh": [98, 112], "yerko": [98, 112], "escalona": [98, 112], "jose": [98, 112], "antonio": [98, 112], "garat": [98, 112], "agustin": [98, 112], "mart": 98, "\u00ed": 98, "nez": 98, "isaac": [98, 112], "garc": 98, "juan": [98, 112], "\u00e1": 98, "ez": 98, "ruhong": [98, 112], "zhou": [98, 112], "pocket": [98, 112], "cx26": [98, 112], "hemichannel": [98, 112], "599": [98, 112], "612": [98, 112], "bpj": 98, "037": 98, "ruo": 98, "svetlana": 98, "baoukina": 98, "peter": 98, "tieleman": 98, "2064": 98, "2070": 98, "8b00933": 98, "list_of_set": 98, "encod": [98, 102, 108], "said": 98, "transloc": 98, "bracket": 98, "autocorel": 98, "timeseries_data": 98, "evolut": 98, "correct_intermitt": 98, "preprocess": [98, 155], "probabilti": 98, "consit": 98, "used_openmp": 99, "c_distanc": 99, "c_distances_openmp": 99, "standalon": [99, 132], "simd": 99, "vectoris": 99, "calc_bond": 99, "isa": 99, "vcl2": 99, "satisfi": [99, 140], "repositori": 99, "max_cutoff": [99, 104], "min_cutoff": 99, "return_dist": 99, "kdtree": [99, 106, 110], "bruteforc": 99, "nsgrid": [99, 110], "pkdtree": [99, 110], "n_pair": 99, "enumer": 99, "coord1": 99, "coord2": [99, 107], "periodickdtre": [99, 110], "fastn": [99, 104], "temporarili": 99, "2919": 99, "2229": 99, "2345": 99, "2670": 99, "2930": 99, "self_capped_dist": 99, "self_search": [99, 104], "coords1": [99, 107, 109], "coords2": [99, 107, 109], "linalg": [99, 103, 108, 111], "bondlength": 99, "calc_angl": 99, "coords3": 99, "apic": 99, "coords4": 99, "quadruplet": [99, 147], "3rd": 99, "calc_tors": 99, "newcoord": 99, "transform_rto": 99, "reciproc": 99, "transform_stor": 99, "augment_coordin": [99, 106], "vec": 99, "augment": [99, 146], "thick": 99, "augmented_index": 99, "original_index": 99, "all_coord": [99, 104], "undo_aug": [99, 106], "nreal": 99, "counterpart": 99, "minimize_vector": 99, "naiv": 99, "minimized_vector": 99, "_distanc": 99, "caution": 99, "_distances_openmp": 99, "dcdfile": 100, "namedtupl": [100, 101], "natom": [100, 101, 109, 110, 149], "besid": [100, 101, 151], "acknowledg": 100, "catdcd": 100, "4d": 100, "mdawiki": 100, "charmm_bitfield": 100, "bitfield": 100, "dcd_is_charmm": 100, "0x01": 100, "dcd_has_4dim": 100, "0x02": 100, "dcd_has_extra_block": 100, "0x04": 100, "charm": 100, "dcdframe": 100, "readfram": 100, "write_head": 100, "239": 100, "pretend": 100, "xtcfile": 101, "trrfile": 101, "read_direct_xvf": 101, "calc_offset": 101, "set_offset": 101, "trrframe": 101, "haven": 101, "_lambda": 101, "cartes": 101, "read_direct_x": 101, "xtcframe": 101, "strang": 101, "getlogg": 102, "modulenam": 102, "stop_log": 102, "progressmet": 102, "nullhandl": 102, "handler": [102, 109], "addhandl": 102, "advic": 102, "formatt": 102, "emit": [102, 136, 155], "whatev": 102, "__": 102, "tty": 102, "devic": 102, "desc": 102, "unspecifi": 102, "inf": 102, "resort": 102, "statist": 102, "eta": 102, "trace": [102, 103, 106], "textiowrapp": [102, 105], "sy": 102, "write_byt": 102, "ncol": 102, "stai": 102, "fallback": 102, "mininterv": 102, "maxinterv": 102, "minit": 102, "dynamic_minit": 102, "thread": [102, 110, 151, 152, 153, 154, 155, 156, 157, 158, 159], "cpu": 102, "errat": 102, "unicod": 102, "unit_scal": 102, "kilo": 102, "mega": 102, "dynamic_ncol": 102, "nrow": 102, "gui": [102, 119, 120], "instantan": [102, 112, 162, 163], "bar_format": 102, "l_bar": 102, "r_bar": 102, "0f": 102, "n_fmt": 102, "total_fmt": 102, "rate_fmt": 102, "var": 102, "elapsed_": 102, "rate_noinv": 102, "rate_noinv_fmt": 102, "rate_inv": 102, "rate_inv_fmt": 102, "unit_divisor": 102, "remaining_": 102, "set_postfix": 102, "lock_arg": 102, "hide": 102, "jupyt": 102, "notebook": 102, "clear_handl": 102, "logger_nam": 102, "vec1": 103, "vec2": 103, "collinear": 103, "lot": 103, "fuss": 103, "pdot": 103, "pnorm": 103, "bc": [103, 148], "cd": [103, 108, 112, 148], "\u03c0": 103, "stp": 103, "vec3": 103, "epip": 103, "_3": 103, "sarrus_det": 103, "sarru": 103, "det": 103, "triclinic_box": 103, "wikipedia": 103, "lattice_const": 103, "_type": 103, "_array_lik": 103, "_nested_sequ": 103, "_dtype_lik": 103, "_supportsdtyp": 103, "supportsindex": 103, "abc": 103, "_dtypedict": 103, "tsjerk": 103, "wassenaar": 103, "box_matrix": 103, "box_volum": 103, "necessit": 103, "frag": 103, "find_frag": 103, "bondlist": 103, "distinct": 103, "int32": 103, "versionadd": 103, "greatli": 104, "appendix": [104, 160], "552": 104, "frenkel": 104, "smit": 104, "brief": [104, 161], "cellsiz": 104, "rewrot": 104, "1290": 104, "cube": 104, "lmax": 104, "lmin": 104, "pseudobox": 104, "gridsearch": 104, "search_coord": 104, "nsresult": 104, "get_pair": 104, "get_pair_dist": 104, "regist": 104, "hald": 104, "demand": 104, "coontain": 104, "composit": [105, 111], "fileio": [105, 149], "wider": 105, "bufferedread": 105, "buffer_wrap": 105, "text_wrap": 105, "bz2file": 105, "xyz_bz2": 105, "pathlik": 105, "xb": 105, "compresslevel": 105, "gzipfil": 105, "mmtf_gz": 105, "1218": 105, "trivial": 105, "bytesio": 105, "discern": 105, "slowest": 105, "mtime": 105, "timestamp": 105, "rt": [105, 109], "leafsiz": 106, "condtion": 106, "treatment": 106, "suffer": 106, "poor": 106, "down": [106, 108], "get_indic": 106, "search_pair": 106, "search_tre": 106, "set_coord": 106, "pittsburgh": 107, "delgado": 107, "cornel": 107, "arizona": 107, "jla65": 107, "pitt": 107, "edu": 107, "bsd": [107, 108], "pyqcprot": 107, "brandei": 107, "dmitri": [107, 112], "1561": [107, 112], "1563": [107, 112], "conf": 107, "float64_t": 107, "condid": 107, "npfloat64_t": 107, "3xn": 107, "nx3": 107, "innerproduct": 107, "candid": 107, "e0": 107, "fastcalcrmsdandrot": 107, "euler": 108, "arcbal": 108, "christoph": 108, "gohlk": 108, "laboratori": 108, "fluoresc": 108, "california": 108, "irvin": 108, "claus": 108, "revis": 108, "epydoc": 108, "invert": 108, "inv": 108, "m0": 108, "m1": 108, "opengl": 108, "glmultmatrixd": 108, "jy": 108, "kz": 108, "sxyz": 108, "ryxi": 108, "tatic": 108, "otat": 108, "pariti": 108, "goldman": 108, "gem": 108, "472": 108, "475": [108, 112, 162, 163], "morgan": 108, "kaufmann": 108, "usa": 108, "1990": 108, "ken": 108, "shoemak": 108, "kirk": 108, "editor": [108, 112], "124": 108, "academ": [108, 112], "1992": 108, "charl": 108, "karnei": 108, "604": 108, "jmgm": 108, "itzhack": 108, "guidanc": 108, "1085": 108, "1087": 108, "2514": 108, "4654": 108, "vii": 108, "perspect": 108, "jame": 108, "arvo": 108, "ii": 108, "338": 108, "341": 108, "san": 108, "diego": 108, "b9780080507545500724": 108, "b978": 108, "050754": 108, "50072": 108, "spencer": 108, "320": 108, "323": 108, "b9780080507545500694": 108, "50069": 108, "324": 108, "331": 108, "b9780080507545500700": 108, "50070": 108, "heckbert": 108, "iv": 108, "229": 108, "192": [108, 148], "ljll": 108, "upmc": 108, "fr": [108, 148], "scientif": [108, 109, 112, 165], "20visualis": 108, "20k": 108, "20quaternion": 108, "diebel": 108, "attitud": 108, "kabsch": 108, "sep": 108, "s0567739478001680": 108, "berthold": 108, "horn": 108, "optic": 108, "629": 108, "642": 108, "1987": 108, "1364": 108, "josaa": 108, "000629": 108, "jmp": 108, "waveren": 108, "intel": 108, "asmo": 108, "eng": 108, "293748": 108, "234": 108, "345": 108, "xaxi": 108, "yaxi": 108, "zaxi": 108, "identity_matrix": 108, "rx": 108, "ry": 108, "rz": 108, "concatenate_matric": 108, "euler_from_matrix": 108, "rxyz": 108, "euler_matrix": 108, "is_same_transform": 108, "qx": 108, "quaternion_about_axi": 108, "qy": 108, "qz": 108, "quaternion_multipli": 108, "rq": 108, "quaternion_matrix": 108, "scale_matrix": 108, "translation_matrix": 108, "shear_matrix": 108, "random_rotation_matrix": 108, "rand": 108, "persp": 108, "decompose_matrix": 108, "tan": 108, "compose_matrix": 108, "trackbal": 108, "ball": 108, "drag": 108, "275": 108, "90583455": 108, "setax": 108, "setconstrain": 108, "400": 108, "2055924": 108, "cursor": 108, "constrain": 108, "getconstrain": 108, "arcball_nearest_axi": 108, "degen": 108, "r1": 108, "euler_from_quaternion": 108, "99810947": 108, "06146124": 108, "projection_from_matrix": 108, "projection_matrix": 108, "p0": 108, "p1": 108, "quaternion_imag": 108, "quaternion_r": 108, "reflection_from_matrix": 108, "reflection_matrix": 108, "v0": 108, "rotation_from_matrix": 108, "direc": 108, "rotaxi": 108, "scale_from_matrix": 108, "s0": 108, "shear_from_matrix": 108, "cross": [108, 120, 141, 149, 162, 163], "translation_from_matrix": 108, "anywher": [109, 152], "mathemat": [109, 110], "openani": [109, 114], "datasourc": 109, "isstream": 109, "socket": 109, "ead": 109, "rite": 109, "startswith": 109, "urllib2": 109, "urlopen": 109, "bzip": 109, "ppend": 109, "openf": 109, "greedy_splitext": 109, "extsep": 109, "splitext": 109, "home": 109, "joe": 109, "jai": 109, "stackoverflow": 109, "377017": 109, "realpath": 109, "get_ext": 109, "check_compressed_format": 109, "uppercas": [109, 146], "format_from_filename_extens": 109, "guess_format": 109, "insuffici": 109, "ordinari": 109, "pdb_": 109, "982": 109, "26000214": 109, "98200226": 109, "92599964": 109, "recognit": 109, "glue": 109, "thing": 109, "remot": 109, "seekabl": 109, "fake": 109, "expandvar": 109, "expandus": 109, "close_stream": 109, "fileno": 109, "descriptor": 109, "fsync": 109, "seek_set": 109, "seek_cur": 109, "seek_end": 109, "writelin": 109, "asiter": 109, "hasmethod": 109, "unique_int_1d": 109, "unique_row": 109, "arr": 109, "return_index": 109, "answer": 109, "r_idx": 109, "dupic": 109, "blocks_of": 109, "nblock": 109, "miniblock": 109, "group_same_or_consecutive_integ": 109, "fortranread": 109, "fortran": [109, 140], "fortran_format_regex": 109, "2i10": 109, "2x": 109, "3f20": 109, "f20": 109, "atomformat": 109, "totr": 109, "number_of_match": 109, "parse_fortran_format": 109, "edit_descriptor": 109, "totallength": 109, "tl": [109, 148], "ss": 109, "bn": 109, "bz": 109, "ew": 109, "dee": 109, "ifeax": 109, "numfmt": 109, "expresss": 109, "ifelax": 109, "fixedwidth_bin": 109, "nd": [109, 148], "correpsond": 109, "ltruncate_int": 109, "ndigit": 109, "1234": 109, "flatten_dict": 109, "parent_kei": 109, "shallow": 109, "6027615": 109, "1897": 109, "imran": 109, "amino_acid_cod": 109, "inverse_aa_cod": 109, "parse_residu": 109, "lys300": 109, "hz1": 109, "k300": 109, "4gb300": 109, "h6o": 109, "4gb": 109, "conv_float": 109, "comprehens": [109, 112, 165], "universe_valid": 109, "_cach": 109, "def__init__": 109, "keynam": 109, "lookup": [109, 148, 160], "others": 109, "_valid": 109, "store_init_argu": 109, "static_vari": 109, "equip": 109, "msg": 109, "279586": 109, "claudiu": 109, "warn_if_not_uniqu": 109, "groupmethod": 109, "assur": 109, "check_coord": 109, "coord_nam": 109, "allow_singl": 109, "enforce_copi": 109, "check_lengths_match": 109, "enforce_dtyp": 109, "convert_singl": 109, "reduce_result_if_singl": 109, "allow_atomgroup": 109, "coordsum": 109, "c_contigu": 109, "err": 109, "got": 109, "check_atomgroup_not_empti": 109, "deprecationwarn": 109, "old_nam": 109, "rebind": 109, "__name__": 109, "restructur": 109, "sphinx": 109, "role": 109, "new_nam": 109, "old_func": 109, "oldfunc": 109, "confus": 109, "new_func": 109, "_deprec": 109, "dedent_docstr": 109, "dedent": 109, "__doc__": 109, "textwrap": 109, "check_box": 109, "boxtyp": 109, "ortho": 109, "tri_vec": 109, "checked_box": 109, "cecked_box": 109, "why": 109, "framework": [110, 152, 165], "elsewher": 110, "multitud": 110, "neighborsearch": 110, "pxd": 110, "cimport": 110, "imagin": 110, "cdef": 110, "make_timestep": 110, "s4ake": 111, "rgyr": 111, "ipython": 111, "onlin": 111, "invari": 111, "gromo": [111, 128, 146, 148], "prompt": 111, "elementari": [111, 160], "adk_dim": 111, "easiest": [111, 165], "u_dims_adk": 111, "u_eq_adk": 111, "beckstein2009": 111, "ten": 111, "perilla": 111, "woolf": [111, 112], "insight": 111, "biol": [111, 112], "009": 111, "aspect": [111, 162], "rmsfit_qcp": 111, "potential_profil": 111, "nativecontact": 111, "multimer": 111, "transmembran": 111, "multim": 111, "dcd2xtc": 111, "amber2dcd": 111, "make_mthk_tetram": 111, "gowers2016": [112, 165], "ask": [112, 165], "upcom": 112, "supersed": 112, "agraw": 112, "2319": 112, "21787": 112, "barnoud": 112, "reddi": [112, 162, 163], "melo": 112, "domanski": 112, "buchoux": 112, "kennei": 112, "benthal": 112, "rostrup": 112, "15th": 112, "confer": 112, "austin": 112, "tx": 112, "25080": 112, "majora": 112, "629e541a": 112, "00e": 112, "theobald2005b": 112, "liu2010b": 112, "bansal2000b": 112, "hall2007b": 112, "secchi2014b": 112, "martinez": 112, "garcia": 112, "saez": 112, "seyler2015b": 112, "sl": 112, "mf": 112, "e1004568": 112, "tiberti2015b": 112, "e1004415": 112, "streamlin": [112, 163, 164], "streamlines_3d": [112, 162, 164], "chavent2014b": 112, "chavent": [112, 162, 163], "dahl": [112, 162, 163], "goos": [112, 162, 163], "jobard": [112, 162, 163], "methodologi": [112, 162, 163], "faradai": [112, 162, 163], "1039": [112, 162, 163], "c3fd00145h": [112, 162, 163], "smith2019": 112, "ziolek": 112, "gazzarrini": 112, "owen": 112, "lorenz": 112, "hyaluron": 112, "synovi": 112, "pccp": 112, "9845": 112, "9857": 112, "c9cp01532a": 112, "amadei": 112, "ceruso": 112, "nola": 112, "424": 112, "sici": [112, 160], "1097": 112, "0134": 112, "19990901": 112, "aid": [112, 160], "prot5": 112, "macia": 112, "lopez": 112, "romero": 112, "lupyan": 112, "zerbino": 112, "ortiz": 112, "deform": 112, "superfamili": 112, "biophi": 112, "88": [112, 148, 149], "1291": 112, "1299": 112, "1529": 112, "biophysj": 112, "052449": 112, "yang": 112, "song": 112, "carriquiri": 112, "jernigan": 112, "hiv": 112, "proteas": 112, "321": 112, "330": 112, "calandrini": 112, "pellegrini": 112, "calligari": 112, "hinsen": 112, "kneller": 112, "nmoldyn": 112, "spectroscop": 112, "experi": 112, "sfn": 112, "201": 112, "232": [112, 148], "1051": 112, "201112010": 112, "buyl": 112, "877": 112, "21105": 112, "joss": 112, "00877": 112, "dima": 112, "thirumalai": 112, "asymmetri": 112, "denatur": 112, "6564": 112, "6570": 112, "jp037128y": 112, "neumann": 112, "841": 112, "858": 112, "00268978300102721": 112, "buyl2013": 112, "colberg": 112, "h\u00f6fling": 112, "185": 112, "cpc": 112, "018": 112, "jakupov": 112, "meghann": 112, "agarw": 112, "chri": 112, "callowai": 112, "dillon": 112, "niederhut": 112, "shupe": 112, "ed": 112, "2021": [112, 141], "1b6fd038": 112, "005": 112, "yourscript": 112, "yourmodul": 112, "duecredit_en": 112, "bibtex": 112, "kalp": 113, "sixth": 113, "circumv": 113, "mytopologyattr": 113, "tricki": 113, "exhaust": 113, "fnmatch": 113, "gl": 113, "glx29": 113, "referenc": 113, "convention": 113, "arbitrarili": 113, "ag_upd": 113, "chained_ag_upd": 113, "static_ag": 113, "concatent": 113, "570": 113, "452": 113, "selectionwriterbas": [114, 115, 116, 117, 118, 119, 120], "_write_head": 114, "_translat": 114, "_write_tail": 114, "numterm": [114, 115, 116, 117, 118, 119], "preambl": [114, 115, 116, 117, 118, 119], "commentfmt": [114, 115, 116, 117, 118, 119], "presum": [114, 115, 116, 117, 118, 119], "macro": [115, 116, 117, 118, 119, 120], "mdanalysis001": [115, 116, 117, 119], "write_preambl": [115, 116, 117, 118, 119], "gromacs_command": 116, "mdanalysis002": 116, "default_numterm": 117, "singleword": [119, 120], "favourit": 120, "mda_protein": 120, "mda_mdanalysi": 120, "upper_satur": 120, "upper_sat": 120, "lower_satur": 120, "lower_sat": 120, "upper_unsatur": 120, "upper_unsat": 120, "lower_unsatur": 120, "lower_unsat": 120, "get_writ": 120, "defaultformat": 120, "briefli": 121, "atomno": 122, "resno": 122, "crdparser": [122, 147], "dmsparser": [124, 147], "atomnum": 124, "extendedpdbpars": [125, 136], "assembli": [127, 147], "symmetri": 127, "gmsparser": [127, 147], "gropars": [128, 147], "variat": 129, "bodi": [129, 149], "hoomdxmlpars": [130, 147], "placehold": 130, "anywai": 130, "chargegroup": [131, 147], "infer_system": 131, "moleculetyp": 131, "itppars": [131, 147], "include_dir": 131, "usr": 131, "itp_tip5p": 131, "hw2_charg": 131, "topol": 131, "tip5p": 131, "molnam": 131, "nrexcl": 131, "ifndef": 131, "hw1_charg": 131, "241": 131, "endif": 131, "nr": [131, 149], "opls_118": 131, "opls_119": 131, "opls_120": 131, "lp1": 131, "lp2": 131, "ifdef": 131, "extra_atom": 131, "lp3": 131, "lp4": 131, "settl": [131, 141, 149], "lammpsdataconvert": 132, "atom_styl": 132, "7151744275286681e": 132, "8684434743140471e": 132, "9285127961842125e": 132, "myfil": 132, "grab_datafil": 132, "read_data_timestep": 132, "ts_class": 132, "ts_kwarg": 132, "lammpsdumppars": 132, "1901": [133, 136], "mmtfparser": 133, "mol2pars": [134, 147], "subst_nam": 134, "fledg": 135, "minimalpars": 135, "incorrect": 136, "2422": 136, "corrupt": 136, "pdbqtparser": [137, 147], "pqrparser": [138, 147], "guess_flavour": 138, "variant": [138, 139], "flavour": 138, "no_chainid": 138, "psfparser": [139, 147], "atom_nam": [140, 146], "atomic_numb": [140, 149], "bonds_inc_hydrogen": 140, "bonds_without_hydrogen": 140, "angles_inc_hydrogen": 140, "angles_without_hydrogen": 140, "dihedrals_inc_hydrogen": 140, "dihedrals_without_hydrogen": 140, "atom_type_index": 140, "type_indic": [140, 147], "amber_atom_typ": 140, "residue_label": 140, "residue_point": 140, "chamber": 140, "stringent": 140, "2223": [140, 160], "scenario": 140, "toppars": [140, 147], "inc": 140, "amber10": 140, "amber12": 140, "parse_bond": 140, "num_per_record": 140, "numlin": 140, "parm7": [140, 147], "ambermd": 140, "parse_charg": 140, "parse_chunk": 140, "chunksiz": 140, "parse_dihedr": 140, "diha": 140, "dihh": 140, "sublist": 140, "nb": [140, 148, 149], "parse_el": 140, "pasr": 140, "2306": 140, "2651": 140, "unrecognis": 140, "parse_mass": 140, "parse_nam": 140, "parse_residx": 140, "pointer": 140, "parse_resnam": 140, "recrod": 140, "parse_type_indic": 140, "typeindic": 140, "parse_typ": 140, "parsesection_mapp": 140, "mapper": 140, "skipper": 140, "tpx": [141, 149], "73": [141, 148, 149, 163], "83": [141, 148, 149], "112": [141, 148, 149], "119": [141, 149], "127": [141, 148, 149], "2428": 141, "463": 141, "g96": 141, "mors": [141, 149], "fene": [141, 149], "restraint": [141, 149], "tabul": 141, "type3": 141, "quartic": [141, 149], "ryckaert": [141, 149], "belleman": 141, "tpr_resid_from_on": [141, 149], "itp": [141, 147, 150], "gromacs_dir": [141, 149], "src": [141, 149], "gmxdump": 141, "gmxlib": [141, 149], "tpxio": [141, 149], "gmxfio_rw": 141, "gmxfio_xdr": 141, "gmxfiofio": 141, "read_tpxhead": [141, 149], "tprreaderdevelop": 141, "read_": 141, "do_": 141, "extract_": 141, "txyzpars": [142, 147], "won": 143, "xyzpars": [143, 147], "guess_atom_typ": [145, 146, 148], "guess_atom_mass": [145, 146], "guess_atom_x": 146, "guess_x": 146, "guess_atom_el": [146, 148], "synonym": 146, "prm7": 146, "inde": 146, "prm19sbopc": 146, "epw": 146, "outcom": 146, "guessed_el": 146, "get_atom_mass": 146, "guess_aromat": 146, "guess_atom_charg": 146, "r_2": 146, "eachoth": 146, "superced": 146, "lewi": 146, "burn": 146, "somebodi": 146, "guess_gasteiger_charg": 146, "guess_improper_dihedr": 146, "guess_mass": 146, "atom_mass": 146, "validate_atom_typ": 146, "vaildat": 146, "anton": 147, "tprparser": 147, "lammpspars": [147, 150], "elem": 147, "dlpolypars": [147, 150], "xml": [147, 150], "fhiaimspars": [147, 150], "sole": 147, "histor": 147, "permut": 147, "bondtupl": 147, "_init_bond": 147, "atomel": 148, "br": 148, "c0": 148, "ca2": 148, "cal": 148, "cla": 148, "clal": 148, "cu": 148, "fe": 148, "fe2": 148, "iod": 148, "lit": 148, "mg": 148, "mg2": 148, "pot": [148, 149], "qc": 148, "qk": 148, "ql": 148, "qn": 148, "qr": 148, "sod": 148, "zn": 148, "227": 148, "028": 148, "8682": 148, "981539": 148, "243": 148, "948": 148, "74": [148, 149], "92159": 148, "au": 148, "96654": 148, "904": 148, "ba": [148, 149], "137": 148, "327": 148, "012182": 148, "bh": 148, "208": 148, "98037": 148, "bk": 148, "247": 148, "546": 148, "411": 148, "251": 148, "9332": 148, "cr": 148, "9961": 148, "db": 148, "dy": [148, 162], "er": 148, "167": 148, "252": 148, "eu": 148, "151": 148, "965": 148, "998": 148, "847": 148, "fm": [148, 160], "257": 148, "223": 148, "69": [148, 149], "gd": 148, "ge": 148, "0026": 148, "hf": 148, "178": 148, "hg": 148, "ho": 148, "164": 148, "93032": 148, "126": 148, "9045": 148, "ir": 148, "102": 148, "kr": 148, "la": 148, "138": 148, "9055": 148, "941": 148, "lr": [148, 149], "174": 148, "967": 148, "258": 148, "mn": 148, "93805": 148, "mo": 148, "94": [148, 149], "mt": 148, "266": 148, "98977": 148, "1797": 148, "989768": 148, "92": [148, 149], "90638": 148, "ni": 148, "6934": 148, "259": 148, "048": 148, "190": 148, "974": 148, "231": 148, "0359": 148, "pd": 148, "pm": [148, 160], "145": 148, "pr": [148, 152], "90765": 148, "pt": 148, "195": 148, "244": 148, "4678": 148, "025": 148, "186": 148, "rf": [148, 149], "261": 148, "rh": 148, "rn": 148, "ru": 148, "07": 148, "06": [148, 160], "sb": 148, "757": 148, "sc": 148, "95591": 148, "se": 148, "263": 148, "si": [148, 160], "0855": 148, "sn": 148, "118": [148, 149], "87": [148, 149], "62": [148, 149], "ta": 148, "9479": 148, "tb": 148, "92534": 148, "tc": 148, "te": 148, "0381": 148, "204": 148, "3833": 148, "168": 148, "93421": 148, "0289": 148, "9415": 148, "183": 148, "xe": 148, "90585": 148, "yb": 148, "173": 148, "zr": 148, "224": 148, "84": [148, 149], "AT": 148, "02": 148, "68": [148, 149], "BE": 148, "53": [148, 149], "43": [148, 149], "IN": 148, "52": [148, 149], "rr": 148, "03": 148, "86": [148, 149], "seealso": 148, "kv2dict": 148, "convertor": 148, "primit": 148, "table_atomel": 148, "propka": 148, "chlorid": 148, "bromid": 148, "nbr": 148, "calcium": 148, "ncal": 148, "nc0": 148, "nca2": 148, "cesium": 148, "nce": 148, "ncla": 148, "nclal": 148, "ncl": 148, "iodid": 148, "niod": 148, "iron": 148, "nfe": 148, "nfe2": 148, "lithium": 148, "nlit": 148, "nli": 148, "nql": 148, "magnesium": 148, "nmg": 148, "nmg2": 148, "nobl": 148, "gase": 148, "collid": 148, "nk": 148, "npot": 148, "nqk": 148, "sodium": 148, "nsod": 148, "nna": 148, "nqn": 148, "zink": 148, "nzn": 148, "copper": 148, "ncu": 148, "cerium": 148, "nqc": 148, "rubidium": 148, "nrb": 148, "nqr": 148, "nbc": 148, "nac": 148, "nmw": 148, "table_mass": 148, "atommass": 148, "nal": 148, "nam": 148, "nsb": 148, "nat": 148, "nba": 148, "nbk": 148, "nbe": 148, "nbi": 148, "nbh": 148, "90400": 148, "ncd": 148, "nca": 148, "08000": 148, "ncf": 148, "01100": 148, "11600": 148, "90000": 148, "45000": 148, "ncr": 148, "nco": 148, "54600": 148, "ncm": 148, "ndb": 148, "ndy": 148, "ner": 148, "neu": 148, "nfm": 148, "nf": 148, "99800": 148, "nfr": 148, "ngd": 148, "nga": 148, "nge": 148, "nau": 148, "nhf": 148, "nhe": 148, "00260": 148, "nho": 148, "00800": 148, "nin": 148, "90450": 148, "nir": 148, "84700": 148, "nkr": 148, "nla": 148, "nlr": 148, "npb": 148, "nlu": 148, "30500": 148, "nmn": 148, "nmt": 148, "nmd": 148, "nhg": 148, "nmo": 148, "00700": 148, "nnd": 148, "nne": 148, "17970": 148, "nnp": 148, "nni": 148, "nnb": 148, "nno": 148, "nOs": 148, "nO": 148, "99900": 148, "npd": 148, "97400": 148, "npt": [148, 160], "npu": 148, "npo": 148, "10200": 148, "npr": 148, "npm": 148, "npa": 148, "nra": 148, "nrn": 148, "nre": [148, 149], "nrh": 148, "46780": 148, "nru": 148, "nrf": 148, "nsm": 148, "nsc": 148, "nsg": 148, "nse": 148, "nsi": 148, "nag": 148, "nsr": 148, "06000": 148, "nta": 148, "ntc": 148, "nte": 148, "ntb": 148, "ntl": 148, "ntm": 148, "nsn": 148, "nti": 148, "nw": 148, "nu": 148, "nv": 148, "nxe": 148, "nyb": 148, "37000": 148, "nzr": 148, "ndummi": 148, "table_vdwradii": 148, "bondi": 148, "1964": 148, "441": 148, "451": 148, "j100785a001": 148, "rowland": 148, "taylor": 148, "organ": 148, "7384": 148, "7391": 148, "jp953141": 148, "mantina": 148, "5806": 148, "5812": 148, "jp8111556": 148, "r_vdw": 148, "naa": 148, "nrr": 148, "nhh": 148, "supported_vers": 149, "immut": 149, "f_angl": 149, "idef": 149, "f_angr": 149, "f_angresz": 149, "f_anharm_pol": 149, "f_bham": 149, "f_bham_lr": 149, "f_bond": 149, "f_cbtdih": 149, "f_cmap": 149, "f_com_pul": 149, "f_connbond": 149, "f_constr": 149, "f_constrnc": 149, "f_coul14": 149, "f_coul_lr": 149, "f_coul_recip": 149, "f_coul_sr": 149, "f_cross_bond_angl": 149, "f_cross_bond_bond": 149, "f_cubicbond": 149, "f_densityfit": 149, "f_dhdl_con": 149, "f_dihr": 149, "f_dihresviol": 149, "f_dispcorr": 149, "f_disr": 149, "f_disresviol": 149, "f_dkdl": 149, "f_dpd": 149, "f_dvdl": 149, "f_dvdl_bond": 149, "f_dvdl_coul": 149, "89": 149, "f_dvdl_restraint": 149, "f_dvdl_temperatur": 149, "f_dvdl_vdw": 149, "f_econserv": 149, "f_ekin": 149, "f_epot": 149, "f_eqm": 149, "f_etot": 149, "f_fbposr": 149, "f_fenebond": 149, "f_fourdih": 149, "f_g96angl": 149, "f_g96bond": 149, "f_gb12": 149, "f_gb13": 149, "f_gb14": 149, "f_gbpol": 149, "f_harmon": 149, "f_idih": 149, "f_linear_angl": 149, "f_lj": 149, "f_lj14": 149, "f_ljc14_q": 149, "f_ljc_pairs_nb": 149, "f_lj_lr": 149, "f_lj_recip": 149, "f_mors": 149, "f_npsolvat": 149, "f_nre": 149, "f_orir": 149, "f_oriresdev": 149, "f_pdih": 149, "f_pdispcorr": 149, "f_pidih": 149, "f_polar": 149, "f_posr": 149, "f_pre": 149, "f_quartic_angl": 149, "f_rbdih": 149, "f_restrangl": 149, "f_restrbond": 149, "f_restrdih": 149, "f_rf_excl": 149, "f_settl": 149, "f_tabangl": 149, "f_tabbond": 149, "f_tabbondsnc": 149, "f_tabdih": 149, "f_temp": 149, "f_thole_pol": 149, "f_urey_bradlei": 149, "f_vsite1": 149, "f_vsite2": 149, "f_vsite2fd": 149, "f_vsite3": 149, "f_vsite3fad": 149, "f_vsite3fd": 149, "f_vsite3out": 149, "f_vsite4fd": 149, "f_vsite4fdn": 149, "f_vsiten": 149, "f_vtemp_nolongerus": 149, "f_water_pol": 149, "ftupd": 149, "117": 149, "interaction_typ": 149, "g96bond": 149, "cubicbond": 149, "connbond": 149, "fenebond": 149, "tabbond": 149, "tabbondsnc": 149, "restraintpot": 149, "g96angl": 149, "restrangl": 149, "linear_angl": 149, "lin": 149, "cross_bond_bond": 149, "cross_bond_angl": 149, "urey_bradlei": 149, "qangl": 149, "tabangl": 149, "pdih": 149, "dih": 149, "rbdih": 149, "bell": 149, "restrdih": 149, "cbtdih": 149, "cbt": 149, "fourdih": 149, "idih": 149, "pidih": 149, "tabdih": 149, "gb12": 149, "pol": 149, "gb13": 149, "gb14": 149, "gbpol": 149, "npsolvat": 149, "nonpolar": 149, "lj14": 149, "coul14": 149, "coulomb": 149, "ljc14_q": 149, "ljc": 149, "ljc_nb": 149, "lj_sr": 149, "bham": 149, "buck": 149, "ham": 149, "lj_lr": 149, "bham_lr": 149, "dispcorr": 149, "disper": 149, "corr": 149, "coul_sr": 149, "coul_lr": 149, "rf_excl": 149, "excl": 149, "coul_recip": 149, "coul": 149, "recip": 149, "lj_recip": 149, "dpd": 149, "waterpol": 149, "thole": 149, "anharm_pol": 149, "anharm": 149, "posr": 149, "fbposr": 149, "bottom": 149, "disr": 149, "disresviol": 149, "viol": 149, "orir": 149, "ordev": 149, "ori": 149, "angr": 149, "angresz": 149, "dihr": 149, "dihresviol": 149, "constrnc": 149, "conn": 149, "vsite1": 149, "vsite2": 149, "vsite2fd": 149, "2fd": 149, "vsite3": 149, "vsite3fd": 149, "3fd": 149, "vsite3fad": 149, "3fad": 149, "vsite3out": 149, "3out": 149, "vsite4fd": 149, "4fd": 149, "vsite4fdn": 149, "4fdn": 149, "vsiten": 149, "com_pul": 149, "densityfit": 149, "eqm": 149, "quantum": 149, "ekin": 149, "etot": 149, "econ": 149, "vtemp": 149, "vir": 149, "pdispcorr": 149, "dh": 149, "dl_con": 149, "dvremain": 149, "dekin": 149, "dvc": 149, "dvcoul": 149, "dvv": 149, "dvvdw": 149, "dvb": 149, "dvbond": 149, "dvr": 149, "dvrestraint": 149, "dvt": 149, "dvtemperatur": 149, "ifunc": 149, "mb": 149, "qb": 149, "tp": 149, "typeb": 149, "ptype": 149, "resind": 149, "atomnumb": 149, "atomkind": 149, "element_symbol": 149, "ilist": 149, "ik": 149, "iatom": 149, "interactionkind": 149, "long_nam": 149, "atom_ndx": 149, "molblock": 149, "molb_typ": 149, "molb_nmol": 149, "molb_natoms_mol": 149, "molb_nposres_xa": 149, "molb_nposres_xb": 149, "moleculekind": 149, "dihe": 149, "impr": 149, "number_of_atom": 149, "number_of_residu": 149, "remap_angl": 149, "atom_start_ndx": 149, "remap_bond": 149, "remap_dih": 149, "remap_impr": 149, "mtop": 149, "nmoltyp": 149, "nmolblock": 149, "atnr": 149, "ntype": 149, "functyp": 149, "reppow": 149, "fudgeqq": 149, "tpxheader": 149, "ver_str": 149, "fver": 149, "fgen": 149, "file_tag": 149, "ngtc": 149, "fep_stat": 149, "lamb": 149, "bir": 149, "btop": 149, "bx": 149, "bv": 149, "bf": 149, "sizeoftprbodi": 149, "do_mtop": 149, "do_symtab": 149, "do_ffparam": 149, "do_iparam": 149, "do_moltyp": 149, "do_atom": 149, "do_resinfo": 149, "do_ilist": 149, "do_block": 149, "do_blocka": 149, "do_molblock": 149, "stuff": 149, "do_inputrec": 149, "tpxunpack": 149, "do_str": 149, "emul": 149, "gmx_fio_do_str": 149, "unpack_str": 149, "unsign": 149, "gmx_system_xdr": 149, "454": 149, "unpack_int64": 149, "unpack_uchar": 149, "unpack_uint64": 149, "unpack_ushort": 149, "tpxunpacker2020": 149, "inmemoryseri": 149, "from_unpack": 149, "unpack_fstr": 149, "define_unpack_r": 149, "prec": 149, "unpack_r": 149, "symtab": 149, "do_harm": 149, "do_rvec": 149, "do_symstr": 149, "extract_box_info": 149, "fileversion_err": 149, "ndo_int": 149, "gmx_fio_ndo_r": 149, "ndo_ivec": 149, "gmx_fio_ndo_rvec": 149, "ndo_real": 149, "ndo_rvec": 149, "do_tpxhead": 149, "cpp": 149, "glean": 150, "topolgi": 150, "transformation_1": 151, "transformation_2": 151, "up_by_2": 151, "transformationbas": [151, 152], "_transform": [151, 152], "roughli": 151, "up_by_x_class": 151, "up_by_x_func": 151, "functool": 151, "up_by_x": 151, "notabl": 151, "max_thread": [151, 152, 153, 154, 155, 156, 157, 158, 159], "assess": 151, "paralleliz": [151, 152, 153, 154, 155, 156, 157, 158, 159], "ultil": 151, "oversubscrib": [151, 152], "hyper": 151, "openbla": [151, 152], "engin": [151, 152], "dask": [151, 152], "threadpoolctl": 151, "environment": 151, "varibal": 151, "omp_num_thread": [151, 152], "mkl_num_thread": 151, "openblas_num_thread": 151, "blis_num_thread": 151, "positionaverag": [151, 152], "boxdimens": 151, "kill": 152, "subscrib": [152, 165], "hyperthread": 152, "2950": 152, "2996": 152, "newtransform": 152, "_param": 152, "new_transform": 152, "set_dimens": 153, "fit_transl": 154, "suport": 154, "closur": [154, 157, 158, 159], "fit_rot_tran": 154, "kulke2022": 155, "check_continu": 155, "b6": 155, "orthonorm": 155, "dimer": 155, "martin": 155, "kulk": 155, "josh": 155, "vermaa": 155, "6161": 155, "6171": 155, "2c00327": 155, "avg_fram": 156, "check_reset": 156, "resetarrai": 156, "current_avg": 156, "arround": 157, "bon": 159, "66053892103219": 160, "602176565": 160, "f_": 160, "precomput": 160, "get_conversion_factor": 160, "densityunit_factor": 160, "concentr": 160, "n_avogadro": 160, "rho0": 160, "h2o": 160, "rho_0": 160, "unit_typ": 160, "conversion_factor": 160, "incompat": [160, 161], "boltzmann_const": 160, "008314462159": 160, "02214129e": 160, "calori": 160, "184": 160, "electric_const": 160, "00552635": 160, "elementary_charg": 160, "602176565e": 160, "codata": 160, "nist": 160, "thermochem": 160, "80000": 160, "lengthunit_factor": 160, "femtomet": 160, "nanomet": 160, "picomet": 160, "molarmass": 160, "016": 160, "985": 160, "001": 160, "298k": 160, "1atm": 160, "jorgensen1998": 160, "1660": 160, "5389210321898": 160, "37184690488927": 160, "85655608913766": 160, "886382818497438": 160, "00628806551247": 160, "timeunit_factor": 160, "45482949774598": 160, "microsecond": 160, "millisecond": 160, "nanosecond": 160, "sec": 160, "\u03bc": 160, "speedunit_factor": 160, "04888821": 160, "forceunit_factor": 160, "66053892103219e": 160, "newton": 160, "2390057361376673": 160, "chargeunit_factor": 160, "602176487": 160, "8000000e": 160, "ev": 160, "01036426919046959": 160, "jorgensen": 160, "corki": 160, "jenson": 160, "1179": 160, "1186": 160, "1998": 160, "1096": 160, "987x": 160, "19980730": 160, "jcc6": 160, "semant": 161, "patch": 161, "stabil": 161, "soon": 161, "tyler": [162, 163], "matthieu": [162, 163], "generate_streamlin": [162, 163], "flow": [162, 163], "analyi": [162, 163], "topology_file_path": [162, 163], "trajectory_file_path": [162, 163], "grid_spac": [162, 163], "mda_select": [162, 163], "end_fram": [162, 163], "maximum_delta_magnitud": [162, 163], "num_cor": [162, 163], "g_filter": [162, 163], "\u1d43chavent2014": 162, "excess": [162, 163], "dx_arrai": [162, 163], "dy_arrai": [162, 163], "average_displac": 162, "standard_deviation_of_displac": 162, "testing_filt": [162, 163], "73000049591": 162, "1225": [162, 163], "96008301": 162, "5799999237": 162, "1224": [162, 163], "34008789": 162, "linspac": 162, "1200": [162, 163], "linewidth": 162, "testing_streamlin": 162, "dpi": 162, "anna": [162, 163], "carolin": [162, 163], "stone": [162, 163], "bruno": [162, 163], "generate_streamlines_3d": [162, 163], "viru": 163, "capsid": 163, "\u1d47chavent2014": 163, "dz_arrai": 163, "mayavi": 163, "mlab": 163, "x_lower": 163, "x_upper": 163, "y_lower": 163, "y_upper": 163, "z_lower": 163, "z_upper": 163, "grid_spacing_valu": 163, "1j": 163, "bgcolor": 163, "800": 163, "fgcolor": 163, "z_valu": 163, "st": 163, "line_width": 163, "seedtyp": 163, "integration_direct": 163, "streamline_typ": 163, "tube": 163, "tube_filt": 163, "widget": 163, "point1": 163, "point2": 163, "scene": 163, "z_plus_view": 163, "test_streamplot_3d": 163, "compel": 163, "tailor": 164, "streamplot": 164, "aug": 165, "mdnalysi": 165, "mail": 165, "agre": 165, "forg": 165, "upgrad": 165, "tutori": 165, "gpl": 165, "git": 165, "clone": 165}, "objects": {"MDAnalysis.analysis": [[0, 0, 0, "-", "align"], [1, 0, 0, "-", "atomicdistances"], [2, 0, 0, "-", "base"], [3, 0, 0, "-", "bat"], [4, 0, 0, "-", "contacts"], [6, 0, 0, "-", "density"], [7, 0, 0, "-", "dielectric"], [8, 0, 0, "-", "diffusionmap"], [9, 0, 0, "-", "dihedrals"], [10, 0, 0, "-", "distances"], [19, 0, 0, "-", "gnm"], [22, 0, 0, "-", "helix_analysis"], [23, 0, 0, "-", "hole2"], [25, 0, 0, "-", "leaflet"], [28, 0, 0, "-", "lineardensity"], [29, 0, 0, "-", "msd"], [30, 0, 0, "-", "nucleicacids"], [31, 0, 0, "-", "nuclinfo"], [32, 0, 0, "-", "pca"], [33, 0, 0, "-", "polymer"], [34, 0, 0, "-", "psa"], [35, 0, 0, "-", "rdf"], [36, 0, 0, "-", "rms"], [37, 0, 0, "-", "waterdynamics"]], "MDAnalysis.analysis.align": [[0, 1, 1, "", "AlignTraj"], [0, 1, 1, "", "AverageStructure"], [0, 3, 1, "", "_fit_to"], [0, 3, 1, "", "alignto"], [0, 3, 1, "", "fasta2select"], [0, 3, 1, "", "get_matching_atoms"], [0, 3, 1, "", "rotation_matrix"], [0, 3, 1, "", "sequence_alignment"]], "MDAnalysis.analysis.align.AlignTraj": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AlignTraj.results": [[0, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.align.AverageStructure": [[0, 2, 1, "", "filename"], [0, 2, 1, "", "mobile_atoms"], [0, 2, 1, "", "positions"], [0, 2, 1, "", "reference_atoms"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.align.AverageStructure.results": [[0, 2, 1, "", "positions"], [0, 2, 1, "", "rmsd"], [0, 2, 1, "", "universe"]], "MDAnalysis.analysis.atomicdistances": [[1, 1, 1, "", "AtomicDistances"]], "MDAnalysis.analysis.atomicdistances.AtomicDistances": [[1, 2, 1, "", "n_atoms"], [1, 2, 1, "", "n_frames"], [1, 2, 1, "", "results"]], "MDAnalysis.analysis.base": [[2, 1, 1, "", "AnalysisBase"], [2, 1, 1, "", "AnalysisFromFunction"], [2, 1, 1, "", "Results"], [2, 3, 1, "", "analysis_class"]], "MDAnalysis.analysis.base.AnalysisBase": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "results"], [2, 4, 1, "", "run"], [2, 2, 1, "", "times"]], "MDAnalysis.analysis.base.AnalysisFromFunction.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.base.results": [[2, 2, 1, "", "frames"], [2, 2, 1, "", "times"], [2, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.bat": [[3, 1, 1, "", "BAT"]], "MDAnalysis.analysis.bat.BAT": [[3, 4, 1, "", "Cartesian"], [3, 5, 1, "", "atoms"], [3, 4, 1, "", "load"], [3, 4, 1, "", "run"], [3, 4, 1, "", "save"]], "MDAnalysis.analysis.bat.BAT.results": [[3, 2, 1, "", "bat"]], "MDAnalysis.analysis.contacts": [[4, 1, 1, "", "Contacts"], [4, 3, 1, "", "contact_matrix"], [4, 3, 1, "", "hard_cut_q"], [4, 3, 1, "", "q1q2"], [4, 3, 1, "", "radius_cut_q"], [4, 3, 1, "", "soft_cut_q"]], "MDAnalysis.analysis.contacts.Contacts.results": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.contacts.Contacts": [[4, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.data": [[5, 0, 0, "-", "filenames"]], "MDAnalysis.analysis.data.filenames": [[5, 6, 1, "", "Janin_ref"], [5, 6, 1, "", "Rama_ref"]], "MDAnalysis.analysis.density": [[6, 1, 1, "", "Density"], [6, 1, 1, "", "DensityAnalysis"]], "MDAnalysis.analysis.density.Density": [[6, 4, 1, "", "centers"], [6, 4, 1, "", "check_compatible"], [6, 4, 1, "", "convert_density"], [6, 4, 1, "", "convert_length"], [6, 2, 1, "", "default_format"], [6, 2, 1, "", "delta"], [6, 2, 1, "", "edges"], [6, 4, 1, "", "export"], [6, 2, 1, "", "grid"], [6, 5, 1, "", "interpolated"], [6, 5, 1, "", "interpolation_spline_order"], [6, 4, 1, "", "load"], [6, 4, 1, "", "make_density"], [6, 2, 1, "", "origin"], [6, 4, 1, "", "resample"], [6, 4, 1, "", "resample_factor"], [6, 4, 1, "", "save"], [6, 2, 1, "", "units"]], "MDAnalysis.analysis.density.DensityAnalysis": [[6, 4, 1, "", "_set_user_grid"], [6, 2, 1, "", "density"], [6, 4, 1, "", "run"]], "MDAnalysis.analysis.density.DensityAnalysis.results": [[6, 2, 1, "", "density"]], "MDAnalysis.analysis.dielectric": [[7, 1, 1, "", "DielectricConstant"]], "MDAnalysis.analysis.dielectric.DielectricConstant.results": [[7, 2, 1, "", "M"], [7, 2, 1, "", "M2"], [7, 2, 1, "", "eps"], [7, 2, 1, "", "eps_mean"], [7, 2, 1, "", "fluct"]], "MDAnalysis.analysis.diffusionmap": [[8, 1, 1, "", "DiffusionMap"], [8, 1, 1, "", "DistanceMatrix"]], "MDAnalysis.analysis.diffusionmap.DiffusionMap": [[8, 2, 1, "", "eigenvalues"], [8, 4, 1, "", "run"], [8, 4, 1, "", "transform"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix": [[8, 2, 1, "", "atoms"], [8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results": [[8, 2, 1, "", "dist_matrix"]], "MDAnalysis.analysis.dihedrals": [[9, 1, 1, "", "Dihedral"], [9, 1, 1, "", "Janin"], [9, 1, 1, "", "Ramachandran"]], "MDAnalysis.analysis.dihedrals.Dihedral": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Dihedral.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Janin": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Janin.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.dihedrals.Ramachandran": [[9, 2, 1, "", "angles"], [9, 4, 1, "", "plot"], [9, 4, 1, "", "run"]], "MDAnalysis.analysis.dihedrals.Ramachandran.results": [[9, 2, 1, "", "angles"]], "MDAnalysis.analysis.distances": [[10, 3, 1, "", "between"], [10, 3, 1, "", "contact_matrix"], [10, 3, 1, "", "dist"], [10, 3, 1, "", "distance_array"], [10, 3, 1, "", "self_distance_array"]], "MDAnalysis.analysis.encore": [[12, 0, 0, "-", "bootstrap"], [14, 0, 0, "-", "confdistmatrix"], [15, 0, 0, "-", "covariance"], [17, 0, 0, "-", "similarity"], [18, 0, 0, "-", "utils"]], "MDAnalysis.analysis.encore.bootstrap": [[12, 3, 1, "", "bootstrapped_matrix"], [12, 3, 1, "", "get_distance_matrix_bootstrap_samples"], [12, 3, 1, "", "get_ensemble_bootstrap_samples"]], "MDAnalysis.analysis.encore.clustering": [[13, 0, 0, "-", "ClusterCollection"], [13, 0, 0, "-", "ClusteringMethod"], [13, 0, 0, "-", "affinityprop"], [13, 0, 0, "-", "cluster"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, 1, 1, "", "Cluster"], [13, 1, 1, "", "ClusterCollection"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster": [[13, 2, 1, "", "centroid"], [13, 2, 1, "", "elements"], [13, 2, 1, "", "id"], [13, 2, 1, "", "metadata"], [13, 2, 1, "", "size"]], "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection": [[13, 2, 1, "", "clusters"], [13, 4, 1, "", "get_centroids"], [13, 4, 1, "", "get_ids"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, 1, 1, "", "AffinityPropagation"], [13, 1, 1, "", "AffinityPropagationNative"], [13, 1, 1, "", "ClusteringMethod"], [13, 1, 1, "", "DBSCAN"], [13, 1, 1, "", "KMeans"], [13, 3, 1, "", "encode_centroid_info"]], "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans": [[13, 2, 1, "", "accepts_distance_matrix"]], "MDAnalysis.analysis.encore.clustering.affinityprop": [[13, 3, 1, "", "AffinityPropagation"]], "MDAnalysis.analysis.encore.clustering.cluster": [[13, 3, 1, "", "cluster"]], "MDAnalysis.analysis.encore.confdistmatrix": [[14, 3, 1, "", "conformational_distance_matrix"], [14, 3, 1, "", "get_distance_matrix"], [14, 3, 1, "", "set_rmsd_matrix_elements"]], "MDAnalysis.analysis.encore.covariance": [[15, 3, 1, "", "covariance_matrix"], [15, 3, 1, "", "ml_covariance_estimator"], [15, 3, 1, "", "shrinkage_covariance_estimator"]], "MDAnalysis.analysis.encore.cutils": [[18, 3, 1, "", "PureRMSD"]], "MDAnalysis.analysis.encore.dimensionality_reduction": [[16, 0, 0, "-", "DimensionalityReductionMethod"], [16, 0, 0, "-", "reduce_dimensionality"], [16, 0, 0, "-", "stochasticproxembed"]], "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod": [[16, 1, 1, "", "DimensionalityReductionMethod"], [16, 1, 1, "", "PrincipalComponentAnalysis"], [16, 1, 1, "", "StochasticProximityEmbeddingNative"]], "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, 3, 1, "", "reduce_dimensionality"]], "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, 3, 1, "", "StochasticProximityEmbedding"]], "MDAnalysis.analysis.encore.similarity": [[17, 3, 1, "", "ces"], [17, 3, 1, "", "ces_convergence"], [17, 3, 1, "", "clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_clustering_ensemble_similarity"], [17, 3, 1, "", "cumulative_gen_kde_pdfs"], [17, 3, 1, "", "dimred_ensemble_similarity"], [17, 3, 1, "", "discrete_jensen_shannon_divergence"], [17, 3, 1, "", "discrete_kullback_leibler_divergence"], [17, 3, 1, "", "dres"], [17, 3, 1, "", "dres_convergence"], [17, 3, 1, "", "gen_kde_pdfs"], [17, 3, 1, "", "harmonic_ensemble_similarity"], [17, 3, 1, "", "hes"], [17, 3, 1, "", "prepare_ensembles_for_convergence_increasing_window"], [17, 3, 1, "", "write_output"]], "MDAnalysis.analysis.encore.utils": [[18, 1, 1, "", "ParallelCalculation"], [18, 1, 1, "", "TriangularMatrix"], [18, 3, 1, "", "merge_universes"], [18, 3, 1, "", "trm_indices"], [18, 3, 1, "", "trm_indices_diag"], [18, 3, 1, "", "trm_indices_nodiag"]], "MDAnalysis.analysis.encore.utils.ParallelCalculation": [[18, 2, 1, "", "args"], [18, 2, 1, "", "function"], [18, 2, 1, "", "kwargs"], [18, 2, 1, "", "n_jobs"], [18, 2, 1, "", "nruns"], [18, 4, 1, "", "run"], [18, 4, 1, "", "worker"]], "MDAnalysis.analysis.encore.utils.TriangularMatrix": [[18, 4, 1, "", "as_array"], [18, 4, 1, "", "loadz"], [18, 4, 1, "", "savez"]], "MDAnalysis.analysis.gnm": [[19, 1, 1, "", "GNMAnalysis"], [19, 1, 1, "", "closeContactGNMAnalysis"], [19, 3, 1, "", "generate_grid"], [19, 3, 1, "", "order_list"]], "MDAnalysis.analysis.gnm.GNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.GNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis": [[19, 4, 1, "", "generate_kirchoff"]], "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results": [[19, 2, 1, "", "eigenvalues"], [19, 2, 1, "", "eigenvectors"], [19, 2, 1, "", "times"]], "MDAnalysis.analysis.hbonds": [[21, 0, 0, "-", "hbond_autocorrel"]], "MDAnalysis.analysis.hole2": [[23, 1, 1, "", "HoleAnalysis"], [23, 3, 1, "", "hole"], [23, 0, 0, "-", "templates"], [23, 0, 0, "-", "utils"]], "MDAnalysis.analysis.hole2.HoleAnalysis": [[23, 4, 1, "", "bin_radii"], [23, 4, 1, "", "create_vmd_surface"], [23, 4, 1, "", "delete_temporary_files"], [23, 4, 1, "", "gather"], [23, 4, 1, "", "guess_cpoint"], [23, 4, 1, "", "histogram_radii"], [23, 4, 1, "", "min_radius"], [23, 2, 1, "", "outfiles"], [23, 4, 1, "", "over_order_parameters"], [23, 4, 1, "", "plot"], [23, 4, 1, "", "plot3D"], [23, 4, 1, "", "plot3D_order_parameters"], [23, 4, 1, "", "plot_mean_profile"], [23, 4, 1, "", "plot_order_parameters"], [23, 2, 1, "", "profiles"], [23, 4, 1, "", "run"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.HoleAnalysis.results": [[23, 2, 1, "", "outfiles"], [23, 2, 1, "", "profiles"], [23, 2, 1, "", "sphpdbs"]], "MDAnalysis.analysis.hole2.templates": [[23, 6, 1, "", "SIMPLE2_RAD"]], "MDAnalysis.analysis.hole2.utils": [[23, 3, 1, "", "check_and_fix_long_filename"], [23, 3, 1, "", "collect_hole"], [23, 3, 1, "", "create_vmd_surface"], [23, 3, 1, "", "run_hole"], [23, 3, 1, "", "write_simplerad2"]], "MDAnalysis.analysis.hydrogenbonds": [[24, 0, 0, "-", "hbond_analysis"], [20, 0, 0, "-", "hbond_autocorrel"], [38, 0, 0, "-", "wbridge_analysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, 1, 1, "", "HydrogenBondAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis": [[24, 4, 1, "", "count_by_ids"], [24, 4, 1, "", "count_by_time"], [24, 4, 1, "", "count_by_type"], [24, 4, 1, "", "guess_acceptors"], [24, 4, 1, "", "guess_donors"], [24, 4, 1, "", "guess_hydrogens"], [24, 2, 1, "", "hbonds"], [24, 4, 1, "", "lifetime"]], "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results": [[24, 2, 1, "", "hbonds"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, 1, 1, "", "HydrogenBondAutoCorrel"], [20, 3, 1, "", "find_hydrogen_donors"]], "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel": [[20, 4, 1, "", "run"], [20, 4, 1, "", "solve"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, 1, 1, "", "WaterBridgeAnalysis"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis": [[38, 2, 1, "", "DEFAULT_ACCEPTORS"], [38, 2, 1, "", "DEFAULT_DONORS"], [38, 4, 1, "", "count_by_time"], [38, 4, 1, "", "count_by_type"], [38, 4, 1, "", "generate_table"], [38, 2, 1, "", "network"], [38, 2, 1, "", "r_cov"], [38, 2, 1, "", "table"], [38, 2, 1, "", "timeseries"], [38, 2, 1, "", "timesteps"], [38, 4, 1, "", "timesteps_by_type"]], "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results": [[38, 2, 1, "", "network"], [38, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.leaflet": [[25, 1, 1, "", "LeafletFinder"], [25, 3, 1, "", "optimize_cutoff"]], "MDAnalysis.analysis.leaflet.LeafletFinder": [[25, 4, 1, "", "group"], [25, 4, 1, "", "groups"], [25, 4, 1, "", "groups_iter"], [25, 4, 1, "", "sizes"], [25, 4, 1, "", "update"], [25, 4, 1, "", "write_selection"]], "MDAnalysis.analysis.legacy": [[26, 0, 0, "-", "x3dna"]], "MDAnalysis.analysis.legacy.x3dna": [[26, 7, 1, "", "ApplicationError"], [26, 1, 1, "", "X3DNA"], [26, 1, 1, "", "X3DNAtraj"]], "MDAnalysis.analysis.legacy.x3dna.X3DNA": [[26, 4, 1, "", "collect"], [26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj": [[26, 4, 1, "", "mean"], [26, 4, 1, "", "mean_std"], [26, 4, 1, "", "plot"], [26, 2, 1, "", "profiles"], [26, 4, 1, "", "run"], [26, 4, 1, "", "run_x3dna"], [26, 4, 1, "", "save"], [26, 4, 1, "", "sorted_profiles_iter"], [26, 4, 1, "", "std"]], "MDAnalysis.analysis.lineardensity": [[28, 1, 1, "", "LinearDensity"], [28, 1, 1, "", "Results"]], "MDAnalysis.analysis.lineardensity.LinearDensity": [[28, 2, 1, "", "Note"]], "MDAnalysis.analysis.lineardensity.LinearDensity.results.x": [[28, 2, 1, "", "char"], [28, 2, 1, "", "char_std"], [28, 2, 1, "", "charge_density"], [28, 2, 1, "", "charge_density_stddev"], [28, 2, 1, "", "dim"], [28, 2, 1, "", "hist_bin_edges"], [28, 2, 1, "", "mass_density"], [28, 2, 1, "", "mass_density_stddev"], [28, 2, 1, "", "pos"], [28, 2, 1, "", "pos_std"], [28, 2, 1, "", "slice_volume"]], "MDAnalysis.analysis.msd": [[29, 1, 1, "", "EinsteinMSD"]], "MDAnalysis.analysis.msd.EinsteinMSD": [[29, 2, 1, "", "ag"], [29, 2, 1, "", "dim_fac"], [29, 2, 1, "", "n_frames"], [29, 2, 1, "", "n_particles"], [29, 4, 1, "", "run"]], "MDAnalysis.analysis.msd.EinsteinMSD.results": [[29, 2, 1, "", "msds_by_particle"], [29, 2, 1, "", "timeseries"]], "MDAnalysis.analysis.nucleicacids": [[30, 1, 1, "", "NucPairDist"], [30, 1, 1, "", "WatsonCrickDist"]], "MDAnalysis.analysis.nucleicacids.NucPairDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.NucPairDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results": [[30, 2, 1, "", "pair_distances"]], "MDAnalysis.analysis.nucleicacids.WatsonCrickDist": [[30, 4, 1, "", "run"], [30, 2, 1, "", "times"]], "MDAnalysis.analysis.nuclinfo": [[31, 3, 1, "", "hydroxyl"], [31, 3, 1, "", "major_pair"], [31, 3, 1, "", "minor_pair"], [31, 3, 1, "", "phase_as"], [31, 3, 1, "", "phase_cp"], [31, 3, 1, "", "pseudo_dihe_baseflip"], [31, 3, 1, "", "tors"], [31, 3, 1, "", "tors_alpha"], [31, 3, 1, "", "tors_beta"], [31, 3, 1, "", "tors_chi"], [31, 3, 1, "", "tors_delta"], [31, 3, 1, "", "tors_eps"], [31, 3, 1, "", "tors_gamma"], [31, 3, 1, "", "tors_zeta"], [31, 3, 1, "", "wc_pair"]], "MDAnalysis.analysis.pca": [[32, 1, 1, "", "PCA"], [32, 3, 1, "", "cosine_content"], [32, 3, 1, "", "cumulative_overlap"], [32, 3, 1, "", "rmsip"]], "MDAnalysis.analysis.pca.PCA": [[32, 2, 1, "", "cumulated_variance"], [32, 4, 1, "", "cumulative_overlap"], [32, 2, 1, "", "p_components"], [32, 4, 1, "", "project_single_frame"], [32, 4, 1, "", "rmsip"], [32, 4, 1, "", "run"], [32, 4, 1, "", "transform"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.pca.PCA.results": [[32, 2, 1, "", "cumulated_variance"], [32, 2, 1, "", "p_components"], [32, 2, 1, "", "variance"]], "MDAnalysis.analysis.polymer": [[33, 1, 1, "", "PersistenceLength"], [33, 3, 1, "", "fit_exponential_decay"], [33, 3, 1, "", "sort_backbone"]], "MDAnalysis.analysis.polymer.PersistenceLength": [[33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 4, 1, "", "plot"]], "MDAnalysis.analysis.polymer.PersistenceLength.results": [[33, 2, 1, "", "bond_autocorrelation"], [33, 2, 1, "", "fit"], [33, 2, 1, "", "lb"], [33, 2, 1, "", "lp"], [33, 2, 1, "", "x"]], "MDAnalysis.analysis.psa": [[34, 1, 1, "", "PSAPair"], [34, 1, 1, "", "PSAnalysis"], [34, 1, 1, "", "Path"], [34, 3, 1, "", "discrete_frechet"], [34, 3, 1, "", "dist_mat_to_vec"], [34, 3, 1, "", "get_coord_axes"], [34, 3, 1, "", "get_msd_matrix"], [34, 3, 1, "", "get_path_metric_func"], [34, 3, 1, "", "hausdorff"], [34, 3, 1, "", "hausdorff_avg"], [34, 3, 1, "", "hausdorff_neighbors"], [34, 3, 1, "", "hausdorff_wavg"], [34, 3, 1, "", "sqnorm"]], "MDAnalysis.analysis.psa.PSAPair": [[34, 2, 1, "", "hausdorff_pair"], [34, 2, 1, "", "matrix_id"], [34, 2, 1, "", "nearest_neighbors"], [34, 2, 1, "", "npaths"], [34, 2, 1, "", "pair_id"]], "MDAnalysis.analysis.psa.PSAnalysis": [[34, 2, 1, "", "D"], [34, 4, 1, "", "cluster"], [34, 4, 1, "", "generate_paths"], [34, 4, 1, "", "get_num_atoms"], [34, 4, 1, "", "get_num_paths"], [34, 4, 1, "", "get_pairwise_distances"], [34, 4, 1, "", "get_paths"], [34, 5, 1, "", "hausdorff_pairs"], [34, 4, 1, "", "load"], [34, 5, 1, "", "nearest_neighbors"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "paths"], [34, 4, 1, "", "plot"], [34, 4, 1, "", "plot_annotated_heatmap"], [34, 4, 1, "", "plot_nearest_neighbors"], [34, 5, 1, "", "psa_pairs"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 4, 1, "", "run_pairs_analysis"], [34, 4, 1, "", "save_paths"], [34, 2, 1, "", "select"], [34, 2, 1, "", "u_reference"], [34, 2, 1, "", "universes"]], "MDAnalysis.analysis.psa.Path": [[34, 4, 1, "", "fit_to_reference"], [34, 4, 1, "", "get_num_atoms"], [34, 2, 1, "", "path"], [34, 2, 1, "", "path_select"], [34, 2, 1, "", "ref_frame"], [34, 4, 1, "", "run"], [34, 2, 1, "", "select"], [34, 4, 1, "", "to_path"], [34, 2, 1, "", "u_fitted"], [34, 2, 1, "", "u_original"], [34, 2, 1, "", "u_reference"]], "MDAnalysis.analysis.rdf": [[35, 1, 1, "", "InterRDF"], [35, 1, 1, "", "InterRDF_s"]], "MDAnalysis.analysis.rdf.InterRDF": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 4, 1, "", "get_cdf"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rdf.InterRDF_s.results": [[35, 2, 1, "", "bins"], [35, 2, 1, "", "cdf"], [35, 2, 1, "", "count"], [35, 2, 1, "", "edges"], [35, 2, 1, "", "rdf"]], "MDAnalysis.analysis.rms": [[36, 1, 1, "", "RMSD"], [36, 1, 1, "", "RMSF"], [36, 3, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD.results": [[36, 2, 1, "", "rmsd"]], "MDAnalysis.analysis.rms.RMSD": [[36, 2, 1, "", "rmsd"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.rms.RMSF.results": [[36, 2, 1, "", "rmsf"]], "MDAnalysis.analysis.rms.RMSF": [[36, 2, 1, "", "rmsf"], [36, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics": [[37, 1, 1, "", "AngularDistribution"], [37, 1, 1, "", "MeanSquareDisplacement"], [37, 1, 1, "", "SurvivalProbability"], [37, 1, 1, "", "WaterOrientationalRelaxation"]], "MDAnalysis.analysis.waterdynamics.AngularDistribution": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.SurvivalProbability": [[37, 4, 1, "", "run"]], "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation": [[37, 4, 1, "", "lg2"], [37, 4, 1, "", "run"]], "MDAnalysis.auxiliary": [[40, 0, 0, "-", "EDR"], [41, 0, 0, "-", "XVG"], [44, 0, 0, "-", "__init__"], [42, 0, 0, "-", "base"], [43, 0, 0, "-", "core"]], "MDAnalysis.auxiliary.EDR": [[40, 1, 1, "", "EDRReader"], [40, 1, 1, "", "EDRStep"]], "MDAnalysis.auxiliary.EDR.EDRReader": [[40, 2, 1, "", "_auxdata"], [40, 2, 1, "", "_n_steps"], [40, 2, 1, "", "data_dict"], [40, 4, 1, "", "get_data"], [40, 4, 1, "", "read_all_times"], [40, 2, 1, "", "terms"], [40, 2, 1, "", "unit_dict"]], "MDAnalysis.auxiliary.XVG": [[41, 1, 1, "", "XVGFileReader"], [41, 1, 1, "", "XVGReader"], [41, 1, 1, "", "XVGStep"], [41, 3, 1, "", "uncomment"]], "MDAnalysis.auxiliary.XVG.XVGFileReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.XVG.XVGReader": [[41, 4, 1, "", "read_all_times"]], "MDAnalysis.auxiliary.base": [[42, 1, 1, "", "AuxFileReader"], [42, 1, 1, "", "AuxReader"], [42, 1, 1, "", "AuxStep"]], "MDAnalysis.auxiliary.base.AuxFileReader": [[42, 2, 1, "", "auxfile"], [42, 4, 1, "", "close"]], "MDAnalysis.auxiliary.base.AuxReader": [[42, 4, 1, "", "attach_auxiliary"], [42, 2, 1, "", "auxstep"], [42, 4, 1, "", "calc_representative"], [42, 5, 1, "", "constant_dt"], [42, 4, 1, "", "copy"], [42, 5, 1, "", "data_selector"], [42, 5, 1, "", "dt"], [42, 2, 1, "", "frame_data"], [42, 2, 1, "", "frame_rep"], [42, 4, 1, "", "get_description"], [42, 5, 1, "", "initial_time"], [42, 4, 1, "", "move_to_ts"], [42, 5, 1, "", "n_steps"], [42, 4, 1, "", "next"], [42, 4, 1, "", "next_nonempty_frame"], [42, 4, 1, "", "read_ts"], [42, 5, 1, "", "represent_ts_as"], [42, 4, 1, "", "rewind"], [42, 5, 1, "", "step"], [42, 4, 1, "", "step_to_frame"], [42, 4, 1, "", "step_to_time"], [42, 5, 1, "", "time"], [42, 5, 1, "", "time_selector"], [42, 4, 1, "", "update_ts"]], "MDAnalysis.auxiliary.base.AuxStep": [[42, 5, 1, "", "data"], [42, 2, 1, "", "step"], [42, 5, 1, "", "time"]], "MDAnalysis.auxiliary.core": [[43, 3, 1, "", "auxreader"], [43, 3, 1, "", "get_auxreader_for"]], "MDAnalysis": [[46, 0, 0, "-", "converters"], [94, 0, 0, "-", "exceptions"], [110, 0, 0, "-", "lib"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"], [151, 0, 0, "-", "transformations"], [160, 0, 0, "-", "units"], [161, 0, 0, "-", "version"]], "MDAnalysis.converters": [[47, 0, 0, "-", "OpenMM"], [47, 0, 0, "-", "OpenMMParser"], [48, 0, 0, "-", "ParmEd"], [48, 0, 0, "-", "ParmEdParser"], [49, 0, 0, "-", "RDKit"], [49, 0, 0, "-", "RDKitParser"]], "MDAnalysis.converters.OpenMM": [[47, 1, 1, "", "OpenMMAppReader"], [47, 1, 1, "", "OpenMMSimulationReader"]], "MDAnalysis.converters.OpenMM.OpenMMAppReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMM.OpenMMSimulationReader": [[47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser": [[47, 1, 1, "", "OpenMMAppTopologyParser"], [47, 1, 1, "", "OpenMMTopologyParser"]], "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser": [[47, 4, 1, "", "close"], [47, 4, 1, "", "convert_forces_from_native"], [47, 4, 1, "", "convert_forces_to_native"], [47, 4, 1, "", "convert_pos_from_native"], [47, 4, 1, "", "convert_pos_to_native"], [47, 4, 1, "", "convert_time_from_native"], [47, 4, 1, "", "convert_time_to_native"], [47, 4, 1, "", "convert_velocities_from_native"], [47, 4, 1, "", "convert_velocities_to_native"], [47, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd": [[48, 1, 1, "", "ParmEdConverter"], [48, 1, 1, "", "ParmEdReader"]], "MDAnalysis.converters.ParmEd.ParmEdConverter": [[48, 4, 1, "", "convert"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEd.ParmEdReader": [[48, 2, 1, "", "units"]], "MDAnalysis.converters.ParmEdParser": [[48, 1, 1, "", "ParmEdParser"]], "MDAnalysis.converters.ParmEdParser.ParmEdParser": [[48, 4, 1, "", "close"], [48, 4, 1, "", "convert_forces_from_native"], [48, 4, 1, "", "convert_forces_to_native"], [48, 4, 1, "", "convert_pos_from_native"], [48, 4, 1, "", "convert_pos_to_native"], [48, 4, 1, "", "convert_time_from_native"], [48, 4, 1, "", "convert_time_to_native"], [48, 4, 1, "", "convert_velocities_from_native"], [48, 4, 1, "", "convert_velocities_to_native"], [48, 4, 1, "", "parse"], [48, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit": [[49, 1, 1, "", "RDKitConverter"], [49, 1, 1, "", "RDKitReader"], [49, 3, 1, "", "_infer_bo_and_charges"], [49, 3, 1, "", "_rebuild_conjugated_bonds"], [49, 3, 1, "", "_standardize_patterns"]], "MDAnalysis.converters.RDKit.RDKitConverter": [[49, 4, 1, "", "convert"], [49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKit.RDKitReader": [[49, 2, 1, "", "units"]], "MDAnalysis.converters.RDKitParser": [[49, 1, 1, "", "RDKitParser"]], "MDAnalysis.converters.RDKitParser.RDKitParser": [[49, 4, 1, "", "close"], [49, 4, 1, "", "convert_forces_from_native"], [49, 4, 1, "", "convert_forces_to_native"], [49, 4, 1, "", "convert_pos_from_native"], [49, 4, 1, "", "convert_pos_to_native"], [49, 4, 1, "", "convert_time_from_native"], [49, 4, 1, "", "convert_time_to_native"], [49, 4, 1, "", "convert_velocities_from_native"], [49, 4, 1, "", "convert_velocities_to_native"], [49, 4, 1, "", "parse"], [49, 2, 1, "", "units"]], "MDAnalysis.coordinates": [[50, 0, 0, "-", "CRD"], [51, 0, 0, "-", "DCD"], [52, 0, 0, "-", "DLPoly"], [53, 0, 0, "-", "DMS"], [54, 0, 0, "-", "FHIAIMS"], [55, 0, 0, "-", "GMS"], [56, 0, 0, "-", "GRO"], [57, 0, 0, "-", "GSD"], [58, 0, 0, "-", "H5MD"], [59, 0, 0, "-", "INPCRD"], [60, 0, 0, "-", "LAMMPS"], [61, 0, 0, "-", "MMTF"], [62, 0, 0, "-", "MOL2"], [63, 0, 0, "-", "NAMDBIN"], [64, 0, 0, "-", "PDB"], [65, 0, 0, "-", "PDBQT"], [66, 0, 0, "-", "PQR"], [67, 0, 0, "-", "TNG"], [68, 0, 0, "-", "TRJ"], [69, 0, 0, "-", "TRR"], [70, 0, 0, "-", "TRZ"], [71, 0, 0, "-", "TXYZ"], [72, 0, 0, "-", "XDR"], [73, 0, 0, "-", "XTC"], [74, 0, 0, "-", "XYZ"], [79, 0, 0, "-", "__init__"], [75, 0, 0, "-", "base"], [76, 0, 0, "-", "chain"], [77, 0, 0, "-", "chemfiles"], [78, 0, 0, "-", "core"], [80, 0, 0, "-", "memory"], [81, 0, 0, "-", "null"], [83, 0, 0, "-", "timestep"]], "MDAnalysis.coordinates.CRD": [[50, 1, 1, "", "CRDReader"], [50, 1, 1, "", "CRDWriter"]], "MDAnalysis.coordinates.CRD.CRDReader": [[50, 4, 1, "", "Writer"], [50, 2, 1, "", "units"]], "MDAnalysis.coordinates.CRD.CRDWriter": [[50, 2, 1, "", "units"], [50, 4, 1, "", "write"]], "MDAnalysis.coordinates.DCD": [[51, 1, 1, "", "DCDReader"], [51, 1, 1, "", "DCDWriter"]], "MDAnalysis.coordinates.DCD.DCDReader": [[51, 4, 1, "", "OtherWriter"], [51, 4, 1, "", "Writer"], [51, 4, 1, "", "add_auxiliary"], [51, 4, 1, "", "add_transformations"], [51, 5, 1, "", "aux_list"], [51, 4, 1, "", "check_slice_indices"], [51, 4, 1, "", "close"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "copy"], [51, 5, 1, "", "dimensions"], [51, 5, 1, "", "dt"], [51, 5, 1, "", "frame"], [51, 4, 1, "", "get_aux_attribute"], [51, 4, 1, "", "get_aux_descriptions"], [51, 4, 1, "", "iter_as_aux"], [51, 4, 1, "", "iter_auxiliary"], [51, 5, 1, "", "n_frames"], [51, 4, 1, "", "next"], [51, 4, 1, "", "next_as_aux"], [51, 4, 1, "", "parse_n_atoms"], [51, 4, 1, "", "remove_auxiliary"], [51, 4, 1, "", "rename_aux"], [51, 4, 1, "", "rewind"], [51, 4, 1, "", "set_aux_attribute"], [51, 5, 1, "", "time"], [51, 4, 1, "", "timeseries"], [51, 5, 1, "", "totaltime"], [51, 5, 1, "", "transformations"], [51, 2, 1, "", "units"]], "MDAnalysis.coordinates.DCD.DCDWriter": [[51, 4, 1, "", "close"], [51, 4, 1, "", "convert_dimensions_to_unitcell"], [51, 4, 1, "", "convert_forces_from_native"], [51, 4, 1, "", "convert_forces_to_native"], [51, 4, 1, "", "convert_pos_from_native"], [51, 4, 1, "", "convert_pos_to_native"], [51, 4, 1, "", "convert_time_from_native"], [51, 4, 1, "", "convert_time_to_native"], [51, 4, 1, "", "convert_velocities_from_native"], [51, 4, 1, "", "convert_velocities_to_native"], [51, 4, 1, "", "has_valid_coordinates"], [51, 2, 1, "", "units"], [51, 4, 1, "", "write"]], "MDAnalysis.coordinates.DLPoly": [[52, 1, 1, "", "ConfigReader"], [52, 1, 1, "", "HistoryReader"]], "MDAnalysis.coordinates.DLPoly.ConfigReader": [[52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DLPoly.HistoryReader": [[52, 4, 1, "", "close"], [52, 2, 1, "", "units"]], "MDAnalysis.coordinates.DMS": [[53, 1, 1, "", "DMSReader"]], "MDAnalysis.coordinates.DMS.DMSReader": [[53, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS": [[54, 1, 1, "", "FHIAIMSReader"], [54, 1, 1, "", "FHIAIMSWriter"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader": [[54, 4, 1, "", "OtherWriter"], [54, 4, 1, "", "Writer"], [54, 4, 1, "", "add_auxiliary"], [54, 4, 1, "", "add_transformations"], [54, 5, 1, "", "aux_list"], [54, 4, 1, "", "check_slice_indices"], [54, 4, 1, "", "close"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 4, 1, "", "copy"], [54, 5, 1, "", "dt"], [54, 5, 1, "", "frame"], [54, 4, 1, "", "get_aux_attribute"], [54, 4, 1, "", "get_aux_descriptions"], [54, 4, 1, "", "iter_as_aux"], [54, 4, 1, "", "iter_auxiliary"], [54, 4, 1, "", "next"], [54, 4, 1, "", "next_as_aux"], [54, 4, 1, "", "parse_n_atoms"], [54, 4, 1, "", "remove_auxiliary"], [54, 4, 1, "", "rename_aux"], [54, 4, 1, "", "rewind"], [54, 4, 1, "", "set_aux_attribute"], [54, 5, 1, "", "time"], [54, 4, 1, "", "timeseries"], [54, 5, 1, "", "totaltime"], [54, 5, 1, "", "transformations"], [54, 2, 1, "", "units"]], "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter": [[54, 4, 1, "", "close"], [54, 4, 1, "", "convert_dimensions_to_unitcell"], [54, 4, 1, "", "convert_forces_from_native"], [54, 4, 1, "", "convert_forces_to_native"], [54, 4, 1, "", "convert_pos_from_native"], [54, 4, 1, "", "convert_pos_to_native"], [54, 4, 1, "", "convert_time_from_native"], [54, 4, 1, "", "convert_time_to_native"], [54, 4, 1, "", "convert_velocities_from_native"], [54, 4, 1, "", "convert_velocities_to_native"], [54, 2, 1, "", "fmt"], [54, 4, 1, "", "has_valid_coordinates"], [54, 2, 1, "", "units"], [54, 4, 1, "", "write"]], "MDAnalysis.coordinates.GMS": [[55, 1, 1, "", "GMSReader"]], "MDAnalysis.coordinates.GMS.GMSReader": [[55, 4, 1, "", "close"], [55, 5, 1, "", "n_atoms"], [55, 5, 1, "", "runtyp"], [55, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO": [[56, 1, 1, "", "GROReader"], [56, 1, 1, "", "GROWriter"]], "MDAnalysis.coordinates.GRO.GROReader": [[56, 4, 1, "", "Writer"], [56, 2, 1, "", "units"]], "MDAnalysis.coordinates.GRO.GROWriter": [[56, 2, 1, "", "fmt"], [56, 2, 1, "", "units"], [56, 4, 1, "", "write"]], "MDAnalysis.coordinates.GSD": [[57, 1, 1, "", "GSDPicklable"], [57, 1, 1, "", "GSDReader"], [57, 3, 1, "", "gsd_pickle_open"]], "MDAnalysis.coordinates.GSD.GSDReader": [[57, 4, 1, "", "OtherWriter"], [57, 4, 1, "", "Writer"], [57, 4, 1, "", "add_auxiliary"], [57, 4, 1, "", "add_transformations"], [57, 5, 1, "", "aux_list"], [57, 4, 1, "", "check_slice_indices"], [57, 4, 1, "", "close"], [57, 4, 1, "", "convert_forces_from_native"], [57, 4, 1, "", "convert_forces_to_native"], [57, 4, 1, "", "convert_pos_from_native"], [57, 4, 1, "", "convert_pos_to_native"], [57, 4, 1, "", "convert_time_from_native"], [57, 4, 1, "", "convert_time_to_native"], [57, 4, 1, "", "convert_velocities_from_native"], [57, 4, 1, "", "convert_velocities_to_native"], [57, 4, 1, "", "copy"], [57, 5, 1, "", "dt"], [57, 5, 1, "", "frame"], [57, 4, 1, "", "get_aux_attribute"], [57, 4, 1, "", "get_aux_descriptions"], [57, 4, 1, "", "iter_as_aux"], [57, 4, 1, "", "iter_auxiliary"], [57, 5, 1, "", "n_frames"], [57, 4, 1, "", "next"], [57, 4, 1, "", "next_as_aux"], [57, 4, 1, "", "open_trajectory"], [57, 4, 1, "", "parse_n_atoms"], [57, 4, 1, "", "remove_auxiliary"], [57, 4, 1, "", "rename_aux"], [57, 4, 1, "", "rewind"], [57, 4, 1, "", "set_aux_attribute"], [57, 5, 1, "", "time"], [57, 4, 1, "", "timeseries"], [57, 5, 1, "", "totaltime"], [57, 5, 1, "", "transformations"], [57, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD": [[58, 1, 1, "", "H5MDReader"], [58, 1, 1, "", "H5MDWriter"], [58, 1, 1, "", "H5PYPicklable"]], "MDAnalysis.coordinates.H5MD.H5MDReader": [[58, 4, 1, "", "OtherWriter"], [58, 4, 1, "", "Writer"], [58, 4, 1, "", "_reopen"], [58, 4, 1, "", "add_auxiliary"], [58, 4, 1, "", "add_transformations"], [58, 5, 1, "", "aux_list"], [58, 4, 1, "", "check_slice_indices"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 4, 1, "", "copy"], [58, 5, 1, "", "dt"], [58, 5, 1, "", "frame"], [58, 4, 1, "", "get_aux_attribute"], [58, 4, 1, "", "get_aux_descriptions"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 5, 1, "", "has_velocities"], [58, 4, 1, "", "iter_as_aux"], [58, 4, 1, "", "iter_auxiliary"], [58, 5, 1, "", "n_frames"], [58, 4, 1, "", "next"], [58, 4, 1, "", "next_as_aux"], [58, 4, 1, "", "open_trajectory"], [58, 4, 1, "", "parse_n_atoms"], [58, 4, 1, "", "remove_auxiliary"], [58, 4, 1, "", "rename_aux"], [58, 4, 1, "", "rewind"], [58, 4, 1, "", "set_aux_attribute"], [58, 5, 1, "", "time"], [58, 4, 1, "", "timeseries"], [58, 5, 1, "", "totaltime"], [58, 5, 1, "", "transformations"], [58, 2, 1, "", "units"]], "MDAnalysis.coordinates.H5MD.H5MDWriter": [[58, 2, 1, "", "H5MD_VERSION"], [58, 4, 1, "", "close"], [58, 4, 1, "", "convert_dimensions_to_unitcell"], [58, 4, 1, "", "convert_forces_from_native"], [58, 4, 1, "", "convert_forces_to_native"], [58, 4, 1, "", "convert_pos_from_native"], [58, 4, 1, "", "convert_pos_to_native"], [58, 4, 1, "", "convert_time_from_native"], [58, 4, 1, "", "convert_time_to_native"], [58, 4, 1, "", "convert_velocities_from_native"], [58, 4, 1, "", "convert_velocities_to_native"], [58, 2, 1, "", "data_blacklist"], [58, 5, 1, "", "has_forces"], [58, 5, 1, "", "has_positions"], [58, 4, 1, "", "has_valid_coordinates"], [58, 5, 1, "", "has_velocities"], [58, 2, 1, "", "units"], [58, 4, 1, "", "write"]], "MDAnalysis.coordinates.INPCRD": [[59, 1, 1, "", "INPReader"]], "MDAnalysis.coordinates.INPCRD.INPReader": [[59, 4, 1, "", "parse_n_atoms"], [59, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS": [[60, 1, 1, "", "DATAReader"], [60, 1, 1, "", "DATAWriter"], [60, 1, 1, "", "DCDReader"], [60, 1, 1, "", "DCDWriter"], [60, 1, 1, "", "DumpReader"]], "MDAnalysis.coordinates.LAMMPS.DATAReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DATAWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DCDReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dimensions"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 5, 1, "", "n_frames"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.LAMMPS.DCDWriter": [[60, 4, 1, "", "close"], [60, 4, 1, "", "convert_dimensions_to_unitcell"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "has_valid_coordinates"], [60, 2, 1, "", "units"], [60, 4, 1, "", "write"]], "MDAnalysis.coordinates.LAMMPS.DumpReader": [[60, 4, 1, "", "OtherWriter"], [60, 4, 1, "", "Writer"], [60, 4, 1, "", "add_auxiliary"], [60, 4, 1, "", "add_transformations"], [60, 5, 1, "", "aux_list"], [60, 4, 1, "", "check_slice_indices"], [60, 4, 1, "", "close"], [60, 4, 1, "", "convert_forces_from_native"], [60, 4, 1, "", "convert_forces_to_native"], [60, 4, 1, "", "convert_pos_from_native"], [60, 4, 1, "", "convert_pos_to_native"], [60, 4, 1, "", "convert_time_from_native"], [60, 4, 1, "", "convert_time_to_native"], [60, 4, 1, "", "convert_velocities_from_native"], [60, 4, 1, "", "convert_velocities_to_native"], [60, 4, 1, "", "copy"], [60, 5, 1, "", "dt"], [60, 5, 1, "", "frame"], [60, 4, 1, "", "get_aux_attribute"], [60, 4, 1, "", "get_aux_descriptions"], [60, 4, 1, "", "iter_as_aux"], [60, 4, 1, "", "iter_auxiliary"], [60, 4, 1, "", "next"], [60, 4, 1, "", "next_as_aux"], [60, 4, 1, "", "parse_n_atoms"], [60, 4, 1, "", "remove_auxiliary"], [60, 4, 1, "", "rename_aux"], [60, 4, 1, "", "rewind"], [60, 4, 1, "", "set_aux_attribute"], [60, 5, 1, "", "time"], [60, 4, 1, "", "timeseries"], [60, 5, 1, "", "totaltime"], [60, 5, 1, "", "transformations"], [60, 2, 1, "", "units"]], "MDAnalysis.coordinates.MMTF": [[61, 1, 1, "", "MMTFReader"], [61, 3, 1, "", "fetch_mmtf"]], "MDAnalysis.coordinates.MOL2": [[62, 1, 1, "", "MOL2Reader"], [62, 1, 1, "", "MOL2Writer"]], "MDAnalysis.coordinates.MOL2.MOL2Reader": [[62, 2, 1, "", "units"]], "MDAnalysis.coordinates.MOL2.MOL2Writer": [[62, 4, 1, "", "close"], [62, 4, 1, "", "encode_block"], [62, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN": [[63, 1, 1, "", "NAMDBINReader"], [63, 1, 1, "", "NAMDBINWriter"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader": [[63, 4, 1, "", "Writer"], [63, 4, 1, "", "parse_n_atoms"], [63, 2, 1, "", "units"]], "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter": [[63, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB": [[64, 1, 1, "", "ExtendedPDBReader"], [64, 1, 1, "", "MultiPDBWriter"], [64, 1, 1, "", "PDBReader"], [64, 1, 1, "", "PDBWriter"]], "MDAnalysis.coordinates.PDB.ExtendedPDBReader": [[64, 4, 1, "", "OtherWriter"], [64, 4, 1, "", "Writer"], [64, 4, 1, "", "add_auxiliary"], [64, 4, 1, "", "add_transformations"], [64, 5, 1, "", "aux_list"], [64, 4, 1, "", "check_slice_indices"], [64, 4, 1, "", "close"], [64, 4, 1, "", "convert_forces_from_native"], [64, 4, 1, "", "convert_forces_to_native"], [64, 4, 1, "", "convert_pos_from_native"], [64, 4, 1, "", "convert_pos_to_native"], [64, 4, 1, "", "convert_time_from_native"], [64, 4, 1, "", "convert_time_to_native"], [64, 4, 1, "", "convert_velocities_from_native"], [64, 4, 1, "", "convert_velocities_to_native"], [64, 4, 1, "", "copy"], [64, 5, 1, "", "dt"], [64, 5, 1, "", "frame"], [64, 4, 1, "", "get_aux_attribute"], [64, 4, 1, "", "get_aux_descriptions"], [64, 4, 1, "", "iter_as_aux"], [64, 4, 1, "", "iter_auxiliary"], [64, 4, 1, "", "next"], [64, 4, 1, "", "next_as_aux"], [64, 4, 1, "", "parse_n_atoms"], [64, 4, 1, "", "remove_auxiliary"], [64, 4, 1, "", "rename_aux"], [64, 4, 1, "", "rewind"], [64, 4, 1, "", "set_aux_attribute"], [64, 5, 1, "", "time"], [64, 4, 1, "", "timeseries"], [64, 5, 1, "", "totaltime"], [64, 5, 1, "", "transformations"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBReader": [[64, 4, 1, "", "Writer"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDB.PDBWriter": [[64, 4, 1, "", "CONECT"], [64, 4, 1, "", "CRYST1"], [64, 4, 1, "", "END"], [64, 4, 1, "", "ENDMDL"], [64, 4, 1, "", "HEADER"], [64, 4, 1, "", "MODEL"], [64, 4, 1, "", "REMARK"], [64, 4, 1, "", "TITLE"], [64, 4, 1, "", "_check_pdb_coordinates"], [64, 4, 1, "", "_update_frame"], [64, 4, 1, "", "_write_pdb_bonds"], [64, 4, 1, "", "_write_timestep"], [64, 4, 1, "", "close"], [64, 2, 1, "", "units"], [64, 4, 1, "", "write"], [64, 4, 1, "", "write_all_timesteps"]], "MDAnalysis.coordinates.PDBQT": [[65, 1, 1, "", "PDBQTReader"], [65, 1, 1, "", "PDBQTWriter"]], "MDAnalysis.coordinates.PDBQT.PDBQTReader": [[65, 4, 1, "", "Writer"], [65, 2, 1, "", "units"]], "MDAnalysis.coordinates.PDBQT.PDBQTWriter": [[65, 4, 1, "", "close"], [65, 2, 1, "", "units"], [65, 4, 1, "", "write"]], "MDAnalysis.coordinates.PQR": [[66, 1, 1, "", "PQRReader"], [66, 1, 1, "", "PQRWriter"]], "MDAnalysis.coordinates.PQR.PQRReader": [[66, 4, 1, "", "Writer"], [66, 2, 1, "", "units"]], "MDAnalysis.coordinates.PQR.PQRWriter": [[66, 2, 1, "", "units"], [66, 4, 1, "", "write"]], "MDAnalysis.coordinates.TNG": [[67, 1, 1, "", "TNGReader"]], "MDAnalysis.coordinates.TNG.TNGReader": [[67, 4, 1, "", "Writer"], [67, 5, 1, "", "additional_blocks"], [67, 5, 1, "", "blocks"], [67, 4, 1, "", "close"], [67, 5, 1, "", "n_frames"], [67, 4, 1, "", "parse_n_atoms"], [67, 5, 1, "", "special_blocks"], [67, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ": [[68, 1, 1, "", "NCDFPicklable"], [68, 1, 1, "", "NCDFReader"], [68, 1, 1, "", "NCDFWriter"], [68, 1, 1, "", "TRJReader"]], "MDAnalysis.coordinates.TRJ.NCDFReader": [[68, 4, 1, "", "Writer"], [68, 4, 1, "", "close"], [68, 4, 1, "", "parse_n_atoms"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.NCDFWriter": [[68, 4, 1, "", "close"], [68, 4, 1, "", "is_periodic"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRJ.TRJReader": [[68, 4, 1, "", "close"], [68, 5, 1, "", "n_frames"], [68, 4, 1, "", "open_trajectory"], [68, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR": [[69, 1, 1, "", "TRRReader"], [69, 1, 1, "", "TRRWriter"]], "MDAnalysis.coordinates.TRR.TRRReader": [[69, 4, 1, "", "OtherWriter"], [69, 4, 1, "", "Writer"], [69, 4, 1, "", "add_auxiliary"], [69, 4, 1, "", "add_transformations"], [69, 5, 1, "", "aux_list"], [69, 4, 1, "", "check_slice_indices"], [69, 4, 1, "", "close"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "copy"], [69, 5, 1, "", "dt"], [69, 5, 1, "", "frame"], [69, 4, 1, "", "get_aux_attribute"], [69, 4, 1, "", "get_aux_descriptions"], [69, 4, 1, "", "iter_as_aux"], [69, 4, 1, "", "iter_auxiliary"], [69, 5, 1, "", "n_frames"], [69, 4, 1, "", "next"], [69, 4, 1, "", "next_as_aux"], [69, 4, 1, "", "parse_n_atoms"], [69, 4, 1, "", "remove_auxiliary"], [69, 4, 1, "", "rename_aux"], [69, 4, 1, "", "rewind"], [69, 4, 1, "", "set_aux_attribute"], [69, 5, 1, "", "time"], [69, 4, 1, "", "timeseries"], [69, 5, 1, "", "totaltime"], [69, 5, 1, "", "transformations"], [69, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRR.TRRWriter": [[69, 4, 1, "", "close"], [69, 4, 1, "", "convert_dimensions_to_unitcell"], [69, 4, 1, "", "convert_forces_from_native"], [69, 4, 1, "", "convert_forces_to_native"], [69, 4, 1, "", "convert_pos_from_native"], [69, 4, 1, "", "convert_pos_to_native"], [69, 4, 1, "", "convert_time_from_native"], [69, 4, 1, "", "convert_time_to_native"], [69, 4, 1, "", "convert_velocities_from_native"], [69, 4, 1, "", "convert_velocities_to_native"], [69, 4, 1, "", "has_valid_coordinates"], [69, 2, 1, "", "units"], [69, 4, 1, "", "write"]], "MDAnalysis.coordinates.TRZ": [[70, 1, 1, "", "TRZReader"], [70, 1, 1, "", "TRZWriter"]], "MDAnalysis.coordinates.TRZ.TRZReader": [[70, 4, 1, "", "Writer"], [70, 4, 1, "", "close"], [70, 5, 1, "", "delta"], [70, 5, 1, "", "n_atoms"], [70, 5, 1, "", "n_frames"], [70, 4, 1, "", "open_trajectory"], [70, 5, 1, "", "skip_timestep"], [70, 2, 1, "", "ts"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TRZ.TRZWriter": [[70, 4, 1, "", "close"], [70, 2, 1, "", "units"]], "MDAnalysis.coordinates.TXYZ": [[71, 1, 1, "", "TXYZReader"]], "MDAnalysis.coordinates.TXYZ.TXYZReader": [[71, 4, 1, "", "OtherWriter"], [71, 4, 1, "", "Writer"], [71, 4, 1, "", "add_auxiliary"], [71, 4, 1, "", "add_transformations"], [71, 5, 1, "", "aux_list"], [71, 4, 1, "", "check_slice_indices"], [71, 4, 1, "", "close"], [71, 4, 1, "", "convert_forces_from_native"], [71, 4, 1, "", "convert_forces_to_native"], [71, 4, 1, "", "convert_pos_from_native"], [71, 4, 1, "", "convert_pos_to_native"], [71, 4, 1, "", "convert_time_from_native"], [71, 4, 1, "", "convert_time_to_native"], [71, 4, 1, "", "convert_velocities_from_native"], [71, 4, 1, "", "convert_velocities_to_native"], [71, 4, 1, "", "copy"], [71, 5, 1, "", "dt"], [71, 5, 1, "", "frame"], [71, 4, 1, "", "get_aux_attribute"], [71, 4, 1, "", "get_aux_descriptions"], [71, 4, 1, "", "iter_as_aux"], [71, 4, 1, "", "iter_auxiliary"], [71, 5, 1, "", "n_atoms"], [71, 4, 1, "", "next"], [71, 4, 1, "", "next_as_aux"], [71, 4, 1, "", "parse_n_atoms"], [71, 4, 1, "", "remove_auxiliary"], [71, 4, 1, "", "rename_aux"], [71, 4, 1, "", "rewind"], [71, 4, 1, "", "set_aux_attribute"], [71, 5, 1, "", "time"], [71, 4, 1, "", "timeseries"], [71, 5, 1, "", "totaltime"], [71, 5, 1, "", "transformations"], [71, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR": [[72, 1, 1, "", "XDRBaseReader"], [72, 1, 1, "", "XDRBaseWriter"], [72, 3, 1, "", "offsets_filename"], [72, 3, 1, "", "read_numpy_offsets"]], "MDAnalysis.coordinates.XDR.XDRBaseReader": [[72, 4, 1, "", "OtherWriter"], [72, 4, 1, "", "Writer"], [72, 4, 1, "", "add_auxiliary"], [72, 4, 1, "", "add_transformations"], [72, 5, 1, "", "aux_list"], [72, 4, 1, "", "check_slice_indices"], [72, 4, 1, "", "close"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "copy"], [72, 5, 1, "", "dt"], [72, 5, 1, "", "frame"], [72, 4, 1, "", "get_aux_attribute"], [72, 4, 1, "", "get_aux_descriptions"], [72, 4, 1, "", "iter_as_aux"], [72, 4, 1, "", "iter_auxiliary"], [72, 5, 1, "", "n_frames"], [72, 4, 1, "", "next"], [72, 4, 1, "", "next_as_aux"], [72, 4, 1, "", "parse_n_atoms"], [72, 4, 1, "", "remove_auxiliary"], [72, 4, 1, "", "rename_aux"], [72, 4, 1, "", "rewind"], [72, 4, 1, "", "set_aux_attribute"], [72, 5, 1, "", "time"], [72, 4, 1, "", "timeseries"], [72, 5, 1, "", "totaltime"], [72, 5, 1, "", "transformations"], [72, 2, 1, "", "units"]], "MDAnalysis.coordinates.XDR.XDRBaseWriter": [[72, 4, 1, "", "close"], [72, 4, 1, "", "convert_dimensions_to_unitcell"], [72, 4, 1, "", "convert_forces_from_native"], [72, 4, 1, "", "convert_forces_to_native"], [72, 4, 1, "", "convert_pos_from_native"], [72, 4, 1, "", "convert_pos_to_native"], [72, 4, 1, "", "convert_time_from_native"], [72, 4, 1, "", "convert_time_to_native"], [72, 4, 1, "", "convert_velocities_from_native"], [72, 4, 1, "", "convert_velocities_to_native"], [72, 4, 1, "", "has_valid_coordinates"], [72, 2, 1, "", "units"], [72, 4, 1, "", "write"]], "MDAnalysis.coordinates.XTC": [[73, 1, 1, "", "XTCReader"], [73, 1, 1, "", "XTCWriter"]], "MDAnalysis.coordinates.XTC.XTCReader": [[73, 4, 1, "", "OtherWriter"], [73, 4, 1, "", "Writer"], [73, 4, 1, "", "add_auxiliary"], [73, 4, 1, "", "add_transformations"], [73, 5, 1, "", "aux_list"], [73, 4, 1, "", "check_slice_indices"], [73, 4, 1, "", "close"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "copy"], [73, 5, 1, "", "dt"], [73, 5, 1, "", "frame"], [73, 4, 1, "", "get_aux_attribute"], [73, 4, 1, "", "get_aux_descriptions"], [73, 4, 1, "", "iter_as_aux"], [73, 4, 1, "", "iter_auxiliary"], [73, 5, 1, "", "n_frames"], [73, 4, 1, "", "next"], [73, 4, 1, "", "next_as_aux"], [73, 4, 1, "", "parse_n_atoms"], [73, 4, 1, "", "remove_auxiliary"], [73, 4, 1, "", "rename_aux"], [73, 4, 1, "", "rewind"], [73, 4, 1, "", "set_aux_attribute"], [73, 5, 1, "", "time"], [73, 4, 1, "", "timeseries"], [73, 5, 1, "", "totaltime"], [73, 5, 1, "", "transformations"], [73, 2, 1, "", "units"]], "MDAnalysis.coordinates.XTC.XTCWriter": [[73, 4, 1, "", "close"], [73, 4, 1, "", "convert_dimensions_to_unitcell"], [73, 4, 1, "", "convert_forces_from_native"], [73, 4, 1, "", "convert_forces_to_native"], [73, 4, 1, "", "convert_pos_from_native"], [73, 4, 1, "", "convert_pos_to_native"], [73, 4, 1, "", "convert_time_from_native"], [73, 4, 1, "", "convert_time_to_native"], [73, 4, 1, "", "convert_velocities_from_native"], [73, 4, 1, "", "convert_velocities_to_native"], [73, 4, 1, "", "has_valid_coordinates"], [73, 2, 1, "", "units"], [73, 4, 1, "", "write"]], "MDAnalysis.coordinates.XYZ": [[74, 1, 1, "", "XYZReader"], [74, 1, 1, "", "XYZWriter"]], "MDAnalysis.coordinates.XYZ.XYZReader": [[74, 4, 1, "", "Writer"], [74, 4, 1, "", "close"], [74, 5, 1, "", "n_atoms"], [74, 2, 1, "", "units"]], "MDAnalysis.coordinates.XYZ.XYZWriter": [[74, 4, 1, "", "close"], [74, 2, 1, "", "units"], [74, 4, 1, "", "write"]], "MDAnalysis.coordinates.base": [[75, 1, 1, "", "ConverterBase"], [75, 1, 1, "", "FrameIteratorAll"], [75, 1, 1, "", "FrameIteratorBase"], [75, 1, 1, "", "FrameIteratorIndices"], [75, 1, 1, "", "FrameIteratorSliced"], [75, 1, 1, "", "IOBase"], [75, 1, 1, "", "ProtoReader"], [75, 1, 1, "", "ReaderBase"], [75, 1, 1, "", "SingleFrameReaderBase"], [75, 1, 1, "", "WriterBase"]], "MDAnalysis.coordinates.base.ConverterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.IOBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.ProtoReader": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"]], "MDAnalysis.coordinates.base.ReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.SingleFrameReaderBase": [[75, 4, 1, "", "OtherWriter"], [75, 4, 1, "", "Writer"], [75, 4, 1, "", "add_auxiliary"], [75, 4, 1, "", "add_transformations"], [75, 5, 1, "", "aux_list"], [75, 4, 1, "", "check_slice_indices"], [75, 4, 1, "", "close"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "copy"], [75, 5, 1, "", "dt"], [75, 5, 1, "", "frame"], [75, 4, 1, "", "get_aux_attribute"], [75, 4, 1, "", "get_aux_descriptions"], [75, 4, 1, "", "iter_as_aux"], [75, 4, 1, "", "iter_auxiliary"], [75, 4, 1, "", "next"], [75, 4, 1, "", "next_as_aux"], [75, 4, 1, "", "parse_n_atoms"], [75, 4, 1, "", "remove_auxiliary"], [75, 4, 1, "", "rename_aux"], [75, 4, 1, "", "rewind"], [75, 4, 1, "", "set_aux_attribute"], [75, 5, 1, "", "time"], [75, 4, 1, "", "timeseries"], [75, 5, 1, "", "totaltime"], [75, 5, 1, "", "transformations"], [75, 2, 1, "", "units"]], "MDAnalysis.coordinates.base.WriterBase": [[75, 4, 1, "", "close"], [75, 4, 1, "", "convert_dimensions_to_unitcell"], [75, 4, 1, "", "convert_forces_from_native"], [75, 4, 1, "", "convert_forces_to_native"], [75, 4, 1, "", "convert_pos_from_native"], [75, 4, 1, "", "convert_pos_to_native"], [75, 4, 1, "", "convert_time_from_native"], [75, 4, 1, "", "convert_time_to_native"], [75, 4, 1, "", "convert_velocities_from_native"], [75, 4, 1, "", "convert_velocities_to_native"], [75, 4, 1, "", "has_valid_coordinates"], [75, 2, 1, "", "units"], [75, 4, 1, "", "write"]], "MDAnalysis.coordinates.chain": [[76, 1, 1, "", "ChainReader"]], "MDAnalysis.coordinates.chain.ChainReader": [[76, 4, 1, "", "_apply"], [76, 4, 1, "", "_get"], [76, 4, 1, "", "_get_local_frame"], [76, 4, 1, "", "_get_same"], [76, 4, 1, "", "_read_frame"], [76, 5, 1, "", "active_reader"], [76, 4, 1, "", "close"], [76, 5, 1, "", "compressed"], [76, 4, 1, "", "convert_pos_from_native"], [76, 4, 1, "", "convert_pos_to_native"], [76, 4, 1, "", "convert_time_from_native"], [76, 4, 1, "", "convert_time_to_native"], [76, 5, 1, "", "frame"], [76, 5, 1, "", "periodic"], [76, 5, 1, "", "time"], [76, 5, 1, "", "units"]], "MDAnalysis.coordinates.chemfiles": [[77, 1, 1, "", "ChemfilesPicklable"], [77, 1, 1, "", "ChemfilesReader"], [77, 1, 1, "", "ChemfilesWriter"], [77, 6, 1, "", "MAX_CHEMFILES_VERSION"], [77, 6, 1, "", "MIN_CHEMFILES_VERSION"], [77, 3, 1, "", "check_chemfiles_version"]], "MDAnalysis.coordinates.core": [[78, 3, 1, "", "get_reader_for"], [78, 3, 1, "", "get_writer_for"], [78, 3, 1, "", "reader"], [78, 3, 1, "", "writer"]], "MDAnalysis.coordinates.memory": [[80, 1, 1, "", "MemoryReader"]], "MDAnalysis.coordinates.memory.MemoryReader": [[80, 4, 1, "", "OtherWriter"], [80, 4, 1, "", "Writer"], [80, 4, 1, "", "add_auxiliary"], [80, 4, 1, "", "add_transformations"], [80, 5, 1, "", "aux_list"], [80, 4, 1, "", "check_slice_indices"], [80, 4, 1, "", "close"], [80, 4, 1, "", "convert_forces_from_native"], [80, 4, 1, "", "convert_forces_to_native"], [80, 4, 1, "", "convert_pos_from_native"], [80, 4, 1, "", "convert_pos_to_native"], [80, 4, 1, "", "convert_time_from_native"], [80, 4, 1, "", "convert_time_to_native"], [80, 4, 1, "", "convert_velocities_from_native"], [80, 4, 1, "", "convert_velocities_to_native"], [80, 4, 1, "", "copy"], [80, 5, 1, "", "dt"], [80, 5, 1, "", "frame"], [80, 4, 1, "", "get_array"], [80, 4, 1, "", "get_aux_attribute"], [80, 4, 1, "", "get_aux_descriptions"], [80, 4, 1, "", "iter_as_aux"], [80, 4, 1, "", "iter_auxiliary"], [80, 4, 1, "", "next"], [80, 4, 1, "", "next_as_aux"], [80, 4, 1, "", "parse_n_atoms"], [80, 4, 1, "", "remove_auxiliary"], [80, 4, 1, "", "rename_aux"], [80, 4, 1, "", "rewind"], [80, 4, 1, "", "set_array"], [80, 4, 1, "", "set_aux_attribute"], [80, 5, 1, "", "time"], [80, 4, 1, "", "timeseries"], [80, 5, 1, "", "totaltime"], [80, 5, 1, "", "transformations"], [80, 2, 1, "", "units"]], "MDAnalysis.coordinates.null": [[81, 1, 1, "", "NullWriter"]], "MDAnalysis.coordinates.null.NullWriter": [[81, 2, 1, "", "units"]], "MDAnalysis.coordinates.timestep": [[83, 1, 1, "", "Timestep"]], "MDAnalysis.coordinates.timestep.Timestep": [[83, 4, 1, "", "__eq__"], [83, 4, 1, "", "__getitem__"], [83, 4, 1, "", "__init__"], [83, 4, 1, "", "__iter__"], [83, 2, 1, "", "_forces"], [83, 2, 1, "", "_pos"], [83, 2, 1, "", "_velocities"], [83, 4, 1, "", "copy"], [83, 4, 1, "", "copy_slice"], [83, 2, 1, "", "data"], [83, 2, 1, "", "dimensions"], [83, 2, 1, "", "dt"], [83, 2, 1, "", "dtype"], [83, 2, 1, "", "forces"], [83, 2, 1, "", "frame"], [83, 4, 1, "", "from_coordinates"], [83, 4, 1, "", "from_timestep"], [83, 2, 1, "", "has_forces"], [83, 2, 1, "", "has_positions"], [83, 2, 1, "", "has_velocities"], [83, 2, 1, "", "n_atoms"], [83, 2, 1, "", "positions"], [83, 2, 1, "", "time"], [83, 2, 1, "", "triclinic_dimensions"], [83, 2, 1, "", "velocities"], [83, 2, 1, "", "volume"]], "MDAnalysis.core": [[87, 0, 0, "-", "__init__"], [85, 0, 0, "-", "accessors"], [86, 0, 0, "-", "groups"], [88, 0, 0, "-", "selection"], [89, 0, 0, "-", "topology"], [90, 0, 0, "-", "topologyattrs"], [91, 0, 0, "-", "topologyobjects"], [92, 0, 0, "-", "universe"]], "MDAnalysis.core.accessors": [[85, 1, 1, "", "Accessor"], [85, 1, 1, "", "ConverterWrapper"]], "MDAnalysis.core.groups": [[86, 1, 1, "", "Atom"], [86, 1, 1, "", "AtomGroup"], [86, 1, 1, "", "Residue"], [86, 1, 1, "", "ResidueGroup"], [86, 1, 1, "", "Segment"], [86, 1, 1, "", "SegmentGroup"], [86, 1, 1, "", "UpdatingAtomGroup"]], "MDAnalysis.core.groups.Atom": [[86, 5, 1, "", "bfactor"], [86, 5, 1, "", "bonded_atoms"], [86, 5, 1, "", "force"], [86, 5, 1, "", "fragindex"], [86, 5, 1, "", "fragment"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "position"], [86, 5, 1, "", "velocity"]], "MDAnalysis.core.groups.AtomGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 5, 1, "", "angle"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 5, 1, "", "bond"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 5, 1, "", "cmap"], [86, 4, 1, "", "concatenate"], [86, 2, 1, "", "convert_to"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dihedral"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 5, 1, "", "forces"], [86, 5, 1, "", "fragindices"], [86, 5, 1, "", "fragments"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "guess_bonds"], [86, 4, 1, "", "gyration_moments"], [86, 5, 1, "", "improper"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_fragments"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 5, 1, "", "positions"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "select_atoms"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "sort"], [86, 4, 1, "", "split"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 5, 1, "", "ts"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 5, 1, "", "ureybradley"], [86, 5, 1, "", "velocities"], [86, 4, 1, "", "wrap"], [86, 4, 1, "", "write"]], "MDAnalysis.core.groups.Residue": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "chi1_selection"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "omega_selection"], [86, 4, 1, "", "phi_selection"], [86, 4, 1, "", "psi_selection"], [86, 5, 1, "", "segment"]], "MDAnalysis.core.groups.ResidueGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "chi1_selections"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "omega_selections"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "phi_selections"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "psi_selections"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "sequence"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.Segment": [[86, 5, 1, "", "atoms"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "get_connections"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 5, 1, "", "residues"]], "MDAnalysis.core.groups.SegmentGroup": [[86, 4, 1, "", "accumulate"], [86, 4, 1, "", "align_principal_axis"], [86, 4, 1, "", "asphericity"], [86, 4, 1, "", "asunique"], [86, 5, 1, "", "atoms"], [86, 4, 1, "", "bbox"], [86, 5, 1, "", "bfactors"], [86, 4, 1, "", "bsphere"], [86, 4, 1, "", "center"], [86, 4, 1, "", "center_of_charge"], [86, 4, 1, "", "center_of_geometry"], [86, 4, 1, "", "center_of_mass"], [86, 4, 1, "", "centroid"], [86, 4, 1, "", "concatenate"], [86, 4, 1, "", "copy"], [86, 4, 1, "", "difference"], [86, 5, 1, "", "dimensions"], [86, 4, 1, "", "dipole_moment"], [86, 4, 1, "", "dipole_vector"], [86, 4, 1, "", "get_connections"], [86, 4, 1, "", "groupby"], [86, 4, 1, "", "gyration_moments"], [86, 4, 1, "", "intersection"], [86, 4, 1, "", "is_strict_subset"], [86, 4, 1, "", "is_strict_superset"], [86, 4, 1, "", "isdisjoint"], [86, 4, 1, "", "issubset"], [86, 4, 1, "", "issuperset"], [86, 5, 1, "", "isunique"], [86, 5, 1, "", "ix"], [86, 5, 1, "", "ix_array"], [86, 4, 1, "", "moment_of_inertia"], [86, 5, 1, "", "n_atoms"], [86, 5, 1, "", "n_residues"], [86, 5, 1, "", "n_segments"], [86, 4, 1, "", "pack_into_box"], [86, 4, 1, "", "principal_axes"], [86, 4, 1, "", "quadrupole_moment"], [86, 4, 1, "", "quadrupole_tensor"], [86, 4, 1, "", "radius_of_gyration"], [86, 5, 1, "", "residues"], [86, 4, 1, "", "rotate"], [86, 4, 1, "", "rotateby"], [86, 5, 1, "", "segments"], [86, 4, 1, "", "shape_parameter"], [86, 4, 1, "", "subtract"], [86, 4, 1, "", "symmetric_difference"], [86, 4, 1, "", "total_charge"], [86, 4, 1, "", "total_mass"], [86, 4, 1, "", "transform"], [86, 4, 1, "", "translate"], [86, 4, 1, "", "union"], [86, 5, 1, "", "unique"], [86, 5, 1, "", "universe"], [86, 4, 1, "", "unwrap"], [86, 4, 1, "", "wrap"]], "MDAnalysis.core.groups.UpdatingAtomGroup": [[86, 5, 1, "", "atoms"], [86, 4, 1, "", "copy"], [86, 5, 1, "", "is_uptodate"], [86, 4, 1, "", "update_selection"]], "MDAnalysis.core.selection": [[88, 1, 1, "", "AromaticSelection"], [88, 1, 1, "", "BackboneSelection"], [88, 1, 1, "", "BaseSelection"], [88, 1, 1, "", "BoolSelection"], [88, 1, 1, "", "ByNumSelection"], [88, 1, 1, "", "ByResSelection"], [88, 6, 1, "", "FLOAT_PATTERN"], [88, 1, 1, "", "FloatRangeSelection"], [88, 6, 1, "", "INT_PATTERN"], [88, 1, 1, "", "NucleicBackboneSelection"], [88, 1, 1, "", "NucleicSelection"], [88, 1, 1, "", "NucleicSugarSelection"], [88, 1, 1, "", "PropertySelection"], [88, 1, 1, "", "ProteinSelection"], [88, 6, 1, "", "RANGE_PATTERN"], [88, 1, 1, "", "RangeSelection"], [88, 1, 1, "", "ResidSelection"], [88, 1, 1, "", "SameSelection"], [88, 1, 1, "", "SelectionParser"], [88, 1, 1, "", "SingleCharSelection"], [88, 1, 1, "", "SmartsSelection"], [88, 3, 1, "", "gen_selection_class"], [88, 3, 1, "", "grab_not_keywords"], [88, 3, 1, "", "is_keyword"], [88, 3, 1, "", "join_separated_values"], [88, 3, 1, "", "return_empty_on_apply"]], "MDAnalysis.core.selection.FloatRangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.RangeSelection": [[88, 2, 1, "", "dtype"]], "MDAnalysis.core.selection.SelectionParser": [[88, 4, 1, "", "expect"], [88, 4, 1, "", "parse"]], "MDAnalysis.core.topology": [[89, 1, 1, "", "Topology"], [89, 1, 1, "", "TransTable"], [89, 3, 1, "", "make_downshift_arrays"]], "MDAnalysis.core.topology.Topology": [[89, 4, 1, "", "add_Residue"], [89, 4, 1, "", "add_Segment"], [89, 4, 1, "", "add_TopologyAttr"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "del_TopologyAttr"], [89, 5, 1, "", "guessed_attributes"], [89, 5, 1, "", "read_attributes"]], "MDAnalysis.core.topology.TransTable": [[89, 4, 1, "", "atoms2residues"], [89, 4, 1, "", "atoms2segments"], [89, 4, 1, "", "copy"], [89, 4, 1, "", "move_atom"], [89, 4, 1, "", "move_residue"], [89, 2, 1, "", "n_atoms"], [89, 2, 1, "", "n_residues"], [89, 2, 1, "", "n_segments"], [89, 4, 1, "", "residues2atoms_1d"], [89, 4, 1, "", "residues2atoms_2d"], [89, 4, 1, "", "residues2segments"], [89, 4, 1, "", "segments2atoms_1d"], [89, 4, 1, "", "segments2atoms_2d"], [89, 4, 1, "", "segments2residues_1d"], [89, 4, 1, "", "segments2residues_2d"], [89, 2, 1, "", "size"]], "MDAnalysis.core.topologyattrs": [[90, 1, 1, "", "AltLocs"], [90, 1, 1, "", "Angles"], [90, 1, 1, "", "Aromaticities"], [90, 1, 1, "", "AtomAttr"], [90, 1, 1, "", "AtomStringAttr"], [90, 1, 1, "", "Atomids"], [90, 1, 1, "", "Atomindices"], [90, 1, 1, "", "Atomnames"], [90, 1, 1, "", "Atomtypes"], [90, 1, 1, "", "Bonds"], [90, 1, 1, "", "CMaps"], [90, 1, 1, "", "ChainIDs"], [90, 1, 1, "", "Charges"], [90, 1, 1, "", "Dihedrals"], [90, 1, 1, "", "Elements"], [90, 1, 1, "", "Epsilon14s"], [90, 1, 1, "", "Epsilons"], [90, 1, 1, "", "FormalCharges"], [90, 1, 1, "", "GBScreens"], [90, 1, 1, "", "ICodes"], [90, 1, 1, "", "Impropers"], [90, 1, 1, "", "Masses"], [90, 1, 1, "", "Molnums"], [90, 1, 1, "", "Moltypes"], [90, 1, 1, "", "NonbondedIndices"], [90, 1, 1, "", "Occupancies"], [90, 1, 1, "", "RMin14s"], [90, 1, 1, "", "RMins"], [90, 1, 1, "", "RSChirality"], [90, 1, 1, "", "Radii"], [90, 1, 1, "", "RecordTypes"], [90, 1, 1, "", "Resids"], [90, 1, 1, "", "ResidueAttr"], [90, 1, 1, "", "ResidueStringAttr"], [90, 1, 1, "", "Resindices"], [90, 1, 1, "", "Resnames"], [90, 1, 1, "", "Resnums"], [90, 1, 1, "", "Segids"], [90, 1, 1, "", "Segindices"], [90, 1, 1, "", "SegmentAttr"], [90, 1, 1, "", "SegmentStringAttr"], [90, 1, 1, "", "SolventRadii"], [90, 1, 1, "", "Tempfactors"], [90, 1, 1, "", "TopologyAttr"], [90, 1, 1, "", "UreyBradleys"]], "MDAnalysis.core.topologyattrs.AltLocs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Aromaticities": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.AtomAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.AtomStringAttr": [[90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Atomindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"]], "MDAnalysis.core.topologyattrs.Atomnames": [[90, 4, 1, "", "chi1_selection"], [90, 4, 1, "", "chi1_selections"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "omega_selection"], [90, 4, 1, "", "omega_selections"], [90, 4, 1, "", "phi_selection"], [90, 4, 1, "", "phi_selections"], [90, 4, 1, "", "psi_selection"], [90, 4, 1, "", "psi_selections"]], "MDAnalysis.core.topologyattrs.Atomtypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Bonds": [[90, 4, 1, "", "bonded_atoms"], [90, 4, 1, "", "fragindex"], [90, 4, 1, "", "fragindices"], [90, 4, 1, "", "fragment"], [90, 4, 1, "", "fragments"], [90, 4, 1, "", "n_fragments"]], "MDAnalysis.core.topologyattrs.ChainIDs": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Charges": [[90, 4, 1, "", "center_of_charge"], [90, 4, 1, "", "dipole_moment"], [90, 4, 1, "", "dipole_vector"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "quadrupole_moment"], [90, 4, 1, "", "quadrupole_tensor"], [90, 4, 1, "", "total_charge"]], "MDAnalysis.core.topologyattrs.Elements": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilon14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Epsilons": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.FormalCharges": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.GBScreens": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ICodes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Masses": [[90, 4, 1, "", "align_principal_axis"], [90, 4, 1, "", "asphericity"], [90, 4, 1, "", "center_of_mass"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "gyration_moments"], [90, 4, 1, "", "moment_of_inertia"], [90, 4, 1, "", "principal_axes"], [90, 4, 1, "", "radius_of_gyration"], [90, 4, 1, "", "shape_parameter"], [90, 4, 1, "", "total_mass"]], "MDAnalysis.core.topologyattrs.Molnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Moltypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.NonbondedIndices": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Occupancies": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMin14s": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RMins": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Radii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.RecordTypes": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Resids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.ResidueAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.ResidueStringAttr": [[90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_residues"]], "MDAnalysis.core.topologyattrs.Resnames": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "sequence"]], "MDAnalysis.core.topologyattrs.Resnums": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segids": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Segindices": [[90, 2, 1, "", "dtype"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentAttr": [[90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SegmentStringAttr": [[90, 4, 1, "", "set_segments"]], "MDAnalysis.core.topologyattrs.SolventRadii": [[90, 2, 1, "", "dtype"]], "MDAnalysis.core.topologyattrs.Tempfactors": [[90, 4, 1, "", "bfactor"], [90, 4, 1, "", "bfactor_setter"], [90, 4, 1, "", "bfactors"], [90, 4, 1, "", "bfactors_setter"], [90, 2, 1, "", "dtype"], [90, 2, 1, "", "group"]], "MDAnalysis.core.topologyattrs.TopologyAttr": [[90, 2, 1, "", "attrname"], [90, 4, 1, "", "copy"], [90, 2, 1, "", "dtype"], [90, 4, 1, "", "from_blank"], [90, 4, 1, "", "get_atoms"], [90, 4, 1, "", "get_residues"], [90, 4, 1, "", "get_segments"], [90, 5, 1, "", "is_guessed"], [90, 2, 1, "", "per_object"], [90, 4, 1, "", "set_atoms"], [90, 4, 1, "", "set_residues"], [90, 4, 1, "", "set_segments"], [90, 2, 1, "", "singular"], [90, 2, 1, "", "top"]], "MDAnalysis.core.topologyobjects": [[91, 1, 1, "", "Angle"], [91, 1, 1, "", "Bond"], [91, 1, 1, "", "CMap"], [91, 1, 1, "", "Dihedral"], [91, 1, 1, "", "ImproperDihedral"], [91, 1, 1, "", "TopologyDict"], [91, 1, 1, "", "TopologyGroup"], [91, 1, 1, "", "TopologyObject"], [91, 1, 1, "", "UreyBradley"]], "MDAnalysis.core.topologyobjects.Angle": [[91, 4, 1, "", "angle"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Bond": [[91, 4, 1, "", "length"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.Dihedral": [[91, 4, 1, "", "dihedral"], [91, 4, 1, "", "value"]], "MDAnalysis.core.topologyobjects.ImproperDihedral": [[91, 4, 1, "", "improper"]], "MDAnalysis.core.topologyobjects.TopologyDict": [[91, 4, 1, "", "keys"]], "MDAnalysis.core.topologyobjects.TopologyGroup": [[91, 4, 1, "", "angles"], [91, 5, 1, "", "atom1"], [91, 5, 1, "", "atom2"], [91, 5, 1, "", "atom3"], [91, 5, 1, "", "atom4"], [91, 4, 1, "", "atomgroup_intersection"], [91, 4, 1, "", "bonds"], [91, 4, 1, "", "dihedrals"], [91, 4, 1, "", "dump_contents"], [91, 5, 1, "", "indices"], [91, 4, 1, "", "selectBonds"], [91, 4, 1, "", "select_bonds"], [91, 4, 1, "", "to_indices"], [91, 5, 1, "", "topDict"], [91, 4, 1, "", "types"], [91, 5, 1, "", "universe"], [91, 4, 1, "", "values"]], "MDAnalysis.core.topologyobjects.TopologyObject": [[91, 5, 1, "", "atoms"], [91, 5, 1, "", "indices"], [91, 5, 1, "", "type"]], "MDAnalysis.core.topologyobjects.UreyBradley": [[91, 4, 1, "", "distance"], [91, 4, 1, "", "partner"], [91, 4, 1, "", "value"]], "MDAnalysis.core.universe": [[92, 3, 1, "", "Merge"], [92, 1, 1, "", "Universe"]], "MDAnalysis.core.universe.Universe": [[92, 4, 1, "", "add_Residue"], [92, 4, 1, "", "add_Segment"], [92, 4, 1, "", "add_TopologyAttr"], [92, 4, 1, "", "add_angles"], [92, 4, 1, "", "add_bonds"], [92, 4, 1, "", "add_dihedrals"], [92, 4, 1, "", "add_impropers"], [92, 2, 1, "", "angles"], [92, 2, 1, "", "atoms"], [92, 2, 1, "", "bonds"], [92, 5, 1, "", "coord"], [92, 4, 1, "", "copy"], [92, 4, 1, "", "del_TopologyAttr"], [92, 4, 1, "", "delete_angles"], [92, 4, 1, "", "delete_bonds"], [92, 4, 1, "", "delete_dihedrals"], [92, 4, 1, "", "delete_impropers"], [92, 2, 1, "", "dihedrals"], [92, 2, 1, "", "dimensions"], [92, 4, 1, "", "empty"], [92, 4, 1, "", "from_smiles"], [92, 2, 1, "", "impropers"], [92, 5, 1, "", "kwargs"], [92, 4, 1, "", "load_new"], [92, 5, 1, "", "models"], [92, 2, 1, "", "residues"], [92, 2, 1, "", "segments"], [92, 4, 1, "", "select_atoms"], [92, 2, 1, "", "trajectory"], [92, 4, 1, "", "transfer_to_memory"]], "MDAnalysis.exceptions": [[94, 7, 1, "", "ApplicationError"], [94, 7, 1, "", "ConversionWarning"], [94, 7, 1, "", "DuplicateWarning"], [94, 7, 1, "", "FileFormatWarning"], [94, 7, 1, "", "MissingDataWarning"], [94, 7, 1, "", "NoDataError"], [94, 7, 1, "", "SelectionError"], [94, 7, 1, "", "SelectionWarning"], [94, 7, 1, "", "StreamWarning"]], "MDAnalysis.lib": [[95, 0, 0, "-", "NeighborSearch"], [96, 0, 0, "-", "c_distances"], [97, 0, 0, "-", "c_distances_openmp"], [98, 0, 0, "-", "correlations"], [99, 0, 0, "-", "distances"], [102, 0, 0, "-", "log"], [103, 0, 0, "-", "mdamath"], [104, 0, 0, "-", "nsgrid"], [105, 0, 0, "-", "picklable_file_io"], [106, 0, 0, "-", "pkdtree"], [107, 0, 0, "-", "qcprot"], [108, 0, 0, "-", "transformations"], [109, 0, 0, "-", "util"]], "MDAnalysis.lib.NeighborSearch": [[95, 1, 1, "", "AtomNeighborSearch"]], "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch": [[95, 4, 1, "", "search"]], "MDAnalysis.lib.correlations": [[98, 3, 1, "", "autocorrelation"], [98, 3, 1, "", "correct_intermittency"]], "MDAnalysis.lib.distances": [[99, 3, 1, "", "apply_PBC"], [99, 3, 1, "", "augment_coordinates"], [99, 3, 1, "", "calc_angles"], [99, 3, 1, "", "calc_bonds"], [99, 3, 1, "", "calc_dihedrals"], [99, 3, 1, "", "capped_distance"], [99, 3, 1, "", "distance_array"], [99, 3, 1, "", "minimize_vectors"], [99, 3, 1, "", "self_capped_distance"], [99, 3, 1, "", "self_distance_array"], [99, 3, 1, "", "transform_RtoS"], [99, 3, 1, "", "transform_StoR"], [99, 3, 1, "", "undo_augment"]], "MDAnalysis.lib.formats": [[100, 0, 0, "-", "libdcd"], [101, 0, 0, "-", "libmdaxdr"]], "MDAnalysis.lib.formats.libdcd": [[100, 1, 1, "", "DCDFile"]], "MDAnalysis.lib.formats.libdcd.DCDFile": [[100, 2, 1, "", "charmm_bitfield"], [100, 4, 1, "", "close"], [100, 2, 1, "", "header"], [100, 4, 1, "", "open"], [100, 4, 1, "", "read"], [100, 4, 1, "", "readframes"], [100, 4, 1, "", "seek"], [100, 4, 1, "", "tell"], [100, 4, 1, "", "write"], [100, 4, 1, "", "write_header"]], "MDAnalysis.lib.formats.libmdaxdr": [[101, 1, 1, "", "TRRFile"], [101, 1, 1, "", "XTCFile"]], "MDAnalysis.lib.formats.libmdaxdr.TRRFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_xvf"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.formats.libmdaxdr.XTCFile": [[101, 4, 1, "", "calc_offsets"], [101, 4, 1, "", "close"], [101, 2, 1, "", "offsets"], [101, 4, 1, "", "open"], [101, 4, 1, "", "read"], [101, 4, 1, "", "read_direct_x"], [101, 4, 1, "", "seek"], [101, 4, 1, "", "set_offsets"], [101, 4, 1, "", "tell"], [101, 4, 1, "", "write"]], "MDAnalysis.lib.log": [[102, 1, 1, "", "NullHandler"], [102, 1, 1, "", "ProgressBar"], [102, 3, 1, "", "clear_handlers"], [102, 3, 1, "", "create"], [102, 3, 1, "", "start_logging"], [102, 3, 1, "", "stop_logging"]], "MDAnalysis.lib.log.NullHandler": [[102, 4, 1, "", "emit"]], "MDAnalysis.lib.mdamath": [[103, 3, 1, "", "angle"], [103, 3, 1, "", "box_volume"], [103, 3, 1, "", "dihedral"], [103, 3, 1, "", "find_fragments"], [103, 3, 1, "", "make_whole"], [103, 3, 1, "", "norm"], [103, 3, 1, "", "normal"], [103, 3, 1, "", "pdot"], [103, 3, 1, "", "pnorm"], [103, 3, 1, "", "sarrus_det"], [103, 3, 1, "", "stp"], [103, 3, 1, "", "triclinic_box"], [103, 3, 1, "", "triclinic_vectors"]], "MDAnalysis.lib.nsgrid": [[104, 1, 1, "", "FastNS"], [104, 1, 1, "", "NSResults"]], "MDAnalysis.lib.nsgrid.FastNS": [[104, 4, 1, "", "search"], [104, 4, 1, "", "self_search"]], "MDAnalysis.lib.nsgrid.NSResults": [[104, 4, 1, "", "get_pair_distances"], [104, 4, 1, "", "get_pairs"]], "MDAnalysis.lib.picklable_file_io": [[105, 1, 1, "", "BZ2Picklable"], [105, 1, 1, "", "BufferIOPicklable"], [105, 1, 1, "", "FileIOPicklable"], [105, 1, 1, "", "GzipPicklable"], [105, 1, 1, "", "TextIOPicklable"], [105, 3, 1, "", "bz2_pickle_open"], [105, 3, 1, "", "gzip_pickle_open"], [105, 3, 1, "", "pickle_open"]], "MDAnalysis.lib.pkdtree": [[106, 1, 1, "", "PeriodicKDTree"]], "MDAnalysis.lib.pkdtree.PeriodicKDTree": [[106, 4, 1, "", "get_indices"], [106, 5, 1, "", "pbc"], [106, 4, 1, "", "search"], [106, 4, 1, "", "search_pairs"], [106, 4, 1, "", "search_tree"], [106, 4, 1, "", "set_coords"]], "MDAnalysis.lib.qcprot": [[107, 3, 1, "", "CalcRMSDRotationalMatrix"], [107, 3, 1, "", "FastCalcRMSDAndRotation"], [107, 3, 1, "", "InnerProduct"]], "MDAnalysis.lib.transformations": [[108, 1, 1, "", "Arcball"], [108, 3, 1, "", "arcball_nearest_axis"], [108, 3, 1, "", "compose_matrix"], [108, 3, 1, "", "concatenate_matrices"], [108, 3, 1, "", "decompose_matrix"], [108, 3, 1, "", "euler_from_quaternion"], [108, 3, 1, "", "projection_from_matrix"], [108, 3, 1, "", "quaternion_imag"], [108, 3, 1, "", "quaternion_real"], [108, 3, 1, "", "reflection_from_matrix"], [108, 3, 1, "", "rotation_from_matrix"], [108, 3, 1, "", "rotaxis"], [108, 3, 1, "", "scale_from_matrix"], [108, 3, 1, "", "shear_from_matrix"], [108, 3, 1, "", "translation_from_matrix"]], "MDAnalysis.lib.transformations.Arcball": [[108, 4, 1, "", "down"], [108, 4, 1, "", "drag"], [108, 4, 1, "", "getconstrain"], [108, 4, 1, "", "matrix"], [108, 4, 1, "", "next"], [108, 4, 1, "", "place"], [108, 4, 1, "", "setaxes"], [108, 4, 1, "", "setconstrain"]], "MDAnalysis.lib.util": [[109, 1, 1, "", "FORTRANReader"], [109, 6, 1, "", "FORTRAN_format_regex"], [109, 1, 1, "", "NamedStream"], [109, 1, 1, "", "Namespace"], [109, 1, 1, "", "_Deprecate"], [109, 3, 1, "", "anyopen"], [109, 3, 1, "", "asiterable"], [109, 3, 1, "", "blocks_of"], [109, 3, 1, "", "cached"], [109, 3, 1, "", "check_atomgroup_not_empty"], [109, 3, 1, "", "check_box"], [109, 3, 1, "", "check_compressed_format"], [109, 3, 1, "", "check_coords"], [109, 3, 1, "", "conv_float"], [109, 3, 1, "", "convert_aa_code"], [109, 3, 1, "", "dedent_docstring"], [109, 3, 1, "", "deprecate"], [109, 3, 1, "", "filename"], [109, 3, 1, "", "fixedwidth_bins"], [109, 3, 1, "", "flatten_dict"], [109, 3, 1, "", "format_from_filename_extension"], [109, 3, 1, "", "get_ext"], [109, 3, 1, "", "get_weights"], [109, 3, 1, "", "greedy_splitext"], [109, 3, 1, "", "group_same_or_consecutive_integers"], [109, 3, 1, "", "guess_format"], [109, 3, 1, "", "hasmethod"], [109, 3, 1, "", "isstream"], [109, 3, 1, "", "iterable"], [109, 3, 1, "", "ltruncate_int"], [109, 3, 1, "", "openany"], [109, 3, 1, "", "parse_residue"], [109, 3, 1, "", "realpath"], [109, 3, 1, "", "static_variables"], [109, 3, 1, "", "store_init_arguments"], [109, 3, 1, "", "unique_int_1d"], [109, 3, 1, "", "unique_rows"], [109, 3, 1, "", "warn_if_not_unique"], [109, 3, 1, "", "which"]], "MDAnalysis.lib.util.FORTRANReader": [[109, 4, 1, "", "number_of_matches"], [109, 4, 1, "", "parse_FORTRAN_format"], [109, 4, 1, "", "read"]], "MDAnalysis.lib.util.NamedStream": [[109, 4, 1, "", "close"], [109, 5, 1, "", "closed"], [109, 4, 1, "", "fileno"], [109, 4, 1, "", "flush"], [109, 4, 1, "", "readable"], [109, 4, 1, "", "readline"], [109, 4, 1, "", "reset"], [109, 4, 1, "", "seek"], [109, 4, 1, "", "seekable"], [109, 4, 1, "", "tell"], [109, 4, 1, "", "truncate"], [109, 4, 1, "", "writable"]], "MDAnalysis.selections": [[114, 0, 0, "-", "base"], [115, 0, 0, "-", "charmm"], [120, 3, 1, "", "get_writer"], [116, 0, 0, "-", "gromacs"], [117, 0, 0, "-", "jmol"], [118, 0, 0, "-", "pymol"], [119, 0, 0, "-", "vmd"]], "MDAnalysis.selections.base": [[114, 1, 1, "", "SelectionWriterBase"], [114, 3, 1, "", "join"]], "MDAnalysis.selections.base.SelectionWriterBase": [[114, 4, 1, "", "__init__"], [114, 4, 1, "", "_translate"], [114, 4, 1, "", "_write_head"], [114, 4, 1, "", "_write_tail"], [114, 4, 1, "", "comment"], [114, 4, 1, "", "write"]], "MDAnalysis.selections.charmm": [[115, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.charmm.SelectionWriter": [[115, 4, 1, "", "close"], [115, 4, 1, "", "comment"], [115, 2, 1, "", "commentfmt"], [115, 2, 1, "", "continuation"], [115, 2, 1, "", "ext"], [115, 2, 1, "", "format"], [115, 4, 1, "", "write"], [115, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.gromacs": [[116, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.gromacs.SelectionWriter": [[116, 4, 1, "", "close"], [116, 4, 1, "", "comment"], [116, 2, 1, "", "commentfmt"], [116, 2, 1, "", "continuation"], [116, 2, 1, "", "ext"], [116, 2, 1, "", "format"], [116, 4, 1, "", "write"], [116, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.jmol": [[117, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.jmol.SelectionWriter": [[117, 4, 1, "", "close"], [117, 4, 1, "", "comment"], [117, 2, 1, "", "commentfmt"], [117, 2, 1, "", "continuation"], [117, 2, 1, "", "default_numterms"], [117, 2, 1, "", "ext"], [117, 2, 1, "", "format"], [117, 4, 1, "", "write"], [117, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.pymol": [[118, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.pymol.SelectionWriter": [[118, 4, 1, "", "close"], [118, 4, 1, "", "comment"], [118, 2, 1, "", "commentfmt"], [118, 2, 1, "", "continuation"], [118, 2, 1, "", "ext"], [118, 2, 1, "", "format"], [118, 4, 1, "", "write"], [118, 4, 1, "", "write_preamble"]], "MDAnalysis.selections.vmd": [[119, 1, 1, "", "SelectionWriter"]], "MDAnalysis.selections.vmd.SelectionWriter": [[119, 4, 1, "", "close"], [119, 4, 1, "", "comment"], [119, 2, 1, "", "commentfmt"], [119, 2, 1, "", "continuation"], [119, 2, 1, "", "ext"], [119, 2, 1, "", "format"], [119, 4, 1, "", "write"], [119, 4, 1, "", "write_preamble"]], "MDAnalysis.topology": [[122, 0, 0, "-", "CRDParser"], [123, 0, 0, "-", "DLPolyParser"], [124, 0, 0, "-", "DMSParser"], [125, 0, 0, "-", "ExtendedPDBParser"], [126, 0, 0, "-", "FHIAIMSParser"], [127, 0, 0, "-", "GMSParser"], [128, 0, 0, "-", "GROParser"], [129, 0, 0, "-", "GSDParser"], [130, 0, 0, "-", "HoomdXMLParser"], [131, 0, 0, "-", "ITPParser"], [132, 0, 0, "-", "LAMMPSParser"], [133, 0, 0, "-", "MMTFParser"], [134, 0, 0, "-", "MOL2Parser"], [135, 0, 0, "-", "MinimalParser"], [136, 0, 0, "-", "PDBParser"], [137, 0, 0, "-", "PDBQTParser"], [138, 0, 0, "-", "PQRParser"], [139, 0, 0, "-", "PSFParser"], [140, 0, 0, "-", "TOPParser"], [141, 0, 0, "-", "TPRParser"], [142, 0, 0, "-", "TXYZParser"], [143, 0, 0, "-", "XYZParser"], [147, 0, 0, "-", "__init__"], [144, 0, 0, "-", "base"], [145, 0, 0, "-", "core"], [146, 0, 0, "-", "guessers"], [148, 0, 0, "-", "tables"], [149, 0, 0, "-", "tpr"]], "MDAnalysis.topology.CRDParser": [[122, 1, 1, "", "CRDParser"]], "MDAnalysis.topology.CRDParser.CRDParser": [[122, 4, 1, "", "close"], [122, 4, 1, "", "convert_forces_from_native"], [122, 4, 1, "", "convert_forces_to_native"], [122, 4, 1, "", "convert_pos_from_native"], [122, 4, 1, "", "convert_pos_to_native"], [122, 4, 1, "", "convert_time_from_native"], [122, 4, 1, "", "convert_time_to_native"], [122, 4, 1, "", "convert_velocities_from_native"], [122, 4, 1, "", "convert_velocities_to_native"], [122, 4, 1, "", "parse"], [122, 2, 1, "", "units"]], "MDAnalysis.topology.DMSParser": [[124, 1, 1, "", "DMSParser"]], "MDAnalysis.topology.DMSParser.DMSParser": [[124, 4, 1, "", "close"], [124, 4, 1, "", "convert_forces_from_native"], [124, 4, 1, "", "convert_forces_to_native"], [124, 4, 1, "", "convert_pos_from_native"], [124, 4, 1, "", "convert_pos_to_native"], [124, 4, 1, "", "convert_time_from_native"], [124, 4, 1, "", "convert_time_to_native"], [124, 4, 1, "", "convert_velocities_from_native"], [124, 4, 1, "", "convert_velocities_to_native"], [124, 4, 1, "", "parse"], [124, 2, 1, "", "units"]], "MDAnalysis.topology.ExtendedPDBParser": [[125, 1, 1, "", "ExtendedPDBParser"]], "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser": [[125, 4, 1, "", "close"], [125, 4, 1, "", "convert_forces_from_native"], [125, 4, 1, "", "convert_forces_to_native"], [125, 4, 1, "", "convert_pos_from_native"], [125, 4, 1, "", "convert_pos_to_native"], [125, 4, 1, "", "convert_time_from_native"], [125, 4, 1, "", "convert_time_to_native"], [125, 4, 1, "", "convert_velocities_from_native"], [125, 4, 1, "", "convert_velocities_to_native"], [125, 4, 1, "", "parse"], [125, 2, 1, "", "units"]], "MDAnalysis.topology.FHIAIMSParser": [[126, 1, 1, "", "FHIAIMSParser"]], "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser": [[126, 4, 1, "", "close"], [126, 4, 1, "", "convert_forces_from_native"], [126, 4, 1, "", "convert_forces_to_native"], [126, 4, 1, "", "convert_pos_from_native"], [126, 4, 1, "", "convert_pos_to_native"], [126, 4, 1, "", "convert_time_from_native"], [126, 4, 1, "", "convert_time_to_native"], [126, 4, 1, "", "convert_velocities_from_native"], [126, 4, 1, "", "convert_velocities_to_native"], [126, 4, 1, "", "parse"], [126, 2, 1, "", "units"]], "MDAnalysis.topology.GMSParser": [[127, 1, 1, "", "GMSParser"]], "MDAnalysis.topology.GMSParser.GMSParser": [[127, 4, 1, "", "close"], [127, 4, 1, "", "convert_forces_from_native"], [127, 4, 1, "", "convert_forces_to_native"], [127, 4, 1, "", "convert_pos_from_native"], [127, 4, 1, "", "convert_pos_to_native"], [127, 4, 1, "", "convert_time_from_native"], [127, 4, 1, "", "convert_time_to_native"], [127, 4, 1, "", "convert_velocities_from_native"], [127, 4, 1, "", "convert_velocities_to_native"], [127, 4, 1, "", "parse"], [127, 2, 1, "", "units"]], "MDAnalysis.topology.GROParser": [[128, 1, 1, "", "GROParser"]], "MDAnalysis.topology.GROParser.GROParser": [[128, 4, 1, "", "close"], [128, 4, 1, "", "convert_forces_from_native"], [128, 4, 1, "", "convert_forces_to_native"], [128, 4, 1, "", "convert_pos_from_native"], [128, 4, 1, "", "convert_pos_to_native"], [128, 4, 1, "", "convert_time_from_native"], [128, 4, 1, "", "convert_time_to_native"], [128, 4, 1, "", "convert_velocities_from_native"], [128, 4, 1, "", "convert_velocities_to_native"], [128, 4, 1, "", "parse"], [128, 2, 1, "", "units"]], "MDAnalysis.topology.GSDParser": [[129, 1, 1, "", "GSDParser"]], "MDAnalysis.topology.GSDParser.GSDParser": [[129, 4, 1, "", "close"], [129, 4, 1, "", "convert_forces_from_native"], [129, 4, 1, "", "convert_forces_to_native"], [129, 4, 1, "", "convert_pos_from_native"], [129, 4, 1, "", "convert_pos_to_native"], [129, 4, 1, "", "convert_time_from_native"], [129, 4, 1, "", "convert_time_to_native"], [129, 4, 1, "", "convert_velocities_from_native"], [129, 4, 1, "", "convert_velocities_to_native"], [129, 4, 1, "", "parse"], [129, 2, 1, "", "units"]], "MDAnalysis.topology.HoomdXMLParser": [[130, 1, 1, "", "HoomdXMLParser"]], "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser": [[130, 4, 1, "", "close"], [130, 4, 1, "", "convert_forces_from_native"], [130, 4, 1, "", "convert_forces_to_native"], [130, 4, 1, "", "convert_pos_from_native"], [130, 4, 1, "", "convert_pos_to_native"], [130, 4, 1, "", "convert_time_from_native"], [130, 4, 1, "", "convert_time_to_native"], [130, 4, 1, "", "convert_velocities_from_native"], [130, 4, 1, "", "convert_velocities_to_native"], [130, 4, 1, "", "parse"], [130, 2, 1, "", "units"]], "MDAnalysis.topology.ITPParser": [[131, 1, 1, "", "ITPParser"]], "MDAnalysis.topology.ITPParser.ITPParser": [[131, 4, 1, "", "close"], [131, 4, 1, "", "convert_forces_from_native"], [131, 4, 1, "", "convert_forces_to_native"], [131, 4, 1, "", "convert_pos_from_native"], [131, 4, 1, "", "convert_pos_to_native"], [131, 4, 1, "", "convert_time_from_native"], [131, 4, 1, "", "convert_time_to_native"], [131, 4, 1, "", "convert_velocities_from_native"], [131, 4, 1, "", "convert_velocities_to_native"], [131, 4, 1, "", "parse"], [131, 2, 1, "", "units"]], "MDAnalysis.topology.LAMMPSParser": [[132, 1, 1, "", "DATAParser"], [132, 1, 1, "", "LammpsDumpParser"]], "MDAnalysis.topology.LAMMPSParser.DATAParser": [[132, 4, 1, "", "close"], [132, 4, 1, "", "convert_forces_from_native"], [132, 4, 1, "", "convert_forces_to_native"], [132, 4, 1, "", "convert_pos_from_native"], [132, 4, 1, "", "convert_pos_to_native"], [132, 4, 1, "", "convert_time_from_native"], [132, 4, 1, "", "convert_time_to_native"], [132, 4, 1, "", "convert_velocities_from_native"], [132, 4, 1, "", "convert_velocities_to_native"], [132, 4, 1, "", "grab_datafile"], [132, 4, 1, "", "parse"], [132, 4, 1, "", "read_DATA_timestep"], [132, 2, 1, "", "units"]], "MDAnalysis.topology.MMTFParser": [[133, 1, 1, "", "MMTFParser"]], "MDAnalysis.topology.MOL2Parser": [[134, 1, 1, "", "MOL2Parser"]], "MDAnalysis.topology.MOL2Parser.MOL2Parser": [[134, 4, 1, "", "close"], [134, 4, 1, "", "convert_forces_from_native"], [134, 4, 1, "", "convert_forces_to_native"], [134, 4, 1, "", "convert_pos_from_native"], [134, 4, 1, "", "convert_pos_to_native"], [134, 4, 1, "", "convert_time_from_native"], [134, 4, 1, "", "convert_time_to_native"], [134, 4, 1, "", "convert_velocities_from_native"], [134, 4, 1, "", "convert_velocities_to_native"], [134, 4, 1, "", "parse"], [134, 2, 1, "", "units"]], "MDAnalysis.topology.MinimalParser": [[135, 1, 1, "", "MinimalParser"]], "MDAnalysis.topology.MinimalParser.MinimalParser": [[135, 4, 1, "", "close"], [135, 4, 1, "", "convert_forces_from_native"], [135, 4, 1, "", "convert_forces_to_native"], [135, 4, 1, "", "convert_pos_from_native"], [135, 4, 1, "", "convert_pos_to_native"], [135, 4, 1, "", "convert_time_from_native"], [135, 4, 1, "", "convert_time_to_native"], [135, 4, 1, "", "convert_velocities_from_native"], [135, 4, 1, "", "convert_velocities_to_native"], [135, 4, 1, "", "parse"], [135, 2, 1, "", "units"]], "MDAnalysis.topology.PDBParser": [[136, 1, 1, "", "PDBParser"]], "MDAnalysis.topology.PDBParser.PDBParser": [[136, 4, 1, "", "close"], [136, 4, 1, "", "convert_forces_from_native"], [136, 4, 1, "", "convert_forces_to_native"], [136, 4, 1, "", "convert_pos_from_native"], [136, 4, 1, "", "convert_pos_to_native"], [136, 4, 1, "", "convert_time_from_native"], [136, 4, 1, "", "convert_time_to_native"], [136, 4, 1, "", "convert_velocities_from_native"], [136, 4, 1, "", "convert_velocities_to_native"], [136, 4, 1, "", "parse"], [136, 2, 1, "", "units"]], "MDAnalysis.topology.PDBQTParser": [[137, 1, 1, "", "PDBQTParser"]], "MDAnalysis.topology.PDBQTParser.PDBQTParser": [[137, 4, 1, "", "close"], [137, 4, 1, "", "convert_forces_from_native"], [137, 4, 1, "", "convert_forces_to_native"], [137, 4, 1, "", "convert_pos_from_native"], [137, 4, 1, "", "convert_pos_to_native"], [137, 4, 1, "", "convert_time_from_native"], [137, 4, 1, "", "convert_time_to_native"], [137, 4, 1, "", "convert_velocities_from_native"], [137, 4, 1, "", "convert_velocities_to_native"], [137, 4, 1, "", "parse"], [137, 2, 1, "", "units"]], "MDAnalysis.topology.PQRParser": [[138, 1, 1, "", "PQRParser"]], "MDAnalysis.topology.PQRParser.PQRParser": [[138, 4, 1, "", "close"], [138, 4, 1, "", "convert_forces_from_native"], [138, 4, 1, "", "convert_forces_to_native"], [138, 4, 1, "", "convert_pos_from_native"], [138, 4, 1, "", "convert_pos_to_native"], [138, 4, 1, "", "convert_time_from_native"], [138, 4, 1, "", "convert_time_to_native"], [138, 4, 1, "", "convert_velocities_from_native"], [138, 4, 1, "", "convert_velocities_to_native"], [138, 4, 1, "", "guess_flavour"], [138, 4, 1, "", "parse"], [138, 2, 1, "", "units"]], "MDAnalysis.topology.PSFParser": [[139, 1, 1, "", "PSFParser"]], "MDAnalysis.topology.PSFParser.PSFParser": [[139, 4, 1, "", "close"], [139, 4, 1, "", "convert_forces_from_native"], [139, 4, 1, "", "convert_forces_to_native"], [139, 4, 1, "", "convert_pos_from_native"], [139, 4, 1, "", "convert_pos_to_native"], [139, 4, 1, "", "convert_time_from_native"], [139, 4, 1, "", "convert_time_to_native"], [139, 4, 1, "", "convert_velocities_from_native"], [139, 4, 1, "", "convert_velocities_to_native"], [139, 4, 1, "", "parse"], [139, 2, 1, "", "units"]], "MDAnalysis.topology.TOPParser": [[140, 1, 1, "", "TOPParser"]], "MDAnalysis.topology.TOPParser.TOPParser": [[140, 4, 1, "", "close"], [140, 4, 1, "", "convert_forces_from_native"], [140, 4, 1, "", "convert_forces_to_native"], [140, 4, 1, "", "convert_pos_from_native"], [140, 4, 1, "", "convert_pos_to_native"], [140, 4, 1, "", "convert_time_from_native"], [140, 4, 1, "", "convert_time_to_native"], [140, 4, 1, "", "convert_velocities_from_native"], [140, 4, 1, "", "convert_velocities_to_native"], [140, 4, 1, "", "parse"], [140, 4, 1, "", "parse_bonded"], [140, 4, 1, "", "parse_charges"], [140, 4, 1, "", "parse_chunks"], [140, 4, 1, "", "parse_dihedrals"], [140, 4, 1, "", "parse_elements"], [140, 4, 1, "", "parse_masses"], [140, 4, 1, "", "parse_names"], [140, 4, 1, "", "parse_residx"], [140, 4, 1, "", "parse_resnames"], [140, 4, 1, "", "parse_type_indices"], [140, 4, 1, "", "parse_types"], [140, 4, 1, "", "parsesection_mapper"], [140, 4, 1, "", "skipper"], [140, 2, 1, "", "units"]], "MDAnalysis.topology.TPRParser": [[141, 1, 1, "", "TPRParser"]], "MDAnalysis.topology.TPRParser.TPRParser": [[141, 4, 1, "", "close"], [141, 4, 1, "", "convert_forces_from_native"], [141, 4, 1, "", "convert_forces_to_native"], [141, 4, 1, "", "convert_pos_from_native"], [141, 4, 1, "", "convert_pos_to_native"], [141, 4, 1, "", "convert_time_from_native"], [141, 4, 1, "", "convert_time_to_native"], [141, 4, 1, "", "convert_velocities_from_native"], [141, 4, 1, "", "convert_velocities_to_native"], [141, 4, 1, "", "parse"], [141, 2, 1, "", "units"]], "MDAnalysis.topology.TXYZParser": [[142, 1, 1, "", "TXYZParser"]], "MDAnalysis.topology.TXYZParser.TXYZParser": [[142, 4, 1, "", "close"], [142, 4, 1, "", "convert_forces_from_native"], [142, 4, 1, "", "convert_forces_to_native"], [142, 4, 1, "", "convert_pos_from_native"], [142, 4, 1, "", "convert_pos_to_native"], [142, 4, 1, "", "convert_time_from_native"], [142, 4, 1, "", "convert_time_to_native"], [142, 4, 1, "", "convert_velocities_from_native"], [142, 4, 1, "", "convert_velocities_to_native"], [142, 4, 1, "", "parse"], [142, 2, 1, "", "units"]], "MDAnalysis.topology.XYZParser": [[143, 1, 1, "", "XYZParser"]], "MDAnalysis.topology.XYZParser.XYZParser": [[143, 4, 1, "", "parse"]], "MDAnalysis.topology.base": [[144, 1, 1, "", "TopologyReaderBase"]], "MDAnalysis.topology.base.TopologyReaderBase": [[144, 4, 1, "", "close"], [144, 4, 1, "", "convert_forces_from_native"], [144, 4, 1, "", "convert_forces_to_native"], [144, 4, 1, "", "convert_pos_from_native"], [144, 4, 1, "", "convert_pos_to_native"], [144, 4, 1, "", "convert_time_from_native"], [144, 4, 1, "", "convert_time_to_native"], [144, 4, 1, "", "convert_velocities_from_native"], [144, 4, 1, "", "convert_velocities_to_native"], [144, 2, 1, "", "units"]], "MDAnalysis.topology.guessers": [[146, 3, 1, "", "get_atom_mass"], [146, 3, 1, "", "guess_angles"], [146, 3, 1, "", "guess_aromaticities"], [146, 3, 1, "", "guess_atom_charge"], [146, 3, 1, "", "guess_atom_element"], [146, 3, 1, "", "guess_atom_mass"], [146, 3, 1, "", "guess_atom_type"], [146, 3, 1, "", "guess_bonds"], [146, 3, 1, "", "guess_dihedrals"], [146, 3, 1, "", "guess_gasteiger_charges"], [146, 3, 1, "", "guess_improper_dihedrals"], [146, 3, 1, "", "guess_masses"], [146, 3, 1, "", "guess_types"], [146, 3, 1, "", "validate_atom_types"]], "MDAnalysis.topology.tables": [[148, 6, 1, "", "TABLE_ATOMELEMENTS"], [148, 6, 1, "", "TABLE_MASSES"], [148, 6, 1, "", "TABLE_VDWRADII"], [148, 6, 1, "", "atomelements"], [148, 3, 1, "", "kv2dict"], [148, 6, 1, "", "masses"], [148, 6, 1, "", "vdwradii"]], "MDAnalysis.topology.tpr": [[149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 0, 0, "-", "obj"], [149, 0, 0, "-", "setting"], [149, 0, 0, "-", "utils"]], "MDAnalysis.topology.tpr.obj": [[149, 1, 1, "", "Atom"], [149, 1, 1, "", "AtomKind"], [149, 1, 1, "", "Atoms"], [149, 1, 1, "", "Box"], [149, 1, 1, "", "Ilist"], [149, 1, 1, "", "InteractionKind"], [149, 1, 1, "", "Molblock"], [149, 1, 1, "", "MoleculeKind"], [149, 1, 1, "", "Mtop"], [149, 1, 1, "", "Params"], [149, 1, 1, "", "TpxHeader"]], "MDAnalysis.topology.tpr.obj.Atom": [[149, 2, 1, "", "atomnumber"], [149, 2, 1, "", "m"], [149, 2, 1, "", "mB"], [149, 2, 1, "", "ptype"], [149, 2, 1, "", "q"], [149, 2, 1, "", "qB"], [149, 2, 1, "", "resind"], [149, 2, 1, "", "tp"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.AtomKind": [[149, 5, 1, "", "element_symbol"]], "MDAnalysis.topology.tpr.obj.Atoms": [[149, 2, 1, "", "atomnames"], [149, 2, 1, "", "atoms"], [149, 2, 1, "", "nr"], [149, 2, 1, "", "nres"], [149, 2, 1, "", "resnames"], [149, 2, 1, "", "type"], [149, 2, 1, "", "typeB"]], "MDAnalysis.topology.tpr.obj.Box": [[149, 2, 1, "", "rel"], [149, 2, 1, "", "size"], [149, 2, 1, "", "v"]], "MDAnalysis.topology.tpr.obj.Ilist": [[149, 2, 1, "", "iatoms"], [149, 2, 1, "", "ik"], [149, 2, 1, "", "nr"]], "MDAnalysis.topology.tpr.obj.InteractionKind": [[149, 4, 1, "", "process"]], "MDAnalysis.topology.tpr.obj.Molblock": [[149, 2, 1, "", "molb_natoms_mol"], [149, 2, 1, "", "molb_nmol"], [149, 2, 1, "", "molb_nposres_xA"], [149, 2, 1, "", "molb_nposres_xB"], [149, 2, 1, "", "molb_type"]], "MDAnalysis.topology.tpr.obj.MoleculeKind": [[149, 4, 1, "", "number_of_atoms"], [149, 4, 1, "", "number_of_residues"], [149, 4, 1, "", "remap_angles"], [149, 4, 1, "", "remap_bonds"], [149, 4, 1, "", "remap_dihe"], [149, 4, 1, "", "remap_impr"]], "MDAnalysis.topology.tpr.obj.Mtop": [[149, 2, 1, "", "moltypes"], [149, 2, 1, "", "nmolblock"], [149, 2, 1, "", "nmoltype"]], "MDAnalysis.topology.tpr.obj.Params": [[149, 2, 1, "", "atnr"], [149, 2, 1, "", "fudgeQQ"], [149, 2, 1, "", "functype"], [149, 2, 1, "", "ntypes"], [149, 2, 1, "", "reppow"]], "MDAnalysis.topology.tpr.obj.TpxHeader": [[149, 2, 1, "", "bBox"], [149, 2, 1, "", "bF"], [149, 2, 1, "", "bIr"], [149, 2, 1, "", "bTop"], [149, 2, 1, "", "bV"], [149, 2, 1, "", "bX"], [149, 2, 1, "", "fep_state"], [149, 2, 1, "", "fgen"], [149, 2, 1, "", "file_tag"], [149, 2, 1, "", "fver"], [149, 2, 1, "", "lamb"], [149, 2, 1, "", "natoms"], [149, 2, 1, "", "ngtc"], [149, 2, 1, "", "precision"], [149, 2, 1, "", "sizeOfTprBody"], [149, 2, 1, "", "ver_str"]], "MDAnalysis.topology.tpr.setting": [[149, 6, 1, "", "F_ANGLES"], [149, 6, 1, "", "F_ANGRES"], [149, 6, 1, "", "F_ANGRESZ"], [149, 6, 1, "", "F_ANHARM_POL"], [149, 6, 1, "", "F_BHAM"], [149, 6, 1, "", "F_BHAM_LR"], [149, 6, 1, "", "F_BONDS"], [149, 6, 1, "", "F_CBTDIHS"], [149, 6, 1, "", "F_CMAP"], [149, 6, 1, "", "F_COM_PULL"], [149, 6, 1, "", "F_CONNBONDS"], [149, 6, 1, "", "F_CONSTR"], [149, 6, 1, "", "F_CONSTRNC"], [149, 6, 1, "", "F_COUL14"], [149, 6, 1, "", "F_COUL_LR"], [149, 6, 1, "", "F_COUL_RECIP"], [149, 6, 1, "", "F_COUL_SR"], [149, 6, 1, "", "F_CROSS_BOND_ANGLES"], [149, 6, 1, "", "F_CROSS_BOND_BONDS"], [149, 6, 1, "", "F_CUBICBONDS"], [149, 6, 1, "", "F_DENSITYFITTING"], [149, 6, 1, "", "F_DHDL_CON"], [149, 6, 1, "", "F_DIHRES"], [149, 6, 1, "", "F_DIHRESVIOL"], [149, 6, 1, "", "F_DISPCORR"], [149, 6, 1, "", "F_DISRES"], [149, 6, 1, "", "F_DISRESVIOL"], [149, 6, 1, "", "F_DKDL"], [149, 6, 1, "", "F_DPD"], [149, 6, 1, "", "F_DVDL"], [149, 6, 1, "", "F_DVDL_BONDED"], [149, 6, 1, "", "F_DVDL_COUL"], [149, 6, 1, "", "F_DVDL_RESTRAINT"], [149, 6, 1, "", "F_DVDL_TEMPERATURE"], [149, 6, 1, "", "F_DVDL_VDW"], [149, 6, 1, "", "F_ECONSERVED"], [149, 6, 1, "", "F_EKIN"], [149, 6, 1, "", "F_EPOT"], [149, 6, 1, "", "F_EQM"], [149, 6, 1, "", "F_ETOT"], [149, 6, 1, "", "F_FBPOSRES"], [149, 6, 1, "", "F_FENEBONDS"], [149, 6, 1, "", "F_FOURDIHS"], [149, 6, 1, "", "F_G96ANGLES"], [149, 6, 1, "", "F_G96BONDS"], [149, 6, 1, "", "F_GB12"], [149, 6, 1, "", "F_GB13"], [149, 6, 1, "", "F_GB14"], [149, 6, 1, "", "F_GBPOL"], [149, 6, 1, "", "F_HARMONIC"], [149, 6, 1, "", "F_IDIHS"], [149, 6, 1, "", "F_LINEAR_ANGLES"], [149, 6, 1, "", "F_LJ"], [149, 6, 1, "", "F_LJ14"], [149, 6, 1, "", "F_LJC14_Q"], [149, 6, 1, "", "F_LJC_PAIRS_NB"], [149, 6, 1, "", "F_LJ_LR"], [149, 6, 1, "", "F_LJ_RECIP"], [149, 6, 1, "", "F_MORSE"], [149, 6, 1, "", "F_NPSOLVATION"], [149, 6, 1, "", "F_NRE"], [149, 6, 1, "", "F_ORIRES"], [149, 6, 1, "", "F_ORIRESDEV"], [149, 6, 1, "", "F_PDIHS"], [149, 6, 1, "", "F_PDISPCORR"], [149, 6, 1, "", "F_PIDIHS"], [149, 6, 1, "", "F_POLARIZATION"], [149, 6, 1, "", "F_POSRES"], [149, 6, 1, "", "F_PRES"], [149, 6, 1, "", "F_QUARTIC_ANGLES"], [149, 6, 1, "", "F_RBDIHS"], [149, 6, 1, "", "F_RESTRANGLES"], [149, 6, 1, "", "F_RESTRBONDS"], [149, 6, 1, "", "F_RESTRDIHS"], [149, 6, 1, "", "F_RF_EXCL"], [149, 6, 1, "", "F_SETTLE"], [149, 6, 1, "", "F_TABANGLES"], [149, 6, 1, "", "F_TABBONDS"], [149, 6, 1, "", "F_TABBONDSNC"], [149, 6, 1, "", "F_TABDIHS"], [149, 6, 1, "", "F_TEMP"], [149, 6, 1, "", "F_THOLE_POL"], [149, 6, 1, "", "F_UREY_BRADLEY"], [149, 6, 1, "", "F_VSITE1"], [149, 6, 1, "", "F_VSITE2"], [149, 6, 1, "", "F_VSITE2FD"], [149, 6, 1, "", "F_VSITE3"], [149, 6, 1, "", "F_VSITE3FAD"], [149, 6, 1, "", "F_VSITE3FD"], [149, 6, 1, "", "F_VSITE3OUT"], [149, 6, 1, "", "F_VSITE4FD"], [149, 6, 1, "", "F_VSITE4FDN"], [149, 6, 1, "", "F_VSITEN"], [149, 6, 1, "", "F_VTEMP_NOLONGERUSED"], [149, 6, 1, "", "F_WATER_POL"], [149, 6, 1, "", "SUPPORTED_VERSIONS"], [149, 6, 1, "", "ftupd"], [149, 6, 1, "", "interaction_types"]], "MDAnalysis.topology.tpr.utils": [[149, 1, 1, "", "TPXUnpacker"], [149, 1, 1, "", "TPXUnpacker2020"], [149, 3, 1, "", "define_unpack_real"], [149, 3, 1, "", "do_atom"], [149, 3, 1, "", "do_atoms"], [149, 3, 1, "", "do_block"], [149, 3, 1, "", "do_blocka"], [149, 3, 1, "", "do_ffparams"], [149, 3, 1, "", "do_harm"], [149, 3, 1, "", "do_ilists"], [149, 3, 1, "", "do_iparams"], [149, 3, 1, "", "do_molblock"], [149, 3, 1, "", "do_moltype"], [149, 3, 1, "", "do_mtop"], [149, 3, 1, "", "do_resinfo"], [149, 3, 1, "", "do_rvec"], [149, 3, 1, "", "do_symstr"], [149, 3, 1, "", "do_symtab"], [149, 3, 1, "", "extract_box_info"], [149, 3, 1, "", "fileVersion_err"], [149, 3, 1, "", "ndo_int"], [149, 3, 1, "", "ndo_ivec"], [149, 3, 1, "", "ndo_real"], [149, 3, 1, "", "ndo_rvec"], [149, 3, 1, "", "read_tpxheader"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "unpack_int64"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_uint64"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.topology.tpr.utils.TPXUnpacker2020": [[149, 4, 1, "", "do_string"], [149, 4, 1, "", "from_unpacker"], [149, 4, 1, "", "unpack_fstring"], [149, 4, 1, "", "unpack_uchar"], [149, 4, 1, "", "unpack_ushort"]], "MDAnalysis.transformations": [[152, 0, 0, "-", "base"], [153, 0, 0, "-", "boxdimensions"], [154, 0, 0, "-", "fit"], [155, 0, 0, "-", "nojump"], [156, 0, 0, "-", "positionaveraging"], [157, 0, 0, "-", "rotate"], [158, 0, 0, "-", "translate"], [159, 0, 0, "-", "wrap"]], "MDAnalysis.transformations.base": [[152, 1, 1, "", "TransformationBase"]], "MDAnalysis.transformations.boxdimensions": [[153, 1, 1, "", "set_dimensions"]], "MDAnalysis.transformations.fit": [[154, 1, 1, "", "fit_rot_trans"], [154, 1, 1, "", "fit_translation"]], "MDAnalysis.transformations.nojump": [[155, 1, 1, "", "NoJump"]], "MDAnalysis.transformations.positionaveraging": [[156, 1, 1, "", "PositionAverager"]], "MDAnalysis.transformations.rotate": [[157, 1, 1, "", "rotateby"]], "MDAnalysis.transformations.translate": [[158, 1, 1, "", "center_in_box"], [158, 1, 1, "", "translate"]], "MDAnalysis.transformations.wrap": [[159, 1, 1, "", "unwrap"], [159, 1, 1, "", "wrap"]], "MDAnalysis.units": [[160, 6, 1, "", "MDANALYSIS_BASE_UNITS"], [160, 6, 1, "", "chargeUnit_factor"], [160, 6, 1, "", "constants"], [160, 6, 1, "", "conversion_factor"], [160, 3, 1, "", "convert"], [160, 6, 1, "", "densityUnit_factor"], [160, 6, 1, "", "forceUnit_factor"], [160, 3, 1, "", "get_conversion_factor"], [160, 6, 1, "", "lengthUnit_factor"], [160, 6, 1, "", "speedUnit_factor"], [160, 6, 1, "", "timeUnit_factor"], [160, 6, 1, "", "unit_types"], [160, 6, 1, "", "water"]], "MDAnalysis.version": [[161, 6, 1, "", "__version__"]], "MDAnalysis.visualization": [[162, 0, 0, "-", "streamlines"], [163, 0, 0, "-", "streamlines_3D"]], "MDAnalysis.visualization.streamlines": [[162, 3, 1, "", "generate_streamlines"]], "MDAnalysis.visualization.streamlines_3D": [[163, 3, 1, "", "generate_streamlines_3d"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method", "5": "py:property", "6": "py:data", "7": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"], "5": ["py", "property", "Python property"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "titleterms": {"coordin": [0, 3, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 134, 156], "fit": [0, 154], "align": [0, 107], "mdanalysi": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 123, 126, 134, 141, 144, 145, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 165], "analysi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], "rm": [0, 36], "tutori": [0, 8, 32], "common": [0, 43, 78, 145], "usag": [0, 1, 40], "function": [0, 4, 17, 18, 19, 20, 23, 25, 32, 34, 35, 36, 43, 77, 78, 87, 89, 92, 98, 99, 102, 103, 107, 108, 109, 110, 145, 149, 151, 160], "class": [0, 2, 3, 4, 8, 9, 20, 23, 24, 25, 26, 29, 32, 34, 36, 37, 38, 40, 44, 47, 48, 49, 51, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 70, 71, 74, 75, 77, 79, 80, 81, 83, 85, 86, 89, 92, 102, 104, 105, 109, 114, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 149, 151, 152], "helper": [0, 23, 34, 75, 77, 89, 103, 109], "simpl": [1, 113], "atom": [1, 38, 88, 132, 146, 147], "distanc": [1, 10, 14, 30, 31, 39, 96, 97, 99], "atomicdist": 1, "basic": 1, "build": [2, 39, 58, 145, 151], "block": [2, 39, 151], "base": [2, 42, 72, 75, 114, 144, 152, 160], "exampl": [2, 3, 4, 9, 20, 22, 24, 26, 36, 37, 58, 60, 62, 64, 111, 146], "us": [2, 22, 23, 24, 37, 38, 77, 80, 99, 111, 112, 146], "standard": 2, "tool": 2, "write": [2, 4, 56, 58, 120], "new": [2, 82], "bond": [3, 20, 21, 24, 39, 147], "angl": [3, 9, 31, 147], "torsion": 3, "bat": 3, "applic": [3, 9, 26, 36], "nativ": 4, "contact": [4, 39], "One": 4, "dimension": [4, 16, 39], "two": 4, "q1": 4, "q2": 4, "your": 4, "own": 4, "data": [5, 39, 40, 60, 109, 160, 161], "file": [5, 23, 50, 53, 54, 56, 58, 59, 60, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 82, 109, 110, 120, 124, 134], "gener": [6, 9, 26, 141], "densiti": [6, 28], "from": [6, 80, 146], "trajectori": [6, 19, 23, 26, 40, 44, 51, 55, 57, 58, 60, 61, 67, 68, 69, 70, 72, 73, 74, 77, 79, 80, 100, 101, 111, 151, 155, 156, 157, 158], "md": [6, 19], "creat": [6, 23, 80, 151], "object": [6, 86, 89, 90, 91, 92, 93], "dielectr": 7, "diffus": [8, 29], "map": 8, "diffusionmap": 8, "dihedr": [9, 31, 147], "ramachandran": 9, "janin": 9, "refer": [9, 11, 17, 112, 160], "plot": 9, "encor": [11, 13, 15, 16, 17, 18], "ensembl": [11, 12, 14, 17], "similar": [11, 17, 34, 113], "calcul": [11, 14, 15, 17, 34, 36, 96, 97], "modul": [11, 23, 27, 39, 45, 46, 84, 93, 99, 110, 112, 150, 164], "bootstrap": 12, "procedur": 12, "cluster": [13, 16], "frontend": [13, 16], "represent": [13, 80], "clustercollect": 13, "clusteringmethod": 13, "algorithm": [13, 16, 25, 104, 112], "matrix": 14, "confdistmatrix": 14, "covari": 15, "reduct": [16, 39], "dimensionality_reduct": 16, "reduce_dimension": 16, "dimensionalityreductionmethod": 16, "comparison": 17, "util": [18, 19, 23, 26, 98, 109, 149], "elast": 19, "network": [19, 38], "gnm": 19, "task": 19, "hydrogen": [20, 21, 24, 39], "autocorrel": [20, 21, 98], "hydrogenbond": [20, 24, 38], "hbond_autocorrel": [20, 21], "descript": 20, "input": [20, 24, 141], "output": [20, 24, 37, 38, 81], "work": [20, 62, 64], "polyamid": 20, "hbond": 21, "deprec": 21, "helan": 22, "protein": [22, 39], "helic": 22, "hole": 23, "hole2": 23, "pdb": [23, 64, 125, 136], "vmd": [23, 119], "analyz": 23, "full": 23, "subsampl": 23, "surfac": 23, "load": [23, 58, 60], "templat": 23, "hbond_analysi": 24, "hydrogenbondanalysi": 24, "The": [24, 121], "its": 24, "method": [24, 34, 44, 79], "leaflet": 25, "identif": 25, "x3dna": 26, "helicoid": 26, "paramet": 26, "profil": 26, "legaci": [26, 27, 39], "singl": [26, 79, 120], "structur": [26, 39, 47, 48, 50, 59, 64, 65, 107, 124], "code": [27, 104, 109, 111, 165], "linear": [28, 103], "lineardens": 28, "mean": [29, 36], "squar": [29, 36], "displac": 29, "msd": 29, "comput": [29, 99], "an": [29, 44, 58, 80], "self": 29, "combin": 29, "multipl": [29, 36, 120], "replic": [29, 44], "updat": 30, "nucleic": [30, 31, 39], "acid": [30, 31, 39], "nucleicacid": 30, "nuclinfo": 31, "phase": 31, "princip": 32, "compon": 32, "pca": 32, "polym": [33, 39], "path": 34, "psa": 34, "variabl": [34, 131], "radial": 35, "distribut": 35, "rdf": 35, "root": 36, "quantiti": 36, "rmsd": [36, 107], "domain": 36, "water": [37, 38], "dynam": [37, 113], "waterdynam": 37, "hydrogenbondlifetim": 37, "waterorientationalrelax": 37, "angulardistribut": 37, "meansquaredisplac": 37, "survivalprob": 37, "bridg": 38, "waterbridgeanalysi": 38, "theori": 38, "timeseri": 38, "detect": 38, "default": 38, "heavi": 38, "name": [38, 120, 146], "charmm27": 38, "forc": 38, "field": 38, "type": 38, "glycam06": 38, "how": [38, 80, 82, 120, 151], "perform": 38, "count_by_typ": 38, "count_by_tim": 38, "membran": 39, "macromolecul": 39, "liquid": 39, "volumetr": 39, "edr": 40, "auxiliari": [40, 41, 42, 43, 44, 45], "reader": [40, 41, 42, 44, 52, 55, 57, 61, 74, 75, 77, 79, 80, 82, 123, 144, 147], "background": 40, "standalon": 40, "edrread": 40, "ad": [40, 44], "xvg": 41, "read": [43, 77, 78, 80, 100, 101, 105, 141], "core": [43, 78, 85, 86, 87, 88, 89, 90, 91, 92, 93, 145], "support": [44, 79, 120, 147, 149], "format": [44, 52, 53, 54, 56, 60, 62, 63, 66, 71, 74, 79, 82, 100, 101, 109, 110, 123, 124, 134, 141, 147], "api": [44, 79], "iter": 44, "access": [44, 82], "attribut": [44, 79, 90], "recreat": 44, "auxstep": 44, "auxread": 44, "registri": [44, 79], "convert": [46, 47, 48, 49, 75], "openmm": 47, "topologi": [47, 48, 49, 89, 90, 91, 93, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150], "parser": [47, 48, 49, 122, 124, 125, 126, 127, 128, 129, 130, 131, 133, 135, 136, 137, 138, 139, 140, 141, 142, 143, 149], "openmmpars": 47, "i": [47, 48, 49, 51, 60, 70, 105], "o": [47, 48, 49, 51, 60, 70, 105], "parm": 48, "parmedpars": 48, "rdkit": 49, "rdkitpars": 49, "molecul": 49, "crd": [50, 122], "dcd": [51, 60, 100], "dl_poli": 52, "dlpoli": 52, "desr": [53, 124], "dm": 53, "fhi": [54, 126], "aim": [54, 126], "fhiaim": 54, "develop": [54, 56, 141, 147], "note": [54, 56, 62, 141, 147, 160], "fhiaimswrit": 54, "string": [54, 56, 109], "gamess": [55, 127], "gm": 55, "gro": [56, 128], "growrit": 56, "gsd": [57, 129], "h5md": 58, "unit": [58, 86, 160], "simul": [58, 60], "open": 58, "parallel": [58, 97], "h5py": 58, "hdf5": 58, "linux": 58, "inpcrd": 59, "lammp": 60, "dump": 60, "mmtf": [61, 133], "mol2": [62, 134], "namdbin": 63, "capabl": 64, "pdbqt": [65, 137], "pqr": [66, 138], "tng": 67, "current": [67, 82, 151], "limit": 67, "amber": [68, 140], "trj": 68, "binari": 68, "netcdf": 68, "ascii": 68, "traj": 68, "trr": 69, "trz": 70, "txyz": [71, 142], "xdr": [72, 101], "xtc": 73, "xyz": [74, 143], "frameiter": 75, "writer": [75, 79, 114, 120], "chainread": 76, "chain": 76, "chemfil": 77, "timestep": [79, 83], "tabl": [79, 120, 147, 148, 165], "privat": 79, "frame": 79, "memori": 80, "memoryread": 80, "In": 80, "arbitrari": 80, "switch": 80, "construct": 80, "numpi": 80, "arrai": [80, 99, 109], "sub": 80, "system": [80, 93, 121], "null": 81, "serial": 82, "To": 82, "seek": 82, "miscellan": 82, "test": [82, 165], "_singleframeread": 82, "basereadertest": 82, "multiframereadertest": 82, "handler": 82, "implement": [82, 151, 160], "picklabl": [82, 105], "io": 82, "atomgroup": [85, 120], "accessor": 85, "contain": [86, 109], "group": 86, "collect": 86, "chemic": 86, "level": [86, 99, 100, 101, 110], "select": [88, 93, 99, 113, 114, 115, 116, 117, 118, 119, 120], "hierarchi": 88, "topologyattr": 90, "topologyobject": 91, "univers": 92, "import": 93, "user": [93, 165], "custom": 94, "except": 94, "warn": 94, "neighbor": [95, 104], "search": [95, 104], "wrapper": 95, "lib": [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110], "neighborsearch": 95, "librari": [96, 97, 99, 104, 110, 112], "c_distanc": 96, "c_distances_openmp": 97, "correl": 98, "intermitt": 98, "fast": [99, 107], "acceler": 99, "backend": 99, "avail": 99, "distopia": 99, "low": [99, 100, 101, 110], "libdcd": 100, "gromac": [101, 116, 141], "libmdaxdr": 101, "set": [102, 149, 153], "up": 102, "log": 102, "conveni": 102, "other": 102, "purpos": 102, "mathemat": 103, "mdamath": 103, "algebra": 103, "connect": [103, 113], "nsgrid": 104, "about": 104, "onli": 105, "picklable_file_io": 105, "periodickdtre": 106, "pkdtree": 106, "qcp": 107, "qcprot": 107, "homogen": 108, "transform": [108, 151, 152, 153, 154, 155, 156, 157, 158, 159], "matric": 108, "quaternion": 108, "requir": 108, "directori": 109, "stream": 109, "list": [109, 110], "pars": [109, 141], "manipul": 109, "handl": 109, "decor": 109, "manag": 109, "check": 109, "overview": [110, 111], "libmdanalysi": 110, "over": 111, "python": 111, "includ": [111, 112], "snippet": 111, "citat": [112, 165], "whole": 112, "duecredit": 112, "command": 113, "keyword": 113, "pattern": 113, "match": 113, "boolean": 113, "geometr": 113, "index": 113, "preexist": 113, "modifi": 113, "order": 113, "charmm": 115, "jmol": 117, "pymol": 118, "export": 120, "recogn": 120, "extens": 120, "todo": [122, 140], "dl": 123, "poli": 123, "dlpolypars": 123, "molecular": 124, "extend": 125, "topolgi": 126, "fhiaimspars": 126, "hoomd": 130, "xml": 130, "itp": 131, "preprocessor": 131, "lammpspars": 132, "style": 132, "minim": 135, "psf": 139, "prmtop": 140, "portabl": 141, "run": 141, "tpr": [141, 149], "version": [141, 161], "tprparser": [141, 149], "guess": 146, "unknown": 146, "inform": [146, 161], "guesser": 146, "element": 146, "bondord": 147, "improp": 147, "definit": 149, "fly": 151, "workflow": 151, "complex": 151, "closur": 151, "box": 153, "dimens": 153, "boxdimens": 153, "No": 155, "jump": 155, "unwrap": [155, 159], "nojump": 155, "averag": 156, "positionaverag": 156, "rotat": 157, "translat": 158, "wrap": 159, "constant": 160, "convers": 160, "encod": 160, "mdanalysis_base_unit": 160, "footnot": 160, "streamplot": [162, 163], "2d": 162, "visual": [162, 163, 164], "streamlin": 162, "3d": 163, "streamlines_3d": 163, "lipid": 164, "flow": 164, "document": 165, "get": 165, "involv": 165, "guid": 165, "instal": 165, "conda": 165, "pip": 165, "sourc": 165, "indic": 165}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx.ext.todo": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Coordinate fitting and alignment \u2014 MDAnalysis.analysis.align": [[0, "coordinate-fitting-and-alignment-mdanalysis-analysis-align"]], "RMS-fitting tutorial": [[0, "rms-fitting-tutorial"]], "Common usage": [[0, "common-usage"]], "Functions and Classes": [[0, "functions-and-classes"], [20, "functions-and-classes"]], "Helper functions": [[0, "helper-functions"], [77, "helper-functions"], [89, "helper-functions"]], "Simple atomic distance analysis \u2014 MDAnalysis.analysis.atomicdistances": [[1, "simple-atomic-distance-analysis-mdanalysis-analysis-atomicdistances"]], "Basic usage": [[1, "basic-usage"]], "Analysis building blocks \u2014 MDAnalysis.analysis.base": [[2, "analysis-building-blocks-mdanalysis-analysis-base"]], "Example of using a standard analysis tool": [[2, "example-of-using-a-standard-analysis-tool"]], "Writing new analysis tools": [[2, "writing-new-analysis-tools"]], "Classes": [[2, "classes"], [4, "classes"], [8, "classes"], [29, "classes"], [37, "classes"], [38, "classes"], [40, "classes"], [47, "classes"], [47, "id5"], [48, "classes"], [48, "id2"], [49, "classes"], [49, "id1"], [51, "classes"], [54, "classes"], [56, "classes"], [57, "classes"], [58, "classes"], [59, "classes"], [60, "classes"], [61, "classes"], [62, "classes"], [63, "classes"], [64, "classes"], [70, "classes"], [71, "classes"], [74, "classes"], [77, "classes"], [80, "classes"], [81, "classes"], [85, "classes"], [86, "classes"], [89, "classes"], [92, "classes"], [104, "classes"], [122, "classes"], [124, "classes"], [125, "classes"], [126, "classes"], [127, "classes"], [128, "classes"], [129, "classes"], [130, "classes"], [131, "classes"], [132, "classes"], [133, "classes"], [134, "classes"], [135, "classes"], [136, "classes"], [137, "classes"], [138, "classes"], [139, "classes"], [140, "classes"], [141, "classes"], [142, "classes"], [143, "classes"], [144, "classes"]], "Bond-Angle-Torsion coordinates analysis \u2014 MDAnalysis.analysis.bat": [[3, "bond-angle-torsion-coordinates-analysis-mdanalysis-analysis-bat"]], "Example applications": [[3, "example-applications"], [9, "example-applications"], [26, "example-applications"], [36, "example-applications"]], "Analysis classes": [[3, "analysis-classes"], [26, "analysis-classes"], [36, "analysis-classes"]], "Native contacts analysis \u2014 MDAnalysis.analysis.contacts": [[4, "native-contacts-analysis-mdanalysis-analysis-contacts"]], "Examples for contact analysis": [[4, "examples-for-contact-analysis"]], "One-dimensional contact analysis": [[4, "one-dimensional-contact-analysis"]], "Two-dimensional contact analysis (q1-q2)": [[4, "two-dimensional-contact-analysis-q1-q2"]], "Writing your own contact analysis": [[4, "writing-your-own-contact-analysis"]], "Functions": [[4, "functions"], [36, "functions"], [92, "functions"], [99, "functions"], [107, "functions"], [108, "functions"], [160, "functions"]], "Analysis data files": [[5, "analysis-data-files"]], "Data files": [[5, "data-files"]], "Generating densities from trajectories \u2014 MDAnalysis.analysis.density": [[6, "generating-densities-from-trajectories-mdanalysis-analysis-density"]], "Generating a density from a MD trajectory": [[6, "generating-a-density-from-a-md-trajectory"]], "Creating densities": [[6, "creating-densities"]], "Density object": [[6, "density-object"]], "Dielectric \u2014 MDAnalysis.analysis.dielectric": [[7, "dielectric-mdanalysis-analysis-dielectric"]], "Diffusion map \u2014 MDAnalysis.analysis.diffusionmap": [[8, "diffusion-map-mdanalysis-analysis-diffusionmap"]], "Diffusion Map tutorial": [[8, "diffusion-map-tutorial"]], "Dihedral angles analysis \u2014 MDAnalysis.analysis.dihedrals": [[9, "dihedral-angles-analysis-mdanalysis-analysis-dihedrals"]], "General dihedral analysis": [[9, "general-dihedral-analysis"]], "Ramachandran analysis": [[9, "ramachandran-analysis"]], "Janin analysis": [[9, "janin-analysis"]], "Reference plots": [[9, "reference-plots"]], "Analysis Classes": [[9, "analysis-classes"]], "Distance analysis \u2014 MDAnalysis.analysis.distances": [[10, "distance-analysis-mdanalysis-analysis-distances"]], "ENCORE Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore": [[11, "encore-ensemble-similarity-calculations-mdanalysis-analysis-encore"]], "Modules": [[11, "modules"]], "References": [[11, "references"], [112, "references"]], "bootstrap procedures \u2014 MDAnalysis.analysis.ensemble.bootstrap": [[12, "bootstrap-procedures-mdanalysis-analysis-ensemble-bootstrap"]], "Clustering": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.cluster": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-cluster"]], "Cluster representation \u2014 MDAnalysis.analysis.encore.clustering.ClusterCollection": [[13, "cluster-representation-mdanalysis-analysis-encore-clustering-clustercollection"]], "clustering frontend \u2014 MDAnalysis.analysis.encore.clustering.ClusteringMethod": [[13, "clustering-frontend-mdanalysis-analysis-encore-clustering-clusteringmethod"]], "Clustering algorithms": [[13, "clustering-algorithms"]], "Distance Matrix calculation \u2014 MDAnalysis.analysis.ensemble.confdistmatrix": [[14, "distance-matrix-calculation-mdanalysis-analysis-ensemble-confdistmatrix"]], "Covariance calculation \u2014 encore.covariance": [[15, "covariance-calculation-encore-covariance"]], "Dimensionality reduction": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-dimensionality-reduction-reduce-dimensionality"]], "dimensionality reduction frontend \u2014 MDAnalysis.analysis.encore.clustering.DimensionalityReductionMethod": [[16, "dimensionality-reduction-frontend-mdanalysis-analysis-encore-clustering-dimensionalityreductionmethod"]], "Dimensionality reduction algorithms": [[16, "dimensionality-reduction-algorithms"]], "Ensemble Similarity Calculations \u2014 MDAnalysis.analysis.encore.similarity": [[17, "ensemble-similarity-calculations-mdanalysis-analysis-encore-similarity"]], "Functions for ensemble comparisons": [[17, "functions-for-ensemble-comparisons"]], "Function reference": [[17, "function-reference"]], "Utility functions for ENCORE": [[18, "module-MDAnalysis.analysis.encore.utils"]], "Elastic network analysis of MD trajectories \u2014 MDAnalysis.analysis.gnm": [[19, "elastic-network-analysis-of-md-trajectories-mdanalysis-analysis-gnm"]], "Analysis tasks": [[19, "analysis-tasks"]], "Utility functions": [[19, "utility-functions"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hydrogenbonds-hbond-autocorrel"]], "Description": [[20, "description"]], "Input": [[20, "input"], [24, "input"]], "Output": [[20, "output"], [24, "output"], [37, "output"]], "Worked Example for Polyamide": [[20, "worked-example-for-polyamide"]], "Hydrogen bond autocorrelation \u2014 MDAnalysis.analysis.hbonds.hbond_autocorrel (deprecated)": [[21, "hydrogen-bond-autocorrelation-mdanalysis-analysis-hbonds-hbond-autocorrel-deprecated"]], "HELANAL \u2014 analysis of protein helices": [[22, "helanal-analysis-of-protein-helices"]], "Example use": [[22, "example-use"]], "HOLE analysis \u2014 MDAnalysis.analysis.hole2": [[23, "hole-analysis-mdanalysis-analysis-hole2"]], "Module": [[23, "module-MDAnalysis.analysis.hole2"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2": [[23, "id3"]], "Using HOLE on a PDB file": [[23, "using-hole-on-a-pdb-file"]], "Using HOLE on a trajectory": [[23, "using-hole-on-a-trajectory"]], "Using HOLE with VMD": [[23, "using-hole-with-vmd"]], "Analyzing a full trajectory": [[23, "analyzing-a-full-trajectory"]], "Creating subsampled HOLE surface": [[23, "creating-subsampled-hole-surface"]], "Loading a trajectory into VMD with subsampling": [[23, "loading-a-trajectory-into-vmd-with-subsampling"]], "Creating a subsampled trajectory": [[23, "creating-a-subsampled-trajectory"]], "Functions and classes": [[23, "functions-and-classes"]], "Utility functions and templates": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.helper": [[23, "hole-analysis-mdanalysis-analysis-hole2-helper"]], "HOLE Analysis \u2014 MDAnalysis.analysis.hole2.templates": [[23, "hole-analysis-mdanalysis-analysis-hole2-templates"]], "Hydrogen Bond Analysis \u2014 MDAnalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "hydrogen-bond-analysis-mdanalysis-analysis-hydrogenbonds-hbond-analysis"]], "Example use of HydrogenBondAnalysis": [[24, "example-use-of-hydrogenbondanalysis"]], "The class and its methods": [[24, "the-class-and-its-methods"]], "Leaflet identification \u2014 MDAnalysis.analysis.leaflet": [[25, "leaflet-identification-mdanalysis-analysis-leaflet"]], "Algorithm": [[25, "algorithm"]], "Classes and Functions": [[25, "classes-and-functions"], [32, "classes-and-functions"]], "Generation and Analysis of X3DNA helicoidal parameter profiles \u2014 MDAnalysis.analysis.legacy.x3dna": [[26, "generation-and-analysis-of-x3dna-helicoidal-parameter-profiles-mdanalysis-analysis-legacy-x3dna"]], "Single structure": [[26, "single-structure"]], "Trajectory": [[26, "trajectory"]], "Utilities": [[26, "utilities"]], "MDAnalysis.analysis.legacy \u2014 Legacy analysis code": [[27, "mdanalysis-analysis-legacy-legacy-analysis-code"]], "Legacy modules": [[27, "legacy-modules"]], "Linear Density \u2014 MDAnalysis.analysis.lineardensity": [[28, "linear-density-mdanalysis-analysis-lineardensity"]], "Mean Squared Displacement \u2014 MDAnalysis.analysis.msd": [[29, "mean-squared-displacement-mdanalysis-analysis-msd"]], "Computing an MSD": [[29, "computing-an-msd"]], "Computing Self-Diffusivity": [[29, "computing-self-diffusivity"]], "Combining Multiple Replicates": [[29, "combining-multiple-replicates"]], "Updated nucleic acid analysis \u2014 MDAnalysis.analysis.nucleicacids": [[30, "updated-nucleic-acid-analysis-mdanalysis-analysis-nucleicacids"]], "Distances": [[30, "distances"], [31, "distances"]], "Nucleic acid analysis \u2014 MDAnalysis.analysis.nuclinfo": [[31, "nucleic-acid-analysis-mdanalysis-analysis-nuclinfo"]], "Phases": [[31, "phases"]], "Dihedral angles": [[31, "dihedral-angles"]], "Principal Component Analysis (PCA) \u2014 MDAnalysis.analysis.pca": [[32, "principal-component-analysis-pca-mdanalysis-analysis-pca"]], "PCA Tutorial": [[32, "pca-tutorial"]], "Polymer analysis \u2014 MDAnalysis.analysis.polymer": [[33, "polymer-analysis-mdanalysis-analysis-polymer"]], "Calculating path similarity \u2014 MDAnalysis.analysis.psa": [[34, "calculating-path-similarity-mdanalysis-analysis-psa"]], "Helper functions and variables": [[34, "helper-functions-and-variables"]], "Classes, methods, and functions": [[34, "classes-methods-and-functions"]], "Radial Distribution Functions \u2014 MDAnalysis.analysis.rdf": [[35, "radial-distribution-functions-mdanalysis-analysis-rdf"]], "Calculating root mean square quantities \u2014 MDAnalysis.analysis.rms": [[36, "calculating-root-mean-square-quantities-mdanalysis-analysis-rms"]], "Calculating RMSD for multiple domains": [[36, "calculating-rmsd-for-multiple-domains"]], "Water dynamics analysis \u2014 MDAnalysis.analysis.waterdynamics": [[37, "water-dynamics-analysis-mdanalysis-analysis-waterdynamics"]], "Example use of the analysis classes": [[37, "example-use-of-the-analysis-classes"]], "HydrogenBondLifetimes": [[37, "hydrogenbondlifetimes"]], "WaterOrientationalRelaxation": [[37, "waterorientationalrelaxation"], [37, "id76"]], "AngularDistribution": [[37, "angulardistribution"], [37, "id77"]], "MeanSquareDisplacement": [[37, "meansquaredisplacement"], [37, "id78"]], "SurvivalProbability": [[37, "survivalprobability"], [37, "id79"]], "Water Bridge analysis \u2014 MDAnalysis.analysis.hydrogenbonds.WaterBridgeAnalysis": [[38, "water-bridge-analysis-mdanalysis-analysis-hydrogenbonds-waterbridgeanalysis"]], "Theory": [[38, "theory"]], "Output as Network": [[38, "output-as-network"]], "Output as Timeseries": [[38, "output-as-timeseries"]], "Detection of water bridges": [[38, "detection-of-water-bridges"]], "Default heavy atom names for CHARMM27 force field.": [[38, "id69"]], "Heavy atom types for GLYCAM06 force field.": [[38, "id70"]], "How to perform WaterBridgeAnalysis": [[38, "how-to-perform-waterbridgeanalysis"]], "Use count_by_type": [[38, "use-count-by-type"]], "Use count_by_time": [[38, "use-count-by-time"]], "Analysis modules": [[39, "analysis-modules"]], "Building blocks for Analysis": [[39, "building-blocks-for-analysis"]], "Distances and contacts": [[39, "distances-and-contacts"]], "Hydrogen bonding": [[39, "hydrogen-bonding"]], "Membranes and membrane proteins": [[39, "membranes-and-membrane-proteins"]], "Nucleic acids": [[39, "nucleic-acids"]], "Polymers": [[39, "polymers"]], "Structure": [[39, "structure"]], "Macromolecules": [[39, "macromolecules"]], "Liquids": [[39, "liquids"]], "Volumetric analysis": [[39, "volumetric-analysis"]], "Dimensionality Reduction": [[39, "dimensionality-reduction"]], "Legacy analysis modules": [[39, "legacy-analysis-modules"]], "Data": [[39, "data"], [160, "data"], [161, "data"]], "EDR auxiliary reader \u2014 MDAnalysis.auxiliary.EDR": [[40, "edr-auxiliary-reader-mdanalysis-auxiliary-edr"]], "Background": [[40, "background"]], "Standalone Usage of the EDRReader": [[40, "standalone-usage-of-the-edrreader"]], "Adding EDR data to trajectories": [[40, "adding-edr-data-to-trajectories"]], "XVG auxiliary reader \u2014 MDAnalysis.auxiliary.XVG": [[41, "xvg-auxiliary-reader-mdanalysis-auxiliary-xvg"]], "XVG Readers": [[41, "xvg-readers"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary.base": [[42, "auxiliary-readers-mdanalysis-auxiliary-base"]], "Common functions for auxiliary reading \u2014 MDAnalysis.auxiliary.core": [[43, "common-functions-for-auxiliary-reading-mdanalysis-auxiliary-core"]], "Auxiliary Readers \u2014 MDAnalysis.auxiliary": [[44, "auxiliary-readers-mdanalysis-auxiliary"]], "Supported formats": [[44, "supported-formats"]], "Auxiliary API": [[44, "auxiliary-api"]], "Auxiliaries and trajectories": [[44, "auxiliaries-and-trajectories"]], "Adding an auxiliary to a trajectory": [[44, "adding-an-auxiliary-to-a-trajectory"]], "Iterating by an auxiliary": [[44, "iterating-by-an-auxiliary"]], "Accessing auxiliary attributes": [[44, "accessing-auxiliary-attributes"]], "Recreating auxiliaries": [[44, "recreating-auxiliaries"]], "AuxStep class": [[44, "auxstep-class"]], "Attributes": [[44, "attributes"], [44, "id2"], [79, "attributes"], [79, "id19"], [79, "id21"]], "Methods": [[44, "methods"], [44, "id3"], [79, "methods"], [79, "id18"], [79, "id20"], [79, "id22"]], "AuxReader class": [[44, "auxreader-class"]], "Registry": [[44, "registry"], [79, "registry"]], "Replicating auxiliaries": [[44, "replicating-auxiliaries"]], "Auxiliary modules": [[45, "auxiliary-modules"]], "Converter modules": [[46, "converter-modules"]], "OpenMM topology parser MDAnalysis.converters.OpenMMParser": [[47, "openmm-topology-parser-mdanalysis-converters-openmmparser"]], "OpenMM structure I/O \u2014 MDAnalysis.converters.OpenMM": [[47, "openmm-structure-i-o-mdanalysis-converters-openmm"]], "ParmEd topology parser \u2014 MDAnalysis.converters.ParmEdParser": [[48, "parmed-topology-parser-mdanalysis-converters-parmedparser"]], "ParmEd structure I/O \u2014 MDAnalysis.converters.ParmEd": [[48, "parmed-structure-i-o-mdanalysis-converters-parmed"]], "RDKit topology parser \u2014 MDAnalysis.converters.RDKitParser": [[49, "rdkit-topology-parser-mdanalysis-converters-rdkitparser"]], "RDKit molecule I/O \u2014 MDAnalysis.converters.RDKit": [[49, "rdkit-molecule-i-o-mdanalysis-converters-rdkit"]], "CRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.CRD": [[50, "crd-structure-files-in-mdanalysis-mdanalysis-coordinates-crd"]], "DCD trajectory I/O \u2014 MDAnalysis.coordinates.DCD": [[51, "dcd-trajectory-i-o-mdanalysis-coordinates-dcd"]], "DL_Poly format reader MDAnalysis.coordinates.DLPoly": [[52, "dl-poly-format-reader-mdanalysis-coordinates-dlpoly"]], "DESRES file format \u2014 MDAnalysis.coordinates.DMS": [[53, "desres-file-format-mdanalysis-coordinates-dms"]], "FHI-AIMS file format \u2014 MDAnalysis.coordinates.FHIAIMS": [[54, "fhi-aims-file-format-mdanalysis-coordinates-fhiaims"]], "Developer notes: FHIAIMSWriter format strings": [[54, "developer-notes-fhiaimswriter-format-strings"]], "GAMESS trajectory reader \u2014 MDAnalysis.coordinates.GMS": [[55, "gamess-trajectory-reader-mdanalysis-coordinates-gms"]], "GRO file format \u2014 MDAnalysis.coordinates.GRO": [[56, "gro-file-format-mdanalysis-coordinates-gro"]], "Writing GRO files": [[56, "writing-gro-files"]], "Developer notes: GROWriter format strings": [[56, "developer-notes-growriter-format-strings"]], "GSD trajectory reader \u2014 MDAnalysis.coordinates.GSD": [[57, "gsd-trajectory-reader-mdanalysis-coordinates-gsd"]], "H5MD trajectories \u2014 MDAnalysis.coordinates.H5MD": [[58, "h5md-trajectories-mdanalysis-coordinates-h5md"]], "Units": [[58, "units"]], "Example: Loading an H5MD simulation": [[58, "example-loading-an-h5md-simulation"]], "Example: Writing an H5MD file": [[58, "example-writing-an-h5md-file"]], "Example: Opening an H5MD file in parallel": [[58, "example-opening-an-h5md-file-in-parallel"]], "Building parallel h5py and HDF5 on Linux": [[58, "building-parallel-h5py-and-hdf5-on-linux"]], "INPCRD structure files in MDAnalysis \u2014 MDAnalysis.coordinates.INPCRD": [[59, "inpcrd-structure-files-in-mdanalysis-mdanalysis-coordinates-inpcrd"]], "LAMMPS DCD trajectory and DATA I/O \u2014 MDAnalysis.coordinates.LAMMPS": [[60, "lammps-dcd-trajectory-and-data-i-o-mdanalysis-coordinates-lammps"]], "Data file formats": [[60, "data-file-formats"]], "Dump files": [[60, "dump-files"]], "Example: Loading a LAMMPS simulation": [[60, "example-loading-a-lammps-simulation"]], "MMTF trajectory reader \u2014 MDAnalysis.coordinates.MMTF": [[61, "mmtf-trajectory-reader-mdanalysis-coordinates-mmtf"]], "MOL2 file format \u2014 MDAnalysis.coordinates.MOL2": [[62, "mol2-file-format-mdanalysis-coordinates-mol2"], [134, "mol2-file-format-mdanalysis-coordinates-mol2"]], "Example for working with mol2 files": [[62, "example-for-working-with-mol2-files"]], "MOL2 format notes": [[62, "mol2-format-notes"]], "NAMDBIN files format \u2014 MDAnalysis.coordinates.NAMDBIN": [[63, "namdbin-files-format-mdanalysis-coordinates-namdbin"]], "PDB structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDB": [[64, "pdb-structure-files-in-mdanalysis-mdanalysis-coordinates-pdb"]], "Capabilities": [[64, "capabilities"]], "Examples for working with PDB files": [[64, "examples-for-working-with-pdb-files"]], "PDBQT structure files in MDAnalysis \u2014 MDAnalysis.coordinates.PDBQT": [[65, "pdbqt-structure-files-in-mdanalysis-mdanalysis-coordinates-pdbqt"]], "PQR file format \u2014 MDAnalysis.coordinates.PQR": [[66, "pqr-file-format-mdanalysis-coordinates-pqr"]], "TNG trajectory files \u2014 MDAnalysis.coordinates.TNG": [[67, "tng-trajectory-files-mdanalysis-coordinates-tng"]], "Current Limitations": [[67, "current-limitations"]], "AMBER trajectories \u2014 MDAnalysis.coordinates.TRJ": [[68, "amber-trajectories-mdanalysis-coordinates-trj"]], "Binary NetCDF trajectories": [[68, "binary-netcdf-trajectories"]], "ASCII TRAJ trajectories": [[68, "ascii-traj-trajectories"]], "TRR trajectory files \u2014 MDAnalysis.coordinates.TRR": [[69, "trr-trajectory-files-mdanalysis-coordinates-trr"]], "TRZ trajectory I/O \u2014 MDAnalysis.coordinates.TRZ": [[70, "trz-trajectory-i-o-mdanalysis-coordinates-trz"]], "TXYZ file format \u2014 MDAnalysis.coordinates.TXYZ": [[71, "txyz-file-format-mdanalysis-coordinates-txyz"]], "XDR based trajectory files \u2014 MDAnalysis.coordinates.XDR": [[72, "xdr-based-trajectory-files-mdanalysis-coordinates-xdr"]], "XTC trajectory files \u2014 MDAnalysis.coordinates.XTC": [[73, "xtc-trajectory-files-mdanalysis-coordinates-xtc"]], "XYZ trajectory reader \u2014 MDAnalysis.coordinates.XYZ": [[74, "xyz-trajectory-reader-mdanalysis-coordinates-xyz"]], "XYZ File format": [[74, "xyz-file-format"]], "Base classes \u2014 MDAnalysis.coordinates.base": [[75, "base-classes-mdanalysis-coordinates-base"]], "FrameIterators": [[75, "frameiterators"]], "Readers": [[75, "readers"], [79, "readers"]], "Writers": [[75, "writers"], [79, "writers"]], "Converters": [[75, "converters"]], "Helper classes": [[75, "helper-classes"]], "ChainReader \u2014 MDAnalysis.coordinates.chain": [[76, "chainreader-mdanalysis-coordinates-chain"]], "Reading trajectories with chemfiles \u2014 MDAnalysis.coordinates.chemfiles": [[77, "reading-trajectories-with-chemfiles-mdanalysis-coordinates-chemfiles"]], "Using the CHEMFILES reader": [[77, "using-the-chemfiles-reader"]], "Common functions for coordinate reading \u2014 MDAnalysis.coordinates.core": [[78, "common-functions-for-coordinate-reading-mdanalysis-coordinates-core"]], "Trajectory Readers and Writers \u2014 MDAnalysis.coordinates": [[79, "trajectory-readers-and-writers-mdanalysis-coordinates"]], "Timesteps": [[79, "timesteps"]], "Supported coordinate formats": [[79, "supported-coordinate-formats"]], "Table of supported coordinate formats": [[79, "id23"]], "Trajectory API": [[79, "trajectory-api"]], "Timestep class": [[79, "timestep-class"]], "Private attributes": [[79, "private-attributes"]], "Trajectory Reader class": [[79, "trajectory-reader-class"]], "Trajectory Writer class": [[79, "trajectory-writer-class"]], "Single Frame Writer class": [[79, "single-frame-writer-class"]], "Reading trajectories from memory \u2014 MDAnalysis.coordinates.memory": [[80, "reading-trajectories-from-memory-mdanalysis-coordinates-memory"]], "How to use the MemoryReader": [[80, "how-to-use-the-memoryreader"]], "In-memory representation of arbitrary trajectories": [[80, "in-memory-representation-of-arbitrary-trajectories"]], "Switching a trajectory to an in-memory representation": [[80, "switching-a-trajectory-to-an-in-memory-representation"]], "Constructing a Reader from a numpy array": [[80, "constructing-a-reader-from-a-numpy-array"]], "Creating an in-memory trajectory of a sub-system": [[80, "creating-an-in-memory-trajectory-of-a-sub-system"]], "Null output \u2014 MDAnalysis.coordinates.null": [[81, "null-output-mdanalysis-coordinates-null"]], "Serialization of Coordinate Readers": [[82, "serialization-of-coordinate-readers"]], "How to serialize a new reader": [[82, "how-to-serialize-a-new-reader"]], "File Access": [[82, "file-access"]], "To seek or not to seek": [[82, "to-seek-or-not-to-seek"]], "Miscellaneous": [[82, "miscellaneous"]], "Tests": [[82, "tests"], [165, "tests"]], "_SingleFrameReader Test": [[82, "singleframereader-test"]], "BaseReaderTest and MultiframeReaderTest": [[82, "basereadertest-and-multiframereadertest"]], "File handler Test": [[82, "file-handler-test"]], "Currently implemented picklable IO Formats": [[82, "currently-implemented-picklable-io-formats"]], "Timestep Class \u2014 MDAnalysis.coordinates.timestep": [[83, "timestep-class-mdanalysis-coordinates-timestep"]], "Timestep": [[83, "timestep"]], "Coordinates modules": [[84, "coordinates-modules"]], "AtomGroup accessors \u2014 MDAnalysis.core.accessors": [[85, "atomgroup-accessors-mdanalysis-core-accessors"]], "Core objects: Containers \u2014 MDAnalysis.core.groups": [[86, "core-objects-containers-mdanalysis-core-groups"]], "Collections": [[86, "collections"]], "Chemical units": [[86, "chemical-units"]], "Levels": [[86, "levels"]], "Core functions of MDAnalysis": [[87, "core-functions-of-mdanalysis"]], "Atom selection Hierarchy \u2014 MDAnalysis.core.selection": [[88, "atom-selection-hierarchy-mdanalysis-core-selection"]], "Core Topology object \u2014 MDAnalysis.core.topology": [[89, "core-topology-object-mdanalysis-core-topology"]], "Topology attribute objects \u2014 MDAnalysis.core.topologyattrs": [[90, "topology-attribute-objects-mdanalysis-core-topologyattrs"]], "Core Topology Objects \u2014 MDAnalysis.core.topologyobjects": [[91, "core-topology-objects-mdanalysis-core-topologyobjects"]], "Core object: Universe \u2014 MDAnalysis.core.universe": [[92, "core-object-universe-mdanalysis-core-universe"]], "Core modules": [[93, "core-modules"]], "Important objects for users": [[93, "important-objects-for-users"]], "Topology system": [[93, "topology-system"]], "Selection system": [[93, "selection-system"]], "Custom exceptions and warnings \u2014 MDAnalysis.exceptions": [[94, "custom-exceptions-and-warnings-mdanalysis-exceptions"]], "Neighbor Search wrapper for MDAnalysis \u2014 MDAnalysis.lib.NeighborSearch": [[95, "neighbor-search-wrapper-for-mdanalysis-mdanalysis-lib-neighborsearch"]], "Distance calculation library \u2014 MDAnalysis.lib.c_distances": [[96, "distance-calculation-library-mdanalysis-lib-c-distances"]], "Parallel distance calculation library \u2014 MDAnalysis.lib.c_distances_openmp": [[97, "parallel-distance-calculation-library-mdanalysis-lib-c-distances-openmp"]], "Correlations utilities \u2014 MDAnalysis.lib.correlations": [[98, "correlations-utilities-mdanalysis-lib-correlations"]], "Autocorrelation Function": [[98, "autocorrelation-function"]], "Intermittency Function": [[98, "intermittency-function"]], "Fast distance array computation \u2014 MDAnalysis.lib.distances": [[99, "fast-distance-array-computation-mdanalysis-lib-distances"]], "Selection of acceleration (\u201cbackend\u201d)": [[99, "selection-of-acceleration-backend"]], "Available backends for accelerated distance functions.": [[99, "id1"]], "Use of the distopia library": [[99, "use-of-the-distopia-library"]], "Functions available using the distopia backend.": [[99, "id2"]], "Low-level modules for MDAnalysis.lib.distances": [[99, "low-level-modules-for-mdanalysis-lib-distances"]], "Low level DCD trajectory reading - MDAnalysis.lib.formats.libdcd": [[100, "low-level-dcd-trajectory-reading-mdanalysis-lib-formats-libdcd"]], "Low-level Gromacs XDR trajectory reading \u2014 MDAnalysis.lib.formats.libmdaxdr": [[101, "low-level-gromacs-xdr-trajectory-reading-mdanalysis-lib-formats-libmdaxdr"]], "Setting up logging \u2014 MDAnalysis.lib.log": [[102, "setting-up-logging-mdanalysis-lib-log"]], "Convenience functions": [[102, "convenience-functions"]], "Other functions and classes for logging purposes": [[102, "other-functions-and-classes-for-logging-purposes"]], "Mathematical helper functions \u2014 MDAnalysis.lib.mdamath": [[103, "mathematical-helper-functions-mdanalysis-lib-mdamath"]], "Linear algebra": [[103, "linear-algebra"]], "Connectivity": [[103, "connectivity"]], "Neighbor search library \u2014 MDAnalysis.lib.nsgrid": [[104, "neighbor-search-library-mdanalysis-lib-nsgrid"]], "About the code": [[104, "about-the-code"]], "About the algorithm": [[104, "about-the-algorithm"]], "Picklable read-only I/O classes \u2014 MDAnalysis.lib.picklable_file_io": [[105, "picklable-read-only-i-o-classes-mdanalysis-lib-picklable-file-io"]], "PeriodicKDTree \u2014 MDAnalysis.lib.pkdtree": [[106, "periodickdtree-mdanalysis-lib-pkdtree"]], "Fast QCP RMSD structure alignment \u2014 MDAnalysis.lib.qcprot": [[107, "fast-qcp-rmsd-structure-alignment-mdanalysis-lib-qcprot"]], "Homogeneous Transformation Matrices and Quaternions \u2014 MDAnalysis.lib.transformations": [[108, "homogeneous-transformation-matrices-and-quaternions-mdanalysis-lib-transformations"]], "Requirements": [[108, "requirements"]], "Helper functions \u2014 MDAnalysis.lib.util": [[109, "helper-functions-mdanalysis-lib-util"]], "Files and directories": [[109, "files-and-directories"]], "Streams": [[109, "streams"]], "Containers and lists": [[109, "containers-and-lists"]], "Arrays": [[109, "arrays"]], "File parsing": [[109, "file-parsing"]], "Data manipulation and handling": [[109, "data-manipulation-and-handling"]], "Strings": [[109, "strings"]], "Class decorators": [[109, "class-decorators"]], "Function decorators": [[109, "function-decorators"]], "Code management": [[109, "code-management"]], "Data format checks": [[109, "data-format-checks"]], "Library functions \u2014 MDAnalysis.lib": [[110, "module-MDAnalysis.lib"]], "Overview": [[110, "overview"]], "List of modules": [[110, "list-of-modules"]], "Low level file formats": [[110, "low-level-file-formats"]], "Libmdanalysis": [[110, "libmdanalysis"]], "Overview over MDAnalysis": [[111, "overview-over-mdanalysis"]], "Using MDAnalysis in python": [[111, "using-mdanalysis-in-python"]], "Examples": [[111, "examples"]], "Included trajectories": [[111, "included-trajectories"]], "Code snippets": [[111, "code-snippets"]], "Citations for the whole MDAnalysis library": [[112, "citations-for-the-whole-mdanalysis-library"]], "Citations for included algorithms and modules": [[112, "citations-for-included-algorithms-and-modules"]], "Citations using Duecredit": [[112, "citations-using-duecredit"]], "Selection commands": [[113, "selection-commands"]], "Selection Keywords": [[113, "selection-keywords"]], "Simple selections": [[113, "simple-selections"]], "Pattern matching": [[113, "pattern-matching"]], "Boolean": [[113, "boolean"]], "Geometric": [[113, "geometric"]], "Similarity and connectivity": [[113, "similarity-and-connectivity"]], "Index": [[113, "index"]], "Preexisting selections and modifiers": [[113, "preexisting-selections-and-modifiers"]], "Dynamic selections": [[113, "dynamic-selections"]], "Ordered selections": [[113, "ordered-selections"]], "Base classes for the selection writers": [[114, "base-classes-for-the-selection-writers"]], "CHARMM selections": [[115, "charmm-selections"]], "Gromacs selections": [[116, "gromacs-selections"]], "Jmol selections": [[117, "jmol-selections"]], "PyMOL selections": [[118, "pymol-selections"]], "VMD selections": [[119, "vmd-selections"]], "Selection exporters": [[120, "selection-exporters"]], "Table of supported exporters and recognized file name extensions.": [[120, "id2"]], "How to write selections": [[120, "how-to-write-selections"]], "Single AtomGroup": [[120, "single-atomgroup"]], "Multiple selections": [[120, "multiple-selections"]], "Selection writers": [[120, "selection-writers"]], "The topology system": [[121, "the-topology-system"]], "CRD topology parser": [[122, "crd-topology-parser"]], "Todo": [[122, "id1"], [140, "id1"]], "DL Poly format Topology Readers \u2014 MDAnalysis.topology.DLPolyParser": [[123, "dl-poly-format-topology-readers-mdanalysis-topology-dlpolyparser"]], "DESRES Molecular Structure file format topology parser": [[124, "desres-molecular-structure-file-format-topology-parser"]], "Extended PDB topology parser": [[125, "extended-pdb-topology-parser"]], "FHI-AIMS Topology Parser \u2014 MDAnalysis.topolgy.FHIAIMSParser": [[126, "fhi-aims-topology-parser-mdanalysis-topolgy-fhiaimsparser"]], "GAMESS Topology Parser": [[127, "gamess-topology-parser"]], "GRO topology parser": [[128, "gro-topology-parser"]], "GSD topology parser": [[129, "gsd-topology-parser"]], "HOOMD XML topology parser": [[130, "hoomd-xml-topology-parser"]], "ITP topology parser": [[131, "itp-topology-parser"]], "Preprocessor variables": [[131, "preprocessor-variables"]], "LAMMPSParser": [[132, "lammpsparser"]], "Atom styles": [[132, "atom-styles"]], "MMTF Topology Parser": [[133, "mmtf-topology-parser"]], "Minimal topology parser": [[135, "minimal-topology-parser"]], "PDB Topology Parser": [[136, "pdb-topology-parser"]], "PDBQT topology parser": [[137, "pdbqt-topology-parser"]], "PQR topology parser": [[138, "pqr-topology-parser"]], "PSF topology parser": [[139, "psf-topology-parser"]], "AMBER PRMTOP topology parser": [[140, "amber-prmtop-topology-parser"]], "Gromacs portable run input TPR format parser": [[141, "gromacs-portable-run-input-tpr-format-parser"]], "TPR format versions and generations read by MDAnalysis.topology.TPRParser.parse().": [[141, "id4"]], "Development notes": [[141, "development-notes"]], "TXYZ topology parser": [[142, "txyz-topology-parser"]], "XYZ Topology Parser": [[143, "xyz-topology-parser"]], "Base topology reader classes \u2014 MDAnalysis.topology.base": [[144, "base-topology-reader-classes-mdanalysis-topology-base"]], "Common functions for topology building \u2014 MDAnalysis.topology.core": [[145, "common-functions-for-topology-building-mdanalysis-topology-core"]], "Guessing unknown Topology information \u2014 MDAnalysis.topology.guessers": [[146, "guessing-unknown-topology-information-mdanalysis-topology-guessers"]], "Example uses of guessers": [[146, "example-uses-of-guessers"]], "Guessing elements from atom names": [[146, "guessing-elements-from-atom-names"]], "Topology readers \u2014 MDAnalysis.topology": [[147, "topology-readers-mdanalysis-topology"]], "Table of Supported Topology Formats": [[147, "id19"]], "Developer Notes": [[147, "developer-notes"]], "atoms": [[147, "atoms"]], "bonds": [[147, "bonds"]], "bondorder": [[147, "bondorder"]], "angles": [[147, "angles"]], "dihedrals": [[147, "dihedrals"]], "impropers": [[147, "impropers"]], "MDAnalysis topology tables": [[148, "mdanalysis-topology-tables"]], "Utility functions for the TPR topology parser": [[149, "utility-functions-for-the-tpr-topology-parser"]], "TPR support": [[149, "tpr-support"]], "TPRParser settings": [[149, "tprparser-settings"]], "Class definitions for the TPRParser": [[149, "class-definitions-for-the-tprparser"]], "Utilities for the TPRParser": [[149, "utilities-for-the-tprparser"]], "Topology modules": [[150, "topology-modules"]], "Trajectory transformations (\u201con-the-fly\u201d transformations)": [[151, "module-MDAnalysis.transformations"]], "Workflows": [[151, "workflows"]], "Creating transformations": [[151, "creating-transformations"]], "Creating complex transformation classes": [[151, "creating-complex-transformation-classes"]], "Creating complex transformation closure functions": [[151, "creating-complex-transformation-closure-functions"]], "Transformations in MDAnalysis": [[151, "transformations-in-mdanalysis"]], "How to transformations": [[151, "how-to-transformations"]], "Building blocks for Transformation Classes": [[151, "building-blocks-for-transformation-classes"]], "Currently implemented transformations": [[151, "currently-implemented-transformations"]], "Transformations Base Class \u2014 MDAnalysis.transformations.base": [[152, "transformations-base-class-mdanalysis-transformations-base"]], "Set box dimensions \u2014 MDAnalysis.transformations.boxdimensions": [[153, "set-box-dimensions-mdanalysis-transformations-boxdimensions"]], "Fitting transformations \u2014 MDAnalysis.transformations.fit": [[154, "fitting-transformations-mdanalysis-transformations-fit"]], "No Jump Trajectory Unwrapping \u2014 MDAnalysis.transformations.nojump": [[155, "no-jump-trajectory-unwrapping-mdanalysis-transformations-nojump"]], "Trajectory Coordinate Averaging \u2014 MDAnalysis.transformations.positionaveraging": [[156, "trajectory-coordinate-averaging-mdanalysis-transformations-positionaveraging"]], "Trajectory rotation \u2014 MDAnalysis.transformations.rotate": [[157, "trajectory-rotation-mdanalysis-transformations-rotate"]], "Trajectory translation \u2014 MDAnalysis.transformations.translate": [[158, "trajectory-translation-mdanalysis-transformations-translate"]], "Wrap/unwrap transformations \u2014 MDAnalysis.transformations.wrap": [[159, "wrap-unwrap-transformations-mdanalysis-transformations-wrap"]], "Constants and unit conversion \u2014 MDAnalysis.units": [[160, "constants-and-unit-conversion-mdanalysis-units"]], "Base units in MDAnalysis as encoded in MDANALYSIS_BASE_UNITS": [[160, "id71"]], "Implementation notes": [[160, "implementation-notes"]], "Conversions": [[160, "conversions"]], "References and footnotes": [[160, "references-and-footnotes"]], "Version information for MDAnalysis - MDAnalysis.version": [[161, "version-information-for-mdanalysis-mdanalysis-version"]], "Streamplots (2D) \u2014 MDAnalysis.visualization.streamlines": [[162, "streamplots-2d-mdanalysis-visualization-streamlines"]], "Streamplots (3D) \u2014 MDAnalysis.visualization.streamlines_3D": [[163, "streamplots-3d-mdanalysis-visualization-streamlines-3d"]], "Visualization modules": [[164, "visualization-modules"]], "Visualization of Lipid Flow": [[164, "visualization-of-lipid-flow"]], "MDAnalysis documentation": [[165, "mdanalysis-documentation"]], "Getting involved": [[165, "getting-involved"]], "User Guide": [[165, "user-guide"]], "Installing MDAnalysis": [[165, "installing-mdanalysis"]], "conda": [[165, "conda"]], "pip": [[165, "pip"]], "Source Code": [[165, "source-code"]], "Citation": [[165, "citation"]], "Indices and tables": [[165, "indices-and-tables"]]}, "indexentries": {"aligntraj (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AlignTraj"]], "averagestructure (class in mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.AverageStructure"]], "mdanalysis.analysis.align": [[0, "module-MDAnalysis.analysis.align"]], "_fit_to() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align._fit_to"]], "alignto() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.alignto"]], "fasta2select() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.fasta2select"]], "filename (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.filename"]], "filename (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.filename"]], "get_matching_atoms() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.get_matching_atoms"]], "mobile_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.mobile_atoms"]], "mobile_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.mobile_atoms"]], "module": [[0, "module-MDAnalysis.analysis.align"], [1, "module-MDAnalysis.analysis.atomicdistances"], [2, "module-MDAnalysis.analysis.base"], [3, "module-MDAnalysis.analysis.bat"], [4, "module-MDAnalysis.analysis.contacts"], [5, "module-MDAnalysis.analysis.data.filenames"], [6, "module-MDAnalysis.analysis.density"], [7, "module-MDAnalysis.analysis.dielectric"], [8, "module-MDAnalysis.analysis.diffusionmap"], [9, "module-MDAnalysis.analysis.dihedrals"], [10, "module-MDAnalysis.analysis.distances"], [12, "module-MDAnalysis.analysis.encore.bootstrap"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"], [13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"], [13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"], [13, "module-MDAnalysis.analysis.encore.clustering.cluster"], [14, "module-MDAnalysis.analysis.encore.confdistmatrix"], [15, "module-MDAnalysis.analysis.encore.covariance"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"], [16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"], [17, "module-MDAnalysis.analysis.encore.similarity"], [18, "module-MDAnalysis.analysis.encore.utils"], [19, "module-MDAnalysis.analysis.gnm"], [20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"], [21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"], [22, "module-MDAnalysis.analysis.helix_analysis"], [23, "module-MDAnalysis.analysis.hole2"], [23, "module-MDAnalysis.analysis.hole2.templates"], [23, "module-MDAnalysis.analysis.hole2.utils"], [24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"], [25, "module-MDAnalysis.analysis.leaflet"], [26, "module-MDAnalysis.analysis.legacy.x3dna"], [28, "module-MDAnalysis.analysis.lineardensity"], [29, "module-MDAnalysis.analysis.msd"], [30, "module-MDAnalysis.analysis.nucleicacids"], [31, "module-MDAnalysis.analysis.nuclinfo"], [32, "module-MDAnalysis.analysis.pca"], [33, "module-MDAnalysis.analysis.polymer"], [34, "module-MDAnalysis.analysis.psa"], [35, "module-MDAnalysis.analysis.rdf"], [36, "module-MDAnalysis.analysis.rms"], [37, "module-MDAnalysis.analysis.waterdynamics"], [38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"], [40, "module-MDAnalysis.auxiliary.EDR"], [41, "module-MDAnalysis.auxiliary.XVG"], [42, "module-MDAnalysis.auxiliary.base"], [43, "module-MDAnalysis.auxiliary.core"], [44, "module-MDAnalysis.auxiliary.__init__"], [46, "module-MDAnalysis.converters"], [47, "module-MDAnalysis.converters.OpenMM"], [47, "module-MDAnalysis.converters.OpenMMParser"], [48, "module-MDAnalysis.converters.ParmEd"], [48, "module-MDAnalysis.converters.ParmEdParser"], [49, "module-MDAnalysis.converters.RDKit"], [49, "module-MDAnalysis.converters.RDKitParser"], [50, "module-MDAnalysis.coordinates.CRD"], [51, "module-MDAnalysis.coordinates.DCD"], [52, "module-MDAnalysis.coordinates.DLPoly"], [53, "module-MDAnalysis.coordinates.DMS"], [54, "module-MDAnalysis.coordinates.FHIAIMS"], [55, "module-MDAnalysis.coordinates.GMS"], [56, "module-MDAnalysis.coordinates.GRO"], [57, "module-MDAnalysis.coordinates.GSD"], [58, "module-MDAnalysis.coordinates.H5MD"], [59, "module-MDAnalysis.coordinates.INPCRD"], [60, "module-MDAnalysis.coordinates.LAMMPS"], [61, "module-MDAnalysis.coordinates.MMTF"], [62, "module-MDAnalysis.coordinates.MOL2"], [63, "module-MDAnalysis.coordinates.NAMDBIN"], [64, "module-MDAnalysis.coordinates.PDB"], [65, "module-MDAnalysis.coordinates.PDBQT"], [66, "module-MDAnalysis.coordinates.PQR"], [67, "module-MDAnalysis.coordinates.TNG"], [68, "module-MDAnalysis.coordinates.TRJ"], [69, "module-MDAnalysis.coordinates.TRR"], [70, "module-MDAnalysis.coordinates.TRZ"], [71, "module-MDAnalysis.coordinates.TXYZ"], [72, "module-MDAnalysis.coordinates.XDR"], [73, "module-MDAnalysis.coordinates.XTC"], [74, "module-MDAnalysis.coordinates.XYZ"], [75, "module-MDAnalysis.coordinates.base"], [76, "module-MDAnalysis.coordinates.chain"], [77, "module-MDAnalysis.coordinates.chemfiles"], [78, "module-MDAnalysis.coordinates.core"], [79, "module-MDAnalysis.coordinates.__init__"], [80, "module-MDAnalysis.coordinates.memory"], [81, "module-MDAnalysis.coordinates.null"], [83, "module-MDAnalysis.coordinates.timestep"], [85, "module-MDAnalysis.core.accessors"], [86, "module-MDAnalysis.core.groups"], [87, "module-MDAnalysis.core.__init__"], [88, "module-MDAnalysis.core.selection"], [89, "module-MDAnalysis.core.topology"], [90, "module-MDAnalysis.core.topologyattrs"], [91, "module-MDAnalysis.core.topologyobjects"], [92, "module-MDAnalysis.core.universe"], [94, "module-MDAnalysis.exceptions"], [95, "module-MDAnalysis.lib.NeighborSearch"], [96, "module-MDAnalysis.lib.c_distances"], [97, "module-MDAnalysis.lib.c_distances_openmp"], [98, "module-MDAnalysis.lib.correlations"], [99, "module-MDAnalysis.lib.distances"], [100, "module-MDAnalysis.lib.formats.libdcd"], [101, "module-MDAnalysis.lib.formats.libmdaxdr"], [102, "module-MDAnalysis.lib.log"], [103, "module-MDAnalysis.lib.mdamath"], [104, "module-MDAnalysis.lib.nsgrid"], [105, "module-MDAnalysis.lib.picklable_file_io"], [106, "module-MDAnalysis.lib.pkdtree"], [107, "module-MDAnalysis.lib.qcprot"], [108, "module-MDAnalysis.lib.transformations"], [109, "module-MDAnalysis.lib.util"], [110, "module-MDAnalysis.lib"], [114, "module-MDAnalysis.selections.base"], [115, "module-MDAnalysis.selections.charmm"], [116, "module-MDAnalysis.selections.gromacs"], [117, "module-MDAnalysis.selections.jmol"], [118, "module-MDAnalysis.selections.pymol"], [119, "module-MDAnalysis.selections.vmd"], [122, "module-MDAnalysis.topology.CRDParser"], [123, "module-MDAnalysis.topology.DLPolyParser"], [124, "module-MDAnalysis.topology.DMSParser"], [125, "module-MDAnalysis.topology.ExtendedPDBParser"], [126, "module-MDAnalysis.topology.FHIAIMSParser"], [127, "module-MDAnalysis.topology.GMSParser"], [128, "module-MDAnalysis.topology.GROParser"], [129, "module-MDAnalysis.topology.GSDParser"], [130, "module-MDAnalysis.topology.HoomdXMLParser"], [131, "module-MDAnalysis.topology.ITPParser"], [132, "module-MDAnalysis.topology.LAMMPSParser"], [133, "module-MDAnalysis.topology.MMTFParser"], [134, "module-MDAnalysis.topology.MOL2Parser"], [135, "module-MDAnalysis.topology.MinimalParser"], [136, "module-MDAnalysis.topology.PDBParser"], [137, "module-MDAnalysis.topology.PDBQTParser"], [138, "module-MDAnalysis.topology.PQRParser"], [139, "module-MDAnalysis.topology.PSFParser"], [140, "module-MDAnalysis.topology.TOPParser"], [141, "module-MDAnalysis.topology.TPRParser"], [142, "module-MDAnalysis.topology.TXYZParser"], [143, "module-MDAnalysis.topology.XYZParser"], [144, "module-MDAnalysis.topology.base"], [145, "module-MDAnalysis.topology.core"], [146, "module-MDAnalysis.topology.guessers"], [147, "module-MDAnalysis.topology.__init__"], [148, "module-MDAnalysis.topology.tables"], [149, "module-MDAnalysis.topology.tpr"], [149, "module-MDAnalysis.topology.tpr.obj"], [149, "module-MDAnalysis.topology.tpr.setting"], [149, "module-MDAnalysis.topology.tpr.utils"], [151, "module-MDAnalysis.transformations"], [152, "module-MDAnalysis.transformations.base"], [153, "module-MDAnalysis.transformations.boxdimensions"], [154, "module-MDAnalysis.transformations.fit"], [155, "module-MDAnalysis.transformations.nojump"], [156, "module-MDAnalysis.transformations.positionaveraging"], [157, "module-MDAnalysis.transformations.rotate"], [158, "module-MDAnalysis.transformations.translate"], [159, "module-MDAnalysis.transformations.wrap"], [160, "module-MDAnalysis.units"], [161, "module-MDAnalysis.version"], [162, "module-MDAnalysis.visualization.streamlines"], [163, "module-MDAnalysis.visualization.streamlines_3D"]], "positions (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.positions"]], "positions (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.positions"]], "reference_atoms (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.reference_atoms"]], "reference_atoms (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.reference_atoms"]], "rmsd (mdanalysis.analysis.align.aligntraj attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.rmsd"]], "rmsd (mdanalysis.analysis.align.aligntraj.results attribute)": [[0, "MDAnalysis.analysis.align.AlignTraj.results.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.rmsd"]], "rmsd (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.rmsd"]], "rotation_matrix() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.rotation_matrix"]], "sequence_alignment() (in module mdanalysis.analysis.align)": [[0, "MDAnalysis.analysis.align.sequence_alignment"]], "universe (mdanalysis.analysis.align.averagestructure attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.universe"]], "universe (mdanalysis.analysis.align.averagestructure.results attribute)": [[0, "MDAnalysis.analysis.align.AverageStructure.results.universe"]], "atomicdistances (class in mdanalysis.analysis.atomicdistances)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances"]], "mdanalysis.analysis.atomicdistances": [[1, "module-MDAnalysis.analysis.atomicdistances"]], "n_atoms (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_atoms"]], "n_frames (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.n_frames"]], "results (mdanalysis.analysis.atomicdistances.atomicdistances attribute)": [[1, "MDAnalysis.analysis.atomicdistances.AtomicDistances.results"]], "analysisbase (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisBase"]], "analysisfromfunction (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction"]], "mdanalysis.analysis.base": [[2, "module-MDAnalysis.analysis.base"]], "results (class in mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.Results"]], "analysis_class() (in module mdanalysis.analysis.base)": [[2, "MDAnalysis.analysis.base.analysis_class"]], "frames (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.frames"]], "frames (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.frames"]], "frames (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.frames"]], "results (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.results"]], "run() (mdanalysis.analysis.base.analysisbase method)": [[2, "MDAnalysis.analysis.base.AnalysisBase.run"]], "times (mdanalysis.analysis.base.analysisbase attribute)": [[2, "MDAnalysis.analysis.base.AnalysisBase.times"]], "times (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.times"]], "times (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.times"]], "timeseries (mdanalysis.analysis.base.analysisfromfunction.results attribute)": [[2, "MDAnalysis.analysis.base.AnalysisFromFunction.results.timeseries"]], "timeseries (mdanalysis.analysis.base.results attribute)": [[2, "MDAnalysis.analysis.base.results.timeseries"]], "bat (class in mdanalysis.analysis.bat)": [[3, "MDAnalysis.analysis.bat.BAT"]], "cartesian() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.Cartesian"]], "mdanalysis.analysis.bat": [[3, "module-MDAnalysis.analysis.bat"]], "atoms (mdanalysis.analysis.bat.bat property)": [[3, "MDAnalysis.analysis.bat.BAT.atoms"]], "bat (mdanalysis.analysis.bat.bat.results attribute)": [[3, "MDAnalysis.analysis.bat.BAT.results.bat"]], "load() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.load"]], "run() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.run"]], "save() (mdanalysis.analysis.bat.bat method)": [[3, "MDAnalysis.analysis.bat.BAT.save"]], "contacts (class in mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.Contacts"]], "mdanalysis.analysis.contacts": [[4, "module-MDAnalysis.analysis.contacts"]], "contact_matrix() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.contact_matrix"]], "hard_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.hard_cut_q"]], "q1q2() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.q1q2"]], "radius_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.radius_cut_q"]], "soft_cut_q() (in module mdanalysis.analysis.contacts)": [[4, "MDAnalysis.analysis.contacts.soft_cut_q"]], "timeseries (mdanalysis.analysis.contacts.contacts attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.timeseries"]], "timeseries (mdanalysis.analysis.contacts.contacts.results attribute)": [[4, "MDAnalysis.analysis.contacts.Contacts.results.timeseries"]], "janin_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Janin_ref"]], "mdanalysis.analysis.data.filenames": [[5, "module-MDAnalysis.analysis.data.filenames"]], "rama_ref (in module mdanalysis.analysis.data.filenames)": [[5, "MDAnalysis.analysis.data.filenames.Rama_ref"]], "density (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.Density"]], "densityanalysis (class in mdanalysis.analysis.density)": [[6, "MDAnalysis.analysis.density.DensityAnalysis"]], "mdanalysis.analysis.density": [[6, "module-MDAnalysis.analysis.density"]], "_set_user_grid() (mdanalysis.analysis.density.densityanalysis static method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis._set_user_grid"]], "centers() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.centers"]], "check_compatible() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.check_compatible"]], "convert_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_density"]], "convert_length() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.convert_length"]], "default_format (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.default_format"]], "delta (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.delta"]], "density (mdanalysis.analysis.density.densityanalysis attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.density"]], "density (mdanalysis.analysis.density.densityanalysis.results attribute)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.results.density"]], "edges (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.edges"]], "export() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.export"]], "grid (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.grid"]], "interpolated (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolated"]], "interpolation_spline_order (mdanalysis.analysis.density.density property)": [[6, "MDAnalysis.analysis.density.Density.interpolation_spline_order"]], "load() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.load"]], "make_density() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.make_density"]], "origin (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.origin"]], "resample() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample"]], "resample_factor() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.resample_factor"]], "run() (mdanalysis.analysis.density.densityanalysis method)": [[6, "MDAnalysis.analysis.density.DensityAnalysis.run"]], "save() (mdanalysis.analysis.density.density method)": [[6, "MDAnalysis.analysis.density.Density.save"]], "units (mdanalysis.analysis.density.density attribute)": [[6, "MDAnalysis.analysis.density.Density.units"]], "dielectricconstant (class in mdanalysis.analysis.dielectric)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant"]], "m (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M"]], "m2 (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.M2"]], "mdanalysis.analysis.dielectric": [[7, "module-MDAnalysis.analysis.dielectric"]], "eps (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps"]], "eps_mean (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.eps_mean"]], "fluct (mdanalysis.analysis.dielectric.dielectricconstant.results attribute)": [[7, "MDAnalysis.analysis.dielectric.DielectricConstant.results.fluct"]], "diffusionmap (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap"]], "distancematrix (class in mdanalysis.analysis.diffusionmap)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix"]], "mdanalysis.analysis.diffusionmap": [[8, "module-MDAnalysis.analysis.diffusionmap"]], "atoms (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.atoms"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.dist_matrix"]], "dist_matrix (mdanalysis.analysis.diffusionmap.distancematrix.results attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DistanceMatrix.results.dist_matrix"]], "eigenvalues (mdanalysis.analysis.diffusionmap.diffusionmap attribute)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.eigenvalues"]], "run() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.run"]], "transform() (mdanalysis.analysis.diffusionmap.diffusionmap method)": [[8, "MDAnalysis.analysis.diffusionmap.DiffusionMap.transform"]], "dihedral (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral"]], "janin (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Janin"]], "mdanalysis.analysis.dihedrals": [[9, "module-MDAnalysis.analysis.dihedrals"]], "ramachandran (class in mdanalysis.analysis.dihedrals)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran"]], "angles (mdanalysis.analysis.dihedrals.dihedral attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.angles"]], "angles (mdanalysis.analysis.dihedrals.dihedral.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.results.angles"]], "angles (mdanalysis.analysis.dihedrals.janin attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.angles"]], "angles (mdanalysis.analysis.dihedrals.janin.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Janin.results.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.angles"]], "angles (mdanalysis.analysis.dihedrals.ramachandran.results attribute)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.results.angles"]], "plot() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.plot"]], "plot() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.plot"]], "run() (mdanalysis.analysis.dihedrals.dihedral method)": [[9, "MDAnalysis.analysis.dihedrals.Dihedral.run"]], "run() (mdanalysis.analysis.dihedrals.janin method)": [[9, "MDAnalysis.analysis.dihedrals.Janin.run"]], "run() (mdanalysis.analysis.dihedrals.ramachandran method)": [[9, "MDAnalysis.analysis.dihedrals.Ramachandran.run"]], "mdanalysis.analysis.distances": [[10, "module-MDAnalysis.analysis.distances"]], "between() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.between"]], "contact_matrix() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.contact_matrix"]], "dist() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.dist"]], "distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.distance_array"]], "self_distance_array() (in module mdanalysis.analysis.distances)": [[10, "MDAnalysis.analysis.distances.self_distance_array"]], "mdanalysis.analysis.encore.bootstrap": [[12, "module-MDAnalysis.analysis.encore.bootstrap"]], "bootstrapped_matrix() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.bootstrapped_matrix"]], "get_distance_matrix_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_distance_matrix_bootstrap_samples"]], "get_ensemble_bootstrap_samples() (in module mdanalysis.analysis.encore.bootstrap)": [[12, "MDAnalysis.analysis.encore.bootstrap.get_ensemble_bootstrap_samples"]], "affinitypropagation (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagation"]], "affinitypropagation() (in module mdanalysis.analysis.encore.clustering.affinityprop)": [[13, "MDAnalysis.analysis.encore.clustering.affinityprop.AffinityPropagation"]], "affinitypropagationnative (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.AffinityPropagationNative"]], "cluster (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster"]], "clustercollection (class in mdanalysis.analysis.encore.clustering.clustercollection)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection"]], "clusteringmethod (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.ClusteringMethod"]], "dbscan (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.DBSCAN"]], "kmeans (class in mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans"]], "mdanalysis.analysis.encore.clustering.clustercollection": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusterCollection"]], "mdanalysis.analysis.encore.clustering.clusteringmethod": [[13, "module-MDAnalysis.analysis.encore.clustering.ClusteringMethod"]], "mdanalysis.analysis.encore.clustering.affinityprop": [[13, "module-MDAnalysis.analysis.encore.clustering.affinityprop"]], "mdanalysis.analysis.encore.clustering.cluster": [[13, "module-MDAnalysis.analysis.encore.clustering.cluster"]], "accepts_distance_matrix (mdanalysis.analysis.encore.clustering.clusteringmethod.kmeans attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.KMeans.accepts_distance_matrix"]], "centroid (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.centroid"]], "cluster() (in module mdanalysis.analysis.encore.clustering.cluster)": [[13, "MDAnalysis.analysis.encore.clustering.cluster.cluster"]], "clusters (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.clusters"]], "elements (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.elements"]], "encode_centroid_info() (in module mdanalysis.analysis.encore.clustering.clusteringmethod)": [[13, "MDAnalysis.analysis.encore.clustering.ClusteringMethod.encode_centroid_info"]], "get_centroids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_centroids"]], "get_ids() (mdanalysis.analysis.encore.clustering.clustercollection.clustercollection method)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.ClusterCollection.get_ids"]], "id (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.id"]], "metadata (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.metadata"]], "size (mdanalysis.analysis.encore.clustering.clustercollection.cluster attribute)": [[13, "MDAnalysis.analysis.encore.clustering.ClusterCollection.Cluster.size"]], "mdanalysis.analysis.encore.confdistmatrix": [[14, "module-MDAnalysis.analysis.encore.confdistmatrix"]], "conformational_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.conformational_distance_matrix"]], "get_distance_matrix() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.get_distance_matrix"]], "set_rmsd_matrix_elements() (in module mdanalysis.analysis.encore.confdistmatrix)": [[14, "MDAnalysis.analysis.encore.confdistmatrix.set_rmsd_matrix_elements"]], "mdanalysis.analysis.encore.covariance": [[15, "module-MDAnalysis.analysis.encore.covariance"]], "covariance_matrix() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.covariance_matrix"]], "ml_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.ml_covariance_estimator"]], "shrinkage_covariance_estimator() (in module mdanalysis.analysis.encore.covariance)": [[15, "MDAnalysis.analysis.encore.covariance.shrinkage_covariance_estimator"]], "dimensionalityreductionmethod (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod"]], "mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality"]], "mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed": [[16, "module-MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed"]], "principalcomponentanalysis (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.PrincipalComponentAnalysis"]], "stochasticproximityembedding() (in module mdanalysis.analysis.encore.dimensionality_reduction.stochasticproxembed)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.stochasticproxembed.StochasticProximityEmbedding"]], "stochasticproximityembeddingnative (class in mdanalysis.analysis.encore.dimensionality_reduction.dimensionalityreductionmethod)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.DimensionalityReductionMethod.StochasticProximityEmbeddingNative"]], "reduce_dimensionality() (in module mdanalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality)": [[16, "MDAnalysis.analysis.encore.dimensionality_reduction.reduce_dimensionality.reduce_dimensionality"]], "mdanalysis.analysis.encore.similarity": [[17, "module-MDAnalysis.analysis.encore.similarity"]], "ces() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces"]], "ces_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.ces_convergence"]], "clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.clustering_ensemble_similarity"]], "cumulative_clustering_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_clustering_ensemble_similarity"]], "cumulative_gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.cumulative_gen_kde_pdfs"]], "dimred_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dimred_ensemble_similarity"]], "discrete_jensen_shannon_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_jensen_shannon_divergence"]], "discrete_kullback_leibler_divergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.discrete_kullback_leibler_divergence"]], "dres() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres"]], "dres_convergence() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.dres_convergence"]], "gen_kde_pdfs() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.gen_kde_pdfs"]], "harmonic_ensemble_similarity() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.harmonic_ensemble_similarity"]], "hes() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.hes"]], "prepare_ensembles_for_convergence_increasing_window() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.prepare_ensembles_for_convergence_increasing_window"]], "write_output() (in module mdanalysis.analysis.encore.similarity)": [[17, "MDAnalysis.analysis.encore.similarity.write_output"]], "mdanalysis.analysis.encore.utils": [[18, "module-MDAnalysis.analysis.encore.utils"]], "parallelcalculation (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation"]], "purermsd() (in module mdanalysis.analysis.encore.cutils)": [[18, "MDAnalysis.analysis.encore.cutils.PureRMSD"]], "triangularmatrix (class in mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix"]], "args (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.args"]], "as_array() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.as_array"]], "function (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.function"]], "kwargs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.kwargs"]], "loadz() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.loadz"]], "merge_universes() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.merge_universes"]], "n_jobs (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.n_jobs"]], "nruns (mdanalysis.analysis.encore.utils.parallelcalculation attribute)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.nruns"]], "run() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.run"]], "savez() (mdanalysis.analysis.encore.utils.triangularmatrix method)": [[18, "MDAnalysis.analysis.encore.utils.TriangularMatrix.savez"]], "trm_indices() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices"]], "trm_indices_diag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_diag"]], "trm_indices_nodiag() (in module mdanalysis.analysis.encore.utils)": [[18, "MDAnalysis.analysis.encore.utils.trm_indices_nodiag"]], "worker() (mdanalysis.analysis.encore.utils.parallelcalculation method)": [[18, "MDAnalysis.analysis.encore.utils.ParallelCalculation.worker"]], "gnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis"]], "mdanalysis.analysis.gnm": [[19, "module-MDAnalysis.analysis.gnm"]], "closecontactgnmanalysis (class in mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis"]], "eigenvalues (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvalues"]], "eigenvalues (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvalues"]], "eigenvectors (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.eigenvectors"]], "eigenvectors (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.eigenvectors"]], "generate_grid() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.generate_grid"]], "generate_kirchoff() (mdanalysis.analysis.gnm.gnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.generate_kirchoff"]], "generate_kirchoff() (mdanalysis.analysis.gnm.closecontactgnmanalysis method)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.generate_kirchoff"]], "order_list() (in module mdanalysis.analysis.gnm)": [[19, "MDAnalysis.analysis.gnm.order_list"]], "times (mdanalysis.analysis.gnm.gnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.GNMAnalysis.results.times"]], "times (mdanalysis.analysis.gnm.closecontactgnmanalysis.results attribute)": [[19, "MDAnalysis.analysis.gnm.closeContactGNMAnalysis.results.times"]], "hydrogenbondautocorrel (class in mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel"]], "mdanalysis.analysis.hydrogenbonds.hbond_autocorrel": [[20, "module-MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel"]], "find_hydrogen_donors() (in module mdanalysis.analysis.hydrogenbonds.hbond_autocorrel)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.find_hydrogen_donors"]], "run() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.run"]], "solve() (mdanalysis.analysis.hydrogenbonds.hbond_autocorrel.hydrogenbondautocorrel method)": [[20, "MDAnalysis.analysis.hydrogenbonds.hbond_autocorrel.HydrogenBondAutoCorrel.solve"]], "mdanalysis.analysis.hbonds.hbond_autocorrel": [[21, "module-MDAnalysis.analysis.hbonds.hbond_autocorrel"]], "mdanalysis.analysis.helix_analysis": [[22, "module-MDAnalysis.analysis.helix_analysis"]], "holeanalysis (class in mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis"]], "mdanalysis.analysis.hole2": [[23, "module-MDAnalysis.analysis.hole2"]], "mdanalysis.analysis.hole2.templates": [[23, "module-MDAnalysis.analysis.hole2.templates"]], "mdanalysis.analysis.hole2.utils": [[23, "module-MDAnalysis.analysis.hole2.utils"]], "path": [[23, "index-0"], [23, "index-1"], [109, "index-0"]], "simple2_rad (in module mdanalysis.analysis.hole2.templates)": [[23, "MDAnalysis.analysis.hole2.templates.SIMPLE2_RAD"]], "bin_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.bin_radii"]], "check_and_fix_long_filename() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.check_and_fix_long_filename"]], "collect_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.collect_hole"]], "create_vmd_surface() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.create_vmd_surface"]], "create_vmd_surface() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.create_vmd_surface"]], "delete_temporary_files() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.delete_temporary_files"]], "environment variable": [[23, "index-0"], [23, "index-1"], [68, "index-0"], [68, "index-1"], [109, "index-0"], [109, "index-1"], [112, "index-0"], [152, "index-0"]], "gather() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.gather"]], "guess_cpoint() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.guess_cpoint"]], "histogram_radii() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.histogram_radii"]], "hole() (in module mdanalysis.analysis.hole2)": [[23, "MDAnalysis.analysis.hole2.hole"]], "min_radius() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.min_radius"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.outfiles"]], "outfiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.outfiles"]], "over_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.over_order_parameters"]], "plot() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot"]], "plot3d() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D"]], "plot3d_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot3D_order_parameters"]], "plot_mean_profile() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_mean_profile"]], "plot_order_parameters() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.plot_order_parameters"]], "profiles (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.profiles"]], "profiles (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.profiles"]], "run() (mdanalysis.analysis.hole2.holeanalysis method)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.run"]], "run_hole() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.run_hole"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.sphpdbs"]], "sphpdbs (mdanalysis.analysis.hole2.holeanalysis.results attribute)": [[23, "MDAnalysis.analysis.hole2.HoleAnalysis.results.sphpdbs"]], "write_simplerad2() (in module mdanalysis.analysis.hole2.utils)": [[23, "MDAnalysis.analysis.hole2.utils.write_simplerad2"]], "hydrogenbondanalysis (class in mdanalysis.analysis.hydrogenbonds.hbond_analysis)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis"]], "mdanalysis.analysis.hydrogenbonds.hbond_analysis": [[24, "module-MDAnalysis.analysis.hydrogenbonds.hbond_analysis"]], "count_by_ids() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_ids"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.count_by_type"]], "guess_acceptors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_acceptors"]], "guess_donors() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_donors"]], "guess_hydrogens() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.guess_hydrogens"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.hbonds"]], "hbonds (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis.results attribute)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.results.hbonds"]], "lifetime() (mdanalysis.analysis.hydrogenbonds.hbond_analysis.hydrogenbondanalysis method)": [[24, "MDAnalysis.analysis.hydrogenbonds.hbond_analysis.HydrogenBondAnalysis.lifetime"]], "leafletfinder (class in mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder"]], "mdanalysis.analysis.leaflet": [[25, "module-MDAnalysis.analysis.leaflet"]], "group() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.group"]], "groups() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups"]], "groups_iter() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.groups_iter"]], "optimize_cutoff() (in module mdanalysis.analysis.leaflet)": [[25, "MDAnalysis.analysis.leaflet.optimize_cutoff"]], "sizes() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.sizes"]], "update() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.update"]], "write_selection() (mdanalysis.analysis.leaflet.leafletfinder method)": [[25, "MDAnalysis.analysis.leaflet.LeafletFinder.write_selection"]], "applicationerror": [[26, "MDAnalysis.analysis.legacy.x3dna.ApplicationError"], [94, "MDAnalysis.exceptions.ApplicationError"]], "mdanalysis.analysis.legacy.x3dna": [[26, "module-MDAnalysis.analysis.legacy.x3dna"]], "x3dna (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA"]], "x3dnatraj (class in mdanalysis.analysis.legacy.x3dna)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj"]], "collect() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.collect"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean"]], "mean() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.mean_std"]], "mean_std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.mean_std"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.plot"]], "plot() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.plot"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dna attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.profiles"]], "profiles (mdanalysis.analysis.legacy.x3dna.x3dnatraj attribute)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.profiles"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.run"]], "run() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run"]], "run_x3dna() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.run_x3dna"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.save"]], "save() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.save"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.sorted_profiles_iter"]], "sorted_profiles_iter() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.sorted_profiles_iter"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dna method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNA.std"]], "std() (mdanalysis.analysis.legacy.x3dna.x3dnatraj method)": [[26, "MDAnalysis.analysis.legacy.x3dna.X3DNAtraj.std"]], "lineardensity (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity"]], "mdanalysis.analysis.lineardensity": [[28, "module-MDAnalysis.analysis.lineardensity"]], "note (mdanalysis.analysis.lineardensity.lineardensity attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.Note"]], "results (class in mdanalysis.analysis.lineardensity)": [[28, "MDAnalysis.analysis.lineardensity.Results"]], "char (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char"]], "char_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.char_std"]], "charge_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density"]], "charge_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.charge_density_stddev"]], "dim (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.dim"]], "hist_bin_edges (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.hist_bin_edges"]], "mass_density (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density"]], "mass_density_stddev (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.mass_density_stddev"]], "pos (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos"]], "pos_std (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.pos_std"]], "slice_volume (mdanalysis.analysis.lineardensity.lineardensity.results.x attribute)": [[28, "MDAnalysis.analysis.lineardensity.LinearDensity.results.x.slice_volume"]], "einsteinmsd (class in mdanalysis.analysis.msd)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD"]], "mdanalysis.analysis.msd": [[29, "module-MDAnalysis.analysis.msd"]], "ag (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.ag"]], "dim_fac (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.dim_fac"]], "msds_by_particle (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.msds_by_particle"]], "n_frames (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_frames"]], "n_particles (mdanalysis.analysis.msd.einsteinmsd attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.n_particles"]], "run() (mdanalysis.analysis.msd.einsteinmsd method)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.run"]], "timeseries (mdanalysis.analysis.msd.einsteinmsd.results attribute)": [[29, "MDAnalysis.analysis.msd.EinsteinMSD.results.timeseries"]], "mdanalysis.analysis.nucleicacids": [[30, "module-MDAnalysis.analysis.nucleicacids"]], "nucpairdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist"]], "watsoncrickdist (class in mdanalysis.analysis.nucleicacids)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist"]], "pair_distances (mdanalysis.analysis.nucleicacids.nucpairdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.results.pair_distances"]], "pair_distances (mdanalysis.analysis.nucleicacids.watsoncrickdist.results attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.results.pair_distances"]], "run() (mdanalysis.analysis.nucleicacids.nucpairdist method)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.run"]], "run() (mdanalysis.analysis.nucleicacids.watsoncrickdist method)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.run"]], "times (mdanalysis.analysis.nucleicacids.nucpairdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.NucPairDist.times"]], "times (mdanalysis.analysis.nucleicacids.watsoncrickdist attribute)": [[30, "MDAnalysis.analysis.nucleicacids.WatsonCrickDist.times"]], "mdanalysis.analysis.nuclinfo": [[31, "module-MDAnalysis.analysis.nuclinfo"]], "hydroxyl() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.hydroxyl"]], "major_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.major_pair"]], "minor_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.minor_pair"]], "phase_as() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_as"]], "phase_cp() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.phase_cp"]], "pseudo_dihe_baseflip() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.pseudo_dihe_baseflip"]], "tors() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors"]], "tors_alpha() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_alpha"]], "tors_beta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_beta"]], "tors_chi() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_chi"]], "tors_delta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_delta"]], "tors_eps() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_eps"]], "tors_gamma() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_gamma"]], "tors_zeta() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.tors_zeta"]], "wc_pair() (in module mdanalysis.analysis.nuclinfo)": [[31, "MDAnalysis.analysis.nuclinfo.wc_pair"]], "mdanalysis.analysis.pca": [[32, "module-MDAnalysis.analysis.pca"]], "pca (class in mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.PCA"]], "cosine_content() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cosine_content"]], "cumulated_variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.cumulated_variance"]], "cumulated_variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.cumulated_variance"]], "cumulative_overlap() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.cumulative_overlap"]], "cumulative_overlap() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.cumulative_overlap"]], "p_components (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.p_components"]], "p_components (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.p_components"]], "project_single_frame() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.project_single_frame"]], "rmsip() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.rmsip"]], "rmsip() (in module mdanalysis.analysis.pca)": [[32, "MDAnalysis.analysis.pca.rmsip"]], "run() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.run"]], "transform() (mdanalysis.analysis.pca.pca method)": [[32, "MDAnalysis.analysis.pca.PCA.transform"]], "variance (mdanalysis.analysis.pca.pca attribute)": [[32, "MDAnalysis.analysis.pca.PCA.variance"]], "variance (mdanalysis.analysis.pca.pca.results attribute)": [[32, "MDAnalysis.analysis.pca.PCA.results.variance"]], "mdanalysis.analysis.polymer": [[33, "module-MDAnalysis.analysis.polymer"]], "persistencelength (class in mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength"]], "bond_autocorrelation (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.bond_autocorrelation"]], "fit (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.fit"]], "fit (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.fit"]], "fit_exponential_decay() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.fit_exponential_decay"]], "lb (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lb"]], "lb (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lb"]], "lp (mdanalysis.analysis.polymer.persistencelength attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.lp"]], "lp (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.lp"]], "plot() (mdanalysis.analysis.polymer.persistencelength method)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.plot"]], "sort_backbone() (in module mdanalysis.analysis.polymer)": [[33, "MDAnalysis.analysis.polymer.sort_backbone"]], "x (mdanalysis.analysis.polymer.persistencelength.results attribute)": [[33, "MDAnalysis.analysis.polymer.PersistenceLength.results.x"]], "d (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.D"]], "mdanalysis.analysis.psa": [[34, "module-MDAnalysis.analysis.psa"]], "psapair (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAPair"]], "psanalysis (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.PSAnalysis"]], "path (class in mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.Path"]], "cluster() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.cluster"]], "discrete_frechet() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.discrete_frechet"]], "dist_mat_to_vec() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.dist_mat_to_vec"]], "fit_to_reference() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.fit_to_reference"]], "generate_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.generate_paths"]], "get_coord_axes() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_coord_axes"]], "get_msd_matrix() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_msd_matrix"]], "get_num_atoms() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_atoms"]], "get_num_atoms() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.get_num_atoms"]], "get_num_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_num_paths"]], "get_pairwise_distances() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_pairwise_distances"]], "get_path_metric_func() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.get_path_metric_func"]], "get_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.get_paths"]], "hausdorff() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff"]], "hausdorff_avg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_avg"]], "hausdorff_neighbors() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_neighbors"]], "hausdorff_pair (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.hausdorff_pair"]], "hausdorff_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.hausdorff_pairs"]], "hausdorff_wavg() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.hausdorff_wavg"]], "load() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.load"]], "matrix_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.matrix_id"]], "nearest_neighbors (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.nearest_neighbors"]], "nearest_neighbors (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.nearest_neighbors"]], "npaths (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.npaths"]], "pair_id (mdanalysis.analysis.psa.psapair attribute)": [[34, "MDAnalysis.analysis.psa.PSAPair.pair_id"]], "path (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path"]], "path_select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.path_select"]], "path_select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.path_select"]], "paths (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.paths"]], "plot() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot"]], "plot_annotated_heatmap() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_annotated_heatmap"]], "plot_nearest_neighbors() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.plot_nearest_neighbors"]], "psa_pairs (mdanalysis.analysis.psa.psanalysis property)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.psa_pairs"]], "ref_frame (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.ref_frame"]], "ref_frame (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.ref_frame"]], "run() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run"]], "run() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.run"]], "run_pairs_analysis() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.run_pairs_analysis"]], "save_paths() (mdanalysis.analysis.psa.psanalysis method)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.save_paths"]], "select (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.select"]], "select (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.select"]], "sqnorm() (in module mdanalysis.analysis.psa)": [[34, "MDAnalysis.analysis.psa.sqnorm"]], "to_path() (mdanalysis.analysis.psa.path method)": [[34, "MDAnalysis.analysis.psa.Path.to_path"]], "u_fitted (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_fitted"]], "u_original (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_original"]], "u_reference (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.u_reference"]], "u_reference (mdanalysis.analysis.psa.path attribute)": [[34, "MDAnalysis.analysis.psa.Path.u_reference"]], "universes (mdanalysis.analysis.psa.psanalysis attribute)": [[34, "MDAnalysis.analysis.psa.PSAnalysis.universes"]], "interrdf (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF"]], "interrdf_s (class in mdanalysis.analysis.rdf)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s"]], "mdanalysis.analysis.rdf": [[35, "module-MDAnalysis.analysis.rdf"]], "bins (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.bins"]], "bins (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.bins"]], "bins (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.bins"]], "cdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.cdf"]], "cdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.cdf"]], "count (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.count"]], "count (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.count"]], "count (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.count"]], "count (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.count"]], "edges (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.edges"]], "edges (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.edges"]], "edges (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.edges"]], "get_cdf() (mdanalysis.analysis.rdf.interrdf_s method)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.get_cdf"]], "rdf (mdanalysis.analysis.rdf.interrdf attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF.results.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.rdf"]], "rdf (mdanalysis.analysis.rdf.interrdf_s.results attribute)": [[35, "MDAnalysis.analysis.rdf.InterRDF_s.results.rdf"]], "mdanalysis.analysis.rms": [[36, "module-MDAnalysis.analysis.rms"]], "rmsd (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSD"]], "rmsf (class in mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.RMSF"]], "rmsd (mdanalysis.analysis.rms.rmsd attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.rmsd"]], "rmsd (mdanalysis.analysis.rms.rmsd.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSD.results.rmsd"]], "rmsd() (in module mdanalysis.analysis.rms)": [[36, "MDAnalysis.analysis.rms.rmsd"]], "rmsf (mdanalysis.analysis.rms.rmsf attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.rmsf"]], "rmsf (mdanalysis.analysis.rms.rmsf.results attribute)": [[36, "MDAnalysis.analysis.rms.RMSF.results.rmsf"]], "run() (mdanalysis.analysis.rms.rmsd method)": [[36, "MDAnalysis.analysis.rms.RMSD.run"]], "run() (mdanalysis.analysis.rms.rmsf method)": [[36, "MDAnalysis.analysis.rms.RMSF.run"]], "angulardistribution (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution"]], "mdanalysis.analysis.waterdynamics": [[37, "module-MDAnalysis.analysis.waterdynamics"]], "meansquaredisplacement (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement"]], "survivalprobability (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability"]], "waterorientationalrelaxation (class in mdanalysis.analysis.waterdynamics)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation"]], "lg2() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation static method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.lg2"]], "run() (mdanalysis.analysis.waterdynamics.angulardistribution method)": [[37, "MDAnalysis.analysis.waterdynamics.AngularDistribution.run"]], "run() (mdanalysis.analysis.waterdynamics.meansquaredisplacement method)": [[37, "MDAnalysis.analysis.waterdynamics.MeanSquareDisplacement.run"]], "run() (mdanalysis.analysis.waterdynamics.survivalprobability method)": [[37, "MDAnalysis.analysis.waterdynamics.SurvivalProbability.run"]], "run() (mdanalysis.analysis.waterdynamics.waterorientationalrelaxation method)": [[37, "MDAnalysis.analysis.waterdynamics.WaterOrientationalRelaxation.run"]], "default_acceptors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_ACCEPTORS"]], "default_donors (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.DEFAULT_DONORS"]], "mdanalysis.analysis.hydrogenbonds.wbridge_analysis": [[38, "module-MDAnalysis.analysis.hydrogenbonds.wbridge_analysis"]], "waterbridgeanalysis (class in mdanalysis.analysis.hydrogenbonds.wbridge_analysis)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis"]], "count_by_time() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_time"]], "count_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.count_by_type"]], "generate_table() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.generate_table"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.network"]], "network (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.network"]], "r_cov (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.r_cov"]], "table (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.table"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timeseries"]], "timeseries (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis.results attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.results.timeseries"]], "timesteps (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis attribute)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps"]], "timesteps_by_type() (mdanalysis.analysis.hydrogenbonds.wbridge_analysis.waterbridgeanalysis method)": [[38, "MDAnalysis.analysis.hydrogenbonds.wbridge_analysis.WaterBridgeAnalysis.timesteps_by_type"]], "edrreader (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader"]], "edrstep (class in mdanalysis.auxiliary.edr)": [[40, "MDAnalysis.auxiliary.EDR.EDRStep"]], "mdanalysis.auxiliary.edr": [[40, "module-MDAnalysis.auxiliary.EDR"]], "_auxdata (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._auxdata"]], "_n_steps (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader._n_steps"]], "data_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.data_dict"]], "get_data() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.get_data"]], "read_all_times() (mdanalysis.auxiliary.edr.edrreader method)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.read_all_times"]], "terms (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.terms"]], "unit_dict (mdanalysis.auxiliary.edr.edrreader attribute)": [[40, "MDAnalysis.auxiliary.EDR.EDRReader.unit_dict"]], "mdanalysis.auxiliary.xvg": [[41, "module-MDAnalysis.auxiliary.XVG"]], "xvgfilereader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader"]], "xvgreader (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader"]], "xvgstep (class in mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.XVGStep"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgfilereader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGFileReader.read_all_times"]], "read_all_times() (mdanalysis.auxiliary.xvg.xvgreader method)": [[41, "MDAnalysis.auxiliary.XVG.XVGReader.read_all_times"]], "uncomment() (in module mdanalysis.auxiliary.xvg)": [[41, "MDAnalysis.auxiliary.XVG.uncomment"]], "auxfilereader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader"]], "auxreader (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxReader"]], "auxstep (class in mdanalysis.auxiliary.base)": [[42, "MDAnalysis.auxiliary.base.AuxStep"]], "mdanalysis.auxiliary.base": [[42, "module-MDAnalysis.auxiliary.base"]], "attach_auxiliary() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.attach_auxiliary"]], "auxfile (mdanalysis.auxiliary.base.auxfilereader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.auxfile"]], "auxstep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.auxstep"]], "calc_representative() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.calc_representative"]], "close() (mdanalysis.auxiliary.base.auxfilereader method)": [[42, "MDAnalysis.auxiliary.base.AuxFileReader.close"]], "constant_dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.constant_dt"]], "copy() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.copy"]], "data (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.data"]], "data_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.data_selector"]], "dt (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.dt"]], "frame_data (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_data"]], "frame_rep (mdanalysis.auxiliary.base.auxreader attribute)": [[42, "MDAnalysis.auxiliary.base.AuxReader.frame_rep"]], "get_description() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.get_description"]], "initial_time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.initial_time"]], "move_to_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.move_to_ts"]], "n_steps (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.n_steps"]], "next() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next"]], "next_nonempty_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.next_nonempty_frame"]], "read_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.read_ts"]], "represent_ts_as (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.represent_ts_as"]], "rewind() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.rewind"]], "step (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step"]], "step (mdanalysis.auxiliary.base.auxstep attribute)": [[42, "MDAnalysis.auxiliary.base.AuxStep.step"]], "step_to_frame() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_frame"]], "step_to_time() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.step_to_time"]], "time (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time"]], "time (mdanalysis.auxiliary.base.auxstep property)": [[42, "MDAnalysis.auxiliary.base.AuxStep.time"]], "time_selector (mdanalysis.auxiliary.base.auxreader property)": [[42, "MDAnalysis.auxiliary.base.AuxReader.time_selector"]], "update_ts() (mdanalysis.auxiliary.base.auxreader method)": [[42, "MDAnalysis.auxiliary.base.AuxReader.update_ts"]], "mdanalysis.auxiliary.core": [[43, "module-MDAnalysis.auxiliary.core"]], "auxreader() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.auxreader"]], "get_auxreader_for() (in module mdanalysis.auxiliary.core)": [[43, "MDAnalysis.auxiliary.core.get_auxreader_for"]], "mdanalysis.auxiliary.__init__": [[44, "module-MDAnalysis.auxiliary.__init__"]], "mdanalysis.converters": [[46, "module-MDAnalysis.converters"]], "mdanalysis.converters.openmm": [[47, "module-MDAnalysis.converters.OpenMM"]], "mdanalysis.converters.openmmparser": [[47, "module-MDAnalysis.converters.OpenMMParser"]], "openmmappreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader"]], "openmmapptopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser"]], "openmmsimulationreader (class in mdanalysis.converters.openmm)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader"]], "openmmtopologyparser (class in mdanalysis.converters.openmmparser)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser"]], "close() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.close"]], "close() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.close"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmapptopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.converters.openmmparser.openmmtopologyparser method)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.convert_velocities_to_native"]], "units (mdanalysis.converters.openmm.openmmappreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMAppReader.units"]], "units (mdanalysis.converters.openmm.openmmsimulationreader attribute)": [[47, "MDAnalysis.converters.OpenMM.OpenMMSimulationReader.units"]], "units (mdanalysis.converters.openmmparser.openmmapptopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMAppTopologyParser.units"]], "units (mdanalysis.converters.openmmparser.openmmtopologyparser attribute)": [[47, "MDAnalysis.converters.OpenMMParser.OpenMMTopologyParser.units"]], "mdanalysis.converters.parmed": [[48, "module-MDAnalysis.converters.ParmEd"]], "mdanalysis.converters.parmedparser": [[48, "module-MDAnalysis.converters.ParmEdParser"]], "parmedconverter (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter"]], "parmedparser (class in mdanalysis.converters.parmedparser)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser"]], "parmedreader (class in mdanalysis.converters.parmed)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader"]], "close() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.close"]], "convert() (mdanalysis.converters.parmed.parmedconverter method)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.parmedparser.parmedparser method)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.parse"]], "units (mdanalysis.converters.parmed.parmedconverter attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdConverter.units"]], "units (mdanalysis.converters.parmed.parmedreader attribute)": [[48, "MDAnalysis.converters.ParmEd.ParmEdReader.units"]], "units (mdanalysis.converters.parmedparser.parmedparser attribute)": [[48, "MDAnalysis.converters.ParmEdParser.ParmEdParser.units"]], "mdanalysis.converters.rdkit": [[49, "module-MDAnalysis.converters.RDKit"]], "mdanalysis.converters.rdkitparser": [[49, "module-MDAnalysis.converters.RDKitParser"]], "rdkitconverter (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter"]], "rdkitparser (class in mdanalysis.converters.rdkitparser)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser"]], "rdkitreader (class in mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit.RDKitReader"]], "_infer_bo_and_charges() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._infer_bo_and_charges"]], "_rebuild_conjugated_bonds() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._rebuild_conjugated_bonds"]], "_standardize_patterns() (in module mdanalysis.converters.rdkit)": [[49, "MDAnalysis.converters.RDKit._standardize_patterns"]], "close() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.close"]], "convert() (mdanalysis.converters.rdkit.rdkitconverter method)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.convert"]], "convert_forces_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.convert_velocities_to_native"]], "parse() (mdanalysis.converters.rdkitparser.rdkitparser method)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.parse"]], "units (mdanalysis.converters.rdkit.rdkitconverter attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitConverter.units"]], "units (mdanalysis.converters.rdkit.rdkitreader attribute)": [[49, "MDAnalysis.converters.RDKit.RDKitReader.units"]], "units (mdanalysis.converters.rdkitparser.rdkitparser attribute)": [[49, "MDAnalysis.converters.RDKitParser.RDKitParser.units"]], "crdreader (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDReader"]], "crdwriter (class in mdanalysis.coordinates.crd)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter"]], "mdanalysis.coordinates.crd": [[50, "module-MDAnalysis.coordinates.CRD"]], "writer() (mdanalysis.coordinates.crd.crdreader method)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.Writer"]], "units (mdanalysis.coordinates.crd.crdreader attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDReader.units"]], "units (mdanalysis.coordinates.crd.crdwriter attribute)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.units"]], "write() (mdanalysis.coordinates.crd.crdwriter method)": [[50, "MDAnalysis.coordinates.CRD.CRDWriter.write"]], "dcdreader (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.dcd)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter"]], "mdanalysis.coordinates.dcd": [[51, "module-MDAnalysis.coordinates.DCD"]], "otherwriter() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.close"]], "close() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.copy"]], "dimensions (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.dt"]], "frame (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next"]], "next_as_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.dcd.dcdreader static method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.time"]], "timeseries() (mdanalysis.coordinates.dcd.dcdreader method)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.timeseries"]], "totaltime (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.totaltime"]], "transformations (mdanalysis.coordinates.dcd.dcdreader property)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.transformations"]], "units (mdanalysis.coordinates.dcd.dcdreader attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDReader.units"]], "units (mdanalysis.coordinates.dcd.dcdwriter attribute)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.units"]], "write() (mdanalysis.coordinates.dcd.dcdwriter method)": [[51, "MDAnalysis.coordinates.DCD.DCDWriter.write"]], "configreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader"]], "historyreader (class in mdanalysis.coordinates.dlpoly)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader"]], "mdanalysis.coordinates.dlpoly": [[52, "module-MDAnalysis.coordinates.DLPoly"]], "close() (mdanalysis.coordinates.dlpoly.historyreader method)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.close"]], "units (mdanalysis.coordinates.dlpoly.configreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.ConfigReader.units"]], "units (mdanalysis.coordinates.dlpoly.historyreader attribute)": [[52, "MDAnalysis.coordinates.DLPoly.HistoryReader.units"]], "dmsreader (class in mdanalysis.coordinates.dms)": [[53, "MDAnalysis.coordinates.DMS.DMSReader"]], "mdanalysis.coordinates.dms": [[53, "module-MDAnalysis.coordinates.DMS"]], "units (mdanalysis.coordinates.dms.dmsreader attribute)": [[53, "MDAnalysis.coordinates.DMS.DMSReader.units"]], "fhiaimsreader (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader"]], "fhiaimswriter (class in mdanalysis.coordinates.fhiaims)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter"]], "mdanalysis.coordinates.fhiaims": [[54, "module-MDAnalysis.coordinates.FHIAIMS"]], "otherwriter() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.OtherWriter"]], "writer() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.add_transformations"]], "aux_list (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.check_slice_indices"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.close"]], "close() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.copy"]], "dt (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.dt"]], "fmt (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.fmt"]], "frame (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next"]], "next_as_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.fhiaims.fhiaimsreader class method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rename_aux"]], "rewind() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.set_aux_attribute"]], "time (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.time"]], "timeseries() (mdanalysis.coordinates.fhiaims.fhiaimsreader method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.timeseries"]], "totaltime (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.totaltime"]], "transformations (mdanalysis.coordinates.fhiaims.fhiaimsreader property)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.transformations"]], "units (mdanalysis.coordinates.fhiaims.fhiaimsreader attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSReader.units"]], "units (mdanalysis.coordinates.fhiaims.fhiaimswriter attribute)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.units"]], "write() (mdanalysis.coordinates.fhiaims.fhiaimswriter method)": [[54, "MDAnalysis.coordinates.FHIAIMS.FHIAIMSWriter.write"]], "gmsreader (class in mdanalysis.coordinates.gms)": [[55, "MDAnalysis.coordinates.GMS.GMSReader"]], "mdanalysis.coordinates.gms": [[55, "module-MDAnalysis.coordinates.GMS"]], "close() (mdanalysis.coordinates.gms.gmsreader method)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.close"]], "n_atoms (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.n_atoms"]], "runtyp (mdanalysis.coordinates.gms.gmsreader property)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.runtyp"]], "units (mdanalysis.coordinates.gms.gmsreader attribute)": [[55, "MDAnalysis.coordinates.GMS.GMSReader.units"]], "groreader (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROReader"]], "growriter (class in mdanalysis.coordinates.gro)": [[56, "MDAnalysis.coordinates.GRO.GROWriter"]], "mdanalysis.coordinates.gro": [[56, "module-MDAnalysis.coordinates.GRO"]], "writer() (mdanalysis.coordinates.gro.groreader method)": [[56, "MDAnalysis.coordinates.GRO.GROReader.Writer"]], "fmt (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.fmt"]], "units (mdanalysis.coordinates.gro.groreader attribute)": [[56, "MDAnalysis.coordinates.GRO.GROReader.units"]], "units (mdanalysis.coordinates.gro.growriter attribute)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.units"]], "write() (mdanalysis.coordinates.gro.growriter method)": [[56, "MDAnalysis.coordinates.GRO.GROWriter.write"]], "gsdpicklable (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDPicklable"]], "gsdreader (class in mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.GSDReader"]], "mdanalysis.coordinates.gsd": [[57, "module-MDAnalysis.coordinates.GSD"]], "otherwriter() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.copy"]], "dt (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.dt"]], "frame (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.get_aux_descriptions"]], "gsd_pickle_open() (in module mdanalysis.coordinates.gsd)": [[57, "MDAnalysis.coordinates.GSD.gsd_pickle_open"]], "iter_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.n_frames"]], "next() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next"]], "next_as_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.gsd.gsdreader class method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.time"]], "timeseries() (mdanalysis.coordinates.gsd.gsdreader method)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.timeseries"]], "totaltime (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.totaltime"]], "transformations (mdanalysis.coordinates.gsd.gsdreader property)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.transformations"]], "units (mdanalysis.coordinates.gsd.gsdreader attribute)": [[57, "MDAnalysis.coordinates.GSD.GSDReader.units"]], "h5mdreader (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader"]], "h5mdwriter (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter"]], "h5md_version (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.H5MD_VERSION"]], "h5pypicklable (class in mdanalysis.coordinates.h5md)": [[58, "MDAnalysis.coordinates.H5MD.H5PYPicklable"]], "mdanalysis.coordinates.h5md": [[58, "module-MDAnalysis.coordinates.H5MD"]], "otherwriter() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.OtherWriter"]], "writer() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.Writer"]], "_reopen() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader._reopen"]], "add_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.add_transformations"]], "aux_list (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.check_slice_indices"]], "close() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.close"]], "close() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.copy"]], "data_blacklist (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.data_blacklist"]], "dt (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.dt"]], "frame (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.get_aux_descriptions"]], "has_forces (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_forces"]], "has_forces (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_forces"]], "has_positions (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_positions"]], "has_positions (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_positions"]], "has_valid_coordinates() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_valid_coordinates"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.has_velocities"]], "has_velocities (mdanalysis.coordinates.h5md.h5mdwriter property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.has_velocities"]], "iter_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.n_frames"]], "next() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next"]], "next_as_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.next_as_aux"]], "open_trajectory() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.h5md.h5mdreader static method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rename_aux"]], "rewind() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.set_aux_attribute"]], "time (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.time"]], "timeseries() (mdanalysis.coordinates.h5md.h5mdreader method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.timeseries"]], "totaltime (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.totaltime"]], "transformations (mdanalysis.coordinates.h5md.h5mdreader property)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.transformations"]], "units (mdanalysis.coordinates.h5md.h5mdreader attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDReader.units"]], "units (mdanalysis.coordinates.h5md.h5mdwriter attribute)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.units"]], "write() (mdanalysis.coordinates.h5md.h5mdwriter method)": [[58, "MDAnalysis.coordinates.H5MD.H5MDWriter.write"]], "inpreader (class in mdanalysis.coordinates.inpcrd)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader"]], "mdanalysis.coordinates.inpcrd": [[59, "module-MDAnalysis.coordinates.INPCRD"]], "parse_n_atoms() (mdanalysis.coordinates.inpcrd.inpreader static method)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.parse_n_atoms"]], "units (mdanalysis.coordinates.inpcrd.inpreader attribute)": [[59, "MDAnalysis.coordinates.INPCRD.INPReader.units"]], "datareader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader"]], "datawriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter"]], "dcdreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader"]], "dcdwriter (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter"]], "dumpreader (class in mdanalysis.coordinates.lammps)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader"]], "mdanalysis.coordinates.lammps": [[60, "module-MDAnalysis.coordinates.LAMMPS"]], "otherwriter() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.OtherWriter"]], "writer() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.Writer"]], "writer() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.add_transformations"]], "aux_list (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.aux_list"]], "aux_list (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.check_slice_indices"]], "close() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.close"]], "close() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.close"]], "close() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.close"]], "close() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.close"]], "close() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_dimensions_to_unitcell"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.copy"]], "copy() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.copy"]], "dimensions (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dimensions"]], "dt (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.dt"]], "dt (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.dt"]], "dt (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.dt"]], "frame (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.frame"]], "frame (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.frame"]], "frame (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.has_valid_coordinates"]], "has_valid_coordinates() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.n_frames"]], "next() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next"]], "next() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next"]], "next() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next"]], "next_as_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.datareader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dcdreader static method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.lammps.dumpreader class method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rename_aux"]], "rewind() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.rewind"]], "rewind() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.set_aux_attribute"]], "time (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.time"]], "time (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.time"]], "time (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.time"]], "timeseries() (mdanalysis.coordinates.lammps.datareader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dcdreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.timeseries"]], "timeseries() (mdanalysis.coordinates.lammps.dumpreader method)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.timeseries"]], "totaltime (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.totaltime"]], "totaltime (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.totaltime"]], "transformations (mdanalysis.coordinates.lammps.datareader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dcdreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.transformations"]], "transformations (mdanalysis.coordinates.lammps.dumpreader property)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.transformations"]], "units (mdanalysis.coordinates.lammps.datareader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAReader.units"]], "units (mdanalysis.coordinates.lammps.datawriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.units"]], "units (mdanalysis.coordinates.lammps.dcdreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDReader.units"]], "units (mdanalysis.coordinates.lammps.dcdwriter attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.units"]], "units (mdanalysis.coordinates.lammps.dumpreader attribute)": [[60, "MDAnalysis.coordinates.LAMMPS.DumpReader.units"]], "write() (mdanalysis.coordinates.lammps.datawriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DATAWriter.write"]], "write() (mdanalysis.coordinates.lammps.dcdwriter method)": [[60, "MDAnalysis.coordinates.LAMMPS.DCDWriter.write"]], "mdanalysis.coordinates.mmtf": [[61, "module-MDAnalysis.coordinates.MMTF"]], "mmtfreader (class in mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.MMTFReader"]], "fetch_mmtf() (in module mdanalysis.coordinates.mmtf)": [[61, "MDAnalysis.coordinates.MMTF.fetch_mmtf"]], "mdanalysis.coordinates.mol2": [[62, "module-MDAnalysis.coordinates.MOL2"]], "mol2reader (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader"]], "mol2writer (class in mdanalysis.coordinates.mol2)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer"]], "close() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.close"]], "encode_block() (mdanalysis.coordinates.mol2.mol2writer method)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.encode_block"]], "units (mdanalysis.coordinates.mol2.mol2reader attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Reader.units"]], "units (mdanalysis.coordinates.mol2.mol2writer attribute)": [[62, "MDAnalysis.coordinates.MOL2.MOL2Writer.units"]], "mdanalysis.coordinates.namdbin": [[63, "module-MDAnalysis.coordinates.NAMDBIN"]], "namdbinreader (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader"]], "namdbinwriter (class in mdanalysis.coordinates.namdbin)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter"]], "writer() (mdanalysis.coordinates.namdbin.namdbinreader method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.Writer"]], "parse_n_atoms() (mdanalysis.coordinates.namdbin.namdbinreader static method)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.parse_n_atoms"]], "units (mdanalysis.coordinates.namdbin.namdbinreader attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINReader.units"]], "units (mdanalysis.coordinates.namdbin.namdbinwriter attribute)": [[63, "MDAnalysis.coordinates.NAMDBIN.NAMDBINWriter.units"]], "conect() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CONECT"]], "cryst1() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.CRYST1"]], "end() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.END"]], "endmdl() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.ENDMDL"]], "extendedpdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader"]], "header() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.HEADER"]], "mdanalysis.coordinates.pdb": [[64, "module-MDAnalysis.coordinates.PDB"]], "model() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.MODEL"]], "multipdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.MultiPDBWriter"]], "otherwriter() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.OtherWriter"]], "pdbreader (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBReader"]], "pdbwriter (class in mdanalysis.coordinates.pdb)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter"]], "remark() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.REMARK"]], "title() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.TITLE"]], "writer() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.Writer"]], "writer() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.Writer"]], "_check_pdb_coordinates() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._check_pdb_coordinates"]], "_update_frame() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._update_frame"]], "_write_pdb_bonds() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_pdb_bonds"]], "_write_timestep() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter._write_timestep"]], "add_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.add_transformations"]], "aux_list (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.check_slice_indices"]], "close() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbreader method)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.close"]], "close() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.close"]], "convert_forces_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.copy"]], "dt (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.dt"]], "frame (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next"]], "next_as_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.pdb.extendedpdbreader class method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rename_aux"]], "rewind() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.set_aux_attribute"]], "time (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.time"]], "timeseries() (mdanalysis.coordinates.pdb.extendedpdbreader method)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.timeseries"]], "totaltime (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.totaltime"]], "transformations (mdanalysis.coordinates.pdb.extendedpdbreader property)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.transformations"]], "units (mdanalysis.coordinates.pdb.extendedpdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.ExtendedPDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbreader attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBReader.units"]], "units (mdanalysis.coordinates.pdb.pdbwriter attribute)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.units"]], "write() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write"]], "write_all_timesteps() (mdanalysis.coordinates.pdb.pdbwriter method)": [[64, "MDAnalysis.coordinates.PDB.PDBWriter.write_all_timesteps"]], "mdanalysis.coordinates.pdbqt": [[65, "module-MDAnalysis.coordinates.PDBQT"]], "pdbqtreader (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader"]], "pdbqtwriter (class in mdanalysis.coordinates.pdbqt)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter"]], "writer() (mdanalysis.coordinates.pdbqt.pdbqtreader method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.Writer"]], "close() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.close"]], "units (mdanalysis.coordinates.pdbqt.pdbqtreader attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTReader.units"]], "units (mdanalysis.coordinates.pdbqt.pdbqtwriter attribute)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.units"]], "write() (mdanalysis.coordinates.pdbqt.pdbqtwriter method)": [[65, "MDAnalysis.coordinates.PDBQT.PDBQTWriter.write"]], "mdanalysis.coordinates.pqr": [[66, "module-MDAnalysis.coordinates.PQR"]], "pqrreader (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRReader"]], "pqrwriter (class in mdanalysis.coordinates.pqr)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter"]], "writer() (mdanalysis.coordinates.pqr.pqrreader method)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.Writer"]], "units (mdanalysis.coordinates.pqr.pqrreader attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRReader.units"]], "units (mdanalysis.coordinates.pqr.pqrwriter attribute)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.units"]], "write() (mdanalysis.coordinates.pqr.pqrwriter method)": [[66, "MDAnalysis.coordinates.PQR.PQRWriter.write"]], "mdanalysis.coordinates.tng": [[67, "module-MDAnalysis.coordinates.TNG"]], "tngreader (class in mdanalysis.coordinates.tng)": [[67, "MDAnalysis.coordinates.TNG.TNGReader"]], "writer() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.Writer"]], "additional_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.additional_blocks"]], "blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.blocks"]], "close() (mdanalysis.coordinates.tng.tngreader method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.close"]], "n_frames (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.n_frames"]], "parse_n_atoms() (mdanalysis.coordinates.tng.tngreader static method)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.parse_n_atoms"]], "special_blocks (mdanalysis.coordinates.tng.tngreader property)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.special_blocks"]], "units (mdanalysis.coordinates.tng.tngreader attribute)": [[67, "MDAnalysis.coordinates.TNG.TNGReader.units"]], "ld_library_path": [[68, "index-0"], [68, "index-1"]], "mdanalysis.coordinates.trj": [[68, "module-MDAnalysis.coordinates.TRJ"]], "ncdfpicklable (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFPicklable"]], "ncdfreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader"]], "ncdfwriter (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter"]], "trjreader (class in mdanalysis.coordinates.trj)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader"]], "writer() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.Writer"]], "close() (mdanalysis.coordinates.trj.ncdfreader method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.close"]], "close() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.close"]], "close() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.close"]], "is_periodic() (mdanalysis.coordinates.trj.ncdfwriter method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.is_periodic"]], "n_frames (mdanalysis.coordinates.trj.trjreader property)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trj.trjreader method)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.open_trajectory"]], "parse_n_atoms() (mdanalysis.coordinates.trj.ncdfreader static method)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.parse_n_atoms"]], "units (mdanalysis.coordinates.trj.ncdfreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFReader.units"]], "units (mdanalysis.coordinates.trj.ncdfwriter attribute)": [[68, "MDAnalysis.coordinates.TRJ.NCDFWriter.units"]], "units (mdanalysis.coordinates.trj.trjreader attribute)": [[68, "MDAnalysis.coordinates.TRJ.TRJReader.units"]], "mdanalysis.coordinates.trr": [[69, "module-MDAnalysis.coordinates.TRR"]], "otherwriter() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.OtherWriter"]], "trrreader (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRReader"]], "trrwriter (class in mdanalysis.coordinates.trr)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter"]], "writer() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.add_transformations"]], "aux_list (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.check_slice_indices"]], "close() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.close"]], "close() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.copy"]], "dt (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.dt"]], "frame (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.n_frames"]], "next() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next"]], "next_as_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.trr.trrreader class method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rename_aux"]], "rewind() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.set_aux_attribute"]], "time (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.time"]], "timeseries() (mdanalysis.coordinates.trr.trrreader method)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.timeseries"]], "totaltime (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.totaltime"]], "transformations (mdanalysis.coordinates.trr.trrreader property)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.transformations"]], "units (mdanalysis.coordinates.trr.trrreader attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRReader.units"]], "units (mdanalysis.coordinates.trr.trrwriter attribute)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.units"]], "write() (mdanalysis.coordinates.trr.trrwriter method)": [[69, "MDAnalysis.coordinates.TRR.TRRWriter.write"]], "mdanalysis.coordinates.trz": [[70, "module-MDAnalysis.coordinates.TRZ"]], "trzreader (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader"]], "trzwriter (class in mdanalysis.coordinates.trz)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter"]], "writer() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.Writer"]], "close() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.close"]], "close() (mdanalysis.coordinates.trz.trzwriter method)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.close"]], "delta (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.delta"]], "n_atoms (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_atoms"]], "n_frames (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.n_frames"]], "open_trajectory() (mdanalysis.coordinates.trz.trzreader method)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.open_trajectory"]], "skip_timestep (mdanalysis.coordinates.trz.trzreader property)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.skip_timestep"]], "ts (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.ts"]], "units (mdanalysis.coordinates.trz.trzreader attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZReader.units"]], "units (mdanalysis.coordinates.trz.trzwriter attribute)": [[70, "MDAnalysis.coordinates.TRZ.TRZWriter.units"]], "mdanalysis.coordinates.txyz": [[71, "module-MDAnalysis.coordinates.TXYZ"]], "otherwriter() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.OtherWriter"]], "txyzreader (class in mdanalysis.coordinates.txyz)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader"]], "writer() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.add_transformations"]], "aux_list (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.check_slice_indices"]], "close() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.copy"]], "dt (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.dt"]], "frame (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.iter_auxiliary"]], "n_atoms (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.n_atoms"]], "next() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next"]], "next_as_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.txyz.txyzreader class method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rename_aux"]], "rewind() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.set_aux_attribute"]], "time (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.time"]], "timeseries() (mdanalysis.coordinates.txyz.txyzreader method)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.timeseries"]], "totaltime (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.totaltime"]], "transformations (mdanalysis.coordinates.txyz.txyzreader property)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.transformations"]], "units (mdanalysis.coordinates.txyz.txyzreader attribute)": [[71, "MDAnalysis.coordinates.TXYZ.TXYZReader.units"]], "mdanalysis.coordinates.xdr": [[72, "module-MDAnalysis.coordinates.XDR"]], "otherwriter() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.Writer"]], "xdrbasereader (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader"]], "xdrbasewriter (class in mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter"]], "add_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.close"]], "close() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.copy"]], "dt (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.dt"]], "frame (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.n_frames"]], "next() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next"]], "next_as_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.next_as_aux"]], "offsets_filename() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.offsets_filename"]], "parse_n_atoms() (mdanalysis.coordinates.xdr.xdrbasereader class method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.parse_n_atoms"]], "read_numpy_offsets() (in module mdanalysis.coordinates.xdr)": [[72, "MDAnalysis.coordinates.XDR.read_numpy_offsets"]], "remove_auxiliary() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.time"]], "timeseries() (mdanalysis.coordinates.xdr.xdrbasereader method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.timeseries"]], "totaltime (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.totaltime"]], "transformations (mdanalysis.coordinates.xdr.xdrbasereader property)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.transformations"]], "units (mdanalysis.coordinates.xdr.xdrbasereader attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseReader.units"]], "units (mdanalysis.coordinates.xdr.xdrbasewriter attribute)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.units"]], "write() (mdanalysis.coordinates.xdr.xdrbasewriter method)": [[72, "MDAnalysis.coordinates.XDR.XDRBaseWriter.write"]], "mdanalysis.coordinates.xtc": [[73, "module-MDAnalysis.coordinates.XTC"]], "otherwriter() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.OtherWriter"]], "writer() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.Writer"]], "xtcreader (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCReader"]], "xtcwriter (class in mdanalysis.coordinates.xtc)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter"]], "add_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.add_transformations"]], "aux_list (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.check_slice_indices"]], "close() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.close"]], "close() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.copy"]], "dt (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.dt"]], "frame (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.frame"]], "get_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.iter_auxiliary"]], "n_frames (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.n_frames"]], "next() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next"]], "next_as_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.xtc.xtcreader class method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rename_aux"]], "rewind() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.set_aux_attribute"]], "time (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.time"]], "timeseries() (mdanalysis.coordinates.xtc.xtcreader method)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.timeseries"]], "totaltime (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.totaltime"]], "transformations (mdanalysis.coordinates.xtc.xtcreader property)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.transformations"]], "units (mdanalysis.coordinates.xtc.xtcreader attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCReader.units"]], "units (mdanalysis.coordinates.xtc.xtcwriter attribute)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.units"]], "write() (mdanalysis.coordinates.xtc.xtcwriter method)": [[73, "MDAnalysis.coordinates.XTC.XTCWriter.write"]], "mdanalysis.coordinates.xyz": [[74, "module-MDAnalysis.coordinates.XYZ"]], "writer() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.Writer"]], "xyzreader (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader"]], "xyzwriter (class in mdanalysis.coordinates.xyz)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter"]], "close() (mdanalysis.coordinates.xyz.xyzreader method)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.close"]], "close() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.close"]], "n_atoms (mdanalysis.coordinates.xyz.xyzreader property)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.n_atoms"]], "units (mdanalysis.coordinates.xyz.xyzreader attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZReader.units"]], "units (mdanalysis.coordinates.xyz.xyzwriter attribute)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.units"]], "write() (mdanalysis.coordinates.xyz.xyzwriter method)": [[74, "MDAnalysis.coordinates.XYZ.XYZWriter.write"]], "converterbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ConverterBase"]], "frameiteratorall (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorAll"]], "frameiteratorbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorBase"]], "frameiteratorindices (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorIndices"]], "frameiteratorsliced (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.FrameIteratorSliced"]], "iobase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.IOBase"]], "mdanalysis.coordinates.base": [[75, "module-MDAnalysis.coordinates.base"]], "otherwriter() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.OtherWriter"]], "otherwriter() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.OtherWriter"]], "protoreader (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ProtoReader"]], "readerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.ReaderBase"]], "singleframereaderbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase"]], "writer() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.Writer"]], "writer() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.Writer"]], "writer() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.Writer"]], "writerbase (class in mdanalysis.coordinates.base)": [[75, "MDAnalysis.coordinates.base.WriterBase"]], "add_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_auxiliary"]], "add_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.add_transformations"]], "add_transformations() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.add_transformations"]], "aux_list (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.aux_list"]], "aux_list (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.aux_list"]], "aux_list (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.check_slice_indices"]], "check_slice_indices() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.check_slice_indices"]], "close() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.close"]], "close() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.close"]], "close() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.close"]], "close() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.close"]], "close() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.close"]], "convert_dimensions_to_unitcell() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_dimensions_to_unitcell"]], "convert_forces_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_from_native"]], "convert_forces_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_forces_to_native"]], "convert_forces_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_from_native"]], "convert_pos_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_pos_to_native"]], "convert_pos_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_from_native"]], "convert_time_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_time_to_native"]], "convert_time_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_from_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.converterbase method)": [[75, "MDAnalysis.coordinates.base.ConverterBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.iobase method)": [[75, "MDAnalysis.coordinates.base.IOBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.convert_velocities_to_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.copy"]], "copy() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.copy"]], "dt (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.dt"]], "dt (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.dt"]], "dt (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.dt"]], "frame (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.frame"]], "frame (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.frame"]], "frame (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.frame"]], "get_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_attribute"]], "get_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.get_aux_descriptions"]], "get_aux_descriptions() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.get_aux_descriptions"]], "has_valid_coordinates() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.has_valid_coordinates"]], "iter_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_as_aux"]], "iter_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.iter_auxiliary"]], "iter_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.iter_auxiliary"]], "next() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next"]], "next() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next"]], "next() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next"]], "next_as_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.next_as_aux"]], "next_as_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.base.protoreader class method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.readerbase class method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.parse_n_atoms"]], "parse_n_atoms() (mdanalysis.coordinates.base.singleframereaderbase class method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.remove_auxiliary"]], "remove_auxiliary() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rename_aux"]], "rename_aux() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rename_aux"]], "rewind() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.rewind"]], "rewind() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.rewind"]], "rewind() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.rewind"]], "set_aux_attribute() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.set_aux_attribute"]], "set_aux_attribute() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.set_aux_attribute"]], "time (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.time"]], "time (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.time"]], "time (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.time"]], "timeseries() (mdanalysis.coordinates.base.protoreader method)": [[75, "MDAnalysis.coordinates.base.ProtoReader.timeseries"]], "timeseries() (mdanalysis.coordinates.base.readerbase method)": [[75, "MDAnalysis.coordinates.base.ReaderBase.timeseries"]], "timeseries() (mdanalysis.coordinates.base.singleframereaderbase method)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.timeseries"]], "totaltime (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.totaltime"]], "totaltime (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.totaltime"]], "totaltime (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.totaltime"]], "transformations (mdanalysis.coordinates.base.protoreader property)": [[75, "MDAnalysis.coordinates.base.ProtoReader.transformations"]], "transformations (mdanalysis.coordinates.base.readerbase property)": [[75, "MDAnalysis.coordinates.base.ReaderBase.transformations"]], "transformations (mdanalysis.coordinates.base.singleframereaderbase property)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.transformations"]], "units (mdanalysis.coordinates.base.converterbase attribute)": [[75, "MDAnalysis.coordinates.base.ConverterBase.units"]], "units (mdanalysis.coordinates.base.iobase attribute)": [[75, "MDAnalysis.coordinates.base.IOBase.units"]], "units (mdanalysis.coordinates.base.readerbase attribute)": [[75, "MDAnalysis.coordinates.base.ReaderBase.units"]], "units (mdanalysis.coordinates.base.singleframereaderbase attribute)": [[75, "MDAnalysis.coordinates.base.SingleFrameReaderBase.units"]], "units (mdanalysis.coordinates.base.writerbase attribute)": [[75, "MDAnalysis.coordinates.base.WriterBase.units"]], "write() (mdanalysis.coordinates.base.writerbase method)": [[75, "MDAnalysis.coordinates.base.WriterBase.write"]], "chainreader (class in mdanalysis.coordinates.chain)": [[76, "MDAnalysis.coordinates.chain.ChainReader"]], "mdanalysis.coordinates.chain": [[76, "module-MDAnalysis.coordinates.chain"]], "_apply() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._apply"]], "_get() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get"]], "_get_local_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_local_frame"]], "_get_same() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._get_same"]], "_read_frame() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader._read_frame"]], "active_reader (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.active_reader"]], "close() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.close"]], "compressed (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.compressed"]], "convert_pos_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.chain.chainreader method)": [[76, "MDAnalysis.coordinates.chain.ChainReader.convert_time_to_native"]], "frame (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.frame"]], "periodic (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.periodic"]], "time (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.time"]], "units (mdanalysis.coordinates.chain.chainreader property)": [[76, "MDAnalysis.coordinates.chain.ChainReader.units"]], "chemfilespicklable (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesPicklable"]], "chemfilesreader (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesReader"]], "chemfileswriter (class in mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.ChemfilesWriter"]], "max_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MAX_CHEMFILES_VERSION"]], "mdanalysis.coordinates.chemfiles": [[77, "module-MDAnalysis.coordinates.chemfiles"]], "min_chemfiles_version (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.MIN_CHEMFILES_VERSION"]], "check_chemfiles_version() (in module mdanalysis.coordinates.chemfiles)": [[77, "MDAnalysis.coordinates.chemfiles.check_chemfiles_version"]], "mdanalysis.coordinates.core": [[78, "module-MDAnalysis.coordinates.core"]], "get_reader_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_reader_for"]], "get_writer_for() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.get_writer_for"]], "reader() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.reader"]], "writer() (in module mdanalysis.coordinates.core)": [[78, "MDAnalysis.coordinates.core.writer"]], "mdanalysis.coordinates.__init__": [[79, "module-MDAnalysis.coordinates.__init__"]], "mdanalysis.coordinates.memory": [[80, "module-MDAnalysis.coordinates.memory"]], "memoryreader (class in mdanalysis.coordinates.memory)": [[80, "MDAnalysis.coordinates.memory.MemoryReader"]], "otherwriter() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.OtherWriter"]], "writer() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.Writer"]], "add_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_auxiliary"]], "add_transformations() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.add_transformations"]], "aux_list (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.aux_list"]], "check_slice_indices() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.check_slice_indices"]], "close() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.close"]], "convert_forces_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.convert_velocities_to_native"]], "copy() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.copy"]], "dt (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.dt"]], "frame (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.frame"]], "get_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_array"]], "get_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_attribute"]], "get_aux_descriptions() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.get_aux_descriptions"]], "iter_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_as_aux"]], "iter_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.iter_auxiliary"]], "next() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next"]], "next_as_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.next_as_aux"]], "parse_n_atoms() (mdanalysis.coordinates.memory.memoryreader static method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.parse_n_atoms"]], "remove_auxiliary() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.remove_auxiliary"]], "rename_aux() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rename_aux"]], "rewind() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.rewind"]], "set_array() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_array"]], "set_aux_attribute() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.set_aux_attribute"]], "time (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.time"]], "timeseries() (mdanalysis.coordinates.memory.memoryreader method)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.timeseries"]], "totaltime (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.totaltime"]], "transformations (mdanalysis.coordinates.memory.memoryreader property)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.transformations"]], "units (mdanalysis.coordinates.memory.memoryreader attribute)": [[80, "MDAnalysis.coordinates.memory.MemoryReader.units"]], "mdanalysis.coordinates.null": [[81, "module-MDAnalysis.coordinates.null"]], "nullwriter (class in mdanalysis.coordinates.null)": [[81, "MDAnalysis.coordinates.null.NullWriter"]], "units (mdanalysis.coordinates.null.nullwriter attribute)": [[81, "MDAnalysis.coordinates.null.NullWriter.units"]], "mdanalysis.coordinates.timestep": [[83, "module-MDAnalysis.coordinates.timestep"]], "timestep (class in mdanalysis.coordinates.timestep)": [[83, "MDAnalysis.coordinates.timestep.Timestep"]], "__eq__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__eq__"]], "__getitem__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__getitem__"]], "__init__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__init__"]], "__iter__() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.__iter__"]], "_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._forces"]], "_pos (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._pos"]], "_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep._velocities"]], "copy() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy"]], "copy_slice() (mdanalysis.coordinates.timestep.timestep method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.copy_slice"]], "data (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.data"]], "dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dimensions"]], "dt (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dt"]], "dtype (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.dtype"]], "forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.forces"]], "frame (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.frame"]], "from_coordinates() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_coordinates"]], "from_timestep() (mdanalysis.coordinates.timestep.timestep class method)": [[83, "MDAnalysis.coordinates.timestep.Timestep.from_timestep"]], "has_forces (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_forces"]], "has_positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_positions"]], "has_velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.has_velocities"]], "n_atoms (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.n_atoms"]], "positions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.positions"]], "time (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.time"]], "triclinic_dimensions (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.triclinic_dimensions"]], "velocities (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.velocities"]], "volume (mdanalysis.coordinates.timestep.timestep attribute)": [[83, "MDAnalysis.coordinates.timestep.Timestep.volume"]], "accessor (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.Accessor"]], "converterwrapper (class in mdanalysis.core.accessors)": [[85, "MDAnalysis.core.accessors.ConverterWrapper"]], "mdanalysis.core.accessors": [[85, "module-MDAnalysis.core.accessors"]], "atom (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Atom"]], "atomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.AtomGroup"]], "mdanalysis.core.groups": [[86, "module-MDAnalysis.core.groups"]], "residue (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Residue"]], "residuegroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.ResidueGroup"]], "segment (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.Segment"]], "segmentgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.SegmentGroup"]], "updatingatomgroup (class in mdanalysis.core.groups)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup"]], "accumulate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.accumulate"]], "accumulate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.accumulate"]], "align_principal_axis() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.align_principal_axis"]], "align_principal_axis() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.align_principal_axis"]], "angle (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.angle"]], "asphericity() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asphericity"]], "asphericity() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asphericity"]], "asunique() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.asunique"]], "asunique() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.asunique"]], "asunique() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.asunique"]], "atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.atoms"]], "atoms (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.atoms"]], "atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.atoms"]], "atoms (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.atoms"]], "atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.atoms"]], "atoms (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.atoms"]], "bbox() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bbox"]], "bbox() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bbox"]], "bbox() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bbox"]], "bfactor (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bfactor"]], "bfactors (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bfactors"]], "bfactors (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.bfactors"]], "bfactors (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.bfactors"]], "bfactors (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.bfactors"]], "bfactors (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.bfactors"]], "bond (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.bond"]], "bonded_atoms (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.bonded_atoms"]], "bsphere() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.bsphere"]], "bsphere() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.bsphere"]], "center() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center"]], "center() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center"]], "center() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center"]], "center_of_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_charge"]], "center_of_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_charge"]], "center_of_geometry() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_geometry"]], "center_of_geometry() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_geometry"]], "center_of_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.center_of_mass"]], "center_of_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.center_of_mass"]], "centroid() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.centroid"]], "centroid() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.centroid"]], "centroid() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.centroid"]], "chi1_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.chi1_selection"]], "chi1_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.chi1_selections"]], "cmap (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.cmap"]], "concatenate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.concatenate"]], "concatenate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.concatenate"]], "convert_to (mdanalysis.core.groups.atomgroup attribute)": [[86, "MDAnalysis.core.groups.AtomGroup.convert_to"]], "copy() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.copy"]], "copy() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.copy"]], "copy() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.copy"]], "copy() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.copy"]], "difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.difference"]], "difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.difference"]], "difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.difference"]], "dihedral (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dihedral"]], "dimensions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.dimensions"]], "dimensions (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.dimensions"]], "dimensions (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.dimensions"]], "dipole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_moment"]], "dipole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_moment"]], "dipole_vector() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.dipole_vector"]], "dipole_vector() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.dipole_vector"]], "force (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.force"]], "forces (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.forces"]], "fragindex (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragindex"]], "fragindices (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragindices"]], "fragment (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.fragment"]], "fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.fragments"]], "get_connections() (mdanalysis.core.groups.atom method)": [[86, "MDAnalysis.core.groups.Atom.get_connections"]], "get_connections() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.get_connections"]], "get_connections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.get_connections"]], "get_connections() (mdanalysis.core.groups.segment method)": [[86, "MDAnalysis.core.groups.Segment.get_connections"]], "get_connections() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.get_connections"]], "groupby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.groupby"]], "groupby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.groupby"]], "groupby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.groupby"]], "guess_bonds() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.guess_bonds"]], "gyration_moments() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.gyration_moments"]], "gyration_moments() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.gyration_moments"]], "improper (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.improper"]], "intersection() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.intersection"]], "intersection() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.intersection"]], "intersection() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.intersection"]], "is_strict_subset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_subset"]], "is_strict_subset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_subset"]], "is_strict_superset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.is_strict_superset"]], "is_strict_superset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.is_strict_superset"]], "is_uptodate (mdanalysis.core.groups.updatingatomgroup property)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.is_uptodate"]], "isdisjoint() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.isdisjoint"]], "isdisjoint() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.isdisjoint"]], "issubset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issubset"]], "issubset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issubset"]], "issubset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issubset"]], "issuperset() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.issuperset"]], "issuperset() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.issuperset"]], "isunique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.isunique"]], "isunique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.isunique"]], "isunique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.isunique"]], "ix (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix"]], "ix (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix"]], "ix (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix"]], "ix (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix"]], "ix (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix"]], "ix (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix"]], "ix_array (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.ix_array"]], "ix_array (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ix_array"]], "ix_array (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.ix_array"]], "ix_array (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.ix_array"]], "ix_array (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.ix_array"]], "ix_array (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.ix_array"]], "moment_of_inertia() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.moment_of_inertia"]], "moment_of_inertia() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.moment_of_inertia"]], "n_atoms (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_atoms"]], "n_atoms (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_atoms"]], "n_fragments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_fragments"]], "n_residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_residues"]], "n_residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_residues"]], "n_residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_residues"]], "n_segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.n_segments"]], "n_segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.n_segments"]], "n_segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.n_segments"]], "omega_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.omega_selection"]], "omega_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.omega_selections"]], "pack_into_box() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.pack_into_box"]], "pack_into_box() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.pack_into_box"]], "phi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.phi_selection"]], "phi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.phi_selections"]], "position (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.position"]], "positions (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.positions"]], "principal_axes() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.principal_axes"]], "principal_axes() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.principal_axes"]], "psi_selection() (mdanalysis.core.groups.residue method)": [[86, "MDAnalysis.core.groups.Residue.psi_selection"]], "psi_selections() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.psi_selections"]], "quadrupole_moment() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_moment"]], "quadrupole_moment() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.quadrupole_tensor"]], "quadrupole_tensor() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.radius_of_gyration"]], "radius_of_gyration() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.radius_of_gyration"]], "residues (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.residues"]], "residues (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.residues"]], "residues (mdanalysis.core.groups.segment property)": [[86, "MDAnalysis.core.groups.Segment.residues"]], "residues (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.residues"]], "rotate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotate"]], "rotate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotate"]], "rotate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotate"]], "rotateby() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.rotateby"]], "rotateby() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.rotateby"]], "segment (mdanalysis.core.groups.residue property)": [[86, "MDAnalysis.core.groups.Residue.segment"]], "segments (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.segments"]], "segments (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.segments"]], "segments (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.segments"]], "select_atoms() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.select_atoms"]], "sequence() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.sequence"]], "shape_parameter() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.shape_parameter"]], "shape_parameter() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.shape_parameter"]], "sort() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.sort"]], "split() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.split"]], "subtract() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.subtract"]], "subtract() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.subtract"]], "subtract() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.subtract"]], "symmetric_difference() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.symmetric_difference"]], "symmetric_difference() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.symmetric_difference"]], "total_charge() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_charge"]], "total_charge() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_charge"]], "total_mass() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.total_mass"]], "total_mass() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.total_mass"]], "transform() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.transform"]], "transform() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.transform"]], "transform() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.transform"]], "translate() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.translate"]], "translate() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.translate"]], "translate() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.translate"]], "ts (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ts"]], "union() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.union"]], "union() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.union"]], "union() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.union"]], "unique (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.unique"]], "unique (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.unique"]], "unique (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.unique"]], "universe (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.universe"]], "universe (mdanalysis.core.groups.residuegroup property)": [[86, "MDAnalysis.core.groups.ResidueGroup.universe"]], "universe (mdanalysis.core.groups.segmentgroup property)": [[86, "MDAnalysis.core.groups.SegmentGroup.universe"]], "unwrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.unwrap"]], "unwrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.unwrap"]], "update_selection() (mdanalysis.core.groups.updatingatomgroup method)": [[86, "MDAnalysis.core.groups.UpdatingAtomGroup.update_selection"]], "ureybradley (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.ureybradley"]], "velocities (mdanalysis.core.groups.atomgroup property)": [[86, "MDAnalysis.core.groups.AtomGroup.velocities"]], "velocity (mdanalysis.core.groups.atom property)": [[86, "MDAnalysis.core.groups.Atom.velocity"]], "wrap() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.wrap"]], "wrap() (mdanalysis.core.groups.residuegroup method)": [[86, "MDAnalysis.core.groups.ResidueGroup.wrap"]], "wrap() (mdanalysis.core.groups.segmentgroup method)": [[86, "MDAnalysis.core.groups.SegmentGroup.wrap"]], "write() (mdanalysis.core.groups.atomgroup method)": [[86, "MDAnalysis.core.groups.AtomGroup.write"]], "mdanalysis.core.__init__": [[87, "module-MDAnalysis.core.__init__"]], "aromaticselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.AromaticSelection"]], "backboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BackboneSelection"]], "baseselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BaseSelection"]], "boolselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.BoolSelection"]], "bynumselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByNumSelection"]], "byresselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ByResSelection"]], "float_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FLOAT_PATTERN"]], "floatrangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.FloatRangeSelection"]], "int_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.INT_PATTERN"]], "mdanalysis.core.selection": [[88, "module-MDAnalysis.core.selection"]], "nucleicbackboneselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicBackboneSelection"]], "nucleicselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSelection"]], "nucleicsugarselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.NucleicSugarSelection"]], "propertyselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.PropertySelection"]], "proteinselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ProteinSelection"]], "range_pattern (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RANGE_PATTERN"]], "rangeselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.RangeSelection"]], "residselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.ResidSelection"]], "sameselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SameSelection"]], "selectionparser (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SelectionParser"]], "singlecharselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SingleCharSelection"]], "smartsselection (class in mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.SmartsSelection"]], "dtype (mdanalysis.core.selection.floatrangeselection attribute)": [[88, "MDAnalysis.core.selection.FloatRangeSelection.dtype"]], "dtype (mdanalysis.core.selection.rangeselection attribute)": [[88, "MDAnalysis.core.selection.RangeSelection.dtype"]], "expect() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.expect"]], "gen_selection_class() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.gen_selection_class"]], "grab_not_keywords() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.grab_not_keywords"]], "is_keyword() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.is_keyword"]], "join_separated_values() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.join_separated_values"]], "parse() (mdanalysis.core.selection.selectionparser method)": [[88, "MDAnalysis.core.selection.SelectionParser.parse"]], "return_empty_on_apply() (in module mdanalysis.core.selection)": [[88, "MDAnalysis.core.selection.return_empty_on_apply"]], "mdanalysis.core.topology": [[89, "module-MDAnalysis.core.topology"]], "topology (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.Topology"]], "transtable (class in mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.TransTable"]], "add_residue() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Residue"]], "add_segment() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_Segment"]], "add_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.add_TopologyAttr"]], "atoms2residues() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2residues"]], "atoms2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.atoms2segments"]], "copy() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.copy"]], "copy() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.copy"]], "del_topologyattr() (mdanalysis.core.topology.topology method)": [[89, "MDAnalysis.core.topology.Topology.del_TopologyAttr"]], "guessed_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.guessed_attributes"]], "make_downshift_arrays() (in module mdanalysis.core.topology)": [[89, "MDAnalysis.core.topology.make_downshift_arrays"]], "move_atom() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_atom"]], "move_residue() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.move_residue"]], "n_atoms (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_atoms"]], "n_residues (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_residues"]], "n_segments (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.n_segments"]], "read_attributes (mdanalysis.core.topology.topology property)": [[89, "MDAnalysis.core.topology.Topology.read_attributes"]], "residues2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_1d"]], "residues2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2atoms_2d"]], "residues2segments() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.residues2segments"]], "segments2atoms_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_1d"]], "segments2atoms_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2atoms_2d"]], "segments2residues_1d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_1d"]], "segments2residues_2d() (mdanalysis.core.topology.transtable method)": [[89, "MDAnalysis.core.topology.TransTable.segments2residues_2d"]], "size (mdanalysis.core.topology.transtable attribute)": [[89, "MDAnalysis.core.topology.TransTable.size"]], "altlocs (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AltLocs"]], "angles (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Angles"]], "aromaticities (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities"]], "atomattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr"]], "atomstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr"]], "atomids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomids"]], "atomindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomindices"]], "atomnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomnames"]], "atomtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes"]], "bonds (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Bonds"]], "cmaps (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.CMaps"]], "chainids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs"]], "charges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Charges"]], "dihedrals (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Dihedrals"]], "elements (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Elements"]], "epsilon14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s"]], "epsilons (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Epsilons"]], "formalcharges (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges"]], "gbscreens (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.GBScreens"]], "icodes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ICodes"]], "impropers (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Impropers"]], "mdanalysis.core.topologyattrs": [[90, "module-MDAnalysis.core.topologyattrs"]], "masses (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Masses"]], "molnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Molnums"]], "moltypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Moltypes"]], "nonbondedindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices"]], "occupancies (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Occupancies"]], "rmin14s (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMin14s"]], "rmins (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RMins"]], "rschirality (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RSChirality"]], "radii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Radii"]], "recordtypes (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes"]], "resids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resids"]], "residueattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr"]], "residuestringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr"]], "resindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resindices"]], "resnames (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnames"]], "resnums (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Resnums"]], "segids (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segids"]], "segindices (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Segindices"]], "segmentattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr"]], "segmentstringattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr"]], "solventradii (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii"]], "tempfactors (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors"]], "topologyattr (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr"]], "ureybradleys (class in mdanalysis.core.topologyattrs)": [[90, "MDAnalysis.core.topologyattrs.UreyBradleys"]], "align_principal_axis() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.align_principal_axis"]], "asphericity() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.asphericity"]], "attrname (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.attrname"]], "bfactor() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor"]], "bfactor_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactor_setter"]], "bfactors() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors"]], "bfactors_setter() (mdanalysis.core.topologyattrs.tempfactors method)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.bfactors_setter"]], "bonded_atoms() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.bonded_atoms"]], "center_of_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.center_of_charge"]], "center_of_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.center_of_mass"]], "chi1_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selection"]], "chi1_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.chi1_selections"]], "copy() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.copy"]], "dipole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_moment"]], "dipole_vector() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.dipole_vector"]], "dtype (mdanalysis.core.topologyattrs.altlocs attribute)": [[90, "MDAnalysis.core.topologyattrs.AltLocs.dtype"]], "dtype (mdanalysis.core.topologyattrs.aromaticities attribute)": [[90, "MDAnalysis.core.topologyattrs.Aromaticities.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomids attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomids.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.atomtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Atomtypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.chainids attribute)": [[90, "MDAnalysis.core.topologyattrs.ChainIDs.dtype"]], "dtype (mdanalysis.core.topologyattrs.charges attribute)": [[90, "MDAnalysis.core.topologyattrs.Charges.dtype"]], "dtype (mdanalysis.core.topologyattrs.elements attribute)": [[90, "MDAnalysis.core.topologyattrs.Elements.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilon14s attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilon14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.epsilons attribute)": [[90, "MDAnalysis.core.topologyattrs.Epsilons.dtype"]], "dtype (mdanalysis.core.topologyattrs.formalcharges attribute)": [[90, "MDAnalysis.core.topologyattrs.FormalCharges.dtype"]], "dtype (mdanalysis.core.topologyattrs.gbscreens attribute)": [[90, "MDAnalysis.core.topologyattrs.GBScreens.dtype"]], "dtype (mdanalysis.core.topologyattrs.icodes attribute)": [[90, "MDAnalysis.core.topologyattrs.ICodes.dtype"]], "dtype (mdanalysis.core.topologyattrs.masses attribute)": [[90, "MDAnalysis.core.topologyattrs.Masses.dtype"]], "dtype (mdanalysis.core.topologyattrs.molnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Molnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.moltypes attribute)": [[90, "MDAnalysis.core.topologyattrs.Moltypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.nonbondedindices attribute)": [[90, "MDAnalysis.core.topologyattrs.NonbondedIndices.dtype"]], "dtype (mdanalysis.core.topologyattrs.occupancies attribute)": [[90, "MDAnalysis.core.topologyattrs.Occupancies.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmin14s attribute)": [[90, "MDAnalysis.core.topologyattrs.RMin14s.dtype"]], "dtype (mdanalysis.core.topologyattrs.rmins attribute)": [[90, "MDAnalysis.core.topologyattrs.RMins.dtype"]], "dtype (mdanalysis.core.topologyattrs.radii attribute)": [[90, "MDAnalysis.core.topologyattrs.Radii.dtype"]], "dtype (mdanalysis.core.topologyattrs.recordtypes attribute)": [[90, "MDAnalysis.core.topologyattrs.RecordTypes.dtype"]], "dtype (mdanalysis.core.topologyattrs.resids attribute)": [[90, "MDAnalysis.core.topologyattrs.Resids.dtype"]], "dtype (mdanalysis.core.topologyattrs.resindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Resindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnames attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnames.dtype"]], "dtype (mdanalysis.core.topologyattrs.resnums attribute)": [[90, "MDAnalysis.core.topologyattrs.Resnums.dtype"]], "dtype (mdanalysis.core.topologyattrs.segids attribute)": [[90, "MDAnalysis.core.topologyattrs.Segids.dtype"]], "dtype (mdanalysis.core.topologyattrs.segindices attribute)": [[90, "MDAnalysis.core.topologyattrs.Segindices.dtype"]], "dtype (mdanalysis.core.topologyattrs.solventradii attribute)": [[90, "MDAnalysis.core.topologyattrs.SolventRadii.dtype"]], "dtype (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.dtype"]], "dtype (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.dtype"]], "fragindex() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindex"]], "fragindices() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragindices"]], "fragment() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragment"]], "fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.fragments"]], "from_blank() (mdanalysis.core.topologyattrs.topologyattr class method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.from_blank"]], "get_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_atoms"]], "get_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_atoms"]], "get_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_residues"]], "get_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_residues"]], "get_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.get_segments"]], "get_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.get_segments"]], "group (mdanalysis.core.topologyattrs.tempfactors attribute)": [[90, "MDAnalysis.core.topologyattrs.Tempfactors.group"]], "gyration_moments() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.gyration_moments"]], "is_guessed (mdanalysis.core.topologyattrs.topologyattr property)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.is_guessed"]], "moment_of_inertia() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.moment_of_inertia"]], "n_fragments() (mdanalysis.core.topologyattrs.bonds method)": [[90, "MDAnalysis.core.topologyattrs.Bonds.n_fragments"]], "omega_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selection"]], "omega_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.omega_selections"]], "per_object (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.per_object"]], "phi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selection"]], "phi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.phi_selections"]], "principal_axes() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.principal_axes"]], "psi_selection() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selection"]], "psi_selections() (mdanalysis.core.topologyattrs.atomnames method)": [[90, "MDAnalysis.core.topologyattrs.Atomnames.psi_selections"]], "quadrupole_moment() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_moment"]], "quadrupole_tensor() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.quadrupole_tensor"]], "radius_of_gyration() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.radius_of_gyration"]], "sequence() (mdanalysis.core.topologyattrs.resnames method)": [[90, "MDAnalysis.core.topologyattrs.Resnames.sequence"]], "set_atoms() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomstringattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomStringAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.atomindices method)": [[90, "MDAnalysis.core.topologyattrs.Atomindices.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_atoms"]], "set_atoms() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_atoms"]], "set_residues() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.residuestringattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueStringAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.resindices method)": [[90, "MDAnalysis.core.topologyattrs.Resindices.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_residues"]], "set_residues() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_residues"]], "set_segments() (mdanalysis.core.topologyattrs.atomattr method)": [[90, "MDAnalysis.core.topologyattrs.AtomAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.residueattr method)": [[90, "MDAnalysis.core.topologyattrs.ResidueAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segindices method)": [[90, "MDAnalysis.core.topologyattrs.Segindices.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.segmentstringattr method)": [[90, "MDAnalysis.core.topologyattrs.SegmentStringAttr.set_segments"]], "set_segments() (mdanalysis.core.topologyattrs.topologyattr method)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.set_segments"]], "shape_parameter() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.shape_parameter"]], "singular (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.singular"]], "top (mdanalysis.core.topologyattrs.topologyattr attribute)": [[90, "MDAnalysis.core.topologyattrs.TopologyAttr.top"]], "total_charge() (mdanalysis.core.topologyattrs.charges method)": [[90, "MDAnalysis.core.topologyattrs.Charges.total_charge"]], "total_mass() (mdanalysis.core.topologyattrs.masses method)": [[90, "MDAnalysis.core.topologyattrs.Masses.total_mass"]], "angle (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Angle"]], "bond (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Bond"]], "cmap (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.CMap"]], "dihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.Dihedral"]], "improperdihedral (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral"]], "mdanalysis.core.topologyobjects": [[91, "module-MDAnalysis.core.topologyobjects"]], "topologydict (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict"]], "topologygroup (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup"]], "topologyobject (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject"]], "ureybradley (class in mdanalysis.core.topologyobjects)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley"]], "angle() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.angle"]], "angles() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.angles"]], "atom1 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom1"]], "atom2 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom2"]], "atom3 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom3"]], "atom4 (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atom4"]], "atomgroup_intersection() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.atomgroup_intersection"]], "atoms (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.atoms"]], "bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.bonds"]], "dihedral() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.dihedral"]], "dihedrals() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dihedrals"]], "distance() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.distance"]], "dump_contents() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.dump_contents"]], "improper() (mdanalysis.core.topologyobjects.improperdihedral method)": [[91, "MDAnalysis.core.topologyobjects.ImproperDihedral.improper"]], "indices (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.indices"]], "indices (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.indices"]], "keys() (mdanalysis.core.topologyobjects.topologydict method)": [[91, "MDAnalysis.core.topologyobjects.TopologyDict.keys"]], "length() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.length"]], "partner() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.partner"]], "partner() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.partner"]], "selectbonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.selectBonds"]], "select_bonds() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.select_bonds"]], "to_indices() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.to_indices"]], "topdict (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.topDict"]], "type (mdanalysis.core.topologyobjects.topologyobject property)": [[91, "MDAnalysis.core.topologyobjects.TopologyObject.type"]], "types() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.types"]], "universe (mdanalysis.core.topologyobjects.topologygroup property)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.universe"]], "value() (mdanalysis.core.topologyobjects.angle method)": [[91, "MDAnalysis.core.topologyobjects.Angle.value"]], "value() (mdanalysis.core.topologyobjects.bond method)": [[91, "MDAnalysis.core.topologyobjects.Bond.value"]], "value() (mdanalysis.core.topologyobjects.dihedral method)": [[91, "MDAnalysis.core.topologyobjects.Dihedral.value"]], "value() (mdanalysis.core.topologyobjects.ureybradley method)": [[91, "MDAnalysis.core.topologyobjects.UreyBradley.value"]], "values() (mdanalysis.core.topologyobjects.topologygroup method)": [[91, "MDAnalysis.core.topologyobjects.TopologyGroup.values"]], "mdanalysis.core.universe": [[92, "module-MDAnalysis.core.universe"]], "merge() (in module mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Merge"]], "universe (class in mdanalysis.core.universe)": [[92, "MDAnalysis.core.universe.Universe"]], "add_residue() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Residue"]], "add_segment() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_Segment"]], "add_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_TopologyAttr"]], "add_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_angles"]], "add_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_bonds"]], "add_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_dihedrals"]], "add_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.add_impropers"]], "angles (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.angles"]], "atoms (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.atoms"]], "bonds (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.bonds"]], "coord (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.coord"]], "copy() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.copy"]], "del_topologyattr() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.del_TopologyAttr"]], "delete_angles() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_angles"]], "delete_bonds() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_bonds"]], "delete_dihedrals() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_dihedrals"]], "delete_impropers() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.delete_impropers"]], "dihedrals (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dihedrals"]], "dimensions (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.dimensions"]], "empty() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.empty"]], "from_smiles() (mdanalysis.core.universe.universe class method)": [[92, "MDAnalysis.core.universe.Universe.from_smiles"]], "impropers (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.impropers"]], "kwargs (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.kwargs"]], "load_new() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.load_new"]], "models (mdanalysis.core.universe.universe property)": [[92, "MDAnalysis.core.universe.Universe.models"]], "residues (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.residues"]], "segments (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.segments"]], "select_atoms() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.select_atoms"]], "trajectory (mdanalysis.core.universe.universe attribute)": [[92, "MDAnalysis.core.universe.Universe.trajectory"]], "transfer_to_memory() (mdanalysis.core.universe.universe method)": [[92, "MDAnalysis.core.universe.Universe.transfer_to_memory"]], "conversionwarning": [[94, "MDAnalysis.exceptions.ConversionWarning"]], "duplicatewarning": [[94, "MDAnalysis.exceptions.DuplicateWarning"]], "fileformatwarning": [[94, "MDAnalysis.exceptions.FileFormatWarning"]], "mdanalysis.exceptions": [[94, "module-MDAnalysis.exceptions"]], "missingdatawarning": [[94, "MDAnalysis.exceptions.MissingDataWarning"]], "nodataerror": [[94, "MDAnalysis.exceptions.NoDataError"]], "selectionerror": [[94, "MDAnalysis.exceptions.SelectionError"]], "selectionwarning": [[94, "MDAnalysis.exceptions.SelectionWarning"]], "streamwarning": [[94, "MDAnalysis.exceptions.StreamWarning"]], "atomneighborsearch (class in mdanalysis.lib.neighborsearch)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch"]], "mdanalysis.lib.neighborsearch": [[95, "module-MDAnalysis.lib.NeighborSearch"]], "search() (mdanalysis.lib.neighborsearch.atomneighborsearch method)": [[95, "MDAnalysis.lib.NeighborSearch.AtomNeighborSearch.search"]], "mdanalysis.lib.c_distances": [[96, "module-MDAnalysis.lib.c_distances"]], "mdanalysis.lib.c_distances_openmp": [[97, "module-MDAnalysis.lib.c_distances_openmp"]], "mdanalysis.lib.correlations": [[98, "module-MDAnalysis.lib.correlations"]], "autocorrelation() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.autocorrelation"]], "correct_intermittency() (in module mdanalysis.lib.correlations)": [[98, "MDAnalysis.lib.correlations.correct_intermittency"]], "mdanalysis.lib.distances": [[99, "module-MDAnalysis.lib.distances"]], "apply_pbc() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.apply_PBC"]], "augment_coordinates() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.augment_coordinates"]], "calc_angles() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_angles"]], "calc_bonds() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_bonds"]], "calc_dihedrals() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.calc_dihedrals"]], "capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.capped_distance"]], "distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.distance_array"]], "minimize_vectors() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.minimize_vectors"]], "self_capped_distance() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_capped_distance"]], "self_distance_array() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.self_distance_array"]], "transform_rtos() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_RtoS"]], "transform_stor() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.transform_StoR"]], "undo_augment() (in module mdanalysis.lib.distances)": [[99, "MDAnalysis.lib.distances.undo_augment"]], "dcdfile (class in mdanalysis.lib.formats.libdcd)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile"]], "mdanalysis.lib.formats.libdcd": [[100, "module-MDAnalysis.lib.formats.libdcd"]], "charmm_bitfield (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.charmm_bitfield"]], "close() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.close"]], "header (mdanalysis.lib.formats.libdcd.dcdfile attribute)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.header"]], "open() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.open"]], "read() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.read"]], "readframes() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.readframes"]], "seek() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.seek"]], "tell() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.tell"]], "write() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write"]], "write_header() (mdanalysis.lib.formats.libdcd.dcdfile method)": [[100, "MDAnalysis.lib.formats.libdcd.DCDFile.write_header"]], "mdanalysis.lib.formats.libmdaxdr": [[101, "module-MDAnalysis.lib.formats.libmdaxdr"]], "trrfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile"]], "xtcfile (class in mdanalysis.lib.formats.libmdaxdr)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.calc_offsets"]], "calc_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.calc_offsets"]], "close() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.close"]], "close() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.close"]], "offsets (mdanalysis.lib.formats.libmdaxdr.trrfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.offsets"]], "offsets (mdanalysis.lib.formats.libmdaxdr.xtcfile attribute)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.offsets"]], "open() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.open"]], "open() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.open"]], "read() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read"]], "read() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read"]], "read_direct_x() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.read_direct_x"]], "read_direct_xvf() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.read_direct_xvf"]], "seek() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.seek"]], "seek() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.seek"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.set_offsets"]], "set_offsets() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.set_offsets"]], "tell() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.tell"]], "tell() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.tell"]], "write() (mdanalysis.lib.formats.libmdaxdr.trrfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.TRRFile.write"]], "write() (mdanalysis.lib.formats.libmdaxdr.xtcfile method)": [[101, "MDAnalysis.lib.formats.libmdaxdr.XTCFile.write"]], "mdanalysis.lib.log": [[102, "module-MDAnalysis.lib.log"]], "nullhandler (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.NullHandler"]], "progressbar (class in mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.ProgressBar"]], "clear_handlers() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.clear_handlers"]], "create() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.create"]], "emit() (mdanalysis.lib.log.nullhandler method)": [[102, "MDAnalysis.lib.log.NullHandler.emit"]], "start_logging() (in module mdanalysis)": [[102, "MDAnalysis.start_logging"]], "start_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.start_logging"]], "stop_logging() (in module mdanalysis)": [[102, "MDAnalysis.stop_logging"]], "stop_logging() (in module mdanalysis.lib.log)": [[102, "MDAnalysis.lib.log.stop_logging"]], "mdanalysis.lib.mdamath": [[103, "module-MDAnalysis.lib.mdamath"]], "angle() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.angle"]], "box_volume() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.box_volume"]], "dihedral() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.dihedral"]], "find_fragments() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.find_fragments"]], "make_whole() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.make_whole"]], "norm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.norm"]], "normal() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.normal"]], "pdot() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pdot"]], "pnorm() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.pnorm"]], "sarrus_det() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.sarrus_det"]], "stp() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.stp"]], "triclinic_box() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_box"]], "triclinic_vectors() (in module mdanalysis.lib.mdamath)": [[103, "MDAnalysis.lib.mdamath.triclinic_vectors"]], "fastns (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.FastNS"]], "mdanalysis.lib.nsgrid": [[104, "module-MDAnalysis.lib.nsgrid"]], "nsresults (class in mdanalysis.lib.nsgrid)": [[104, "MDAnalysis.lib.nsgrid.NSResults"]], "get_pair_distances() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pair_distances"]], "get_pairs() (mdanalysis.lib.nsgrid.nsresults method)": [[104, "MDAnalysis.lib.nsgrid.NSResults.get_pairs"]], "search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.search"]], "self_search() (mdanalysis.lib.nsgrid.fastns method)": [[104, "MDAnalysis.lib.nsgrid.FastNS.self_search"]], "bz2picklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BZ2Picklable"]], "bufferiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.BufferIOPicklable"]], "fileiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.FileIOPicklable"]], "gzippicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.GzipPicklable"]], "mdanalysis.lib.picklable_file_io": [[105, "module-MDAnalysis.lib.picklable_file_io"]], "textiopicklable (class in mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.TextIOPicklable"]], "bz2_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.bz2_pickle_open"]], "gzip_pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.gzip_pickle_open"]], "pickle_open() (in module mdanalysis.lib.picklable_file_io)": [[105, "MDAnalysis.lib.picklable_file_io.pickle_open"]], "mdanalysis.lib.pkdtree": [[106, "module-MDAnalysis.lib.pkdtree"]], "periodickdtree (class in mdanalysis.lib.pkdtree)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree"]], "get_indices() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.get_indices"]], "pbc (mdanalysis.lib.pkdtree.periodickdtree property)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.pbc"]], "search() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search"]], "search_pairs() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_pairs"]], "search_tree() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.search_tree"]], "set_coords() (mdanalysis.lib.pkdtree.periodickdtree method)": [[106, "MDAnalysis.lib.pkdtree.PeriodicKDTree.set_coords"]], "calcrmsdrotationalmatrix() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.CalcRMSDRotationalMatrix"]], "fastcalcrmsdandrotation() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.FastCalcRMSDAndRotation"]], "innerproduct() (in module mdanalysis.lib.qcprot)": [[107, "MDAnalysis.lib.qcprot.InnerProduct"]], "mdanalysis.lib.qcprot": [[107, "module-MDAnalysis.lib.qcprot"]], "arcball (class in mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.Arcball"]], "mdanalysis.lib.transformations": [[108, "module-MDAnalysis.lib.transformations"]], "arcball_nearest_axis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.arcball_nearest_axis"]], "compose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.compose_matrix"]], "concatenate_matrices() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.concatenate_matrices"]], "decompose_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.decompose_matrix"]], "down() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.down"]], "drag() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.drag"]], "euler_from_quaternion() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.euler_from_quaternion"]], "getconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.getconstrain"]], "matrix() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.matrix"]], "next() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.next"]], "place() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.place"]], "projection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.projection_from_matrix"]], "quaternion_imag() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_imag"]], "quaternion_real() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.quaternion_real"]], "reflection_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.reflection_from_matrix"]], "rotation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotation_from_matrix"]], "rotaxis() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.rotaxis"]], "scale_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.scale_from_matrix"]], "setaxes() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setaxes"]], "setconstrain() (mdanalysis.lib.transformations.arcball method)": [[108, "MDAnalysis.lib.transformations.Arcball.setconstrain"]], "shear_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.shear_from_matrix"]], "translation_from_matrix() (in module mdanalysis.lib.transformations)": [[108, "MDAnalysis.lib.transformations.translation_from_matrix"]], "$home": [[109, "index-1"]], "fortranreader (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRANReader"]], "fortran_format_regex (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.FORTRAN_format_regex"]], "mdanalysis.lib.util": [[109, "module-MDAnalysis.lib.util"]], "namedstream (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.NamedStream"]], "namespace (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.Namespace"]], "_deprecate (class in mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util._Deprecate"]], "anyopen() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.anyopen"]], "asiterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.asiterable"]], "blocks_of() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.blocks_of"]], "cached() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.cached"]], "check_atomgroup_not_empty() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_atomgroup_not_empty"]], "check_box() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_box"]], "check_compressed_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_compressed_format"]], "check_coords() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.check_coords"]], "close() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.close"]], "closed (mdanalysis.lib.util.namedstream property)": [[109, "MDAnalysis.lib.util.NamedStream.closed"]], "conv_float() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.conv_float"]], "convert_aa_code() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.convert_aa_code"]], "dedent_docstring() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.dedent_docstring"]], "deprecate() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.deprecate"]], "filename() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.filename"]], "fileno() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.fileno"]], "fixedwidth_bins() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.fixedwidth_bins"]], "flatten_dict() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.flatten_dict"]], "flush() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.flush"]], "format_from_filename_extension() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.format_from_filename_extension"]], "get_ext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_ext"]], "get_weights() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.get_weights"]], "greedy_splitext() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.greedy_splitext"]], "group_same_or_consecutive_integers() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.group_same_or_consecutive_integers"]], "guess_format() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.guess_format"]], "hasmethod() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.hasmethod"]], "isstream() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.isstream"]], "iterable() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.iterable"]], "ltruncate_int() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.ltruncate_int"]], "number_of_matches() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.number_of_matches"]], "openany() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.openany"]], "parse_fortran_format() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.parse_FORTRAN_format"]], "parse_residue() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.parse_residue"]], "read() (mdanalysis.lib.util.fortranreader method)": [[109, "MDAnalysis.lib.util.FORTRANReader.read"]], "readable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readable"]], "readline() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.readline"]], "realpath() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.realpath"]], "reset() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.reset"]], "seek() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seek"]], "seekable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.seekable"]], "static_variables() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.static_variables"]], "store_init_arguments() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.store_init_arguments"]], "tell() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.tell"]], "truncate() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.truncate"]], "unique_int_1d() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_int_1d"]], "unique_rows() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.unique_rows"]], "warn_if_not_unique() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.warn_if_not_unique"]], "which() (in module mdanalysis.lib.util)": [[109, "MDAnalysis.lib.util.which"]], "writable() (mdanalysis.lib.util.namedstream method)": [[109, "MDAnalysis.lib.util.NamedStream.writable"]], "mdanalysis.lib": [[110, "module-MDAnalysis.lib"]], "duecredit_enable": [[112, "index-0"]], "mdanalysis.selections.base": [[114, "module-MDAnalysis.selections.base"]], "selectionwriterbase (class in mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.SelectionWriterBase"]], "__init__() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.__init__"]], "_translate() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._translate"]], "_write_head() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_head"]], "_write_tail() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase._write_tail"]], "comment() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.comment"]], "join() (in module mdanalysis.selections.base)": [[114, "MDAnalysis.selections.base.join"]], "write() (mdanalysis.selections.base.selectionwriterbase method)": [[114, "MDAnalysis.selections.base.SelectionWriterBase.write"]], "mdanalysis.selections.charmm": [[115, "module-MDAnalysis.selections.charmm"]], "selectionwriter (class in mdanalysis.selections.charmm)": [[115, "MDAnalysis.selections.charmm.SelectionWriter"]], "close() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.close"]], "comment() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.continuation"]], "ext (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.ext"]], "format (mdanalysis.selections.charmm.selectionwriter attribute)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.format"]], "write() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.charmm.selectionwriter method)": [[115, "MDAnalysis.selections.charmm.SelectionWriter.write_preamble"]], "mdanalysis.selections.gromacs": [[116, "module-MDAnalysis.selections.gromacs"]], "selectionwriter (class in mdanalysis.selections.gromacs)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter"]], "close() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.close"]], "comment() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.continuation"]], "ext (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.ext"]], "format (mdanalysis.selections.gromacs.selectionwriter attribute)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.format"]], "write() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.gromacs.selectionwriter method)": [[116, "MDAnalysis.selections.gromacs.SelectionWriter.write_preamble"]], "mdanalysis.selections.jmol": [[117, "module-MDAnalysis.selections.jmol"]], "selectionwriter (class in mdanalysis.selections.jmol)": [[117, "MDAnalysis.selections.jmol.SelectionWriter"]], "close() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.close"]], "comment() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.continuation"]], "default_numterms (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.default_numterms"]], "ext (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.ext"]], "format (mdanalysis.selections.jmol.selectionwriter attribute)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.format"]], "write() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.jmol.selectionwriter method)": [[117, "MDAnalysis.selections.jmol.SelectionWriter.write_preamble"]], "mdanalysis.selections.pymol": [[118, "module-MDAnalysis.selections.pymol"]], "selectionwriter (class in mdanalysis.selections.pymol)": [[118, "MDAnalysis.selections.pymol.SelectionWriter"]], "close() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.close"]], "comment() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.continuation"]], "ext (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.ext"]], "format (mdanalysis.selections.pymol.selectionwriter attribute)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.format"]], "write() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.pymol.selectionwriter method)": [[118, "MDAnalysis.selections.pymol.SelectionWriter.write_preamble"]], "mdanalysis.selections.vmd": [[119, "module-MDAnalysis.selections.vmd"]], "selectionwriter (class in mdanalysis.selections.vmd)": [[119, "MDAnalysis.selections.vmd.SelectionWriter"]], "close() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.close"]], "comment() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.comment"]], "commentfmt (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.commentfmt"]], "continuation (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.continuation"]], "ext (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.ext"]], "format (mdanalysis.selections.vmd.selectionwriter attribute)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.format"]], "write() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write"]], "write_preamble() (mdanalysis.selections.vmd.selectionwriter method)": [[119, "MDAnalysis.selections.vmd.SelectionWriter.write_preamble"]], "get_writer() (in module mdanalysis.selections)": [[120, "MDAnalysis.selections.get_writer"]], "crdparser (class in mdanalysis.topology.crdparser)": [[122, "MDAnalysis.topology.CRDParser.CRDParser"]], "mdanalysis.topology.crdparser": [[122, "module-MDAnalysis.topology.CRDParser"]], "close() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.crdparser.crdparser method)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.parse"]], "units (mdanalysis.topology.crdparser.crdparser attribute)": [[122, "MDAnalysis.topology.CRDParser.CRDParser.units"]], "mdanalysis.topology.dlpolyparser": [[123, "module-MDAnalysis.topology.DLPolyParser"]], "dmsparser (class in mdanalysis.topology.dmsparser)": [[124, "MDAnalysis.topology.DMSParser.DMSParser"]], "mdanalysis.topology.dmsparser": [[124, "module-MDAnalysis.topology.DMSParser"]], "close() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.dmsparser.dmsparser method)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.parse"]], "units (mdanalysis.topology.dmsparser.dmsparser attribute)": [[124, "MDAnalysis.topology.DMSParser.DMSParser.units"]], "extendedpdbparser (class in mdanalysis.topology.extendedpdbparser)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser"]], "mdanalysis.topology.extendedpdbparser": [[125, "module-MDAnalysis.topology.ExtendedPDBParser"]], "close() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.extendedpdbparser.extendedpdbparser method)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.parse"]], "units (mdanalysis.topology.extendedpdbparser.extendedpdbparser attribute)": [[125, "MDAnalysis.topology.ExtendedPDBParser.ExtendedPDBParser.units"]], "fhiaimsparser (class in mdanalysis.topology.fhiaimsparser)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser"]], "mdanalysis.topology.fhiaimsparser": [[126, "module-MDAnalysis.topology.FHIAIMSParser"]], "close() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.fhiaimsparser.fhiaimsparser method)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.parse"]], "units (mdanalysis.topology.fhiaimsparser.fhiaimsparser attribute)": [[126, "MDAnalysis.topology.FHIAIMSParser.FHIAIMSParser.units"]], "gmsparser (class in mdanalysis.topology.gmsparser)": [[127, "MDAnalysis.topology.GMSParser.GMSParser"]], "mdanalysis.topology.gmsparser": [[127, "module-MDAnalysis.topology.GMSParser"]], "close() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gmsparser.gmsparser method)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.parse"]], "units (mdanalysis.topology.gmsparser.gmsparser attribute)": [[127, "MDAnalysis.topology.GMSParser.GMSParser.units"]], "groparser (class in mdanalysis.topology.groparser)": [[128, "MDAnalysis.topology.GROParser.GROParser"]], "mdanalysis.topology.groparser": [[128, "module-MDAnalysis.topology.GROParser"]], "close() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.close"]], "convert_forces_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.groparser.groparser method)": [[128, "MDAnalysis.topology.GROParser.GROParser.parse"]], "units (mdanalysis.topology.groparser.groparser attribute)": [[128, "MDAnalysis.topology.GROParser.GROParser.units"]], "gsdparser (class in mdanalysis.topology.gsdparser)": [[129, "MDAnalysis.topology.GSDParser.GSDParser"]], "mdanalysis.topology.gsdparser": [[129, "module-MDAnalysis.topology.GSDParser"]], "close() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.close"]], "convert_forces_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.gsdparser.gsdparser method)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.parse"]], "units (mdanalysis.topology.gsdparser.gsdparser attribute)": [[129, "MDAnalysis.topology.GSDParser.GSDParser.units"]], "hoomdxmlparser (class in mdanalysis.topology.hoomdxmlparser)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser"]], "mdanalysis.topology.hoomdxmlparser": [[130, "module-MDAnalysis.topology.HoomdXMLParser"]], "close() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.close"]], "convert_forces_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser method)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.parse"]], "units (mdanalysis.topology.hoomdxmlparser.hoomdxmlparser attribute)": [[130, "MDAnalysis.topology.HoomdXMLParser.HoomdXMLParser.units"]], "itpparser (class in mdanalysis.topology.itpparser)": [[131, "MDAnalysis.topology.ITPParser.ITPParser"]], "mdanalysis.topology.itpparser": [[131, "module-MDAnalysis.topology.ITPParser"]], "close() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.itpparser.itpparser method)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.parse"]], "units (mdanalysis.topology.itpparser.itpparser attribute)": [[131, "MDAnalysis.topology.ITPParser.ITPParser.units"]], "dataparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser"]], "lammpsdumpparser (class in mdanalysis.topology.lammpsparser)": [[132, "MDAnalysis.topology.LAMMPSParser.LammpsDumpParser"]], "mdanalysis.topology.lammpsparser": [[132, "module-MDAnalysis.topology.LAMMPSParser"]], "close() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.close"]], "convert_forces_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.convert_velocities_to_native"]], "grab_datafile() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.grab_datafile"]], "parse() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.parse"]], "read_data_timestep() (mdanalysis.topology.lammpsparser.dataparser method)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.read_DATA_timestep"]], "units (mdanalysis.topology.lammpsparser.dataparser attribute)": [[132, "MDAnalysis.topology.LAMMPSParser.DATAParser.units"]], "mdanalysis.topology.mmtfparser": [[133, "module-MDAnalysis.topology.MMTFParser"]], "mmtfparser (class in mdanalysis.topology.mmtfparser)": [[133, "MDAnalysis.topology.MMTFParser.MMTFParser"]], "mdanalysis.topology.mol2parser": [[134, "module-MDAnalysis.topology.MOL2Parser"]], "mol2parser (class in mdanalysis.topology.mol2parser)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser"]], "close() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.close"]], "convert_forces_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.mol2parser.mol2parser method)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.parse"]], "units (mdanalysis.topology.mol2parser.mol2parser attribute)": [[134, "MDAnalysis.topology.MOL2Parser.MOL2Parser.units"]], "mdanalysis.topology.minimalparser": [[135, "module-MDAnalysis.topology.MinimalParser"]], "minimalparser (class in mdanalysis.topology.minimalparser)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser"]], "close() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.close"]], "convert_forces_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.minimalparser.minimalparser method)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.parse"]], "units (mdanalysis.topology.minimalparser.minimalparser attribute)": [[135, "MDAnalysis.topology.MinimalParser.MinimalParser.units"]], "mdanalysis.topology.pdbparser": [[136, "module-MDAnalysis.topology.PDBParser"]], "pdbparser (class in mdanalysis.topology.pdbparser)": [[136, "MDAnalysis.topology.PDBParser.PDBParser"]], "close() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbparser.pdbparser method)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.parse"]], "units (mdanalysis.topology.pdbparser.pdbparser attribute)": [[136, "MDAnalysis.topology.PDBParser.PDBParser.units"]], "mdanalysis.topology.pdbqtparser": [[137, "module-MDAnalysis.topology.PDBQTParser"]], "pdbqtparser (class in mdanalysis.topology.pdbqtparser)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser"]], "close() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.pdbqtparser.pdbqtparser method)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.parse"]], "units (mdanalysis.topology.pdbqtparser.pdbqtparser attribute)": [[137, "MDAnalysis.topology.PDBQTParser.PDBQTParser.units"]], "mdanalysis.topology.pqrparser": [[138, "module-MDAnalysis.topology.PQRParser"]], "pqrparser (class in mdanalysis.topology.pqrparser)": [[138, "MDAnalysis.topology.PQRParser.PQRParser"]], "close() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.convert_velocities_to_native"]], "guess_flavour() (mdanalysis.topology.pqrparser.pqrparser static method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.guess_flavour"]], "parse() (mdanalysis.topology.pqrparser.pqrparser method)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.parse"]], "units (mdanalysis.topology.pqrparser.pqrparser attribute)": [[138, "MDAnalysis.topology.PQRParser.PQRParser.units"]], "mdanalysis.topology.psfparser": [[139, "module-MDAnalysis.topology.PSFParser"]], "psfparser (class in mdanalysis.topology.psfparser)": [[139, "MDAnalysis.topology.PSFParser.PSFParser"]], "close() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.close"]], "convert_forces_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.psfparser.psfparser method)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.parse"]], "units (mdanalysis.topology.psfparser.psfparser attribute)": [[139, "MDAnalysis.topology.PSFParser.PSFParser.units"]], "mdanalysis.topology.topparser": [[140, "module-MDAnalysis.topology.TOPParser"]], "topparser (class in mdanalysis.topology.topparser)": [[140, "MDAnalysis.topology.TOPParser.TOPParser"]], "close() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.close"]], "convert_forces_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse"]], "parse_bonded() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_bonded"]], "parse_charges() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_charges"]], "parse_chunks() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_chunks"]], "parse_dihedrals() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_dihedrals"]], "parse_elements() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_elements"]], "parse_masses() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_masses"]], "parse_names() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_names"]], "parse_residx() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_residx"]], "parse_resnames() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_resnames"]], "parse_type_indices() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_type_indices"]], "parse_types() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parse_types"]], "parsesection_mapper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.parsesection_mapper"]], "skipper() (mdanalysis.topology.topparser.topparser method)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.skipper"]], "units (mdanalysis.topology.topparser.topparser attribute)": [[140, "MDAnalysis.topology.TOPParser.TOPParser.units"]], "mdanalysis.topology.tprparser": [[141, "module-MDAnalysis.topology.TPRParser"]], "tprparser (class in mdanalysis.topology.tprparser)": [[141, "MDAnalysis.topology.TPRParser.TPRParser"]], "close() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.close"]], "convert_forces_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.tprparser.tprparser method)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.parse"]], "units (mdanalysis.topology.tprparser.tprparser attribute)": [[141, "MDAnalysis.topology.TPRParser.TPRParser.units"]], "mdanalysis.topology.txyzparser": [[142, "module-MDAnalysis.topology.TXYZParser"]], "txyzparser (class in mdanalysis.topology.txyzparser)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser"]], "close() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.close"]], "convert_forces_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.convert_velocities_to_native"]], "parse() (mdanalysis.topology.txyzparser.txyzparser method)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.parse"]], "units (mdanalysis.topology.txyzparser.txyzparser attribute)": [[142, "MDAnalysis.topology.TXYZParser.TXYZParser.units"]], "mdanalysis.topology.xyzparser": [[143, "module-MDAnalysis.topology.XYZParser"]], "xyzparser (class in mdanalysis.topology.xyzparser)": [[143, "MDAnalysis.topology.XYZParser.XYZParser"]], "parse() (mdanalysis.topology.xyzparser.xyzparser method)": [[143, "MDAnalysis.topology.XYZParser.XYZParser.parse"]], "mdanalysis.topology.base": [[144, "module-MDAnalysis.topology.base"]], "topologyreaderbase (class in mdanalysis.topology.base)": [[144, "MDAnalysis.topology.base.TopologyReaderBase"]], "close() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.close"]], "convert_forces_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_from_native"]], "convert_forces_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_forces_to_native"]], "convert_pos_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_from_native"]], "convert_pos_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_pos_to_native"]], "convert_time_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_from_native"]], "convert_time_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_time_to_native"]], "convert_velocities_from_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_from_native"]], "convert_velocities_to_native() (mdanalysis.topology.base.topologyreaderbase method)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.convert_velocities_to_native"]], "units (mdanalysis.topology.base.topologyreaderbase attribute)": [[144, "MDAnalysis.topology.base.TopologyReaderBase.units"]], "mdanalysis.topology.core": [[145, "module-MDAnalysis.topology.core"]], "mdanalysis.topology.guessers": [[146, "module-MDAnalysis.topology.guessers"]], "get_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.get_atom_mass"]], "guess_angles() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_angles"]], "guess_aromaticities() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_aromaticities"]], "guess_atom_charge() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_charge"]], "guess_atom_element() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_element"]], "guess_atom_mass() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_mass"]], "guess_atom_type() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_atom_type"]], "guess_bonds() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_bonds"]], "guess_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_dihedrals"]], "guess_gasteiger_charges() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_gasteiger_charges"]], "guess_improper_dihedrals() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_improper_dihedrals"]], "guess_masses() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_masses"]], "guess_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.guess_types"]], "validate_atom_types() (in module mdanalysis.topology.guessers)": [[146, "MDAnalysis.topology.guessers.validate_atom_types"]], "mdanalysis.topology.__init__": [[147, "module-MDAnalysis.topology.__init__"]], "mdanalysis.topology.tables": [[148, "module-MDAnalysis.topology.tables"]], "table_atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_ATOMELEMENTS"]], "table_masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_MASSES"]], "table_vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.TABLE_VDWRADII"]], "atomelements (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.atomelements"]], "kv2dict() (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.kv2dict"]], "masses (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.masses"]], "vdwradii (in module mdanalysis.topology.tables)": [[148, "MDAnalysis.topology.tables.vdwradii"]], "atom (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atom"]], "atomkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind"]], "atoms (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Atoms"]], "box (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Box"]], "f_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGLES"]], "f_angres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRES"]], "f_angresz (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANGRESZ"]], "f_anharm_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ANHARM_POL"]], "f_bham (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM"]], "f_bham_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BHAM_LR"]], "f_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_BONDS"]], "f_cbtdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CBTDIHS"]], "f_cmap (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CMAP"]], "f_com_pull (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COM_PULL"]], "f_connbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONNBONDS"]], "f_constr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTR"]], "f_constrnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CONSTRNC"]], "f_coul14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL14"]], "f_coul_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_LR"]], "f_coul_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_RECIP"]], "f_coul_sr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_COUL_SR"]], "f_cross_bond_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_ANGLES"]], "f_cross_bond_bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CROSS_BOND_BONDS"]], "f_cubicbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_CUBICBONDS"]], "f_densityfitting (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DENSITYFITTING"]], "f_dhdl_con (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DHDL_CON"]], "f_dihres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRES"]], "f_dihresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DIHRESVIOL"]], "f_dispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISPCORR"]], "f_disres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRES"]], "f_disresviol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DISRESVIOL"]], "f_dkdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DKDL"]], "f_dpd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DPD"]], "f_dvdl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL"]], "f_dvdl_bonded (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_BONDED"]], "f_dvdl_coul (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_COUL"]], "f_dvdl_restraint (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_RESTRAINT"]], "f_dvdl_temperature (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_TEMPERATURE"]], "f_dvdl_vdw (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_DVDL_VDW"]], "f_econserved (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ECONSERVED"]], "f_ekin (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EKIN"]], "f_epot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EPOT"]], "f_eqm (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_EQM"]], "f_etot (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ETOT"]], "f_fbposres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FBPOSRES"]], "f_fenebonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FENEBONDS"]], "f_fourdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_FOURDIHS"]], "f_g96angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96ANGLES"]], "f_g96bonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_G96BONDS"]], "f_gb12 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB12"]], "f_gb13 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB13"]], "f_gb14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GB14"]], "f_gbpol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_GBPOL"]], "f_harmonic (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_HARMONIC"]], "f_idihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_IDIHS"]], "f_linear_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LINEAR_ANGLES"]], "f_lj (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ"]], "f_lj14 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ14"]], "f_ljc14_q (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC14_Q"]], "f_ljc_pairs_nb (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJC_PAIRS_NB"]], "f_lj_lr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_LR"]], "f_lj_recip (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_LJ_RECIP"]], "f_morse (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_MORSE"]], "f_npsolvation (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NPSOLVATION"]], "f_nre (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_NRE"]], "f_orires (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRES"]], "f_oriresdev (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_ORIRESDEV"]], "f_pdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDIHS"]], "f_pdispcorr (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PDISPCORR"]], "f_pidihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PIDIHS"]], "f_polarization (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POLARIZATION"]], "f_posres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_POSRES"]], "f_pres (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_PRES"]], "f_quartic_angles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_QUARTIC_ANGLES"]], "f_rbdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RBDIHS"]], "f_restrangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRANGLES"]], "f_restrbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRBONDS"]], "f_restrdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RESTRDIHS"]], "f_rf_excl (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_RF_EXCL"]], "f_settle (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_SETTLE"]], "f_tabangles (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABANGLES"]], "f_tabbonds (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDS"]], "f_tabbondsnc (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABBONDSNC"]], "f_tabdihs (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TABDIHS"]], "f_temp (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_TEMP"]], "f_thole_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_THOLE_POL"]], "f_urey_bradley (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_UREY_BRADLEY"]], "f_vsite1 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE1"]], "f_vsite2 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2"]], "f_vsite2fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE2FD"]], "f_vsite3 (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3"]], "f_vsite3fad (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FAD"]], "f_vsite3fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3FD"]], "f_vsite3out (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE3OUT"]], "f_vsite4fd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FD"]], "f_vsite4fdn (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITE4FDN"]], "f_vsiten (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VSITEN"]], "f_vtemp_nolongerused (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_VTEMP_NOLONGERUSED"]], "f_water_pol (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.F_WATER_POL"]], "ilist (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Ilist"]], "interactionkind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind"]], "mdanalysis.topology.tpr": [[149, "module-MDAnalysis.topology.tpr"]], "mdanalysis.topology.tpr.obj": [[149, "module-MDAnalysis.topology.tpr.obj"]], "mdanalysis.topology.tpr.setting": [[149, "module-MDAnalysis.topology.tpr.setting"]], "mdanalysis.topology.tpr.utils": [[149, "module-MDAnalysis.topology.tpr.utils"]], "molblock (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Molblock"]], "moleculekind (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind"]], "mtop (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Mtop"]], "params (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.Params"]], "supported_versions (in module mdanalysis.topology.tpr)": [[149, "MDAnalysis.topology.tpr.SUPPORTED_VERSIONS"]], "supported_versions (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.SUPPORTED_VERSIONS"]], "tpxunpacker (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker"]], "tpxunpacker2020 (class in mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020"]], "tpxheader (class in mdanalysis.topology.tpr.obj)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader"]], "atnr (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.atnr"]], "atomnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atomnames"]], "atomnumber (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.atomnumber"]], "atoms (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.atoms"]], "bbox (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bBox"]], "bf (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bF"]], "bir (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bIr"]], "btop (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bTop"]], "bv (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bV"]], "bx (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.bX"]], "define_unpack_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.define_unpack_real"]], "do_atom() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atom"]], "do_atoms() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_atoms"]], "do_block() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_block"]], "do_blocka() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_blocka"]], "do_ffparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ffparams"]], "do_harm() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_harm"]], "do_ilists() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_ilists"]], "do_iparams() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_iparams"]], "do_molblock() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_molblock"]], "do_moltype() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_moltype"]], "do_mtop() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_mtop"]], "do_resinfo() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_resinfo"]], "do_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_rvec"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.do_string"]], "do_string() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.do_string"]], "do_symstr() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symstr"]], "do_symtab() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.do_symtab"]], "element_symbol (mdanalysis.topology.tpr.obj.atomkind property)": [[149, "MDAnalysis.topology.tpr.obj.AtomKind.element_symbol"]], "extract_box_info() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.extract_box_info"]], "fep_state (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fep_state"]], "fgen (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fgen"]], "fileversion_err() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.fileVersion_err"]], "file_tag (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.file_tag"]], "from_unpacker() (mdanalysis.topology.tpr.utils.tpxunpacker2020 class method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.from_unpacker"]], "ftupd (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.ftupd"]], "fudgeqq (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.fudgeQQ"]], "functype (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.functype"]], "fver (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.fver"]], "iatoms (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.iatoms"]], "ik (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.ik"]], "interaction_types (in module mdanalysis.topology.tpr.setting)": [[149, "MDAnalysis.topology.tpr.setting.interaction_types"]], "lamb (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.lamb"]], "m (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.m"]], "mb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.mB"]], "molb_natoms_mol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_natoms_mol"]], "molb_nmol (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nmol"]], "molb_nposres_xa (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xA"]], "molb_nposres_xb (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_nposres_xB"]], "molb_type (mdanalysis.topology.tpr.obj.molblock attribute)": [[149, "MDAnalysis.topology.tpr.obj.Molblock.molb_type"]], "moltypes (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.moltypes"]], "natoms (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.natoms"]], "ndo_int() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_int"]], "ndo_ivec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_ivec"]], "ndo_real() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_real"]], "ndo_rvec() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.ndo_rvec"]], "ngtc (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ngtc"]], "nmolblock (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmolblock"]], "nmoltype (mdanalysis.topology.tpr.obj.mtop attribute)": [[149, "MDAnalysis.topology.tpr.obj.Mtop.nmoltype"]], "nr (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nr"]], "nr (mdanalysis.topology.tpr.obj.ilist attribute)": [[149, "MDAnalysis.topology.tpr.obj.Ilist.nr"]], "nres (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.nres"]], "ntypes (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.ntypes"]], "number_of_atoms() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_atoms"]], "number_of_residues() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.number_of_residues"]], "precision (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.precision"]], "process() (mdanalysis.topology.tpr.obj.interactionkind method)": [[149, "MDAnalysis.topology.tpr.obj.InteractionKind.process"]], "ptype (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.ptype"]], "q (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.q"]], "qb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.qB"]], "read_tpxheader() (in module mdanalysis.topology.tpr.utils)": [[149, "MDAnalysis.topology.tpr.utils.read_tpxheader"]], "rel (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.rel"]], "remap_angles() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_angles"]], "remap_bonds() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_bonds"]], "remap_dihe() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_dihe"]], "remap_impr() (mdanalysis.topology.tpr.obj.moleculekind method)": [[149, "MDAnalysis.topology.tpr.obj.MoleculeKind.remap_impr"]], "reppow (mdanalysis.topology.tpr.obj.params attribute)": [[149, "MDAnalysis.topology.tpr.obj.Params.reppow"]], "resind (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.resind"]], "resnames (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.resnames"]], "size (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.size"]], "sizeoftprbody (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.sizeOfTprBody"]], "tp (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.tp"]], "type (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.type"]], "typeb (mdanalysis.topology.tpr.obj.atom attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atom.typeB"]], "typeb (mdanalysis.topology.tpr.obj.atoms attribute)": [[149, "MDAnalysis.topology.tpr.obj.Atoms.typeB"]], "unpack_fstring() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_fstring"]], "unpack_int64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_int64"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uchar"]], "unpack_uchar() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_uchar"]], "unpack_uint64() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_uint64"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker.unpack_ushort"]], "unpack_ushort() (mdanalysis.topology.tpr.utils.tpxunpacker2020 method)": [[149, "MDAnalysis.topology.tpr.utils.TPXUnpacker2020.unpack_ushort"]], "v (mdanalysis.topology.tpr.obj.box attribute)": [[149, "MDAnalysis.topology.tpr.obj.Box.v"]], "ver_str (mdanalysis.topology.tpr.obj.tpxheader attribute)": [[149, "MDAnalysis.topology.tpr.obj.TpxHeader.ver_str"]], "mdanalysis.transformations": [[151, "module-MDAnalysis.transformations"]], "mdanalysis.transformations.base": [[152, "module-MDAnalysis.transformations.base"]], "omp_num_threads": [[152, "index-0"]], "transformationbase (class in mdanalysis.transformations.base)": [[152, "MDAnalysis.transformations.base.TransformationBase"]], "mdanalysis.transformations.boxdimensions": [[153, "module-MDAnalysis.transformations.boxdimensions"]], "set_dimensions (class in mdanalysis.transformations.boxdimensions)": [[153, "MDAnalysis.transformations.boxdimensions.set_dimensions"]], "mdanalysis.transformations.fit": [[154, "module-MDAnalysis.transformations.fit"]], "fit_rot_trans (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_rot_trans"]], "fit_translation (class in mdanalysis.transformations.fit)": [[154, "MDAnalysis.transformations.fit.fit_translation"]], "mdanalysis.transformations.nojump": [[155, "module-MDAnalysis.transformations.nojump"]], "nojump (class in mdanalysis.transformations.nojump)": [[155, "MDAnalysis.transformations.nojump.NoJump"]], "mdanalysis.transformations.positionaveraging": [[156, "module-MDAnalysis.transformations.positionaveraging"]], "positionaverager (class in mdanalysis.transformations.positionaveraging)": [[156, "MDAnalysis.transformations.positionaveraging.PositionAverager"]], "mdanalysis.transformations.rotate": [[157, "module-MDAnalysis.transformations.rotate"]], "rotateby (class in mdanalysis.transformations.rotate)": [[157, "MDAnalysis.transformations.rotate.rotateby"]], "mdanalysis.transformations.translate": [[158, "module-MDAnalysis.transformations.translate"]], "center_in_box (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.center_in_box"]], "translate (class in mdanalysis.transformations.translate)": [[158, "MDAnalysis.transformations.translate.translate"]], "mdanalysis.transformations.wrap": [[159, "module-MDAnalysis.transformations.wrap"]], "unwrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.unwrap"]], "wrap (class in mdanalysis.transformations.wrap)": [[159, "MDAnalysis.transformations.wrap.wrap"]], "mdanalysis_base_units (in module mdanalysis.units)": [[160, "MDAnalysis.units.MDANALYSIS_BASE_UNITS"]], "mdanalysis.units": [[160, "module-MDAnalysis.units"]], "chargeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.chargeUnit_factor"]], "constants (in module mdanalysis.units)": [[160, "MDAnalysis.units.constants"]], "conversion_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.conversion_factor"]], "convert() (in module mdanalysis.units)": [[160, "MDAnalysis.units.convert"]], "densityunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.densityUnit_factor"]], "forceunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.forceUnit_factor"]], "get_conversion_factor() (in module mdanalysis.units)": [[160, "MDAnalysis.units.get_conversion_factor"]], "lengthunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.lengthUnit_factor"]], "speedunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.speedUnit_factor"]], "timeunit_factor (in module mdanalysis.units)": [[160, "MDAnalysis.units.timeUnit_factor"]], "unit_types (in module mdanalysis.units)": [[160, "MDAnalysis.units.unit_types"]], "water (in module mdanalysis.units)": [[160, "MDAnalysis.units.water"]], "mdanalysis.version": [[161, "module-MDAnalysis.version"]], "__version__ (in module mdanalysis.version)": [[161, "MDAnalysis.version.__version__"]], "mdanalysis.visualization.streamlines": [[162, "module-MDAnalysis.visualization.streamlines"]], "generate_streamlines() (in module mdanalysis.visualization.streamlines)": [[162, "MDAnalysis.visualization.streamlines.generate_streamlines"]], "mdanalysis.visualization.streamlines_3d": [[163, "module-MDAnalysis.visualization.streamlines_3D"]], "generate_streamlines_3d() (in module mdanalysis.visualization.streamlines_3d)": [[163, "MDAnalysis.visualization.streamlines_3D.generate_streamlines_3d"]]}}) \ No newline at end of file diff --git a/dev/sitemap.xml b/dev/sitemap.xml index beeb20ff0c..e6d7c08268 100644 --- a/dev/sitemap.xml +++ b/dev/sitemap.xml @@ -1,2 +1,2 @@ -https://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/data.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/clustering.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/helix_analysis.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/hole2.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/hydrogenbonds.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/legacy_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/analysis_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary/init.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/auxiliary_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/converters.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/init.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/pickle_readers.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates/timestep.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/coordinates_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/groups.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/init.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/selection.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/topology.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core/universe.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/core_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/exceptions.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/c_distances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/c_distances_openmp.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/formats/libdcd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/formats/libmdaxdr.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/log.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/nsgrid.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/qcprot.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib/util.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/lib_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/overview.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/references.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/selections_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/DLPolyParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/core.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/init.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology/tpr_util.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/topology_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/trajectory_transformations.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/units.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/version.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/documentation_pages/visualization_modules.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/index.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/genindex.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/py-modindex.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/converters/RDKitParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/_get_readers.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/groups.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/selection.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/topology.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/core/universe.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/exceptions.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/log.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/lib/util.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/tpr/obj.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/topology/tpr/utils.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/units.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/_modules/index.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/search.htmlhttps://docs.mdanalysis.org/en/2.6.0-dev0/opensearch.html \ No newline at end of file +https://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/data.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/clustering.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/dimensionality_reduction.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hbond_autocorrel_deprecated.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/helix_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hole2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/hydrogenbonds.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/legacy_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/analysis_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/auxiliary_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/pickle_readers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates/timestep.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/coordinates_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/groups.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/selection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core/universe.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/core_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/exceptions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/c_distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/c_distances_openmp.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/formats/libdcd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/formats/libmdaxdr.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/log.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/nsgrid.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/qcprot.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib/util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/lib_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/overview.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/references.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/selections_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/DLPolyParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/init.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology/tpr_util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/topology_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/trajectory_transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/units.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/version.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/documentation_pages/visualization_modules.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/index.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/genindex.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/py-modindex.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/align.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/atomicdistances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/bat.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/contacts.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/density.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/dielectric.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/diffusionmap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/dihedrals.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/bootstrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusterCollection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/ClusteringMethod.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/clustering/cluster.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/confdistmatrix.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/covariance.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/DimensionalityReductionMethod.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/dimensionality_reduction/reduce_dimensionality.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/similarity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/encore/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/gnm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/hole.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hole2/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/hbond_autocorrel.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/hydrogenbonds/wbridge_analysis.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/leaflet.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/legacy/x3dna.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/lineardensity.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/msd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/nucleicacids.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/nuclinfo.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/pca.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/polymer.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/psa.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/rdf.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/rms.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/analysis/waterdynamics.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/EDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/XVG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/auxiliary/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMM.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/OpenMMParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/ParmEdParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/RDKit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/converters/RDKitParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/CRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DCD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DLPoly.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/DMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/FHIAIMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GMS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GRO.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/GSD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/H5MD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/INPCRD.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/LAMMPS.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/MMTF.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/MOL2.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/NAMDBIN.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDB.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PDBQT.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/PQR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TNG.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRJ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TRZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/TXYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XDR.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XTC.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/XYZ.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/chain.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/chemfiles.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/core.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/memory.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/coordinates/null.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/_get_readers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/accessors.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/groups.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/selection.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topology.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topologyattrs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/topologyobjects.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/core/universe.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/exceptions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/NeighborSearch.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/correlations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/distances.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/log.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/mdamath.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/picklable_file_io.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/pkdtree.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/transformations.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/lib/util.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/charmm.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/gromacs.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/jmol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/pymol.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/selections/vmd.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/CRDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/DMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/ExtendedPDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/FHIAIMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GMSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GROParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/GSDParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/HoomdXMLParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/ITPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/LAMMPSParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MMTFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MOL2Parser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/MinimalParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PDBParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PDBQTParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PQRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/PSFParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TOPParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TPRParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/TXYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/XYZParser.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/guessers.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tables.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/obj.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/topology/tpr/utils.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/base.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/boxdimensions.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/fit.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/nojump.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/positionaveraging.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/rotate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/translate.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/transformations/wrap.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/units.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/MDAnalysis/visualization/streamlines_3D.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/_modules/index.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/search.htmlhttps://docs.mdanalysis.org/en/2.7.0-dev0/opensearch.html \ No newline at end of file diff --git a/sitemap_index.xml b/sitemap_index.xml index 09069149e8..df3d18621a 100644 --- a/sitemap_index.xml +++ b/sitemap_index.xml @@ -1,2 +1,2 @@ -https://docs.mdanalysis.org/0.20.1/sitemap.xmlhttps://docs.mdanalysis.org/1.0.0/sitemap.xmlhttps://docs.mdanalysis.org/1.0.1/sitemap.xmlhttps://docs.mdanalysis.org/1.1.0/sitemap.xmlhttps://docs.mdanalysis.org/1.1.1/sitemap.xmlhttps://docs.mdanalysis.org/2.0.0/sitemap.xmlhttps://docs.mdanalysis.org/2.1.0/sitemap.xmlhttps://docs.mdanalysis.org/2.2.0/sitemap.xmlhttps://docs.mdanalysis.org/2.3.0/sitemap.xmlhttps://docs.mdanalysis.org/2.4.0/sitemap.xmlhttps://docs.mdanalysis.org/2.4.1/sitemap.xmlhttps://docs.mdanalysis.org/2.5.0/sitemap.xmlhttps://docs.mdanalysis.org/2.6.0/sitemap.xmlhttps://docs.mdanalysis.org/2.6.0-dev0/sitemap.xmlhttps://docs.mdanalysis.org/dev/sitemap.xmlhttps://docs.mdanalysis.org/stable/sitemap.xml \ No newline at end of file +https://docs.mdanalysis.org/0.20.1/sitemap.xmlhttps://docs.mdanalysis.org/1.0.0/sitemap.xmlhttps://docs.mdanalysis.org/1.0.1/sitemap.xmlhttps://docs.mdanalysis.org/1.1.0/sitemap.xmlhttps://docs.mdanalysis.org/1.1.1/sitemap.xmlhttps://docs.mdanalysis.org/2.0.0/sitemap.xmlhttps://docs.mdanalysis.org/2.1.0/sitemap.xmlhttps://docs.mdanalysis.org/2.2.0/sitemap.xmlhttps://docs.mdanalysis.org/2.3.0/sitemap.xmlhttps://docs.mdanalysis.org/2.4.0/sitemap.xmlhttps://docs.mdanalysis.org/2.4.1/sitemap.xmlhttps://docs.mdanalysis.org/2.5.0/sitemap.xmlhttps://docs.mdanalysis.org/2.6.0/sitemap.xmlhttps://docs.mdanalysis.org/2.6.0-dev0/sitemap.xmlhttps://docs.mdanalysis.org/2.7.0-dev0/sitemap.xmlhttps://docs.mdanalysis.org/dev/sitemap.xmlhttps://docs.mdanalysis.org/stable/sitemap.xml \ No newline at end of file diff --git a/versions.json b/versions.json index a04f856ef0..7213988a7e 100644 --- a/versions.json +++ b/versions.json @@ -83,6 +83,12 @@ "url": "https://docs.mdanalysis.org/2.6.0-dev0", "latest": false }, + { + "version": "2.7.0-dev0", + "display": "2.7.0-dev0", + "url": "https://docs.mdanalysis.org/2.7.0-dev0", + "latest": false + }, { "version": "dev", "display": "dev",